如何在 InfluxDB/Kapacitor 中定义异常警报

Posted

技术标签:

【中文标题】如何在 InfluxDB/Kapacitor 中定义异常警报【英文标题】:How to define Alerts with exception in InfluxDB/Kapacitor 【发布时间】:2019-11-20 04:54:43 【问题描述】:

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

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

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

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

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

【问题讨论】:

使用sideload node 很容易我正在运行,但会在今天晚些时候或周末尝试提供一个示例。 期待您的发现,查看 sideloadnode 上的文档,我不清楚您将如何实现这一目标。 【参考方案1】:

正如 cmets 中所说,您可以使用 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

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

【讨论】:

看起来它将涵盖大多数异常,此外,它还允许我们实施计划停电。完美!【参考方案2】:

如果您有超过 10,000 台服务器,使用 sideload 节点 在性能和计算方面的成本是多少?

【讨论】:

【参考方案3】:

直接在 Chronograph/Kapacitor 中手动管理警报对于大量自定义警报是不可行的。

在 AMMP Technologies,我们需要管理每个数据库、客户、客户对象的警报。这个数字可以进入1000s。我们选择了一个自定义解决方案,其中保留了一组标准的模板 tickscripts(不要与 Kapacitor 模板混淆),并且我们为用户提供了一个只公开相关变量的界面。之后,服务(用 python 编写)将这些变量的值与 tickscript 组合起来,并使用 Kapacitor API 在 Kapacitor 服务器上部署(更新或删除)任务。然后自动化,以便新客户/对象的数据与模板相结合并自动部署到 Kapacitor。

您显然需要将您的任务设计得足够具体,以免它们重叠,并且足够通用,这样就不会为每件小事创建任务。

【讨论】:

我不同意。使用sideload nodes,您可以轻松自定义警报,即使是大量客户/资产组/资产/您的名字。 我不能不同意你的观点。我们确实有理由采用“自定义”解决方案,但我将不得不再次查看侧载节点。 请看我的回答。 添加一点晚了(我是 OP),我们现在使用 sideloads 但我们将配置存储在 git 中以允许在那里定义异常,编排(gocd)使用部署电容器API。我们还将此模型与 Jenkins/Nexus 和内部依赖/配置管理工具一起使用来部署 telegraf 及其配置。

以上是关于如何在 InfluxDB/Kapacitor 中定义异常警报的主要内容,如果未能解决你的问题,请参考以下文章

[经验交流] 试用基于 influxdb+kapacitor 的监控系统

Appium Inspector 无法在 iOS Element Hierarchy 中定位子元素

BOS中定区关联客户

模板方法模式(Template Method Pattern)

编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定

登录和注销后如何重定向 - laravel 5