자동 계측: Python 계측에 대한 코드 없는 접근 방식
이 장벽을 극복하고 빠른 시작을 허용하기 위해 일부 언어에는 자동 계측 지원이 있습니다. 시작하려면 일부 라이브러리만 설치하면 됩니다.
샘플 웹앱
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)
필요한 라이브러리 설치
$ pip install flask
$ pip install opentelemetry-distro opentelemetry-instrumentation-flask
참고: 일부 코너 케이스는 내 설치
opentelemetry-api
도 만들었지만 공식 문서에 따라 필요하지는 않습니다.초기화(필요에 따라 추가 라이브러리 설치)
$ opentelemetry-bootstrap -a install
코드 실행
$ opentelemetry-instrument --traces_exporter console --metrics_exporter console flask run
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://192.168.1.7:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 121-673-590
127.0.0.1 - - [17/Oct/2022 07:21:05] "GET /healthz HTTP/1.1" 200 -
{
"name": "/healthz",
"context": {
"trace_id": "0xd0850752865577d2d8cd11aaef169574",
"span_id": "0x29c8ad5fd974de41",
"trace_state": "[]"
},
"kind": "SpanKind.SERVER",
"parent_id": null,
"start_time": "2022-10-17T01:52:45.522806Z",
"end_time": "2022-10-17T01:52:45.523615Z",
"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": 55838,
"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": [], "schema_url": ""}]}
이 게시물을 기준으로 Django, FastAPI, Flask와 같은 가장 인기 있는 프레임워크에는 HTTP 컨텍스트 전파를 위한 계측 라이브러리가 있습니다.
코드 크기 영향
자동 계측은 몇 가지 추가 라이브러리를 추가합니다. 이것은 내 경우의 결과였습니다
$ du -sh manual/venv/ auto/venv/
29M manual/venv/
30M auto/venv/
항상 최신 공식 문서를 참조하십시오.
Official documentation
Reference
이 문제에 관하여(자동 계측: Python 계측에 대한 코드 없는 접근 방식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ashokan/auto-instrumentation-no-code-approach-to-instrument-python-3f70텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)