Python용 OpenTelemetry 시작하기
16335 단어 pythontelemetryopentelemetry
마이크로서비스의 맥락에서 관찰 가능성을 통해 팀은 다음을 수행할 수 있습니다.
가시성의 3가지 기둥
각각 하나 이상의 범위를 포함하는 추적을 보면 분산 시스템을 통해 경로를 추적하고 병목 현상이나 고장의 원인을 식별할 수 있습니다.
Documentation source
Python을 사용한 계측
간단한 플라스크 서버부터 시작하겠습니다.
$ pip install flask
import datetime
import flask
######################
## initialization
######################
app = flask.Flask(__name__)
start = datetime.datetime.now()
######################
## routes
######################
@app.route('/', methods=['GET'])
def root():
return flask.jsonify({'message': 'flask app root/'})
@app.route('/healthz', methods=['GET'])
def healthz():
now = datetime.datetime.now()
return flask.jsonify({'message': f'up and running since {(now - start)}'})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
OpenTelemetry(otel) 라이브러리를 추가해 보겠습니다.
$ pip install opentelemetry-api opentelemetry-sdk
이제 계측을 시작하고 추적을 추가하고 횟수를 계산하기 위한 지표
/healthz
를 호출합니다.import datetime
import flask
from opentelemetry import trace
from opentelemetry import metrics
######################
## initialization
######################
app = flask.Flask(__name__)
start = datetime.datetime.now()
tracer = trace.get_tracer(__name__)
meter = metrics.get_meter(__name__)
hltz_counter = meter.create_counter('healthz_count', description='Number of /healthz requests')
######################
## routes
######################
@app.route('/', methods=['GET'])
def root():
return flask.jsonify({'message': 'flask app root/'})
@app.route('/healthz', methods=['GET'])
def healthz():
now = datetime.datetime.now()
hltz_counter.add(1)
return flask.jsonify({'message': f'up and running since {(now - start)}'})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
계측된 코드 실행
$ opentelemetry-instrument --traces_exporter console --metrics_exporter console flask run
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
...
약간의 트래픽 통과
$ curl localhost:5000
{"message":"flask app root/"}
$ curl localhost:5000/healthz
{"message":"up and running since 0:00:53.605913"}
터미널을 관찰하고
healthz_count
를 확인합니다.127.0.0.1 - - [13/Oct/2022 09:16:54] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [13/Oct/2022 09:16:58] "GET /healthz HTTP/1.1" 200 -
{
"name": "/healthz",
"context": {
"trace_id": "0x7d30b2042efe9a4661cc427352119754",
"span_id": "0x479211d157c16733",
"trace_state": "[]"
},
"kind": "SpanKind.SERVER",
"parent_id": null,
"start_time": "2022-10-13T03:50:31.090144Z",
"end_time": "2022-10-13T03:50:31.090545Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"http.method": "GET",
"http.server_name": "127.0.0.1",
"http.scheme": "http",
"net.host.port": 5000,
"http.host": "localhost:5000",
"http.target": "/healthz",
"net.peer.ip": "127.0.0.1",
"http.user_agent": "curl/7.79.1",
"net.peer.port": 50286,
"http.flavor": "1.1",
"http.route": "/healthz",
"http.status_code": 200
},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.13.0",
"telemetry.auto.version": "0.34b0",
"service.name": "unknown_service"
},
"schema_url": ""
}
}
{"resource_metrics": [{"resource": {"attributes": {"telemetry.sdk.language": "python", "telemetry.sdk.name": "opentelemetry", "telemetry.sdk.version": "1.13.0", "telemetry.auto.version": "0.34b0", "service.name": "unknown_service"}, "schema_url": ""}, "scope_metrics": [{"scope": {"name": "app", "version": "", "schema_url": ""}, "metrics": [{"name": "healthz_count", "description": "Number of /healthz requests", "unit": "", "data": {"data_points": [{"attributes": {}, "start_time_unix_nano": 1665632818794016000, "time_unix_nano": 1665632825058633000, "value": 2}], "aggregation_temporality": 2, "is_monotonic": true}}], "schema_url": ""}], "schema_url": ""}]}
추적 및 메트릭을 성공적으로 생성했습니다(때로는 표시하는 데 몇 초가 걸림).
Reference
이 문제에 관하여(Python용 OpenTelemetry 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ashokan/getting-started-with-opentelemetry-for-python-4882텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)