InfluxDB和/debug/vars端点
作者:Mark Rushakoff / 产品,用例,开发者
2017年4月3日
导航至
与许多具有HTTP服务器的Go程序一样,InfluxDB通过 /debug/vars
端点公开了一些诊断信息。因为这些信息是以JSON形式公开的,所以应该非常容易将InfluxDB的诊断信息暴露给其他自定义实用工具,您可能希望使用这些工具来监控您的InfluxDB实例。
Go通过expvar包使向程序添加 /debug/vars
变得非常简单。
expvar包提供了一个标准化的接口来公开公共变量,例如服务器中的操作计数器。它以JSON格式通过HTTP在/debug/vars端点公开这些变量。
expvar
在大多数情况下都表现得非常好。尽管 InfluxDB 开始直接使用 expvar
,但仍然存在一个缺失的功能,这迫使我们停止使用标准的 expvar
包:它不允许您删除已发布的变量。至少有一个 几个 问题报告了已删除实体的统计信息。当您试图调试一个活动问题时,低信噪比永远都是没有帮助的。
在 InfluxDB PR 6964(首次出现在1.0版本中)中,我们放弃了直接使用 expvar
,转而采用一个具有 expvar
-兼容输出的自定义实现。
Kapacitor采取了一种略微不同的方法:通过分叉标准库的 expvar
包来为 Map
类型添加一个 Delete
方法。
/debug/vars
和 TICK 栈
InfluxDB 的 expvar
格式
InfluxDB 的 /debug/vars
端点输出是一个 JSON 对象,大致对应于 _internal
数据库的内容。默认情况下,_internal
数据库每10秒存储一次值,但与 SHOW STATS
查询一样,/debug/vars
端点提供了一个即时时间点的统计信息视图。
首先,有两个与标准 expvar
输出匹配的键值对
cmdline
是一个字符串数组,表示用于调用进程的命令行参数。如果您在 Linux 上将 influxd
作为服务运行,则 cmdline
的值将类似于:["/usr/bin/influxd","-config","/etc/influxdb/influxdb.conf"]
。
memstats
是一个与 Goruntime.MemStats
结构体 对应的 JSON 对象。
/debug/vars
输出的其余部分,键代表正在测量的对象的详细信息,值以 "InfluxDB expvar 格式" 存在。 "InfluxDB expvar 格式" 是一个具有以下结构的对象
name
:一个描述正在测量的内容的字符串,即相应的 InfluxDB 测量tags
:一个具有字符串键和值的对象,对应于用于字段的标签values
:一个键和值对应于测量字段的对象
Kapacitor 的 /kapacitor/v1/debug/vars
端点
Kapacitor 使用 "标准" expvar 格式与简单的顶层键值对以及 kapacitor
键下的 InfluxDB 格式化 expvars 的混合。
Telegraf 的 InfluxDB 输入插件
Telegraf的Influxdb输入插件支持从远程HTTP端点接收InfluxDB格式的expvars。它还处理作为特殊情况的memstats
。对于单个InfluxDB实例,这将仅导致与_internal
数据库信息重复,但这是在单一位置监控多个InfluxDB实例的简单方法。
与InfluxDB和Kapacitor不同,Telegraf目前没有暴露/debug/vars
HTTP端点。
在您的应用程序中发出InfluxDB格式的expvars
我没有看到任何允许您发出InfluxDB格式expvars的独立项目,但如果您了解格式,编写代码并不需要太多代码。我们的第一个纯expvar实现整个文件不到50行,通过HTTP提供expvars的相应代码只有大约11行。
您是否实现了Go或任何其他语言的代码以发出InfluxDB格式的expvars?在这个论坛上分享您的解决方案community.influxdata.com。