观测云对接 Pinpoint 最佳实践
观测云支持各种 APM 工具,包括 Pinpoint,只需要安装 DataKit,开通 Pinpoint 采集器,即可接收来自 Pinpoint 上报的链路数据,然后再通过观测云强大的分析展示能力,在观测云上对应用的链路、应用的日志、应用运行的环境进行综合分析。
简介
Pinpoint 是一个开源的分布式应用性能监控工具,由韩国搜索引擎公司 Naver 开发。它主要用于跟踪和监控分布式应用程序和微服务架构中的性能问题。Pinpoint 的核心功能包括对分布式链路的追踪和监控,通过收集和分析数据来帮助开发者定位问题所在。Pinpoint 支持实时的链路追踪,可以追踪请求在不同服务之间的传播路径,帮助用户了解整个操作流程和性能瓶颈。
观测云支持各种 APM 工具,包括 Pinpoint,只需要安装 DataKit,开通 Pinpoint 采集器,即可接收来自 Pinpoint 上报的链路数据,然后再通过观测云强大的分析展示能力,在观测云上对应用的链路、应用的日志、应用运行的环境进行综合分析。
实验环境
- 观测云 SaaS
- Linux 主机(可以连接 https://openway.guance.com )
- 安装 JDK1.8
- 安装 DataKit
- 下载 Java Demo
- 下载 pinpoint-agent-2.5.1.tar.gz
集成方案
部署 DataKit
登录观测云控制台,点击「集成」 -「DataKit」 - 「Linux」,点击「复制」图标。

把复制的安装命令粘贴到 Linux 主机上执行,执行 datakit monitor 查看 DataKit 运行情况。
datakit monitor

开通采集器
DataKit 内置几十种采集器,开通采集器很方便,只需要复制官方提供的 sample 文件,改成 .conf 结尾,然后重启 DataKit。
Pinpoint 采集器
cd /usr/local/datakit/conf.d/pinpoint/
cp pinpoint.conf.sample pinpoint.conf
日志采集器
cd /usr/local/datakit/conf.d/log
cp logging.conf.sample pinpoint-log.conf
java-demo-pinpoint-1.0-SNAPSHOT.jar 会产生日志文件 /usr/local/df-demo/logs/log.log 这里要做链路和日志的联动分析,所以需要采集日志。编辑 pinpoint-log.conf ,logfiles 里面填写文件路径,source 表示数量来源,用于在观测云上区分日志。

重启 DataKit
datakit service -R
重启完成后再执行 datakit monitor ,Inputs 位置多了两个采集器 logging 和 pinpoint 。

应用接入 Pinpoint
解压 pinpoint-agent-2.5.1.tar.gz 到 /usr/local/df-demo 目录,java-demo-pinpoint-1.0-SNAPSHOT.jar 也放到该目录。
cd /usr/local/df-demo
tar -zxvf pinpoint-agent-2.5.1.tar.gz
配置端口
DataKit 的 Pinpoint 采集器默认接收 Pinpoint 上报链路的端口是 9991,所以需要修改 pinpoint-root.config 配置文件,把上报端口改成 9991。
cd /usr/local/df-demo
vim pinpoint-agent-2.5.1/pinpoint-root.config
profiler.transport.module = GRPC
profiler.transport.grpc.agent.collector.port = 9991
profiler.transport.grpc.metadata.collector.port = 9991
profiler.transport.grpc.stat.collector.port = 9991
profiler.transport.grpc.span.collector.port = 9991
日志输出 TraceId
logback 日志中输出 trace_id,需要开启一个开关。编辑 pinpoint.config 文件,设置 profiler.logback.logging.transactioninfo 为 true 。
cd /usr/local/df-demo
vim pinpoint-agent-2.5.1/profiles/release/pinpoint.config

Java Demo 中日志输出是 logback,只需要在日志输出的 layout 中添加 %X{PtxId} %X{PspanId} 即可输出链路调用中 Pinpoint 产生的 trace_id 和 span_id。
<appender name = "Console" class= "ch.qos.logback.core.ConsoleAppender" >
<layout class = "ch.qos.logback.classic.PatternLayout">
<Pattern >%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - [%X{PtxId} %X{PspanId}] - %msg%n</Pattern >
</layout >
</appender>
启动 Java 应用。
cd /usr/local/df-demo
java -javaagent:pinpoint-agent-2.5.1/pinpoint-bootstrap.jar -Dpinpoint.config=pinpoint-agent-2.5.1/pinpoint-root.config -Dpinpoint.agentId=java-pinpoint-demo -Dpinpoint.applicationName=java-pinpoint-demo -jar java-demo-pinpoint-1.0-SNAPSHOT.jar
日志链路打通
登录观测云控制台,点击「日志」 -「Pipelines」 - 「新建Pipeline」,日志来源输入 pinpoint-log ,输入 Pipeline 名称,填写如下解析规则,最后保存。
grok(_, "%{TIMESTAMP_ISO8601:time}%{SPACE}%{NOTSPACE:thread_name}%{SPACE}%{LOGLEVEL:status}%{SPACE}%{NOTSPACE:class_name}%{SPACE}-%{SPACE}\\[%{NOTSPACE:method_name},%{NUMBER:line}\\]%{SPACE}-%{SPACE}\\[%{DATA:trace_id} %{DATA:span_id}\\]%{SPACE}-%{SPACE}%{GREEDYDATA:msg}")
default_time(time,"Asia/Shanghai")

效果展示
触发请求
多次访问接口,产生链路和日志。
curl localhost:8090/user
观测云查看
登录观测云控制台,点击「应用性能监测」 -「链路」,这里列出的是请求触发的所有 span,每个 span 的持续时间。

点击一个 span 进入该 span 所在的链路,可以查看上下游的服务电影关系、瀑布图、火焰图。




由于前面打通了链路和日志,日志标签也可以查看当前链路中产生的所有日志信息。

Contact us
Join the community
to join the community
Try Guance
Start online and pay only for what you use.
Get startedChoose a Guance plan