前提条件
获取接入点信息。
- 登录链路追踪TAS控制台。
- 在左侧导航栏单击「 链路配置 」,然后在右侧页面单击「 接入点信息 」页签。
- 打开显示Token开关。
- 在客户端采集工具区域单击 OpenTelemetry 。在下方表格的相关信息列中,获取接入点信息。
接入步骤
-
下载所需包。
pip install opentelemetry-api pip install opentelemetry-sdk pip install opentelemetry-exporter-otlp pip install flask pip install requests from opentelemetry.trace import SpanKind
我们分别为客户端和服务端创建两个独立的Python文件。这样,客户端可以通过HTTP请求调用服务端的端点,而服务端负责处理这些请求并使用OpenTelemetry上报来追踪调用。
-
创建服务端
服务端将使用Flask应用,并提供两个端点:一个用于简单的追踪示例(/trace_demo),另一个用于baggage的示例(/baggage_demo)。服务端会使用OpenTelemetry来追踪这些请求。代码中
和 需替换为接入点信息中具体的 和 值。 -
# server.py from flask import Flask from opentelemetry import trace, baggage 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: "PythonServer", HOST_NAME: "ServerHost" }) 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) @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)
-
-
创建客户端
客户端将使用requests库来发起HTTP请求到服务端的端点。在发起请求之前,客户端会启动一个span,模拟在真实场景中追踪跨服务调用的情况,服务端会使用OpenTelemetry-gRPC来追踪这些请求。代码中和 需替换为接入点信息中具体的 和 值 # 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: "PythonClient", HOST_NAME: "ClientHost" }) span_processor = BatchSpanProcessor(OTLPSpanGrpcExporter( endpoint="http://10.50.208.198:9317", headers=[("x-ctg-authorization", "ffxZWDds@3434GwYGyH3d")] )) 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')
-
运行程序。
启动两个终端,分别启动服务端和客户端python server.py python client.py