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
这个页面对您有帮助吗?
有用
有用
无用
无用