You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
接入指南
Go 应用接入日志监控
复制全文
下载 pdf
Go 应用接入日志监控
应用性能监控全链路版支持日志监控,针对收集的日志提供日志列表、日志检索以及单链路日志查询功能。本文为您介绍如何通过 Opentelemetry 方式将使用 Go 语言的应用接入 APMPlus 日志监控。​
前提条件​
已经获取服务相关配置信息,例如:服务名称、appkey、endpoint。​
​
变量​
说明​
{apmplus_endpoint}​
应用性能监控接入点,不同上报方式的配置存在差异,根据实际情况选择合适的方式进行配置。​
  • 若上报到 Otel Collector:(推荐)将由 Otel Collector 进行转发。若 apmplus-opentelemetry-collector 版本大于或等于 2.0.0,使用 http://apmplus-opentelemetry-gateway-service-grpc.apmplus-opentelemetry-operator:4317;若低于 2.0.0 版本,使用 http://apmplus-opentelemetry-gateway-service-grpc.kube-system:4317。​
  • 若上报到 Apmplus 服务端:可根据服务所属地域,前往接入中心,获取公网或私网接入的 endpoint 信息。​
​​​
{apmplus_appkey}​
应用性能监控认证信息,适用于上报到 Apmplus 服务端的场景。​
  • 若上报到 Otel Collector:无需填写 appkey,必须删除 appkey 相关配置。​
{service_name}​
服务名称,可前往服务列表查看。​​​
​
操作步骤​
目前,Opentelemetry 官方支持以下几种日志框架接入,可根据实际情况选择合适的方式。Opentelemetry 官方详细说明参见:官方文档。​
​
使用 zap 框架接入
使用 logrus 框架接入
使用 slog 框架接入
​
  1. 下载依赖包。​
​
go get go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc​
go get go.opentelemetry.io/contrib/bridges/otelzap​
go get go.uber.org/zap​
​
  1. 配置 LoggerProvider。​
说明​
变量值的获取和配置说明,参见前提条件中的介绍。​
​
import (​
"context"​
"time"​
​
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"​
"go.opentelemetry.io/otel/log/global"​
"go.opentelemetry.io/otel/sdk/log"​
)​
​
func InitOtlLog() *log.LoggerProvider {​
ctx := context.Background()​
// 使用 grpc 协议上报。​
exporter, err := otlploggrpc.New(ctx,​
otlploggrpc.WithEndpoint("{{apmplus_endpoint}}"), // 指定上报的 endpoint。​
otlploggrpc.WithInsecure(),​
otlploggrpc.WithHeaders(map[string]string{"x-byteapm-appkey": "{{apmplus_appkey}}"}), // appkey,应用性能监控认证信息。若上报到 Otel Collector,无需配置,删除此行配置;若上报到 Apmplus 服务端,需要填写 appkey。​
otlploggrpc.WithTimeout(10*time.Second),​
)​
if err != nil {​
panic(err)​
}​
​
hostname, _ := os.Hostname()​
loggerProvider := log.NewLoggerProvider(​
log.WithProcessor(log.NewBatchProcessor(exporter)),​
log.WithResource(resource.NewWithAttributes(​
semconv.SchemaURL,​
semconv.ServiceNameKey.String("{{service_name}}"), // 服务名称。​
semconv.HostNameKey.String(hostname)),​
),​
)​
​
global.SetLoggerProvider(loggerProvider)​
// 正确处理关闭过程,确保无任何泄漏。​
return loggerProvider​
}​
​
// 放到初始化路径里面,保证执行到下面的逻辑。​
loggerProvider := initOtlLog()​
defer loggerProvider.Shutdown(context.Background())​
​
  1. 初始化 zap 并使用 zap 打印日志。​
​
package zap_demo​
​
import (​
"context"​
​
"go.opentelemetry.io/contrib/bridges/otelzap"​
"go.opentelemetry.io/otel"​
"go.opentelemetry.io/otel/baggage"​
"go.opentelemetry.io/otel/log/global"​
"go.uber.org/zap"​
)​
​
var (​
tracer = otel.Tracer("otel-demo-tracer")​
// AddCaller 保证打印文件名和文件行号。​
logger = zap.New(otelzap.NewCore("my/demo/pkg", otelzap.WithLoggerProvider(global.GetLoggerProvider())), zap.AddCaller())​
)​
​
// 调用 Call 方法并打印日志。​
func Call(ctx context.Context) {​
// 基于 ctx 生成一个新的 span。​
ctx, span := tracer.Start(ctx, "otelLogCall")​
defer span.End()​
​
ctx = context.WithValue(ctx, "key", "value")​
// 附带 ctx 会上报 traceId 和 spanId,另外,Fields 里面的 key 和 value 也会上报到 Attribute。​
logger.Info("this is zap info demo", zap.Any("context", ctx), zap.String("method", "zapCall"))​
logger.Info("this is zap info demo without context")​
}​
​
​
后续操作​
Go 应用接入日志监控后,打印日志时可通过 Opentelemetry SDK 将日志上报到 APMPlus。此时,可前往应用性能监控页面,进行日志查询,支持日志查询、单链路日志详情查询等功能。更多详细说明参见:日志监控。​
  • 日志查询示例​
​​​
  • 单链路日志详情示例​
​​​
最近更新时间:2026.02.10 19:56:33
这个页面对您有帮助吗?
有用
有用
无用
无用