来自 Python 应用的 Opencensus Stackdriver 跟踪未出现在 GCP 的跟踪列表中
Opencensus Stackdriver traces from Python app not appearing in the Trace list in GCP
我正在使用 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 设置了环境变量,并且还在 中设置了我的服务帐户 JSON 文件的密钥文件路径]GOOGLE_APPLICATION_CREDENTIALS.
服务帐户具有 “云跟踪代理” 角色。
我的代码运行没有错误,但我在 GCP 控制台的跟踪下或监控仪表板中看不到任何信息。
我是不是漏掉了什么?
环境说明:
我正在使用 Python 3.7.2
从我的本地 Windows 机器上测试这个
我能够按照步骤 mentioned here.
在 GCP 中设置 OpenCensus(在项目的一个实例中)
为了快速设置,这里是我 运行 在 b运行d new Ubuntu instance
中的命令
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
文档中不是很清楚的一件事是,默认情况下,跟踪被采样(参见源文件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()
希望它能解决您的问题!
我正在使用 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 设置了环境变量,并且还在 中设置了我的服务帐户 JSON 文件的密钥文件路径]GOOGLE_APPLICATION_CREDENTIALS.
服务帐户具有 “云跟踪代理” 角色。
我的代码运行没有错误,但我在 GCP 控制台的跟踪下或监控仪表板中看不到任何信息。
我是不是漏掉了什么?
环境说明: 我正在使用 Python 3.7.2
从我的本地 Windows 机器上测试这个我能够按照步骤 mentioned here.
在 GCP 中设置 OpenCensus(在项目的一个实例中)为了快速设置,这里是我 运行 在 b运行d new Ubuntu instance
中的命令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
文档中不是很清楚的一件事是,默认情况下,跟踪被采样(参见源文件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()
希望它能解决您的问题!