
# 使用OpenTelemetry上报Python应用数据
华为云APM兼容OpenTelemetry协议，支持直接接收通过OpenTelemetry SDK或Agent上报的链路追踪数据。本文介绍如何使用OpenTelemetry方式，将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
   ```
   ![](https://support.huaweicloud.com/bestpractice-apm2/zh-cn_image_0000002543356155.png "点击放大")
   
   
4. 登录[APM控制台](https://auth.huaweicloud.com/authui/login.html?service=https://console.huaweicloud.com/console/#/login)。
5. 单击左侧![](https://support.huaweicloud.com/bestpractice-apm2/zh-cn_image_0000001542238060.png)，选择"管理与监管\> 应用性能管理 APM"，进入APM服务页面。
6. 在左侧导航栏选择"链路追踪 \> 指标"。
7. 在界面左侧树单击环境，单击"接口调用"，切换至接口调用页签，在接口调用页签可以查看接口调用的数据。 
   ![](https://support.huaweicloud.com/bestpractice-apm2/zh-cn_image_0000002543396153.png "点击放大")
   
   
8. 在左侧导航栏选择"链路追踪 \> 调用链"，查看调用链信息。 
   ![](https://support.huaweicloud.com/bestpractice-apm2/zh-cn_image_0000002511956222.png "点击放大")
   
   
 
