首页 > 解决方案 > 如何在 InfluxDB/Kapacitor 中定义异常警报

问题描述

我试图找出在 InfluxDB 中定义警报的最佳或合理方法。例如,我可能会使用 telegraf 附带的 CPU 批处理 tickscript。这可以设置为 Telegraf 监控的所有主机的全局监控器/警报。

当您想偏离主机的上述设置时,即我们希望在 Y% 上发出警报的特定服务器而不是 X% 时,有什么方法?

我很高兴可以为自定义值创建一个独特的 tickscript,但我该如何从原始的“全局”值中排除主机?

这是一个简单的场景,但这需要满足 10,000 台主机的需求,其中将有 100 多个例外,这也将包含 10 秒/100 秒的全局警报定义。

我正在努力了解如何将该平台用作监控/警报的主要来源。

标签: influxdbalertskapacitor

解决方案


正如评论中所说,您可以使用sideload 节点来实现这一点。

假设你想确保你的 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

如果超过 10 并且主机名标记等于OR 如果超过 100 value,则会触发严重警报。numMeasurementsinfluxdbvalue

在使用侧载处理计划停机时间的文档中有一个示例

此外,我使用 docker-compose 在 github 上创建了一个可用的示例

请注意,该示例有一个警告:由于动态生成了第二个数据库,因此警报会发生变化。但这应该足以说明如何解决问题。


推荐阅读