1 Star 0 Fork 0

pushiqiang / jaeger_flask_django

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Use jaeger - a Distributed Tracing System in flask and django development

Usage

in django

tracing all request by middleware

settings.py

MIDDLEWARE = [
    'tracing.django.middleware.OpenTracingMiddleware',
    ...
]

SERVICE_NAME = 'service_a'

OPENTRACING_TRACER_CONFIG = {
    'sampler': {
        'type': 'const',
        'param': 1,
    },
    'local_agent': {
        'reporting_host': 'jaeger',
        'reporting_port': 'your-reporting-port',
    },
    'logging': True,
}

tracing specific request by decorator

1: initialize a global tracer

from tracing import init_tracer

trace_config = {
    'sampler': {
        'type': 'const',
        'param': 1,
    },
    'local_agent': {
        'reporting_host': 'jaeger',
        # 'reporting_port': 'your-reporting-port',
    },
    'logging': True,
}

tracer = init_tracer('service_b', trace_config)

2: import tracer and decorator views


from django.http import JsonResponse

from tracing.django import trace

# tracer: init_tracer('service_b', trace_config)
from example import tracer


@trace(tracer)
def error(request):
    data = {'name': 'error'}
    return JsonResponse(data)

in flask

tracing all request by middleware(flask request hook)

from flask import Flask, jsonify
from tracing import init_tracer
from tracing.flask import after_request_trace, before_request_trace

app = Flask(__name__)

trace_config = {
    'sampler': {
        'type': 'const',
        'param': 1,
    },
    'local_agent': {
        'reporting_host': 'jaeger',
        'reporting_port': 'your-reporting-port',
    },
    'logging': True,
}

tracer = init_tracer('service_c', trace_config)


@app.before_request
def start_trace():
    before_request_trace(tracer)


@app.after_request
def end_trace(response):
    after_request_trace(response)
    return response


@app.teardown_request
def end_trace_with_error(e):
    if error is not None:
        after_request_trace(error=e)


@app.errorhandler(Exception)
def exception_trace(e):
    after_request_trace(error=e)
    raise e


@app.route('/error/')
def error():
    data = {'name': 'error'}
    return jsonify(data)

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

tracing specific request by decorator

from flask import Flask, jsonify
from tracing import init_tracer
from tracing.flask import trace

trace_config = {
    'sampler': {
        'type': 'const',
        'param': 1,
    },
    'local_agent': {
        'reporting_host': 'jaeger',
        # 'reporting_port': 'your-reporting-port',
    },
    'logging': True,
}

app = Flask(__name__)
tracer = init_tracer('service', trace_config)

@app.route('/error/')
@trace(tracer)
def error():
    data = {'name': 'error'}
    return jsonify(data)


if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

auto patch http client(auto inject span context)

import requests
# only patch requests, or you can:
# from opentracing_instrumentation.client_hooks import install_all_patches
# install_all_patches()
from opentracing_instrumentation.client_hooks.requests import install_patches

install_patches()
# http request will bring the `trace_id` in headers
response = requests.get('http://service_d:5000/good/')

auto tracing error logs

import logging
from flask import jsonify

from tracing.flask import trace
from tracing.logger_handler import ErrorTraceHandler

from example import app, tracer

logging.getLogger('').handlers.add(ErrorTraceHandler())
logger = logging.getLogger(__name__)

@app.route('/error/')
@trace(tracer)
def error():
    try:
        data = 2 / 0
    except Exception as e:
        logger.error('exception error', exc_info=True)

    logger.critical('critical error', exc_info=True)

    return jsonify(data)

空文件

简介

Use jaeger in flask and django development 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/pushiqiang/jaeger_flask_django.git
git@gitee.com:pushiqiang/jaeger_flask_django.git
pushiqiang
jaeger_flask_django
jaeger_flask_django
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891