前提条件
完成vpce接入。
python版本不低于3.8。
接入步骤
- 下载所需包。
pip install opentelemetry-api
pip install opentelemetry-sdk
pip install opentelemetry-exporter-otlp
pip install flask
pip install requests
- 查看接入点信息。
应用列表的接入指引会根据您所在资源池提供“通过 HTTP 上报数据”和“通过 gRPC 上报数据”的ENDPOINT(天翼云vpc网络接入点)、鉴权TOKEN信息。
- 创建服务端。
- 请将代码中的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 *
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
app = Flask(__name__)
def init_opentelemetry():
resource = Resource(attributes={
TELEMETRY_SDK_LANGUAGE: "python",
SERVICE_NAME: "<service_name>",
HOST_NAME: "<host_name>",
SERVICE_INSTANCE_ID: "<service_addr>", #填写您的服务端地址
HOST_IMAGE_ID: "<client_addr>" #填写您的客户端地址
})
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)
- 创建客户端。
- 请将代码中的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
definit_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)
defmake_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
- 通过以上步骤,最后就在APM控制台的应用列表页面选择目标应用,查看监控数据。