OpenCensus度量与InfluxDB

导航至

OpenCensus 是一系列由 Google 出品的项目中的最新项目,这些项目源于他们数十年来运行“全球规模”系统的经验;它是一个库集合,用多种语言实现,旨在帮助开发者提高其系统的可观测性。OpenCensus 提供了收集指标和跟踪数据的 API、添加标签,以及将数据发送到后端进行存储的 API,以及创建 zPages、HTTP 端点,这些端点会公开有关应用程序的更多信息。

度量是任何可观测性策略的关键部分,OpenCensus 项目提供了一种基于标准的将此类功能添加到代码库的方法。随着开发者和云提供商对 OpenCensus 的支持,我们希望确保与 TICK Stack 的其他部分的顺畅交互。

幸运的是,OpenCensus 融合了许多其他开源技术和标准,使集成变得容易。该项目提供了一系列“导出器”,这是将数据发送到后端的组件,包括一个使用 Prometheus 展示格式的度量导出器和一个使用 Zipkin 的跟踪导出器。

Prometheus 展示格式是我们已经在 TICK Stack 的多个部分支持了一段时间的东西,包括一个针对我们的收集代理 Telegraf 的 Prometheus 输入插件,该插件允许它从 Prometheus 风格的端点抓取指标。

因此,我们只需对 Telegraf 配置文件进行一些配置更改并启用 Prometheus 插件,就可以轻松收集任何使用 OpenCensus 进行度量的应用程序的数据。

让我们开始吧!本文假设您已经安装了 TelegrafInfluxDB。如果您还没有,您也可以查看 InfluxData Sandbox,以使用 Docker 和 Docker Compose 快速启动。

使用 OpenCensus 度量 Go 代码

首先,我们需要一些代码来进行度量。幸运的是,我们可以使用 OpenCensus 快速入门指南中提供的示例。Go 编程语言的库可能已经做得最远,所以我们将在本文中使用 Go。

快速入门教程涉及构建一个简单的 REPL,它可以将其输入的任何字符串转换为大写,同时收集关于应用程序的指标。我们将基本上逐行使用这个示例,只有一个例外——我们将用 Prometheus 导出器替换 StackDriver 导出器。

在教程中,我们首先创建一个简单的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配置警报