如何在 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 中定位子元素
模板方法模式(Template Method Pattern)
编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定