目录

TICK技术栈

TICK流程

安装Kapacitor

启动Kapacitor

docker运行kapacitor

kapacitor报错

 原因

kapacitor客户端连远程

根据tick脚本定义task

从流数据触发告警

查看当前的告警任务列表

查看告警任务详情

错误排查

检查日志

任务测试通过后启用该任务

TICK

tick语法

单引号和双引号的区别



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

单引号和双引号的区别

https://docs.influxdata.com/kapacitor/v1.5/introduction/getting-started/#gotcha-single-versus-double-quotes

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐