更新时间:2026-01-21 GMT+08:00
分享

通过OpenTelemetry Python接入APM

华为云APM兼容OpenTelemetry协议,支持直接接收通过OpenTelemetry SDK或Agent上报的链路追踪数据。本文将介绍如何通过OpenTelemetry Java Python实现通过链路数据对接到APM。

限制条件

使用Python 3.9 及以上版本。

环境准备

  1. 安装Python,命令如下:
    sudo apt update 
    sudo apt install python3 python3-pip python3-venv
  2. 环境验证,命令如下:
    python3 --version
    pip3 --version

示例demo

以flask框架实现一个简单的掷骰子应用。

  1. 创建运行环境,命令如下:
    mkdir demo 
    cd demo 
    python3 -m venv demo 
    source ./demo/bin/activate
  2. 下载依赖,命令如下:
    pip install flask
  3. 编写业务代码。创建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)
  4. 启动,命令如下:
    flask run -p 8080 &
    curl http://localhost:8080/rolldice

自动埋点接入

  1. 下载依赖,命令如下:

    pip install opentelemetry-distro
    pip install opentelemetry-exporter-otlp 
    opentelemetry-bootstrap -a install

  2. 启动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

  3. 触发请求,命令如下:

    curl http://localhost:8080/rolldice

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

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

相关文档