目前,我配置了这样的监控系统:
web_app (via python statsd client) -> statsd -> ...
... -> carbon-relay-ng -> carbon-cache -> whisper
我使用Grafana
上的Graphite
作为绘图工具。在
由于查询性能太差,我决定将这个堆栈改为InfluxDB
+Grafana
捆绑包。所以,我的问题是如何将应用程序指标发送到InfluxDB
?我希望这个捆绑包非常简单,所以如果可能的话,我想跳过statsd
。我应该将python statsd client替换为influxdb-python,并使用telegrafUDP服务作为InfluxDB
前面的聚合部分,还是直接将度量发送到InfluxDB
实例?在
我会用线路协议把数据发送给telegraf。在
我经常使用influxdb python直接向influxdb提交统计信息。将结果本地发送到telegraf可能会更快,这取决于InfluxDB安装响应的速度和可靠性-如果有延迟,这将阻止您的应用程序。在
线路协议对我来说似乎比其他选项更容易使用,telegraf可以直接接受线路协议。一个潜在的缺点是,通过这种方式发送的任何内容最终都会进入分配给telegraf stats的数据库中。直接进入InfluxDB,您可以选择您的数据将最终存放在哪个数据库中,尽管如果您想使用line protcol格式,这意味着绕过python模块。在
要使用influxdbpython并直接发送到influxdb,可以选择JSON格式或使用
SeriesHelper
的子类JSON格式
创建
write_points
/write
使用的JSON结构非常笨拙。它只会将其转换为行格式。在比较JSON:
行格式:
^{2}$我知道我认为哪个更容易生成(我知道时间戳不匹配,我只是举个例子)。可以使用
POST
库将行格式POST
直接发送到InfluxDB,或者如果已经配置了侦听器,则可以通过UDP发送。在系列帮助器
该模块有一种方法只接受值和标记,方法是使用^{} ,这可能很难设置,但很容易使用。在
他们给出的例子是:
因此,您可以从调用MySeriesHelper中看到,一旦设置了MySeriesHelper,这会使工作变得简单,但是客户机的配置要么需要在全局范围(这对模块不利)中设置,要么在类定义中设置。这不利于从配置文件或服务发现中获取配置,因此最终在配置解析函数中执行以下操作:
我对influxdbpython的可靠性没有任何问题,大多数时候我们使用
SeriesHelper
类。这并不是最复杂的事情,但度量背后的思想并不是让一个拥有知识的人将其全部相加,而是它是所有人在链的每个部分编写代码的生活方式的一部分。从这个角度来看,易用性是让人们采用工具的关键。在相关问题 更多 >
编程相关推荐