示例#1
0
    def trace_request(self, event, context):
        response = {}
        span_tags = {tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER}
        with self.tracer.start_span('trace_request', tags=span_tags) as span:
            span.set_tag('aws_request_id', context.aws_request_id)
            requests_config.propagate = True
            requests_config.tracer = self.tracer

            auto_instrument()
            traced_session = requests.Session()

            #traced_post_response = traced_session.post("http://35.236.100.236:6000/echo")

            response = {}
            if event['method'].upper().decode('utf-8', 'ignore') == 'POST':
                resp = traced_session.post(event['url'],
                                           headers=event['headers'],
                                           data=event['body'])
                response['responseCode'] = resp.status_code
                response['elapsedTime'] = resp.elapsed.total_seconds() * 1000
            elif event['method'].upper().decode(
                    'utf-8', 'ignore') == 'GET' or event['method'].decode(
                        'utf-8', 'ignore') == '':
                resp = traced_session.get(event['url'],
                                          headers=event['headers'])
                response['responseCode'] = resp.status_code
                response['elapsedTime'] = resp.elapsed.total_seconds() * 1000
            else:
                response['error'] = True

        return response
示例#2
0
def init_jaeger_tracer(context):
    global _tracer
    if _tracer:
        return _tracer

    endpoint = utils.get_tracing_url()
    service_name = os.getenv('SIGNALFX_SERVICE_NAME', context.function_name)
    access_token = utils.get_access_token()

    logger = logging.getLogger('signalfx-tracing')
    tracer_config = {
        'sampler': {
            'type': 'const',
            'param': 1
        },
        'propagation': 'b3',
        'jaeger_endpoint': endpoint,
        'logging': True,
        'logger': logger,
    }

    if access_token:
        tracer_config['jaeger_user'] = '******'
        tracer_config['jaeger_password'] = access_token

    config = Config(config=tracer_config, service_name=service_name)

    tracer = config.new_tracer()
    _tracer = opentracing.tracer = tracer
    auto_instrument(_tracer)

    return tracer
def create_celery_tracer():
    import opentracing
    tracer_proxy = TracerProxy()
    opentracing.tracer = tracer_proxy
    auto_instrument(tracer_proxy)

    from celery.signals import worker_process_init

    @worker_process_init.connect(weak=False)
    def create_global_tracer(*args, **kwargs):
        tracer = create_tracer(access_token=access_token, set_global=False)
        tracer_proxy.set_tracer(tracer)
    auto_instrument(tracer_proxy)

    from celery.signals import worker_process_init

    @worker_process_init.connect(weak=False)
    def create_global_tracer(*args, **kwargs):
        tracer = create_tracer(access_token=access_token, set_global=False)
        tracer_proxy.set_tracer(tracer)


if hasattr(sys, 'argv') and sys.argv[0].split(
        os.path.sep)[-1] == 'celery' and 'worker' in sys.argv:
    create_celery_tracer()
else:
    try:
        auto_instrument(
            create_tracer(access_token=access_token, set_global=True))
    except Exception:
        print(traceback.format_exc())

# Do not prevent existing sitecustomize module import. Done by
# removing this module's package and attempting to import
# sitecustomize module.

# Removing references to this sitecustomize module
# can trigger garbage collection and cause lookup failures in other modules.
sys.modules['sfx_sitecustomize'] = sys.modules.pop('sitecustomize', None)
sys.path.remove(os.path.abspath(os.path.dirname(__file__)))

# Attempt to load any existing sitecustomize
module = get_module('sitecustomize')
if module is None:  # reset to our own if no preexisting
import time
import requests
from signalfx_tracing import auto_instrument, create_tracer, trace
import opentracing
from opentracing.ext import tags

tracer = create_tracer()
auto_instrument(tracer)

@trace
def pythonrequests():
    try:
        print(opentracing.tracer.active_span)
        with opentracing.tracer.active_span as span:
            span.set_tag(tags.SPAN_KIND, tags.SPAN_KIND_RPC_SERVER)
        requests.get('http://httpbin.org/get')
    except requests.exceptions.RequestException as err:
        print(err)
for x in range (1,1000):
    pythonrequests()
    time.sleep(1)
示例#6
0
def post_fork(server, worker):
    auto_instrument(create_tracer())