C/C++ Profiling¶
目前 DataKit 支持 1 种方式来采集 C/C++ profiling 数据,即 Pyroscope。
Pyroscope¶
Pyroscope 是一款开源的持续 profiling 平台,DataKit 已经支持将其上报的 profiling 数据展示在观测云。
Pyroscope 采用 C/S 架构,运行模式分为 Pyroscope Agent 和 Pyroscope Server,这两个模式均集成在一个二进制文件中,通过不同的命令行命令来展现。
这里需要的是 Pyroscope Agent 模式。DataKit 已经集成了 Pyroscope Server 功能,通过对外暴露 HTTP 接口的方式,可以接收 Pyroscope Agent 上报的 profiling 数据。
Profiling 数据流向:「Pyroscope Agent 采集 Profiling 数据 -> Datakit -> 观测云」。
前置条件¶
-
根据 Pyroscope 官方文档 eBPF Profiling,需要 Linux 内核版本 >= 4.9 (因为事件 BPF_PROG_TYPE_PERF_EVENT)。
[[inputs.profile]]
## profile Agent endpoints register by version respectively.
## Endpoints can be skipped listen by remove them from the list.
## Default value set as below. DO NOT MODIFY THESE ENDPOINTS if not necessary.
endpoints = ["/profiling/v1/input"]
## set true to enable election.
election = true
# config
[[inputs.profile.pyroscope]]
# listen url
url = "0.0.0.0:4040"
# service name
service = "pyroscope-demo"
# app env
env = "dev"
# app version
version = "0.0.0"
[inputs.profile.pyroscope.tags]
tag1 = "val1"
- 安装 Pyroscope
这里以 Linux AMD64 平台为例:
wget https://dl.pyroscope.io/release/pyroscope-0.36.0-linux-amd64.tar.gz
tar -zxvf pyroscope-0.36.0-linux-amd64.tar.gz
按照上述方法获取到的是 Pyroscope 的二进制文件,直接运行就可以了,也可以放在 PATH 下。
其它平台与架构的安装方法,见下载地址。
Pyroscope Agent 配置 eBPF 采集模式¶
Pyroscope Agent 的 eBPF 模式支持 C/C++ 程序的 profiling 采集。
- 设置环境变量:
export PYROSCOPE_APPLICATION_NAME='my.ebpf.program{host=server-node-1,region=us-west-1,tag2=val2}'
export PYROSCOPE_SERVER_ADDRESS='http://localhost:4040/' # Datakit profile 配置的 pyroscope listen url.
export PYROSCOPE_SPY_NAME='ebpfspy'
-
根据需要 profiling 的目标使用不同的命令:
- profiling 正在运行的程序(以 PID 为
1000
为例):sudo -E pyroscope connect --pid 1000
- profiling 运行指定程序(以
mongod
为例):sudo -E pyroscope exec mongod
- profiling 整个系统:
sudo -E pyroscope ebpf
- profiling 正在运行的程序(以 PID 为
查看 Profile¶
运行上述 profiling 命令后,Pyroscope Agent 会开始采集指定的 profiling 数据,并将数据上报给观测云。稍等几分钟后就可以在观测云空间应用性能监测 -> Profile 查看相应数据。