跳转到主要内容

一个统计收集和分布式跟踪框架

项目描述

gitter travisci circleci pypi compat_check_pypi compat_check_github

OpenCensus for Python. OpenCensus 提供了一个框架来衡量服务器的资源使用情况并收集性能统计信息。此存储库包含 OpenCensus 所需的 Python 相关工具和支持软件。

跟踪

安装与基本使用

  1. 使用 pippipenv 安装 opencensus 包

    pip install opencensus
    pipenv install opencensus
  2. 初始化应用程序的跟踪器

    from opencensus.trace.tracer import Tracer
    from opencensus.trace.samplers import AlwaysOnSampler
    
    tracer = Tracer(sampler=AlwaysOnSampler())
  3. 初始化应用程序的视图管理器和统计记录器

    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。您可以选择不同的导出器来发送跟踪信息。有三种内置的导出器,分别是 PrintExporterFileExporterLoggingExporter,其他导出器作为 扩展 提供。

  • 采样器,它决定了跟踪信息的采样方式。默认采样器是 ProbabilitySampler,它对所有请求的百分比进行采样(即启用跟踪)。采样根据跟踪 ID 进行确定性采样。要强制对所有请求进行采样,或防止任何请求被采样,请参阅 AlwaysOnSamplerAlwaysOffSampler

  • 传播器,它序列化和反序列化 SpanContext 及其头信息。默认传播器是 TraceContextPropagator,其他传播器包括 BinaryFormatPropagatorGoogleCloudFormatPropagatorTextFormatPropagator

您可以在初始化跟踪器时进行自定义。

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 个月,如果可能的话。

支持者