文档文档

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

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

使用 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]
> 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 通过 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

此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2