我正在尝试找出在InfluxDB中定义警报的最佳或合理方法。例如,我可能会使用telegraf附带的CPU批处理滴答脚本。可以将其设置为Telegraf监控的所有主机的全局监控器/警报。
如果您要偏离主机的上述设置,即要针对Y%发出警报的特定服务器而不是X%,该怎么办?
我很高兴可以为自定义值创建一个不同的报价脚本,但是如何将主机从原始“全局”中排除呢?
这是一个简单的场景,但这需要满足10,000个主机的需求,其中将有100个例外,这还将包含10s / 100s的全局警报定义。
我正在努力查看如何将平台用作监视/警报的主要来源。
答案 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,并且主机名标记等于numMeasurements
或influxdb
会超过100。
有一个example in the documentation handling scheduled downtimes using sideload
此外,我已经创建了一个example available on github using docker-compose
请注意以下示例:警告是由于动态生成的第二个数据库而引起的。但这足以说明如何解决此问题。
答案 2 :(得分:0)
如果拥有超过一万台服务器,那么在性能和计算上使用 sideload节点的成本是多少?