一个统计收集和分布式跟踪框架
项目描述
OpenCensus for Python. OpenCensus 提供了一个框架来衡量服务器的资源使用情况并收集性能统计信息。此存储库包含 OpenCensus 所需的 Python 相关工具和支持软件。
跟踪
安装与基本使用
使用 pip 或 pipenv 安装 opencensus 包
pip install opencensus pipenv install opencensus
初始化应用程序的跟踪器
from opencensus.trace.tracer import Tracer from opencensus.trace.samplers import AlwaysOnSampler tracer = Tracer(sampler=AlwaysOnSampler())
初始化应用程序的视图管理器和统计记录器
from opencensus.stats import stats as stats_module stats = stats_module.stats view_manager = stats.view_manager stats_recorder = stats.stats_recorder
使用
您可以使用 Tracer 上下文管理器 收集跟踪信息。
from opencensus.trace.tracer import Tracer
from opencensus.trace.samplers import AlwaysOnSampler
# Initialize a tracer, by default using the `PrintExporter`
tracer = Tracer(sampler=AlwaysOnSampler())
# Example for creating nested spans
with tracer.span(name='span1'):
do_something_to_trace()
with tracer.span(name='span1_child1'):
do_something_to_trace()
with tracer.span(name='span1_child2'):
do_something_to_trace()
with tracer.span(name='span2'):
do_something_to_trace()
OpenCensus 会将 with 语句内的所有内容作为一个单独的跨度进行收集。
或者,您可以显式地开始和结束一个跨度。
from opencensus.trace.tracer import Tracer
from opencensus.trace.samplers import AlwaysOnSampler
# Initialize a tracer, by default using the `PrintExporter`
tracer = Tracer(sampler=AlwaysOnSampler())
tracer.start_span(name='span1')
do_something_to_trace()
tracer.end_span()
自定义
在 OpenCensus 中,您可以自定义以下几个选项:
排除列表,它排除某些主机和路径的跟踪。默认情况下,App Engine 弹性环境中的健康检查路径不会被跟踪,您可以通过在排除列表设置中排除它来启用跟踪。
导出器,它负责发送跟踪信息。默认情况下,跟踪信息以 JSON 格式打印到 stdout。您可以选择不同的导出器来发送跟踪信息。有三种内置的导出器,分别是 PrintExporter、FileExporter 和 LoggingExporter,其他导出器作为 扩展 提供。
采样器,它决定了跟踪信息的采样方式。默认采样器是 ProbabilitySampler,它对所有请求的百分比进行采样(即启用跟踪)。采样根据跟踪 ID 进行确定性采样。要强制对所有请求进行采样,或防止任何请求被采样,请参阅 AlwaysOnSampler 和 AlwaysOffSampler。
传播器,它序列化和反序列化 SpanContext 及其头信息。默认传播器是 TraceContextPropagator,其他传播器包括 BinaryFormatPropagator、GoogleCloudFormatPropagator 和 TextFormatPropagator。
您可以在初始化跟踪器时进行自定义。
import requests
from opencensus.trace import config_integration
from opencensus.trace import file_exporter
from opencensus.trace import tracer as tracer_module
from opencensus.trace.propagation import google_cloud_format
from opencensus.trace.samplers import ProbabilitySampler
config_integration.trace_integrations(['httplib'])
tracer = tracer_module.Tracer(
exporter=file_exporter.FileExporter(file_name='traces'),
propagator=google_cloud_format.GoogleCloudFormatPropagator(),
sampler=ProbabilitySampler(rate=0.5),
)
with tracer.span(name='parent'):
with tracer.span(name='child'):
response = requests.get('http://localhost:5000')
您可以为 Flask/Django/Pyramid 使用配置文件。有关更多信息,请参阅 各个集成文档。
'OPENCENSUS': {
'TRACE': {
'EXCLUDELIST_HOSTNAMES': ['localhost', '127.0.0.1'],
'EXCLUDELIST_PATHS': ['_ah/health'],
'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1)',
'EXPORTER': '''opencensus.ext.ocagent.trace_exporter.TraceExporter(
service_name='foobar',
)''',
'PROPAGATOR': 'opencensus.trace.propagation.google_cloud_format.GoogleCloudFormatPropagator()',
}
}
扩展
集成
OpenCensus 支持与流行的 Web 框架、客户端库和内置库集成。
日志导出器
度量导出器
统计导出器
跟踪导出器
版本控制
此库遵循 语义版本控制。
GA:定义在 GA 质量级别的库是稳定的,不会在任何次要或补丁版本中引入不向后兼容的更改。我们将优先解决问题和请求。如果我们要在 API 上进行不向后兼容的更改,我们首先将现有 API 标记为已弃用,并在 18 个月内保留它,然后将其删除。
Beta:定义在 Beta 质量级别的库预计将是大多数稳定的,并且我们正在努力发布它们的候选版本。我们将以更高的优先级解决问题和请求。虽然在次要版本中可能会有向后不兼容的更改,但在补丁版本中则不会。如果元素是 API 的一部分,该 API 仅供导出器或其他 opencensus 库使用,则没有弃用期。否则,我们将在删除之前将其弃用 18 个月,如果可能的话。