监控平台实践(六)kapacitor 实现告警
00 安装
下载&安装
wget https://dl.influxdata.com/kapacitor/releases/kapacitor-1.5.7-1.x86_64.rpm
sudo yum localinstall -y kapacitor-1.5.7-1.x86_64.rpm
配置
systemctl edit kapacitor
[Service]
Environment="TZ=Asia/Shanghai"
启动
sudo systemctl start kapacitor
查看日志
sudo tail -f -n 128 /var/log/kapacitor/kapacitor.log
可以看到有日志刷出。
这是由于本机安装了influxdb
kapacitor默认配置,会从http://localhost:8086订阅influxdb的信息/etc/kapacitor/kapacitor.conf
[[influxdb]]
# Connect to an InfluxDB cluster
# Kapacitor can subscribe, query and write to this cluster.
# Using InfluxDB is not required and can be disabled.
enabled = true
default = true
name = "localhost"
urls = ["http://localhost:8086"]
01 基本命令
定义脚本任务:kapacitor define 任务名称 -tick 脚本名称
查看任务列表:kapacitor list tasks
查看任务内容:kapacitor show 任务名称
02 写个告警脚本
tick脚本有两大模式:stream
和batch
-
stream
:数据流方式处理告警 -
batch
:批量查询的方式处理告警
03 写个stream告警脚本
脚本位置:
mkdir /etc/kapacitor/tasks
创建文件:
vim cpu_alert.tick
脚本说明:
-
dbrp
指定 库名(使用telegraf
)、保留策略(默认autogen
) - 从
cpu
表中获取数据 - 判断条件:
cpu
空闲值usage_idle
小于70
时,发出crit
级别alert
; - 将日志存放到
/tmp/alerts/log
中;
dbrp "telegraf"."autogen"
stream
|from()
.measurement('cpu')
|alert()
.crit(lambda: int("usage_idle") < 70)
.log('/tmp/alerts.log')
注意:双引号表示 data fields, 单引号表示 string values,例子:
.where(lambda: "host" == 'server1')
定义cpu_alert任务:
kapacitor define cpu_alert -tick cpu_alert.tick
kapacitor list tasks
(定义成功就能看到该任务)
启用cpu_alert任务:
kapacitor enable cpu_alert
启动成功
04 自定义告警
上面的tick,及时触发了告警也只是记录在本地。想要把告警发送其他地方该怎么办呢?post
和exec
可以用于实现自定义方法。下面就来看下如何实现。
看下面这个例子:
alert
,有以下常用的功能:
-
id
: 顾名思义,(可使用数据中的tag
和field
值) -
message
:信息本体,(可使用数据中的tag
和field
值) -
ok
、warn
、crit
:告警级别 -
log
:日志位置 -
post
:通过post请求发送告警数据(触发告警,将数据发送到https://alerthandler.example.com
链接) -
exec
:执行本地脚本(触发告警,执行/bin/custom_alert_handler.sh
脚本)
|alert()
.id('{{ .Name }}/{{ index .Tags "service" }}/{{ index .Tags "datacenter"}}')
.message('{{ .ID }} is {{ .Level }} cpu-95th:{{ index .Fields "percentile" }}')
// Compare values to running mean and standard deviation
.warn(lambda: "sigma" > 2.5)
.crit(lambda: "sigma" > 3.0)
.log('/tmp/alerts.log')
// Post data to custom endpoint
.post('https://alerthandler.example.com')
// Execute custom alert handler script
.exec('/bin/custom_alert_handler.sh')
05 batch告警脚本
03
中的stream
改成batch
方式如下:
可见区别在于query
:根据语句查询结果SELECT mean(usage_idle) FROM "telegraf"."autogen"."cpu"
-
period
:查询的时间范围,这里的5m
等同于where time>now()-5m
-
every
:query的执行频率
-
groupBy
:分组条件
dbrp "telegraf"."autogen"
batch
|query('''
SELECT mean(usage_idle)
FROM "telegraf"."autogen"."cpu"
''')
.period(5m)
.every(5m)
.groupBy(time(1m), 'cpu')
|alert()
.crit(lambda: "mean" < 70)
.log('/tmp/batch_alerts.log')
06 查看脚本状态
kapacitor中查看某个脚本内容
kapacitor show cpu_alert
ID: cpu_alert
Error:
Template:
Type: stream
Status: disabled
Executing: false
Created: 10 Mar 21 17:20 CST
Modified: 10 Mar 21 17:20 CST
LastEnabled: 01 Jan 01 00:00 UTC
Databases Retention Policies: ["telegraf"."autogen"]
TICKscript:
dbrp "telegraf"."autogen"
stream
// Select the CPU measurement from the `telegraf` database.
|from()
.measurement('cpu')
// Triggers a critical alert when the CPU idle usage drops below 70%
|alert()
.crit(lambda: int("usage_idle") < 70)
// Write each alert to a file.
.log('/tmp/alerts.log')
DOT:
digraph cpu_alert {
stream0 -> from1;
from1 -> alert2;
}
启用脚本
kapacitor enable cpu_alert
再次查看
kapacitor show cpu_alert
,会发现有所变化这里列出变化值
Status: enabled
LastEnabled: 10 Mar 21 17:21 CST
...
DOT:
digraph cpu_alert {
graph [throughput="0.00 points/s"];
stream0 [avg_exec_time_ns="0s" errors="0" working_cardinality="0" ];
stream0 -> from1 [processed="5"];
from1 [avg_exec_time_ns="0s" errors="0" working_cardinality="0" ];
from1 -> alert2 [processed="5"];
alert2 [alerts_inhibited="0" alerts_triggered="0" avg_exec_time_ns="9.042µs" crits_triggered="0" errors="0" infos_triggered="0" oks_triggered="0" warns_triggered="0" working_cardinality="1" ];
07 kapacitor 记录与回放
很少用,具体的功能描述见官网。
kapacitor record stream -task cpu_alert -duration 60s
e747e143-af0d-4baf-b1cc-6bf6bd4b29a8
kapacitor list recordings e747e143-af0d-4baf-b1cc-6bf6bd4b29a8
,可以看到记录的Size为1.5kB
ID Type Status Size Date
e747e143-af0d-4baf-b1cc-6bf6bd4b29a8 stream finished 1.5 kB 10 Mar 21 17:25 CST