来自 Python 应用的 Opencensus Stackdriver 跟踪未出现在 GCP 的跟踪列表中

Posted

技术标签:

【中文标题】来自 Python 应用的 Opencensus Stackdriver 跟踪未出现在 GCP 的跟踪列表中【英文标题】:Opencensus Stackdriver traces from Python app not appearing in the Trace list in GCP 【发布时间】:2020-10-21 18:48:42 【问题描述】:

我正在使用 OpenCensus 比较不同的追踪后端。 我已经有了使用 Zipkin 和 Azure Monitor 运行良好的简单 OpenCensus.io python 示例。

现在我正在尝试使用 GCP 的 Stackdriver 进行测试...

我已经从 Opencensus 设置了测试代码 https://opencensus.io/exporters/supported-exporters/python/stackdriver/如下:

#!/usr/bin/env python

import os

from opencensus.common.transports.async_ import AsyncTransport
from opencensus.ext.stackdriver.trace_exporter import StackdriverExporter
from opencensus.trace.tracer import Tracer

def main():
    sde = StackdriverExporter(
        project_id=os.environ.get("GCP_PROJECT_ID"),
        transport=AsyncTransport)

    tracer = Tracer(exporter=sde)
    with tracer.span(name="doingWork") as span:
        for i in range(10):
            pass

if __name__ == "__main__":
    main()

我已经为 GCP_PROJECT_ID 设置了环境变量,并且还在 GOOGLE_APPLICATION_CREDENTIALS 中设置了我的服务帐户 JSON 文件的密钥文件路径。

服务帐户具有“云跟踪代理” 角色。

我的代码运行无误,但我在 GCP 控制台的跟踪信息或监控仪表板中看不到任何信息。

我错过了什么吗?

环境说明: 我正在使用 Python 3.7.2 从我的本地 Windows 机器上测试它

【问题讨论】:

【参考方案1】:

文档中不太清楚的一点是,默认情况下,跟踪是采样的(参见源文件here),因此每次调用都会被正确记录,但只有 1e-4 跟踪被储存了。它有助于降低成本,但它是调试过程中的主要痛点。

如果要记录所有跟踪,可以使用AlwaysOnSampler 并将其传递给跟踪器:

import os

from opencensus.common.transports.async_ import AsyncTransport
from opencensus.ext.stackdriver.trace_exporter import StackdriverExporter
from opencensus.trace.tracer import Tracer
from opencensus.trace.samplers import AlwaysOnSampler

def main():
    sde = StackdriverExporter(
        project_id=os.environ.get("GCP_PROJECT_ID"),
        transport=AsyncTransport)

    tracer = Tracer(exporter=sde, sampler=AlwaysOnSampler())
    with tracer.span(name="doingWork") as span:
        for i in range(10):
            pass

if __name__ == "__main__":
    main()

希望它能解决您的问题!

【讨论】:

【参考方案2】:

按照mentioned here 的步骤,我能够在 GCP 中(在项目的一个实例中)设置 OpenCensus。

为了快速设置,这里是我在一个全新的 Ubuntu 实例中运行的命令

sudo apt-get install python3
sudo apt install python3-pip
wget https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/opencensus/requirements.txt
pip3 install -r requirements.txt
wget https://raw.githubusercontent.com/GoogleCloudPlatform/python-docs-samples/master/opencensus/metrics_quickstart.py
python3 metrics_quickstart.py

【讨论】:

谢谢,我可以运行你的命令,它会在 GCP 中显示指标(至少表明我的服务帐户是正确的),但我仍然看不到痕迹 您可以尝试按照here 中描述的步骤进行操作。如果这不起作用,我建议您创建一个案例here。

以上是关于来自 Python 应用的 Opencensus Stackdriver 跟踪未出现在 GCP 的跟踪列表中的主要内容,如果未能解决你的问题,请参考以下文章

Stackdriver 上未显示自定义 OpenCensus 指标

用于将自定义 OpenCensus 指标写入 GKE 上的 StackDriver 的简单 hello world 演示?

如何使用 OpenCensus 检测 Prometheus Gauge?

opencensus 出口商 - 一个全局或每个线程?

使用 OpenCensus 将 Django 日志导出到 Azure AppInsights

ClassNotFoundException: io.opencensus.trace.propagation.TextFormat 未找到