通过OpenTelemetry Python接入APM
华为云APM兼容OpenTelemetry协议,支持直接接收通过OpenTelemetry SDK或Agent上报的链路追踪数据。本文将介绍如何通过OpenTelemetry Java Python实现通过链路数据对接到APM。
限制条件
使用Python 3.9 及以上版本。
环境准备
- 安装Python,命令如下:
sudo apt update sudo apt install python3 python3-pip python3-venv
- 环境验证,命令如下:
python3 --version pip3 --version
示例demo
以flask框架实现一个简单的掷骰子应用。
- 创建运行环境,命令如下:
mkdir demo cd demo python3 -m venv demo source ./demo/bin/activate
- 下载依赖,命令如下:
pip install flask
- 编写业务代码。创建app.py文件,内容如下:
from random import randint from flask import Flask, request import logging app = Flask(__name__) logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @app.route("/rolldice") def roll_dice(): player = request.args.get('player', default=None, type=str) result = str(roll()) if player: logger.warning("%s is rolling the dice: %s", player, result) else: logger.warning("Anonymous player is rolling the dice: %s", result) return result def roll(): return randint(1, 6) - 启动,命令如下:
flask run -p 8080 & curl http://localhost:8080/rolldice
自动埋点接入
- 下载依赖,命令如下:
pip install opentelemetry-distro pip install opentelemetry-exporter-otlp opentelemetry-bootstrap -a install
- 启动python应用,命令如下:
opentelemetry-instrument \ --traces_exporter otlp \ --metrics_exporter none \ --service_name 应用名称.组件名称.环境名称 \ --resource_attributes host.name=hostName \ --exporter_otlp_endpoint 上报地址 \ --exporter_otlp_headers Authentication=鉴权信息 \ flask run -p 8080 & curl http://localhost:8080/rolldice
- 触发请求,命令如下:
curl http://localhost:8080/rolldice

- 登录APM控制台。
- 单击左侧
,选择“管理与监管> 应用性能管理 APM”,进入APM服务页面。 - 在左侧导航栏选择“链路追踪 > 指标”。
- 在界面左侧树单击环境,单击“接口调用”,切换至接口调用页签,在接口调用页签可以查看接口调用的数据。

- 在左侧导航栏选择“链路追踪 > 调用链”,查看调用链信息。
