Python Azure Monitor 中的 Opencenus Trace ID 和 Span ID

Python Opencenus Trace ID and Span ID in azure monitor

我正在尝试将 traceId 和 spanId 添加到 python 中的 azure 函数日志中,遵循 Azure 文档https://docs.microsoft.com/en-us/azure/azure-monitor/app/correlation#log-correlation

traceId 和 spanId 使用 VS Code 添加到本地开发中的日志语句,但我无法在 azure monitor

中看到相同的 traceId 和 spanId

我按照文档的 https://docs.microsoft.com/en-us/azure/azure-monitor/app/opencensus-python#logs 部分添加了 AzureLogHandler,但似乎仍然无法正常工作

我希望能够使用 traceId 和 spanId 在 Azure Application insights 中查询日志 我的代码中缺少什么,因此 traceId 和 spanId 未登录到 azure monitor

下面是我在 python

中配置日志的代码
  def logger_and_tracer(name):

    config_integration.trace_integrations(["logging", "requests"])
    tracer = Tracer(sampler=AlwaysOnSampler())
    formatter = logging.Formatter(
        "fileName=%(filename)s functionName=%(funcName)s traceId=%(traceId)s spanId=%(spanId)s %(message)s"
    )
    logger = logging.getLogger(name)
    azure_logger = AzureLogHandler()
    syslog = logging.StreamHandler()
    azure_logger.addFilter(CustomDimensionsFilter(default_log_items))
    syslog.addFilter(CustomDimensionsFilter(default_log_items))

    azure_logger.setFormatter(formatter)
    syslog.setFormatter(formatter)

    logger.setLevel(logging.DEBUG)

    logger.addHandler(syslog)
    logger.addHandler(azure_logger)

    return (logger, tracer)

请按照以下步骤在您的 Azure 函数中添加 Trace ID 和 Span ID,以便在 Azure Monitor 中查看它们的值。

在 azure 函数根文件夹中添加必要的 Opencenus 包。

pip 安装 opencensus-extension-azure-functions

pip 安装 opencensus-ext-logging

import json
import logging

from opencensus.extension.azure.functions import OpenCensusExtension
from opencensus.trace import config_integration
from opencensus.trace.samplers import AlwaysOnSampler
from opencensus.trace.tracer import Tracer

logger = logging.getLogger('HttpTriggerLogger')
OpenCensusExtension.configure()
config_integration.trace_integrations(['logging'])
logging.basicConfig(format='%(asctime)s traceId=%(traceId)s spanId=%(spanId)s %(message)s')
tracer = Tracer(sampler=AlwaysOnSampler())
    logger = logging.getLogger(__name__)
    logger.warning('Before the span')
with tracer.span(name='hello'):
    logger.warning('In the span')
    logger.warning('After the span')
    
def main(req, context):
logger.info('Executing HttpTrigger with OpenCensus extension')

# You must use context.tracer to create spans

    with context.tracer.span("parent"):
    logger.info('Message from HttpTrigger')
    return json.dumps({
    'method': req.method,
    'ctx_func_name': context.function_name,
    'ctx_func_dir': context.function_directory,
    'ctx_invocation_id': context.invocation_id,
    'ctx_trace_context_Traceparent': context.trace_context.Traceparent,
    'ctx_trace_context_Tracestate': context.trace_context.Tracestate,
    })

我可以在 Azure 监视器

中看到指标

参考这里Doc 1 & Doc 2

OpenCensus 和 OpenTracing 目前已合并到 OpenTelemetry 中。你可以看看here