通过OpenTelemetry上报Python应用数据
在监控Python应用之前,您需要通过客户端将应用数据上报至APM服务端。本小节介绍如何通过OpenTelemetry Python SDK上报Python应用数据。
前提条件
完成vpce接入。
python版本不低于3.8。
接入步骤
1. 下载所需包。
pip install opentelemetry-api pip install opentelemetry-sdk pip install opentelemetry-exporter-otlp pip install flask pip install requests
2. 查看接入点信息。
应用列表的接入指引会根据您所在资源池提供“通过 HTTP 上报数据”和“通过 gRPC 上报数据”的ENDPOINT(天翼云vpc网络接入点)、鉴权TOKEN信息。
3. 创建服务端。
● 请将代码中的<token>和<endpoint>替换成前提条件中获取的接入点信息。
● 请根据实际情况替换代码中的<service-name>(服务名)和<host-name>(主机名)。
# server.py
from flask import Flask
from opentelemetry import trace, baggage
from opentelemetry.trace import SpanKind
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter as OTLPSpanGrpcExporter
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter as OTLPSpanHttpExporter
from opentelemetry.sdk.resources import SERVICE_NAME, Resource, HOST_NAME
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
app = Flask(__name__)
def init_opentelemetry():
resource = Resource(attributes={
SERVICE_NAME: "<service_name>",
HOST_NAME: "<host_name>"
})
span_processor = BatchSpanProcessor(OTLPSpanGrpcExporter(
endpoint="<endpoint>",
headers=[("x-ctg-authorization", "<endpoint>")]
))
trace_provider = TracerProvider(resource=resource, active_span_processor=span_processor)
trace.set_tracer_provider(trace_provider)
@app.route('/trace_demo')
def trace_demo():
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("server_span", kind=SpanKind.SERVER):
return "Server traced this request."
@app.route('/baggage_demo')
def baggage_demo():
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("server_span_baggage", kind=SpanKind.SERVER):
baggage = baggage.set_baggage("key", "value_from_server")
return f"Server traced this request with baggage: {baggage.get_baggage('key', baggage)}"
if __name__ == '__main__':
init_opentelemetry()
app.run(port=5000, debug=True)4. 创建客户端。
● 请将代码中的<token>和<endpoint>替换成前提条件中获取的接入点信息。
● 请根据实际情况替换代码中的<service-name>(服务名)和<host-name>(主机名)。
# client.py
import requests
from opentelemetry import trace
from opentelemetry.sdk.resources import SERVICE_NAME, Resource, HOST_NAME
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter as OTLPSpanGrpcExporter
def init_opentelemetry():
resource = Resource(attributes={
SERVICE_NAME: "<service_name>",
HOST_NAME: "<host_name>"
})
span_processor = BatchSpanProcessor(OTLPSpanGrpcExporter(
endpoint="<endpoint>",
headers=[("x-ctg-authorization", "<token>")]
))
trace_provider = TracerProvider(resource=resource, active_span_processor=span_processor)
trace.set_tracer_provider(trace_provider)
def make_request(path):
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("client_span"):
response = requests.get(f"http://localhost:5000{path}")
print(f"Response from server: {response.text}")
if __name__ == '__main__':
init_opentelemetry()
make_request('/trace_demo')
make_request('/baggage_demo')5. 运行项目。
python server.py python client.py
6. 通过以上步骤,最后就在APM控制台的应用列表页面选择目标应用,查看监控数据。