OpenCensus 指标和 InfluxDB
作者:Noah Crowley / 产品, 用例, 开发者
2018 年 9 月 6 日
导航至
OpenCensus 是谷歌数十年来运行“行星级”系统经验的一系列最新项目;它是一组库,以多种语言实现,旨在帮助开发者提高系统的可观测性。OpenCensus 提供了用于收集指标和跟踪数据、添加标签以及将数据发送到后端进行存储的 API,以及用于创建 zPages 的 API,zPages 是 HTTP 端点,用于公开关于所讨论应用程序的附加信息。
检测是任何可观测性策略的关键部分,OpenCensus 项目提供了一种基于标准的方法,用于将这些功能添加到您的代码库中。随着开发者和云提供商对 OpenCensus 的支持,我们希望确保与 TICK Stack 的其余部分进行无缝交互。
幸运的是,OpenCensus 采用了许多其他开源技术和标准,这使得集成变得容易。该项目提供了许多“导出器”,即向后端发送数据的组件,包括一个用于指标的导出器,它使用 Prometheus exposition 格式,以及一个用于跟踪的导出器,它使用 Zipkin。
Prometheus exposition 格式是我们已经在 TICK Stack 的各个部分支持了一段时间的东西,包括我们的收集代理 Telegraf 的 Prometheus 输入插件,它允许它从 Prometheus 风格的端点抓取指标。
因此,我们可以通过对 Telegraf 配置文件进行一些配置更改并启用 Prometheus 插件,轻松地从任何已使用 OpenCensus 检测的应用程序收集数据。
让我们深入了解一下!这篇文章假设您已经安装了 Telegraf 和 InfluxDB。如果您没有安装,您也可以查看 InfluxData Sandbox,以使用 Docker 和 Docker Compose 快速启动并运行。
使用 OpenCensus 检测 Go 代码
首先,我们需要一些代码来检测。幸运的是,我们可以使用 OpenCensus 快速入门指南中提供的示例。Go 编程语言的库可能是目前最先进的,所以我们将在这篇博文中使用 Go。
快速入门教程 包括构建一个简单的 REPL,它可以将作为输入提供的任何字符串大写,同时收集关于应用程序的指标。我们将几乎逐行使用这个例子,但有一个例外——我们将用 Prometheus 导出器替换 StackDriver 导出器。
通过教程,我们首先创建一个简单的 REPL,然后添加检测代码,包括指标和标签,然后记录这些指标。我们创建一些视图,然后设置导出器。您可以滚动到最后一段代码,然后单击“全部”选项卡以获取完整的应用程序。
我们需要做一些更改才能使用 Prometheus 导出器;幸运的是,OpenCensus 为我们提供了一些示例代码,作为 关于导出器的文档 的一部分。我们将进行一些代码手术;替换一些 import 语句,并更新导出器的初始化和注册。我将现有代码添加到了 GitHub Gist 中,然后对其进行了更新,以便您可以 查看差异(如果您有兴趣)。
保存修改后的代码,我们可以运行 REPL
go run repl.go
在 REPL 中输入几行,然后访问 http://localhost:9091;您应该看到一些以 Prometheus 格式公开的指标。当您在 REPL 中输入新行时,这些指标应该会发生变化。
收集 OpenCensus 指标
正如我之前提到的,InfluxData 收集代理 Telegraf 内置了对 Prometheus exposition 格式的指标进行抓取和公开的支持。启用 Prometheus 指标收集只需编辑配置文件中的几行。
如果您还没有配置文件,您可以使用以下命令生成一个
telegraf --sample-config --input-filter prometheus --aggregator-filter --output-filter influxdb
--sample-config
参数创建一个新的配置文件,而各种 filter
选项过滤将添加到配置文件中的配置部分。为了启用 Prometheus 指标的收集,我们使用了 --input-filter prometheus
,这会在我们的配置中添加一个 [[inputs.prometheus]]
部分。
我们需要编辑该部分,并将其指向我们的本地 REPL 用作其指标端点的 URL, http://localhost:9091/metrics
。我们可以使用所有其他默认值,如下所示
[[inputs.prometheus]]
## An array of urls to scrape metrics from.
urls = ["http://localhost:9091/metrics"]
## An array of Kubernetes services to scrape metrics from.
# kubernetes_services = ["http://my-service-dns.my-namespace:9100/metrics"]
## Use bearer token for authorization
# bearer_token = /path/to/bearer/token
## Specify timeout duration for slower prometheus clients (default is 3s)
# response_timeout = "3s"
## Optional TLS Config
# tls_ca = /path/to/cafile
# tls_cert = /path/to/certfile
# tls_key = /path/to/keyfile
## Use TLS but skip chain & host verification
# insecure_skip_verify = false
因为我们此时使用所有默认值,所以 Telegraf 正在写入 telegraf
数据库,每 10 秒收集一次数据,并以相同的间隔将其刷新到输出。我们还在同一台机器上运行 InfluxDB,因此默认的 InfluxDB 输出配置应该足够了。
使用配置文件启动 Telegraf
telegraf --config telegraf.conf
您应该在第一个收集间隔过去后看到指标出现在 telegraf
数据库中!让我们使用 influx
命令行工具执行查询来验证这一点。
启动 CLI 并使用 telegraf
数据库
$ influx
Connected to http://localhost:8086 version 1.6.1
InfluxDB shell version: v1.6.1
> USE telegraf
Using database telegraf
>
然后,运行查询以获取 demo_demo_latency
指标的最后 5 分钟数据
> SELECT * FROM demo_demo_latency WHERE time > now()-5m
您应该会看到许多数据点,具体取决于您的应用程序运行了多长时间。
下一步
正如您所见,使用 Telegraf 和 OpenCensus Prometheus 导出器从 OpenCensus 检测的应用程序收集指标非常容易。如果您已经有一个使用 OpenCensus 检测的应用程序,那么您可能需要考虑 安装 Chronograf 和 添加一些仪表板,或者 设置 Kapacitor 和 配置警报。