监控平台实践(六)kapacitor 实现告警

监控平台实践(六)kapacitor 实现告警

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脚本有两大模式:streambatch

  • 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,及时触发了告警也只是记录在本地。想要把告警发送其他地方该怎么办呢?postexec可以用于实现自定义方法。下面就来看下如何实现。

看下面这个例子:

alert,有以下常用的功能:

  • id : 顾名思义,(可使用数据中的tagfield值)
  • message :信息本体,(可使用数据中的tagfield值)
  • okwarncrit :告警级别
  • 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
  • everyquery的执行频率
  • 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
上一篇:tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构


下一篇:kapacitor在centos7下的安装