介绍
TICK 堆栈 是时间序列数据库 InfluxDB 开发人员的产品集合。 它由以下组件组成:
- Telegraf 从各种来源收集时间序列数据。
- InfluxDB 存储时间序列数据。
- Chronograf 可视化并绘制时间序列数据。
- Kapacitor 提供警报并检测时间序列数据中的异常。
您可以单独使用这些组件中的每一个,但如果将它们一起使用,您将拥有一个可扩展的、集成的开源系统来处理时间序列数据。
在本教程中,您将设置该平台并将其用作开源监控系统。 您将产生一点 CPU 使用率,并在使用率过高时收到电子邮件警报。
先决条件
在开始之前,您需要以下内容:
- 按照 Ubuntu 16.04 初始服务器设置指南 设置一台 Ubuntu 16.04 服务器,包括 sudo 非 root 用户和防火墙。
- 用于发送警报的 SMTP 服务器以及连接详细信息。 如果没有,可以安装
sendmail
和sudo apt-get install sendmail
。 - 如果您希望按照步骤 7 中的说明保护 Chronograf 用户界面,您需要一个属于 GitHub 组织的 GitHub 帐户。 按照本教程创建一个GitHub组织。
第 1 步 — 添加 TICK 堆栈存储库
默认情况下,TICK 堆栈组件不能通过包管理器获得。 所有 TICK 堆栈组件都使用相同的存储库,因此我们将设置存储库配置文件以实现无缝安装。
使用以下命令添加 InfluxData 存储库:
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add - source /etc/lsb-release echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
有了新的存储库,更新包列表:
sudo apt-get update
现在我们可以安装和配置 InfluxDB。
第 2 步 — 安装 InfluxDB 并配置身份验证
InfluxDB 是一个开源数据库,针对时间序列数据的快速、高可用性存储和检索进行了优化。 InfluxDB 非常适合操作监控、应用程序指标和实时分析。
运行以下命令安装 InfluxDB:
sudo apt-get install influxdb
安装完成后,启动 InfluxDB 服务:
sudo systemctl start influxdb
然后确保服务正常运行:
systemctl status influxdb
您将看到以下状态,验证服务是否正在运行:
[secondary_label Output ● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-03-13 15:20:53 CST; 11s ago Docs: https://docs.influxdata.com/influxdb/ Main PID: 1619 (influxd) CGroup: /system.slice/influxdb.service └─1619 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
InfluxDB 正在运行,但您需要启用用户身份验证以限制对数据库的访问。 让我们创建至少一个管理员用户。
启动 InfluxDB 控制台:
influx
执行以下命令创建一个新的管理员用户。 我们将使用密码 sammy_admin
创建一个 sammy
用户,但是您可以使用任何您想要的。
CREATE USER "sammy" WITH PASSWORD 'sammy_admin' WITH ALL PRIVILEGES
验证用户是否已创建:
show users
您将看到以下输出,验证您的用户是否已创建:
Output user admin ---- ----- sammy true
现在用户已经存在,退出 InfluxDB 控制台:
exit
现在在编辑器中打开文件 /etc/influxdb/influxdb.conf
。 这是 InfluxDB 的配置文件。
sudo nano /etc/influxdb/influxdb.conf
找到 [http]
部分,取消注释 auth-enabled
选项,并将其值设置为 true
:
/etc/influxdb/influxdb.conf
... [http] # Determines whether HTTP endpoint is enabled. # enabled = true # The bind address used by the HTTP service. # bind-address = ":8086" # Determines whether HTTP authentication is enabled. auth-enabled = true ...
然后保存文件,退出编辑器,重启 InfluxDB 服务:
sudo systemctl restart influxdb
现在配置了 InfluxDB,让我们安装 Telegraf,一个用于收集指标的代理。
第 3 步 — 安装和配置 Telegraf
Telegraf 是一个开源代理,它收集有关其运行的系统或其他服务的指标和数据。 Telegraf 然后将数据写入 InfluxDB 或其他输出。
运行以下命令安装 Telegraf:
sudo apt-get install telegraf
Telegraf 服务在安装后自动启动。
Telegraf 使用插件来输入和输出数据。 默认输出插件用于 InfluxDB。 由于我们为 IndexDB 启用了用户身份验证,我们必须修改 Telegraf 的配置文件以指定我们配置的用户名和密码。 在编辑器中打开 Telegraf 配置文件:
sudo nano /etc/telegraf/telegraf.conf
找到 [outputs.influxdb]
部分并提供用户名和密码:
/etc/telegraf/telegraf.conf
[[outputs.influxdb]] ## The full HTTP or UDP endpoint URL for your InfluxDB instance. ## Multiple urls can be specified as part of the same cluster, ## this means that only ONE of the urls will be written to each interval. # urls = ["udp://localhost:8089"] # UDP endpoint example urls = ["http://localhost:8086"] # required ## The target database for metrics (telegraf will create it if not exists). database = "telegraf" # required ... ## Write timeout (for the InfluxDB client), formatted as a string. ## If not provided, will default to 5s. 0s means no timeout (not recommended). timeout = "5s" username = "sammy" password = "sammy_admin" ## Set the user agent for HTTP POSTs (can be useful for log differentiation) # user_agent = "telegraf" ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes) # udp_payload = 512
保存文件,退出编辑器,然后重启 Telegraf:
sudo systemctl restart telegraf
然后检查服务是否正常运行:
systemctl status telegraf
您将看到以下状态,表明 Telegraf 正在运行。
Output● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB Loaded: loaded (/lib/systemd/system/telegraf.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-03-14 15:24:41 CST; 1min 26s ago Docs: https://github.com/influxdata/telegraf Main PID: 1752 (telegraf) CGroup: /system.slice/telegraf.service └─1752 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d
Telegraf 现在正在收集数据并将其写入 InfluxDB。 让我们打开 InfluxDB 控制台,看看 Telegraf 将哪些测量值存储在数据库中。 使用您之前配置的用户名和密码进行连接:
influx -username 'sammy' -password 'sammy_admin'
登录后,执行此命令以查看可用数据库:
show databases
您将在输出中看到 telegraf
数据库:
Output name: databases name ---- _internal telegraf
注意:如果您没有看到 telegraf
数据库,请检查您配置的 Telegraf 设置以确保您指定了正确的用户名和密码。
让我们看看 Telegraf 在该数据库中存储了什么。 执行以下命令切换到 Telegraf 数据库:
use telegraf
通过执行以下命令显示 Telegraf 收集的各种测量值:
show measurements
您将看到以下输出:
Output name: measurements name ---- cpu disk diskio kernel mem processes swap system
如您所见,Telegraf 在这个数据库中收集并存储了大量信息。
Telegraf 有 60 多个输入插件。 它可以从许多流行的服务和数据库中收集指标,包括:
- 阿帕奇
- 卡桑德拉
- 码头工人
- 弹性搜索
- 格雷洛格
- IPtables
- MySQL
- PostgreSQL
- 雷迪斯
- SNMP
- 和许多其他人
您可以通过在终端窗口中运行 telegraf -usage plugin-name
查看每个输入插件的使用说明。
退出 InfluxDB 控制台:
exit
现在我们知道 Telegraf 正在存储测量值,让我们设置 Kapacitor 来处理数据。
第 4 步 — 安装 Kapacitor
Kapacitor 是一个数据处理引擎。 它允许您插入自己的自定义逻辑来处理具有动态阈值的警报、匹配模式的指标或识别统计异常。 我们将使用 Kapacitor 从 InfluxDB 读取数据,生成警报,并将这些警报发送到指定的电子邮件地址。
运行以下命令安装 Kapacitor:
sudo apt-get install kapacitor
在编辑器中打开 Kapacitor 配置文件:
sudo nano /etc/kapacitor/kapacitor.conf
找到 influxdb
部分并提供用户名和密码以连接到 InfluxDB 数据库:
/etc/kapacitor/kapacitor.conf
# Multiple InfluxDB configurations can be defined. # Exactly one must be marked as the default. # Each one will be given a name and can be referenced in batch queries and InfluxDBOut nodes. [[influxdb]] # Connect to an InfluxDB cluster # Kapacitor can subscribe, query and write to this cluster. # Using InfluxDB is not required and can be disabled. enabled = true default = true name = "localhost" urls = ["http://localhost:8086"] username = "sammy" password = "sammy_admin" ...
保存文件,退出编辑器,然后启动 Kapacitor:
sudo systemctl start kapacitor
现在让我们验证 Kapacitor 是否正在运行。 使用以下命令检查 Kapacitor 的任务列表:
kapacitor list tasks
如果 Kapacitor 启动并运行,您将看到一个空的任务列表,如下所示:
Output ID Type Status Executing Databases and Retention Policies
安装和配置 Kapacitor 后,让我们安装 TICK 堆栈的用户界面组件,以便我们可以看到一些结果并配置一些警报。
第 5 步 — 安装和配置 Chronograf
Chronograf 是一个图形和可视化应用程序,它提供了可视化监控数据和创建警报和自动化规则的工具。 它包括对模板的支持,并具有一个用于常见数据集的智能、预配置仪表板库。 我们将配置它以连接到我们已安装的其他组件。
下载并安装最新的包:
wget https://dl.influxdata.com/chronograf/releases/chronograf_1.2.0~beta5_amd64.deb sudo dpkg -i chronograf_1.2.0~beta5_amd64.deb
然后启动 Chronograf 服务:
sudo systemctl start chronograf
注意:如果您使用的是简单防火墙,请将其配置为允许连接到端口8888
:
sudo ufw allow 8888/tcp
按照教程 How To Set Up a Firewall with UFW on Ubuntu 16.04 了解有关 UFW 的更多信息。
现在您可以通过在网络浏览器中访问 http://your_server_ip:8888
来访问 Chronograf 界面。
您将看到如下图所示的欢迎页面:
输入 InfluxDB 数据库的用户名和密码,然后单击 Connect New Source 继续。
连接后,您将看到主机列表。 单击您的服务器的主机名以打开一个仪表板,其中包含一系列关于您的主机的系统级图表,如下图所示:
现在让我们将 Chronograf 连接到 Kapacitor 以设置警报。 将鼠标悬停在左侧导航菜单中的齿轮图标上,然后单击 Kapacitor 打开配置页面。
使用默认的连接细节; 我们没有为 Kapacitor 配置用户名和密码。 单击连接电容器。 一旦 Kapacitor 成功连接,您将看到 Configure Alert Endpoints 部分出现在表单下方。
Kapacitor 支持多个警报端点:
- 嘻哈聊天
- 行动精灵
- 寻呼机
- 森苏
- 松弛
- SMTP
- 讲话
- 电报
- 胜利者行动
最简单的通讯方式是SMTP,默认选中。 在 From email 字段中填写发送警报的地址。 然后填写您的 SMTP 服务器的详细信息,如果您已安装 sendmail
,则将其保留为默认值。 然后点击保存。
配置到位后,让我们创建一些警报。
第 6 步 — 配置警报
让我们设置一个简单的警报来查找高 CPU 使用率。
将鼠标悬停在左侧导航菜单中的感叹号图标上,然后单击 Kapacitor Rules。 然后点击新建规则。
在第一部分,通过单击 telegraf.autogen 选择时间序列。 然后从出现的列表中选择 system。 然后选择load1。 您将立即在下面的部分中看到相应的图表。
在图表上方,找到显示 Send Alert where load1 is Greater Than 的字段,然后输入 0.8
作为值。
然后将以下文本粘贴到 Alert Message 字段以配置警报消息的文本:
{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}
您可以将鼠标悬停在 Templates 部分中的条目上,以获取每个字段的描述。
然后从 Send this Alert to 下拉列表中选择 Smtp 选项,并在相关字段中输入您的电子邮件地址。
默认情况下,您将收到 JSON 格式的消息,如下所示:
示例消息
{ "Name":"system", "TaskName":"chronograf-v1-50c67090-d74d-42ba-a47e-45ba7268619f", "Group":"nil", "Tags":{ "host":"centos-tick" }, "ID":"TEST:nil", "Fields":{ "value":1.25 }, "Level":"CRITICAL", "Time":"2017-03-08T12:09:30Z", "Message":"TEST:nil is CRITICAL value: 1.25" }
您可以为邮件警报设置更多人类可读的消息。 为此,请在带有 Put email body text here 占位符的文本框中输入您的消息。
您可以通过单击页面左上角的名称并输入新名称来重命名此规则。
最后点击右上角的【X15X】保存规则【X28X】,完成该规则的配置。
要测试这个新创建的警报,请使用 dd
命令从 /dev/zero
读取数据并将其发送到 /dev/null
来创建 CPU 峰值:
dd if=/dev/zero of=/dev/null
让命令运行几分钟,这应该足以创建一个尖峰。 您可以随时按 CTRL+C
停止命令。
一段时间后,您将收到一封电子邮件。 此外,您可以通过单击 Chronograf 用户界面左侧导航菜单中的 警报历史 来查看所有警报。
注意:确认可以接收警报后,请务必停止使用 CTRL+C
启动的 dd
命令。
我们正在运行警报,但任何人都可以登录 Chronograf。 让我们限制访问。
第 7 步 — 使用 OAuth 保护 Chronograf
默认情况下,任何知道运行 Chronograf 应用程序的服务器地址的人都可以查看任何数据。 测试环境可以接受,但生产环境不行。 Chronograf 支持 Google、Heroku 和 GitHub 的 OAuth 身份验证。 我们将配置通过 GitHub 帐户登录,因此您需要一个帐户才能继续。
首先,在 GitHub 上注册一个新应用程序。 登录您的 GitHub 帐户并导航到 https://github.com/settings/applications/new。
然后使用以下详细信息填写表格:
- 使用 Chronograf 或合适的描述性名称填写 Application name。
- 对于 主页 URL,请使用
http://your_server_ip:8888
。 - 用
http://your_server_ip:8888/oauth/github/callback
填写授权回调URL。 - 点击【X6X】注册应用【X30X】保存设置。
- 复制下一个屏幕上提供的 Client ID 和 Client Secret 值。
接下来,编辑 Chronograf 的 systemd 脚本以启用身份验证。 打开文件/lib/systemd/system/chronograf.service
:
sudo nano /lib/systemd/system/chronograf.service
然后找到 [Service]
部分并编辑以 ExecStart=
开头的行:
/lib/systemd/system/chronograf.service
[Service] User=chronograf Group=chronograf ExecStart=/usr/bin/chronograf --host 0.0.0.0 --port 8888 -b /var/lib/chronograf/chronograf-v1.db -c /usr/share/chronograf/canned -t 'secret_token' -i 'your_github_client_id' -s 'your_github_client_secret' -o 'your_github_organization' KillMode=control-group Restart=on-failure
所有 OAuth 提供者都需要 secret_token
。 将其设置为随机字符串。 使用您的 Github 客户端 ID、Github 客户端密码和 Github 组织作为其他值。
警告:如果您在命令中省略 Github 组织选项,任何 Github 用户都可以登录到您的 Chronograf 实例。 创建一个 Github 组织并将适当的用户添加到该组织以限制访问。
保存文件,退出编辑器,重启 Chronograf 服务:
sudo systemctl daemon-reload sudo systemctl restart chronograf
打开 http://your_server_ip:8888
访问 Chronograf 界面。 这一次,您将看到一个 使用 Github 登录按钮。 单击按钮登录,系统会要求您允许该应用程序访问您的 Github 帐户。 允许访问后,您将登录。
结论
在本教程中,您了解了 TICK 堆栈如何成为存储、分析和可视化时间序列数据的强大工具。 它具有许多功能和用例。 例如,您可以使用 Kapacitor 执行 异常检测 或 构建游戏分数的实时排行榜 。 您可以通过阅读官方文档了解更多关于TICK堆栈的信息。