文档文档

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 开源现已进入公开 Alpha 阶段

InfluxDB 3 开源现在可用于 alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 alpha 的一部分。

InfluxDB 3 Core 是我们的新开源产品。它是用于时间序列和事件数据的最新数据引擎。 InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何开始使用的更多信息,请查看