如何在 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 节点 在性能和计算方面的成本是多少?