我正在使用 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 文件的 key 文件路径。
服务帐户具有“云跟踪代理”角色。
我的代码运行没有错误,但我在 GCP 控制台的跟踪下或监控仪表板中看不到任何信息。
我错过了什么吗?
环境说明: 我正在使用 Python 3.7.2 在我的本地 Windows 机器上对此进行测试
最佳答案
文档中不是很清楚的一件事是,默认情况下,traces 被采样(参见源文件 here ),所以每个调用都被正确记录,但只有 1e-4 trace被储存了。它有助于降低成本,但它是调试过程中的主要痛点。
如果你想记录所有的痕迹,你可以使用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()
希望它能解决您的问题!
关于python-3.x - 来自 Python 应用程序的 Opencensus Stackdriver 跟踪未出现在 GCP 的跟踪列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62674846/