如何使用OpenCensus发送指标

时间:2019-12-11 16:32:14

标签: python azure-application-insights azure-log-analytics opencensus

我正在尝试使用OpenCensus和Azure Application Insights在Python中发送指标。

理想情况下,我想发送一些具有任意结构的Python字典,但是OpenCensus似乎在“自动侦听日志记录/打印语句”,但是当我搜索这些东西时,我在Azure门户上看不到任何证据。

print(...)在OpenCensus上有什么特殊之处吗?如何捕获打印语句的内容?

我尝试了两种不同的方法(有关代码,请参见下文):

AFAIK原则:

  • 应该有一个管理“跨度”的“追踪器”
  • 可以有父母/子女示踪剂/跨度
  • 每个范围都应允许向“收集器”发送一些指标(HTTP内容,任意字典/ JSON等)
  • 应该有一个仪表板(例如,Azure Application Insights),该仪表板应在时间轴上显示这些父级/子级跨度以及附加的指标/消息

我想了解:

  • 如何在OpenCensus中发送任意词典作为“度量”?当使用应用程序进行应用程序见解时,如何在Azure门户上显示该消息?
  • OpenCensus中的print(...)(或logging.info(...))和HTTP请求有何特殊之处?该信息如何在应用程序洞察力应用程序中的Azure门户上有用?
  • 以上内容与跟踪器/跨度无关吗?或者在需要发送指标时跨度是否必须?

import json
import psutil

from opencensus.trace.samplers import AlwaysOnSampler
from opencensus.trace.tracer import Tracer

from opencensus.ext.azure import metrics_exporter
from opencensus.ext.azure.trace_exporter import AzureExporter

if __name__ == "__main__":
    # loading the instrumentation key (for the Azure Application Insights app) from a JSON file
    azure_conf = json.loads(open("tf/ai_details.json", 'r').read())
    ai_instrumentation_key = azure_conf['instrumentation_key']['value']
    # print(ai_instrumentation_key)

    # test 1: trying to "send a metric", does that mean that the metric exporter listens to "print(...)"?
    _me = metrics_exporter.new_metrics_exporter(connection_string='InstrumentationKey={}'.format(ai_instrumentation_key))
    print(psutil.virtual_memory())
    print("Done recording metrics")

    # test 2: trying to "send a metric", how can I make the "span" to send a dictionary?
    azure_exporter = AzureExporter(connection_string='InstrumentationKey={}'.format(ai_instrumentation_key))
    # https://opencensus.io/api/python/trace/api/tracer.html
    tracer = Tracer(exporter=azure_exporter, sampler=AlwaysOnSampler())
    # https://opencensus.io/api/python/trace/api/span.html#opencensus.trace.span.Span
    with tracer.span(name='TestSpan') as span:
        print('Hello, World!') # is the span only listening to "print(...)"?
        span.add_attribute("foo-span-key", "foo-span-value") # this does not seem to do anything

1 个答案:

答案 0 :(得分:1)

感谢您将OpenCensus与Azure Monitor一起使用!您可以在线找到我的答案。

如何在OpenCensus中将任意词典作为“指标”发送?当使用应用程序进行应用程序见解时,如何在Azure门户上显示该消息?

任意字典是什么意思?在您的代码段中,您似乎想将各个数据点作为度量标准数据发送到Azure Monitor后端(Application Insights)。有关如何开始使用OpenCensus的步骤,请访问Microsoft网站上的overview页面。这将向您展示如何使用OpenCensus正确地检测应用程序,以及如何将遥测发送到Azure Monitor。如果您仍然对如何配置应用程序以满足业务用例感到困惑,那么这里还有更多examples,您可以看看。

OpenCensus中的print(...)(或logging.info(...))和HTTP请求有何特殊之处?该信息如何在应用程序洞察力应用程序中的Azure门户上有用?

print命令在OpenCensus中没有特殊含义。对于日志,如果使用OpenCensus Azure Monitor并使用logging exporter,则可以从Python标准日志库自动发送日志遥测。对于HTTP请求,您可以使用跟踪导出器和各种OpenCensus库集成来跟踪incoming requestsoutgoing requests,具体取决于要跟踪其遥测的库。

以上内容在某种程度上与跟踪器/跨度无关,还是在需要发送指标时必须跨度?

跨度是仅在跟踪(使用AzureExporter)中使用的概念。您无需创建跨度即可发送度量标准数据(度量标准导出器)。看看上面的链接,看看如何使用每个链接。