Kapacitor学习
目录TICK技术栈TICK流程安装Kapacitor启动Kapacitordocker运行kapacitorkapacitor客户端连远程根据tick脚本定义task从流数据触发告警查看当前的告警任务列表查看告警任务详情错误排查检查日志任务测试通过后启用该任务TICKtick语法单引号和双引号的区别TICK技术栈包括Te...
目录
TICK技术栈
包括Telegraf, InfluxDB, Chronograf, Kapacitor
TICK流程
1.安装influxdb和telefraf
2.启动influxdb,telegraf,并从telegraf发送数据到Influxdb
telegraf一旦安装成功并启动好,就会按照默认配置信息,发送系统指标到influxdb,会自动创建"telegraf"数据库。
3.安装kapacitor
4.启动kapacitor
5.定义并运行流任务触发cpu告警
6.定义并运行批处理任务触发cpu告警
telegraf配置文件:/etc/telegraf/telegraf.conf
[agent].interval // 声明了发送系统指标到influxdb的频率
[[outputs.influxd]] // 声明了怎么连接到influxdb以及目标数据库,默认是telegraf数据库
[[inputs.cpu]] // 声明了怎样采集系统cpu指标
// telegraf配置文件例子
[agent]
## Default data collection interval for all inputs
interval = "10s"
...
[[outputs.influxdb]]
## The HTTP or UDP URL for your InfluxDB instance. Each item should be
## of the form:
## scheme "://" host [ ":" port]
##
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://localhost:8089"] # UDP endpoint example
urls = ["http://localhost:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required
...
[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = true
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics.
collect_cpu_time = false
安装Kapacitor
wget https://dl.influxdata.com/kapacitor/releases/kapacitor-1.5.0.x86_64.rpm
启动Kapacitor
sudo systemctl start kapacitor
当Kapacitor启动时就会发现influxdb运行在http://localhost:8086,会在influxdb上创建一些订阅信息,这些订阅信息告诉influxdb,influxdb把收集到的所有数据发送给Kapacitor还是第三方服务。
检查Kapacitor服务状态
sudo systemctl status kapacitor
docker运行kapacitor
事先准备好kapacitor.conf
docker run -d --name kapacitor --network host --restart always -v /root/kapacitor:/etc/kapacitor:ro -v /var/lib/cloudtogo/data/kapacitor:/var/lib/kapacitor:rw registry.local/cloudtogo.cn/official/kapacitor:1.5.3
kapacitor报错
[run] 2020/03/17 08:48:59 E! create server: host cannot be empty. To generate a valid configuration file run `kapacitord config > kapacitor.generated.conf`.
run: create server: host cannot be empty. To generate a valid configuration file run `kapacitord config > kapacitor.generated.conf`.
原因
influxdb没有使用host网络模式,而是默认的bridge。kapacitor.conf里面的[[influxdb]] urls使用的是默认的配置localhost,即
[[influxdb]]
enabled = true
name = "default"
default = false
urls = ["http://localhost:8086"]
username = ""
password = ""
ssl-ca = ""
ssl-cert = ""
ssl-key = ""
当前kapacitor容器里面肯定是没有influxdb的,由于启用了influxdb,即enabled=true,所以kapacitor会去连接默认的localhost:8086,导致连不通。
kapacitor客户端连远程
kapacitor -url http://10.10.13.5:9092 list tasks
kapacitor -url http://10.10.13.5:9092 define k8s-batch-pod -tick batch-pod-alert.tick -dbrp "telegraf"."autogen"
根据tick脚本定义task
kapacitor define cpu_alert -type stream -tick /root/cpu_alert.tick -dbrp telegraf.autogen
Kapacitor默认的日志目录:/var/log/kapacitor
从流数据触发告警
Kapacitor的处理原理:
Kapaciror中的一个task代表要对一组数据执行的工作量。有两种类型的task:stream和batch。
Kapacitor使用DSL,即TICKscript来定义task,每个TICKscript都定义了一个管道(pipeline),告诉Kapacitor哪些数据要处理以及怎样被处理。
Kapacitor最常见的是被用作触发告警。
以下例子是设置高cpu使用率的告警任务,telegraf根据cpu在空闲状态下花费的比例向influxdb写入cpu指标,当使用率小于70%,触发警告。
dbrp "telegraf"."autogen"
stream
// Select just the cpu measurement from our example database.
|from()
.measurement('cpu')
|alert()
.crit(lambda: int("usage_idle") < 70)
// Whenever we get an alert write it to a file.
.log('/tmp/alerts.log')
Kapacitor提供http api接口,Kapacitor客户端通过命令行暴露这些api接口。
// 使用之前定义的TICKscript脚本定义高cpu使用率告警任务
kapacitor define cpu_alert -tick cpu_alert.tick
kapacitor不仅可以定义task,还可以指定database,以及保留策略
当Kapacitor版本从1.4开始,可以使用TICKscript中的可选项声明数据库和保留策略,如dbrp "telegraf"."autogen"。
如果没有在TICKscript脚本中声明,则必须使用在kapacitor命令后使用 -dbrp <数据库名>.<保留策略>
查看当前的告警任务列表
kapacitor list tasks
查看告警任务详情
// kapacitor show 任务名称/ID
kapacitor show cpu_alert
在启用告警任务之前,应该对该任务进行测试,以确保它不会向日志文件或通信通道发送带有警报的垃圾邮件。
// 使用record记录当前数据流,测试当前任务
kapacitor record stream -task cpu_alert -duration 60s
错误排查
如果命令行报错,如getsockopt: connection refused(linux),onnectex: No connection could be made...(windows),请先确保Kapacitor服务已经启动。
如果Kapacitor服务已经启动但上述错误仍存在,则检查本机的防火墙设置,确保9092端口可用(因为kapacitor默认的端口即9092)。
也可以检查/var/log/kapacitor/kapacitor.log日志文件查看错误详情。
如果Kapacitor没有收到数据,依次检查:telegraf, influxdb, kapacitor。
如果telegraf连接不上influxdb,telegraf会记录下来;
如果influxdb无法发送数据到kapacitor,Influxdb会记录:connection refused。
使用 SHOW SUBSCRIPTIONS,检查influxdb将数据发送到Kapacitor的端点。
使用reply指令将数据回放到指定的task进行隔离测试
kapacitor replay -recording $rid -task cpu_alert
由于数据已经被记录,就能够很快被执行,而不必等着实时执行。
使用-real-clock标记,数据就会等到指定的时间来执行。无论是否使用-real-clock,执行结果都是一致的
检查日志
sudo cat /tmp/alerts.log
任务测试通过后启用该任务
kapacitor enable cpu_alert
TICK
tick语法
https://docs.influxdata.com/kapacitor/v1.5/tick/syntax/#influxql-in-tickscript
tick脚本使用lambda表达式,语法
All field or tag identifiers must be double quoted.
The comparison operator for equality is == not =.
https://docs.influxdata.com/kapacitor/v1.5/tick/syntax
https://docs.influxdata.com/kapacitor/v1.5/tick/expr/#stateless-functions
单引号和双引号的区别
更多推荐
所有评论(0)