如何在CentOS7上使用TICK堆栈监控系统指标
介绍
TICK 堆栈 是时间序列数据库 InfluxDB 开发人员的产品集合。 它由以下组件组成:
- Telegraf 从各种来源收集时间序列数据。
- InfluxDB 存储时间序列数据。
- Chronograf 可视化并绘制时间序列数据。
- Kapacitor 提供警报并检测时间序列数据中的异常。
您可以单独使用这些组件中的每一个,但如果将它们一起使用,您将拥有一个可扩展的、集成的开源系统来处理时间序列数据。
在本教程中,您将设置该平台并将其用作开源监控系统。 您将产生一点 CPU 使用率,并在使用率过高时收到电子邮件警报。
先决条件
在开始之前,您需要以下内容:
- 按照CentOS 7初始服务器设置指南设置一台CentOS 7服务器,包括sudo非root用户和防火墙。
- 如果您希望按照步骤 7 中的说明保护 Chronograf 用户界面,您需要一个属于 GitHub 组织的 GitHub 帐户。 按照本教程创建一个GitHub组织。
第 1 步 — 添加 TICK 堆栈存储库
默认情况下,TICK 堆栈组件不能通过包管理器获得。 所有 TICK 堆栈组件都使用相同的存储库,因此我们将设置存储库配置文件以实现无缝安装。
创建这个新文件:
sudo vi /etc/yum.repos.d/influxdata.repo
将以下配置放入新文件中:
/etc/yum.repos.d/influxdata.repo
[influxdb] name = InfluxData Repository - RHEL $releasever baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable enabled = 1 gpgcheck = 1 gpgkey = https://repos.influxdata.com/influxdb.key
保存文件并退出编辑器。 现在我们可以安装和配置 InfluxDB
第 2 步 — 安装 InfluxDB 并配置身份验证
InfluxDB 是一个开源数据库,针对时间序列数据的快速、高可用性存储和检索进行了优化。 InfluxDB 非常适合操作监控、应用程序指标和实时分析。
运行以下命令安装 InfluxDB:
sudo yum install influxdb
在安装过程中,系统会要求您导入 GPG 密钥。 确认您希望导入此密钥,以便可以继续安装。
安装完成后,启动 InfluxDB 服务:
sudo systemctl start influxdb
然后确保服务正常运行:
systemctl status influxdb
您将看到以下状态,验证服务是否正在运行:
[secondary_label Output ● influxdb.service - InfluxDB is an open-source, distributed, time series database Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2017-02-07 13:19:31 EET; 2min 46s ago Docs: https://docs.influxdata.com/influxdb/ Main PID: 14290 (influxd)
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 vi /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 yum install telegraf
Telegraf 使用插件来输入和输出数据。 默认输出插件用于 InfluxDB。 由于我们为 IndexDB 启用了用户身份验证,我们必须修改 Telegraf 的配置文件以指定我们配置的用户名和密码。 在编辑器中打开 Telegraf 配置文件:
sudo vi /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 start telegraf
然后检查服务是否正常运行:
systemctl status telegraf
您将看到以下状态,表明 Telegraf 正在运行。
Output ● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2017-02-07 13:32:36 EET; 3min 27s ago Docs: https://github.com/influxdata/telegraf Main PID: 14412 (telegraf)
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 yum install kapacitor
在编辑器中打开 Kapacitor 配置文件:
sudo vi /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 daemon-reload 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~beta3.x86_64.rpm sudo yum localinstall chronograf-1.2.0~beta3.x86_64.rpm
然后启动 Chronograf 服务:
sudo systemctl start chronograf
注意:如果您使用FirewallD,请将其配置为允许连接到端口8888
:
sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp sudo firewall-cmd --reload
按照教程 How To Set Up a Firewall Using FirewallD on CentOS 7 了解有关 FirewallD 规则的更多信息。
现在您可以通过在网络浏览器中访问 http://your_server_ip:8888
来访问 Chronograf 界面。
您将看到如下图所示的欢迎页面:
输入 InfluxDB 数据库的用户名和密码,然后单击 Connect New Source 继续。
连接后,您将看到主机列表。 单击您的服务器的主机名以打开一个仪表板,其中包含一系列关于您的主机的系统级图表,如下图所示:
现在让我们将 Chronograf 连接到 Kapacitor 以设置警报。 将鼠标悬停在左侧导航菜单的最后一项上,然后单击 Kapacitor 打开配置页面。
使用默认的连接细节; 我们没有为 Kapacitor 配置用户名和密码。 单击连接电容器。 一旦 Kapacitor 成功连接,您将看到 Configure Alert Endpoints 部分出现在表单下方。
Kapacitor 支持多个警报端点:
- 嘻哈聊天
- 行动精灵
- 寻呼机
- 森苏
- 松弛
- SMTP
- 讲话
- 电报
- 胜利者行动
最简单的通讯方式是SMTP,默认选中。 在 From email 字段中填写发送警报的地址,然后单击 Save。 您可以将其余详细信息保留为默认值。
配置到位后,让我们创建一些警报。
第 6 步 — 配置警报
让我们设置一个简单的警报来查找高 CPU 使用率。
将鼠标悬停在左侧导航菜单上,找到 ALERTING 部分,然后单击 Kapacitor Rules。 然后点击新建规则。
在第一部分,通过单击 telegraf.autogen 选择时间序列。 然后从出现的列表中选择 system。 然后选择load1。 您将立即在下面的部分中看到相应的图表。
在图表上方,找到显示 Send Alert where load1 is Greater Than 的字段,然后输入 1.0
作为值。
然后将以下文本粘贴到 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 脚本以启用身份验证。 打开文件/usr/lib/systemd/system/chronograf.service
:
sudo vi /usr/lib/systemd/system/chronograf.service
然后找到 [Service]
部分并编辑以 ExecStart=
开头的行:
/usr/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堆栈的信息。