Docker 安装
开始使用TICK和Docker Compose
这个简短的教程将演示如何使用 Docker Compose 启动 TICK 堆栈组件(InfluxDB、Telegraf、Kapacitor),然后利用这个堆栈学习使用 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
- 等等
- kapacitor
- kapacitor.conf
- telegraf
- telegraf.conf
- kapacitor
- 主页
- kapacitor
- cpu_alert_batch.tick
- cpu_alert_stream.tick
- kapacitor
- 自述文件.md
- 变量
- 日志
- kapacitor
- README.md
- kapacitor
- 日志
请将包克隆或复制到主机并在继续之前打开两个控制台到其安装位置。
使用Docker Compose加载堆栈
该软件包的核心是 docker-compose.yml 文件,Docker Compose 使用它来拉取 Docker 镜像,然后创建和运行 Docker 容器。
标准的Unix风格目录也已准备好。这些目录被映射到docker容器中,以便于在接下来的演示中访问脚本和日志。其中一个重要目录是卷 var/log/kapacitor。在这里,kapacitor.log 和随后生成的 alert-*.log 文件将可供检查。
在第一个控制台中,在包的根目录下,启动堆栈并保持日志可见,请运行以下命令:
$ 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
...
验证堆栈
控制台日志应与上面的示例类似。在第二个控制台中,可以通过直接使用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 http://localhost: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]
> exit
Kapacitor 警报和 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上使用TICKscript来定义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,然后可以用作参考,以列出和重放在测试运行中捕获的内容。
$ 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上使用TICKscript来定义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栈的最基本步骤,以及检查Kapacitor的最基本功能:配置和测试由写入InfluxDB的数据变化触发的警报。此安装可用于进一步探索Kapacitor及其与InfluxDB和Telegraf的集成。
关闭堆栈
可以通过两种方式来处理堆栈。
- 或者,在第一个控制台中按 CTRL + C
- 或者,在第二个控制台运行
$ docker-compose down --volumes