Docker 安装
使用 Docker Compose 入门 TICK Stack
本教程将演示如何使用 Docker Compose 启动 TICK Stack 组件(InfluxDB、Telegraf、Kapacitor),然后利用该 Stack 来学习 Kapacitor 和 TICKscript 领域特定语言 (DSL) 的基本知识。以下讨论基于可以从此位置下载的教程项目包(名为 tik-docker-tutorial.tar.gz)。它将创建一个运行中的应用程序部署,可用于 Kapacitor 的初步评估和测试。Chronograf 目前不包含在此包中。
本教程依赖 Docker Compose 3.0 来部署最新与 Docker 17.0+ 兼容的 InfluxDB、Telegraf 和 Kapacitor 镜像。
要使用此包,应在运行它的主机上安装 Docker 和 Docker Compose。
Docker 的安装请参考 Docker 网站。
Docker Compose 的安装也请参考 Docker 网站。
为了方便查看日志文件,本文档将描述在两个独立的控制台中运行参考包。第一个控制台将运行 Docker Compose。第二个控制台将用于发出命令来演示 Kapacitor 的基本功能。
截至撰写本文时,该包仅在 Linux (Ubuntu 16.04) 上进行了测试。它包含一个 docker-compose.yml 以及用于配置测试文件的目录。
演示包内容
- docker-compose.yml
- etc
- kapacitor
- kapacitor.conf
- telegraf
- telegraf.conf
- kapacitor
- home
- kapacitor
- cpu_alert_batch.tick
- cpu_alert_stream.tick
- kapacitor
- README.md
- var
- log
- kapacitor
- README.md
- kapacitor
- log
请将包克隆或复制到主机上,并在继续之前在该包的安装位置打开两个控制台。
使用 Docker Compose 加载 Stack
该包的核心是 docker-compose.yml 文件,Docker Compose 使用它来拉取 Docker 镜像,然后创建并运行 Docker 容器。
还准备了标准的 Unix 风格目录。这些目录被映射到 Docker 容器中,以便在后续的演示中轻松访问脚本和日志。一个重要的目录是卷 var/log/kapacitor。在这里,kapacitor.log 和稍后的 alert-*.log 文件将可供检查。
在第一个控制台,进入该包的根目录,运行以下命令以启动 Stack 并保持日志可见:
$ docker-compose up标准控制台流中的日志
Starting tik_influxdb_1 ...
Starting tik_telegraf_1 ...
Starting tik_telegraf_1
Starting tik_influxdb_1
Starting tik_kapacitor_1 ...
Starting tik_influxdb_1 ... done
Attaching to tik_telegraf_1, tik_kapacitor_1, tik_influxdb_1
kapacitor_1 |
kapacitor_1 | '##:::'##::::'###::::'########:::::'###:::::'######::'####:'########::'#######::'########::
kapacitor_1 | ##::'##::::'## ##::: ##.... ##:::'## ##:::'##... ##:. ##::... ##..::'##.... ##: ##.... ##:
kapacitor_1 | ##:'##::::'##:. ##:: ##:::: ##::'##:. ##:: ##:::..::: ##::::: ##:::: ##:::: ##: ##:::: ##:
kapacitor_1 | #####::::'##:::. ##: ########::'##:::. ##: ##:::::::: ##::::: ##:::: ##:::: ##: ########::
kapacitor_1 | ##. ##::: #########: ##.....::: #########: ##:::::::: ##::::: ##:::: ##:::: ##: ##.. ##:::
kapacitor_1 | ##:. ##:: ##.... ##: ##:::::::: ##.... ##: ##::: ##:: ##::::: ##:::: ##:::: ##: ##::. ##::
kapacitor_1 | ##::. ##: ##:::: ##: ##:::::::: ##:::: ##:. ######::'####:::: ##::::. #######:: ##:::. ##:
kapacitor_1 | ..::::..::..:::::..::..:::::::::..:::::..:::......:::....:::::..::::::.......:::..:::::..::
kapacitor_1 |
kapacitor_1 | 2017/08/17 08:46:55 Using configuration at: /etc/kapacitor/kapacitor.conf
influxdb_1 |
influxdb_1 | 8888888 .d888 888 8888888b. 888888b.
influxdb_1 | 888 d88P" 888 888 "Y88b 888 "88b
influxdb_1 | 888 888 888 888 888 888 .88P
influxdb_1 | 888 88888b. 888888 888 888 888 888 888 888 888 8888888K.
influxdb_1 | 888 888 "88b 888 888 888 888 Y8bd8P' 888 888 888 "Y88b
influxdb_1 | 888 888 888 888 888 888 888 X88K 888 888 888 888
influxdb_1 | 888 888 888 888 888 Y88b 888 .d8""8b. 888 .d88P 888 d88P
influxdb_1 | 8888888 888 888 888 888 "Y88888 888 888 8888888P" 8888888P"
influxdb_1 |
influxdb_1 | [I] 2017-08-17T08:46:55Z InfluxDB starting, version 1.3.3, branch HEAD, commit e37afaf09bdd91fab4713536c7bdbdc549ee7dc6
influxdb_1 | [I] 2017-08-17T08:46:55Z Go version go1.8.3, GOMAXPROCS set to 8
influxdb_1 | [I] 2017-08-17T08:46:55Z Using configuration at: /etc/influxdb/influxdb.conf
influxdb_1 | [I] 2017-08-17T08:46:55Z Using data dir: /var/lib/influxdb/data service=store
influxdb_1 | [I] 2017-08-17T08:46:56Z reading file /var/lib/influxdb/wal/_internal/monitor/1/_00001.wal, size 235747 engine=tsm1 service=cacheloader
influxdb_1 | [I] 2017-08-17T08:46:56Z reading file /var/lib/influxdb/wal/telegraf/autogen/2/_00001.wal, size 225647 engine=tsm1 service=cacheloader
telegraf_1 | 2017/08/17 08:46:55 I! Using config file: /etc/telegraf/telegraf.conf
telegraf_1 | 2017-08-17T08:46:56Z I! Starting Telegraf (version 1.3.3)
telegraf_1 | 2017-08-17T08:46:56Z I! Loaded outputs: influxdb
telegraf_1 | 2017-08-17T08:46:56Z I! Loaded inputs: inputs.kernel inputs.mem inputs.processes inputs.swap inputs.system inputs.cpu inputs.disk inputs.diskio
telegraf_1 | 2017-08-17T08:46:56Z I! Tags enabled: host=f1ba76bcbbcc
telegraf_1 | 2017-08-17T08:46:56Z I! Agent Config: Interval:10s, Quiet:false, Hostname:"f1ba76bcbbcc", Flush Interval:10s
influxdb_1 | [I] 2017-08-17T08:46:56Z reading file /var/lib/influxdb/wal/_internal/monitor/1/_00002.wal, size 0 engine=tsm1 service=cacheloader
influxdb_1 | [I] 2017-08-17T08:46:56Z /var/lib/influxdb/data/_internal/monitor/1 opened in 228.044556ms service=store
...验证 Stack
控制台日志应与上面的示例类似。在第二个控制台中,可以使用 Docker 直接确认状态。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1ba76bcbbcc telegraf:latest "/entrypoint.sh te..." 43 minutes ago Up 2 minutes 8092/udp, 8125/udp, 8094/tcp tik_telegraf_1
432ce34e3b00 kapacitor:latest "/entrypoint.sh ka..." 43 minutes ago Up 2 minutes 9092/tcp tik_kapacitor_1
2060eca01bb7 influxdb:latest "/entrypoint.sh in..." 43 minutes ago Up 2 minutes 8086/tcp tik_influxdb_1请注意容器名称,尤其是 Kapacitor 的。如果当前部署中的 Kapacitor 容器名称不同(例如 tik_kapacitor_1),请确保在下面的 Docker 命令示例中替换它。这也适用于 InfluxDB 容器名称(tik_influxdb_1),该名称在下一个示例中使用。
什么正在运行?
此时,主机上应该运行着:InfluxDB、Telegraf 和 Kapacitor。Telegraf 使用配置文件 etc/telegraf/telegraf.conf 进行配置。Kapacitor 使用文件 etc/kapacitor/kapacitor.conf 进行配置。一个桥接网络已在 docker-compose.yml 文件中定义。此桥接网络具有简单的名称解析服务,允许将容器名称用作上述配置文件中的服务器名称。
可以通过直接从 InfluxDB 容器使用 influx 命令行客户端来进一步检查运行中的配置。
$ docker exec -it tik_influxdb_1 influx --precision rfc3339
Connected to https://:8086 version 1.3.3
InfluxDB shell version: 1.3.3
> show databases
name: databases
name
----
_internal
telegraf
> use telegraf
Using database telegraf
> show subscriptions
name: telegraf
retention_policy name mode destinations
---------------- ---- ---- ------------
autogen kapacitor-dc455e9d-b306-4687-aa39-f146a250dd76 ANY [http://kapacitor:9092]
name: _internal
retention_policy name mode destinations
---------------- ---- ---- ------------
monitor kapacitor-dc455e9d-b306-4687-aa39-f146a250dd76 ANY [http://kapacitor:9092]
> exitKapacitor 警报和 TICKscript
TICKscript 的顶层节点定义了底层节点链的执行模式。它们可以设置为让 Kapacitor 接收稳定流的已处理数据,或者触发一批数据点的处理,并从中接收结果。
设置实时流 CPU 警报
要创建警报流,需要:
- 在 TICKscript 中声明所需的功能
- 在 Kapacitor 中定义实际的警报任务
- 通过记录流活动的样本然后回放来测试警报任务
- 启用警报
已在 home/kapacitor 目录中准备了一个初始脚本,该目录被映射为 Kapacitor 容器的卷(home/kapacitor/cpu_alert_stream.tick)。
这个简单的脚本仅涉及丰富的领域特定语言 TICKscript 的基础知识。它是自描述的,应该易于理解。
cpu_alert_stream.tick
stream
// Select just the cpu measurement from our example database.
|from()
.measurement('cpu')
|alert()
.crit(lambda: "usage_idle" < 70)
// Whenever we get an alert write it to a file
.log('/var/log/kapacitor/alerts-stream.log')请注意,alerts-stream.log 文件写入到映射回包目录树 ./var/log/kapacitor 的卷中。这将简化日志检查。
然后可以使用 Docker 通过 Kapacitor 容器定义新警报。
$ docker exec tik_kapacitor_1 sh -c "cd /home/kapacitor && kapacitor define cpu_alert_stream -type stream -tick ./cpu_alert_stream.tick -dbrp telegraf.autogen"使用以下命令验证警报已创建:
$ docker exec tik_kapacitor_1 kapacitor show cpu_alert_stream
ID: cpu_alert_stream
Error:
Template:
Type: stream
Status: disabled
Executing: false
Created: 17 Aug 17 09:30 UTC
Modified: 17 Aug 17 09:30 UTC
LastEnabled: 01 Jan 01 00:00 UTC
Databases Retention Policies: ["telegraf"."autogen"]
TICKscript:
stream
// Select just the cpu measurement from our example database.
|from()
.measurement('cpu')
|alert()
.crit(lambda: "usage_idle" < 70)
// Whenever we get an alert write it to a file.
.log('/var/log/kapacitor/alerts-stream.log')
DOT:
digraph cpu_alert_stream {
stream0 -> from1;
from1 -> alert2;
}使用“record”测试流警报
在启用警报之前,检查其行为是明智的。可以使用 Kapacitor 的“record”命令对警报流的行为进行测试运行。这将返回一个 UUID,该 UUID 可用作后续列出和回放测试中捕获内容的参考。
$ docker exec tik_kapacitor_1 kapacitor record stream -task cpu_alert_stream -duration 60s
fd7d7081-c985-433e-87df-97ab0c267161在记录此测试运行时长一分钟期间,为了强制一个或多个 CPU 具有较低的空闲测量值,从而触发警报,执行一个会产生一些人工负载的进程会很有用。例如,可以在第三个控制台中执行以下操作:
while true; do i=0; done;使用以下命令列出录音:
$ docker exec tik_kapacitor_1 kapacitor list recordings fd7d7081-c985-433e-87df-97ab0c267161
ID Type Status Size Date
fd7d7081-c985-433e-87df-97ab0c267161 stream finished 1.9 kB 17 Aug 17 09:34 UTC重播流警报录音
当录音被重播时,警报会写入 alerts-stream.log,就像警报被启用时会发生的那样。使用以下命令重播录音:
docker exec tik_kapacitor_1 kapacitor replay -recording fd7d7081-c985-433e-87df-97ab0c267161 -task cpu_alert_stream
c8cd033f-a79e-46a6-bb5d-81d2f56722b2检查本地 var/log/kapacitor 目录的内容。
$ ls -1 var/log/kapacitor/
alerts-stream.log
kapacitor.log
README.md检查 alerts-stream.log 的内容。
$ sudo less -X var/log/kapacitor/alerts-stream.log
{"id":"cpu:nil","message":"cpu:nil is CRITICAL","details":"{...}\n","time":"2017-08-17T09:36:09.693216014Z","duration":0,"level":"CRITICAL","data":{...启用警报流
一旦确定新警报不会产生垃圾信息,并且它确实会捕获有意义的信息,就可以在 Kapacitor 中启用它。
$ docker exec tik_kapacitor_1 kapacitor enable cpu_alert_stream再次显示任务以验证它已启用。
$ docker exec tik_kapacitor_1 kapacitor show cpu_alert_stream
ID: cpu_alert_stream
Error:
Template:
Type: stream
Status: enabled
Executing: true
...如果不再需要警报流,也可以禁用它。
$ docker exec tik_kapacitor_1 kapacitor disable cpu_alert_stream设置批量 CPU 警报
设置 TICKscript 节点链的第二种模式是批量处理。批量处理可以定期对一段时间内的时序数据点进行执行。
要创建批量处理,需要:
- 在 TICKscript 中声明所需的功能、要采样的窗口或时间段以及运行频率
- 在 Kapacitor 中定义实际的警报任务
- 通过记录数据点样本然后回放来测试警报任务
- 启用警报
您可能已经注意到,在 home/kapacitor 目录中已创建了一个示例批量 TICKscript。
与基于流的 TICKscript 一样,内容是自描述的,应该易于理解。
cpu_alert_batch.tick
batch
|query('''
SELECT usage_idle
FROM "telegraf"."autogen"."cpu"
''')
.period(5m)
.every(5m)
|alert()
.crit(lambda: "usage_idle" < 70)
.log('/var/log/kapacitor/alerts-batch.log')再次,alerts-batch.log 将写入映射到 Kapacitor 容器的卷目录中。
然后可以使用 Docker 通过 Kapacitor 容器定义新警报。
$ docker exec tik_kapacitor_1 sh -c "cd /home/kapacitor && kapacitor define cpu_alert_batch -type batch -tick ./cpu_alert_batch.tick -dbrp telegraf.autogen"验证任务已创建。
$ docker exec tik_kapacitor_1 kapacitor show cpu_alert_batch
ID: cpu_alert_batch
Error:
Template:
Type: batch
Status: disabled
Executing: false
Created: 17 Aug 17 12:41 UTC
Modified: 17 Aug 17 13:06 UTC
LastEnabled: 01 Jan 01 00:00 UTC
Databases Retention Policies: ["telegraf"."autogen"]
TICKscript:
batch
|query('''
SELECT usage_idle
FROM "telegraf"."autogen"."cpu"
''')
.period(5m)
.every(5m)
|alert()
.crit(lambda: "usage_idle" < 70)
.log('/var/log/kapacitor/alerts-batch.log')
DOT:
digraph cpu_alert_batch {
query1 -> alert2;
}使用“record”测试批量警报
与流警报一样,在启用警报任务之前对其进行测试是明智的。
通过创建人工 CPU 负载来准备一些触发警报的数据点。例如,在第三个控制台中,可以运行以下命令一到两分钟。
while true; do i=0; done;可以使用 Kapacitor 的“record”命令生成警报批量行为的测试运行。
docker exec tik_kapacitor_1 kapacitor record batch -task cpu_alert_batch -past 5m
b2c46972-8d01-4fab-8088-56fd51fa577c使用以下命令列出录音:
$ docker exec tik_kapacitor_1 kapacitor list recordings b2c46972-8d01-4fab-8088-56fd51fa577c
ID Type Status Size Date
b2c46972-8d01-4fab-8088-56fd51fa577c batch finished 2.4 kB 17 Aug 17 13:06 UTC 重播批量警报录音
当录音被重播时,警报会写入 alerts-batch.log,就像在批量处理过程中发现它们时那样。使用以下命令重播录音:
$ docker exec tik_kapacitor_1 kapacitor replay -recording b2c46972-8d01-4fab-8088-56fd51fa577c -task cpu_alert_batch
0cc65a9f-7dba-4a02-a118-e95b4fccf123检查本地 var/log/kapacitor 目录的内容。
$ ls -1 var/log/kapacitor/
alerts-batch.log
alerts-stream.log
kapacitor.log
README.md
README.md检查 alerts-batch.log 的内容。
$ sudo less -X var/log/kapacitor/alerts-batch.log
{"id":"cpu:nil","message":"cpu:nil is CRITICAL","details":"{...}\n","time":"2017-08-17T13:07:00.156730835Z","duration":0,"level":"CRITICAL","data":{...启用批量警报
一旦确定新警报不会产生垃圾信息,并且它确实会捕获有意义的信息,就可以在 Kapacitor 中启用它。
$ docker exec tik_kapacitor_1 kapacitor enable cpu_alert_batch再次显示任务以验证它已启用。
$ docker exec tik_kapacitor_1 kapacitor show cpu_alert_batch
ID: cpu_alert_batch
Error:
Template:
Type: batch
Status: enabled
Executing: true
Created: 17 Aug 17 12:41 UTC
...如果不再需要警报流,也可以禁用它。
$ docker exec tik_kapacitor_1 kapacitor disable cpu_alert_batch总结
本教程涵盖了使用 Docker 启动 TICK Stack 的最基本步骤,以及检查 Kapacitor 最基本的功能:配置和测试由写入 InfluxDB 的数据变化触发的警报。此安装可用于进一步探索 Kapacitor 及其与 InfluxDB 和 Telegraf 的集成。
关闭 Stack
有两种方法可以关闭 Stack。
- 要么在第一个控制台中按 CTRL + C
- 或者,在第二个控制台中运行
$ docker-compose down --volumes
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 Kapacitor 和本文档提供反馈和错误报告。要获取支持,请使用以下资源: