文档文档

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
  • etc
    • kapacitor
      • kapacitor.conf
    • telegraf
      • telegraf.conf
  • home
    • kapacitor
      • cpu_alert_batch.tick
      • cpu_alert_stream.tick
  • README.md
  • var
    • log
      • kapacitor
        • README.md

请克隆或复制软件包到主机,并在继续之前打开两个控制台到其安装位置。

使用 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 中定义实际的告警任务
  • 通过记录数据点样本然后回放来测试告警任务
  • 启用告警

可能已经注意到,示例批处理 TICKscript 已在目录 home/kapacitor 中创建。

与基于流的 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

此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像目前一样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、最近数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 以 Core 的基础为构建,增加了高可用性、只读副本、增强的安全性以及数据压缩,从而实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看