OpenCensus度量与InfluxDB
作者:Noah Crowley / 产品,用例,开发者
2018年9月6日
导航至
OpenCensus 是一系列由 Google 出品的项目中的最新项目,这些项目源于他们数十年来运行“全球规模”系统的经验;它是一个库集合,用多种语言实现,旨在帮助开发者提高其系统的可观测性。OpenCensus 提供了收集指标和跟踪数据的 API、添加标签,以及将数据发送到后端进行存储的 API,以及创建 zPages、HTTP 端点,这些端点会公开有关应用程序的更多信息。
度量是任何可观测性策略的关键部分,OpenCensus 项目提供了一种基于标准的将此类功能添加到代码库的方法。随着开发者和云提供商对 OpenCensus 的支持,我们希望确保与 TICK Stack 的其他部分的顺畅交互。
幸运的是,OpenCensus 融合了许多其他开源技术和标准,使集成变得容易。该项目提供了一系列“导出器”,这是将数据发送到后端的组件,包括一个使用 Prometheus 展示格式的度量导出器和一个使用 Zipkin 的跟踪导出器。
Prometheus 展示格式是我们已经在 TICK Stack 的多个部分支持了一段时间的东西,包括一个针对我们的收集代理 Telegraf 的 Prometheus 输入插件,该插件允许它从 Prometheus 风格的端点抓取指标。
因此,我们只需对 Telegraf 配置文件进行一些配置更改并启用 Prometheus 插件,就可以轻松收集任何使用 OpenCensus 进行度量的应用程序的数据。
让我们开始吧!本文假设您已经安装了 Telegraf 和 InfluxDB。如果您还没有,您也可以查看 InfluxData Sandbox,以使用 Docker 和 Docker Compose 快速启动。
使用 OpenCensus 度量 Go 代码
首先,我们需要一些代码来进行度量。幸运的是,我们可以使用 OpenCensus 快速入门指南中提供的示例。Go 编程语言的库可能已经做得最远,所以我们将在本文中使用 Go。
在教程中,我们首先创建一个简单的REPL,然后添加仪器代码,包括指标和标签,接着记录这些指标。我们创建了一些视图,然后设置了导出器。你可以滚动到代码的最后一段,然后点击“全部”标签来获取完整的应用程序。
我们需要对Prometheus导出器进行一些修改;幸运的是,OpenCensus在其导出器文档中为我们提供了一些示例代码。我们将进行一些代码修改;替换一些导入语句并更新导出器的初始化和注册。我将现有代码添加到了GitHub Gist,然后更新了它,如果你感兴趣的话,可以查看差异。
保存修改后的代码,我们就可以运行REPL
go run repl.go
在REPL中输入几行代码,然后访问https://127.0.0.1:9091;你应该会看到一些以Prometheus格式暴露的指标。随着你在REPL中输入新的行,这些指标应该会改变。
收集OpenCensus指标
如我之前提到的,Telegraf,InfluxData收集代理,内置了对抓取和暴露Prometheus展示格式的指标的支持。要启用Prometheus指标收集,只需在配置文件中编辑几行即可。
如果你还没有配置文件,可以使用以下命令生成一个
telegraf --sample-config --input-filter prometheus --aggregator-filter --output-filter influxdb
命令中的--sample-config
参数创建一个新的配置文件,而各种filter
选项将过滤要添加到配置文件的配置部分。为了启用Prometheus指标的收集,我们使用--input-filter prometheus
,这将在我们的配置中添加一个[[inputs.prometheus]]
部分。
我们需要编辑该部分,将其指向本地REPL使用的指标端点URL,即https://127.0.0.1:9091/metrics
。我们可以使用所有其他默认值,如下所示
[[inputs.prometheus]]
## An array of urls to scrape metrics from.
urls = ["https://127.0.0.1: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 https://127.0.0.1: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并配置警报。