如何在 InfluxDB/Kapacitor 中定义异常警报
How to define Alerts with exception in InfluxDB/Kapacitor
我正在尝试找出在 InfluxDB 中定义警报的最佳或合理方法。例如,我可能会使用 telegraf 附带的 CPU 批处理脚本。对于所有被 telegraf 监控的主机,这可以设置为全局 monitor/alert。
当您想要偏离上述主机设置的方法是什么,即我们想要在 Y% 上提醒特定服务器而不是 X%?
我很高兴可以为自定义值创建一个独特的 tickscript,但我该如何从原始 'global' 中排除主机?
这是一个简单的场景,但这需要满足 10,000 个主机的需求,其中将有 100 个异常,这还将包含 10 个/100 个全局警报定义。
我正在努力了解如何使用该平台作为 monitoring/alerting 的主要来源。
直接在 Chronograph/Kapacitor 中手动管理警报对于大量自定义警报不可行。
在 AMMP Technologies,我们需要管理每个数据库、客户、customer_objects 的警报。这个数字可以达到 1000s。我们选择了一个自定义解决方案,其中保留一组标准的模板 tickscripts(不要与 Kapacitor 模板混淆),并且我们为用户提供一个界面,其中只公开相关变量。之后,服务(用 python 编写)将这些变量的值与 tickscript 结合起来,并使用 Kapacitor API 在 Kapacitor 服务器上部署(更新或删除)任务。然后这是自动化的,以便新 customers/objects 的数据与模板结合并自动部署到 Kapacitor。
您显然需要将您的任务设计得足够具体,这样它们就不会重叠,并且需要足够通用,这样就不会为每一件小事创建任务太多的工作。
如评论中所述,您可以使用 sideload node 来实现。
假设您想确保您的 InfluxDB 服务器不超载。默认情况下,您可能希望允许进行 100 次测量。只有在一台恰好有大量数据点的服务器上,您希望将其限制为 10(_internal
数据库很容易超过该值,但对我们的示例来说很好)。
给出以下报价脚本的摘录
var data = stream
|from()
.database(db)
.retentionPolicy(rp)
.measurement(measurement)
.groupBy(groupBy)
.where(whereFilter)
|eval(lambda: "numMeasurements")
.as('value')
var customized = data
|sideload()
.source('file:///etc/kapacitor/customizations/demo/')
.order('hosts/host-{{.hostname}}.yaml')
.field('maxNumMeasurements',100)
|log()
var trigger = customized
|alert()
.crit(lambda: "value" > "maxNumMeasurements")
和服务器的名称,但 influxdb
除外,文件 /etc/kapacitor/customizations/demo/hosts/host-influxdb.yaml
如下所示
maxNumMeasurements: 10
如果 value
将触发严重警报,因此 numMeasurements
将超过 10 并且主机名标签等于 influxdb
或者如果 value
超过 100。
有个example in the documentation handling scheduled downtimes using sideload
此外,我还创建了一个example available on github using docker-compose
请注意,示例中有一个警告:由于动态生成的第二个数据库,警报出现抖动。但足以说明如何解决问题。
如果您有超过 1 万台服务器,使用 sideload 节点 在性能和计算方面的成本是多少?
我正在尝试找出在 InfluxDB 中定义警报的最佳或合理方法。例如,我可能会使用 telegraf 附带的 CPU 批处理脚本。对于所有被 telegraf 监控的主机,这可以设置为全局 monitor/alert。
当您想要偏离上述主机设置的方法是什么,即我们想要在 Y% 上提醒特定服务器而不是 X%?
我很高兴可以为自定义值创建一个独特的 tickscript,但我该如何从原始 'global' 中排除主机?
这是一个简单的场景,但这需要满足 10,000 个主机的需求,其中将有 100 个异常,这还将包含 10 个/100 个全局警报定义。
我正在努力了解如何使用该平台作为 monitoring/alerting 的主要来源。
直接在 Chronograph/Kapacitor 中手动管理警报对于大量自定义警报不可行。
在 AMMP Technologies,我们需要管理每个数据库、客户、customer_objects 的警报。这个数字可以达到 1000s。我们选择了一个自定义解决方案,其中保留一组标准的模板 tickscripts(不要与 Kapacitor 模板混淆),并且我们为用户提供一个界面,其中只公开相关变量。之后,服务(用 python 编写)将这些变量的值与 tickscript 结合起来,并使用 Kapacitor API 在 Kapacitor 服务器上部署(更新或删除)任务。然后这是自动化的,以便新 customers/objects 的数据与模板结合并自动部署到 Kapacitor。
您显然需要将您的任务设计得足够具体,这样它们就不会重叠,并且需要足够通用,这样就不会为每一件小事创建任务太多的工作。
如评论中所述,您可以使用 sideload node 来实现。
假设您想确保您的 InfluxDB 服务器不超载。默认情况下,您可能希望允许进行 100 次测量。只有在一台恰好有大量数据点的服务器上,您希望将其限制为 10(_internal
数据库很容易超过该值,但对我们的示例来说很好)。
给出以下报价脚本的摘录
var data = stream
|from()
.database(db)
.retentionPolicy(rp)
.measurement(measurement)
.groupBy(groupBy)
.where(whereFilter)
|eval(lambda: "numMeasurements")
.as('value')
var customized = data
|sideload()
.source('file:///etc/kapacitor/customizations/demo/')
.order('hosts/host-{{.hostname}}.yaml')
.field('maxNumMeasurements',100)
|log()
var trigger = customized
|alert()
.crit(lambda: "value" > "maxNumMeasurements")
和服务器的名称,但 influxdb
除外,文件 /etc/kapacitor/customizations/demo/hosts/host-influxdb.yaml
如下所示
maxNumMeasurements: 10
如果 value
将触发严重警报,因此 numMeasurements
将超过 10 并且主机名标签等于 influxdb
或者如果 value
超过 100。
有个example in the documentation handling scheduled downtimes using sideload
此外,我还创建了一个example available on github using docker-compose
请注意,示例中有一个警告:由于动态生成的第二个数据库,警报出现抖动。但足以说明如何解决问题。
如果您有超过 1 万台服务器,使用 sideload 节点 在性能和计算方面的成本是多少?