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

时间:2019-07-10 14:22:08

标签: influxdb alerts kapacitor

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

如果您要偏离主机的上述设置,即要针对Y%发出警报的特定服务器而不是X%,该怎么办?

我很高兴可以为自定义值创建一个不同的报价脚本,但是如何将主机从原始“全局”中排除呢?

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

我正在努力查看如何将平台用作监视/警报的主要来源。

3 个答案:

答案 0 :(得分:0)

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

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

显然,您需要将任务设计为足够具体,以便它们不会重叠且不够通用,以至于为每件小事创建任务都不需要太多工作。

答案 1 :(得分:0)

如评论中所述,您可以使用sideload node来实现。

说,您要确保InfluxDB服务器不过载。您可能希望默认允许100次测量。仅在一台碰巧获得大量数据点的服务器上,您希望将其限制为10个(<?php $response = array(); include 'db/db_connect.php'; //Get the input request parameters $inputJSON = file_get_contents('php://input'); $input = json_decode($inputJSON, TRUE); //convert JSON into array //Check for Mandatory parameters if(isset($input['username']) && isset($input['token'])){ $username = $input['username']; $token = $input['token']; //Query to register new user $insertQuery = "INSERT INTO firebaseUsers(username, token) VALUES (?,?)"; if($stmt = $con->prepare($insertQuery)){ $stmt->bind_param("ss",$username,$token); $stmt->execute(); $response["status"] = 0; $response["message"] = "Token Saved"; $stmt->close(); } } else{ $response["status"] = 1; } echo json_encode($response); ?> 数据库很容易超过该值,但这对我们的示例很有用。)

给出以下节选脚本摘录

_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会超过10,并且主机名标记等于numMeasurementsinfluxdb会超过100。

有一个example in the documentation handling scheduled downtimes using sideload

此外,我已经创建了一个example available on github using docker-compose

请注意以下示例:警告是由于动态生成的第二个数据库而引起的。但这足以说明如何解决此问题。

答案 2 :(得分:0)

如果拥有超过一万台服务器,那么在性能和计算上使用 sideload节点的成本是多少?