本页内容
- 准备工作
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 InfluxDB
- 第 3 步 - 创建 InfluxDB 数据库和用户凭证
- 第 4 步 - 安装 Telegraf
- 第 5 步 - 验证 Telegraf 统计数据是否已存储到 InfluxDB
- 第 6 步 - 安装 Grafana
- 第 7 步 - 配置 Grafana 数据源
- 第 8 步 - 配置 Grafana 仪表盘
- 第 9 步 - 配置告警与通知 规则 条件 无数据与错误处理 通知
- 结语
- 规则
- 条件
- 无数据与错误处理
- 通知
TIG(Telegraf、InfluxDB 和 Grafana)栈是一组开源工具平台的缩写,用于简化系统 metrics 的收集、存储、绘图和告警。你可以从一处监控和可视化诸如内存、磁盘空间、登录用户、系统负载、swap 使用率、uptime、运行中的进程等 metrics。该栈中使用的工具如下:
- Telegraf - 是一个开源的 metrics 收集代理,用于从数据库、系统和 IoT 传感器收集和发送数据及事件。它支持各种 output 插件,如 InfluxDB、Graphite、Kafka 等,可将收集到的数据发送到这些目标。
- InfluxDB - 是一个用 Go 语言编写的开源 time-series 数据库。它针对快速、高可用的存储进行了优化,适用于任何涉及大量带时间戳数据的场景,包括 metrics、事件和实时分析。
- Grafana - 是一个开源的数据可视化和监控套件。它支持各种 input 插件,如 Graphite、ElasticSearch、InfluxDB 等。它提供美观的 dashboard 和 metric 分析功能,让你可以可视化和监控任何类型的系统 metrics 和性能数据。
在本教程中,你将学习如何在单台基于 Rocky Linux 8 的服务器上安装和配置 TIG 栈。
准备工作
- 一台运行 Rocky Linux 8 的服务器。
- 一个具有 root 权限的非 sudo 用户。
- 已禁用 SELinux。
- 确保所有内容都已更新。 $ sudo dnf update
一台运行 Rocky Linux 8 的服务器。
一个具有 root 权限的非 sudo 用户。
已禁用 SELinux。
确保所有内容都已更新。
$ sudo dnf update
第 1 步 - 配置防火墙
第一步是配置防火墙。Rocky Linux 自带 Firewalld 防火墙。
检查防火墙是否正在运行。
$ sudo firewall-cmd --state
你应该会看到如下输出。
running
检查当前允许的服务/端口。
$ sudo firewall-cmd --permanent --list-services
它应显示如下输出。
cockpit dhcpv6-client ssh
允许 8086 端口用于运行 InfluxDB,以及 3000 端口用于运行 Grafana Server。
$ sudo firewall-cmd --permanent --add-port=8086/tcp
$ sudo firewall-cmd --permanent --add-port=3000/tcp
重新加载防火墙。
$ sudo systemctl reload firewalld
第 2 步 - 安装 InfluxDB
要安装 InfluxDB,首先需要为它创建一个 repo 文件。
创建并打开 influxdb.repo 文件进行编辑。
$ sudo nano /etc/yum.repos.d/influxdb.repo
将以下代码粘贴到其中。
[influxdb] name = InfluxDB Repository - RHEL $releasever baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable enabled = 1 gpgcheck = 1 gpgkey = https://repos.influxdata.com/influxdb.key
按 Ctrl + X 并在提示时输入 Y 来保存文件。
你可以选择安装 InfluxDB 1.8.x 或 2.0.x。不过,最好使用最新版本。安装 InfluxDB。
$ sudo dnf install influxdb2
启动并启用 InfluxDB 服务。
$ sudo systemctl enable influxdb
$ sudo systemctl start influxdb
第 3 步 - 创建 InfluxDB 数据库和用户凭证
要存储来自 Telegraf 的数据,你需要设置 Influx 数据库和用户。
InfluxDB 自带一个名为 influx 的命令行工具,用于与 InfluxDB 服务器交互。可以把 influx 看作是 mysql 命令行工具。
运行以下命令来执行 Influx 的初始配置。
$ influx setup
> Welcome to InfluxDB 2.0!
? Please type your primary username navjot
? Please type your password ***************
? Please type your password again ***************
? Please type your primary organization name howtoforge
? Please type your primary bucket name tigstack
? Please type your retention period in hours, or 0 for infinite 360
? Setup with these parameters?
Username: navjot
Organization: howtoforge
Bucket: tigstack
Retention Period: 360h0m0s
Yes
> Config default has been stored in /home/username/.influxdbv2/configs.
User Organization Bucket
navjot howtoforge tigstack
你需要设置初始用户名、密码、组织名称、用于存储数据的主 bucket 名称,以及该数据的保留期限(以小时计)。
你也可以通过浏览器访问 URL http://

你应该会看到如下 dashboard。

初始设置过程会创建一个默认 token,它对数据库中所有组织拥有完全的读写权限。出于安全目的,你需要一个新的 token,它仅连接到我们想要连接的组织和 bucket。
要创建新 token,请点击左侧边栏中的 Data 选项。接着,点击 Tokens 部分。

在此,你将看到我们在初始配置时创建的默认 token。点击 Generate Token 按钮并选择 Read/Write Token 选项,以弹出一个新的浮层窗口。
为 Token 命名,并在 Read 和 Write 部分下都选择我们创建的默认 bucket。

点击 Save 完成 token 的创建。点击新创建 token 的名称,会弹出一个显示 token 值的窗口。先将其保存下来,因为我们稍后会用到它。
至此完成了 InfluxDB 的安装和配置。接下来,我们需要安装 Telegraf。
第 4 步 - 安装 Telegraf
Telegraf 和 InfluxDB 共享同一个 repository。这意味着你可以直接安装 Telegraf。
$ sudo dnf install telegraf
启用并启动 Telegraf 服务。
$ sudo systemctl enable telegraf
$ sudo systemctl start telegraf
Telegraf 是一个由插件驱动的代理,拥有 4 种类型的插件:
- Input 插件收集 metrics。
- Processor 插件转换、修饰和过滤 metrics。
- Aggregator 插件创建并聚合 metrics。
- Output 插件定义 metrics 发送的目标位置,包括 InfluxDB。
Telegraf 将所有这些插件的配置存储在文件 /etc/telegraf/telegraf.conf 中。第一步是通过启用 influxdb_v2 output 插件将 Telegraf 连接到 InfluxDB。打开文件 /etc/telegraf/telegraf.conf 进行编辑。
$ sudo nano /etc/telegraf/telegraf.conf
找到 [[outputs.influxdb_v2]] 这一行,去掉其前面的 # 以取消注释。按如下方式修改其下方的代码。
[[outputs.influxdb_v2]] urls = ["http://localhost:8086"] token = "$INFLUX_TOKEN" organization = "howtoforge" bucket = "tigstack"
将之前保存的 InfluxDB token 值替换到上面代码中的 $INFLUX_TOKEN 变量处。
搜索 INPUT PLUGINS 这一行,你将看到默认启用的以下 input 插件。
# Read metrics about cpu usage [[inputs.cpu]] ## Whether to report per-cpu stats or not percpu = true ## Whether to report total system cpu stats or not totalcpu = true ## If true, collect raw CPU time metrics collect_cpu_time = false ## If true, compute and report the sum of all non-idle CPU states report_active = false # Read metrics about disk usage by mount point [[inputs.disk]] ## By default stats will be gathered for all mount points. ## Set mount_points will restrict the stats to only the specified mount points. # mount_points = ["/"] ## Ignore mount points by filesystem type. ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] [[inputs.diskio]] .... .... # Get kernel statistics from /proc/stat [[inputs.kernel]] # no configuration # Read metrics about memory usage [[inputs.mem]] # no configuration # Get the number of processes and group them by status [[inputs.processes]] # no configuration # Read metrics about swap memory usage [[inputs.swap]] # no configuration # Read metrics about system load & uptime [[inputs.system]] ## Uncomment to remove deprecated metrics.
你可以根据需要配置额外的 input 插件,包括 Apache Server、Docker 容器、Elasticsearch、iptables 防火墙、Kubernetes、Memcached、MongoDB、MySQL、Nginx、PHP-fpm、Postfix、RabbitMQ、Redis、Varnish、Wireguard、PostgreSQL 等。
完成后,按 Ctrl + X 并在提示时输入 Y 来保存文件。
应用更改完成后,重启 Telegraf 服务。
$ sudo systemctl restart telegraf
第 5 步 - 验证 Telegraf 统计数据是否已存储到 InfluxDB
在继续之前,你需要验证 Telegraf 统计数据的收集是否正确并送入 InfluxDB。在浏览器中打开 InfluxDB UI 并访问 Data >> Buckets >> tigstack。你应该会看到如下页面。

点击 bucket 名称,然后点击 _measurement 过滤器中的某个值,并随其出现持续点击其他值。完成后,点击 Submit 按钮。你应该会在顶部看到一张图表。

这应能确认数据正在被正确传递。
第 6 步 - 安装 Grafana
创建并打开文件 /etc/yum.repos.d/grafana.repo 进行编辑。
$ sudo nano /etc/yum.repos.d/grafana.repo
将以下代码粘贴到其中。
[grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt
按 Ctrl + X 并在提示时输入 Y 来保存文件。
安装 Grafana。
$ sudo dnf install grafana
启动并启用 Grafana 服务。
$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server
第 7 步 - 配置 Grafana 数据源
在浏览器中访问 URL http://

使用默认用户名 admin 和密码 admin 登录。接着,你需要设置一个新的默认密码。

你将看到如下 Grafana 主页。点击 Add your first data source 按钮。

点击 InfluxDB 按钮。

在下一页中,从下拉菜单中选择 Flux 作为查询语言。你也可以使用 InfluxQL 作为查询语言,但配置起来更复杂,因为它默认仅支持 InfluxDB v1.x。Flux 支持 InfluxDB v2.x,并且更容易设置和配置。

输入以下值。
URL: http://localhost:8086 Access: Server Basic Auth Details User: navjot Password:

InfluxDB Details Organization: howtoforge Token: Default Bucket: tigstack

点击 Save and test 按钮,你应该会看到一条确认信息,表明设置成功。

第 8 步 - 配置 Grafana 仪表盘
下一步是配置 Grafana 仪表盘。点击 + 号并选择 Dashboards,以打开仪表盘创建界面。

在下一页中,点击 Add an empty panel 按钮以打开如下界面。

将以下代码粘贴到 Query Editor 中。这
from(bucket: "NAMEOFYOUBUCKET")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cpu")
|> filter(fn: (r) => r["_field"] == "usage_idle")
|> filter(fn: (r) => r["cpu"] == "cpu-total")
|> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 }))
|> toFloat()
|> yield(name: "mean")
使用我们在上面用到的 bucket 名称。以及主机名,你可以从文件 /etc/hostname 中获取。
上述代码将计算 CPU Usage 并为其生成图表。为 Panel 设置一个标题。点击 Query inspector 按钮以验证查询是否成功运行。对结果满意后,点击 Apply 按钮继续。

你也可以通过右侧 Axis 部分下的 Label 字段为坐标轴命名。

点击 Apply 按钮以保存该 panel。
完成后,点击 Save Dashboard 按钮。

为仪表盘命名,然后点击 Save 完成。

它会打开该仪表盘,然后点击 Add Panel 按钮以创建另一个 panel。

重复该过程,为 RAM Usage 创建另一个 panel。
from(bucket: "NAMEOFYOUBUCKET") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "mem") |> filter(fn: (r) => r["_field"] == "used_percent") |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST") |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false) |> yield(name: "mean")
并使用以下代码来显示 HDD Usage。
from(bucket: "NAMEOFYOURBUCKET")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "disk")
|> filter(fn: (r) => r["_field"] == "used")
|> filter(fn: (r) => r["path"] == "/")
|> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(fn: (r) => ({ r with _value: r._value / 1000000.0 }))
|> toFloat()
|> yield(name: "mean")
你可以创建数量不限的 panel。
上述代码基于 Flux Scripting 语言。所幸,你不需要学习该语言就能编写查询。你可以从 InfluxDB URL 生成查询。'尽管学习该语言有助于优化查询。
你需要回到 InfluxDB dashboard 并打开 Explore 页面以获取查询。
点击 bucket 名称,然后点击 _measurement 过滤器中的某个值,并随其出现持续点击其他值。完成后,点击 Script Editor 按钮,你应该会看到如下页面。图表也应随之更新。


复制所显示的查询,现在你就可以在 Grafana dashboard 中使用它来构建你的图表。
第 9 步 - 配置告警与通知
设置监控的主要目的是在数值超出某个阈值时及时收到告警。
第一步是设置你希望接收告警的目标位置。你可以通过 Email、Slack、Kafka、Google Hangouts Chat、Microsoft Teams、Telegram 等方式接收通知。
在本教程中,我们将启用邮件通知。要设置 Email 通知,我们需要先配置 SMTP 服务。打开 /etc/grafana/grafana.ini 文件以配置 SMTP。
$ sudo nano /etc/grafana/grafana.ini
在其中找到 [smtp] 这一行。取消以下行的注释,并输入自定义 SMTP 服务器的值。
[smtp] enabled = true host = email-smtp.us-west-2.amazonaws.com:587 user = YOURUSERNAME # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" password = YOURUSERPASSWORD ;cert_file = ;key_file = ;skip_verify = false from_address = [email protected] from_name = HowtoForge Grafana # EHLO identity in SMTP dialog (defaults to instance_name) ;ehlo_identity = dashboard.example.com # SMTP startTLS policy (defaults to 'OpportunisticStartTLS') ;startTLS_policy = NoStartTLS
按 Ctrl + X 并在提示时输入 Y 来保存文件。
重启 Grafana 服务器以应用设置。
$ sudo systemctl restart grafana-server
打开 Grafana 页面,点击 Alert 图标,然后点击 Notification channels。

点击 Add Channel 按钮。

输入详细信息以设置 Email 通知渠道。

点击 Test 以查看邮件设置是否正常工作。完成后点击 Save。
既然我们已经设置好通知渠道,就需要设置何时接收这些邮件的告警。要设置告警,你需要回到仪表盘 panel。
点击 Dashboard >> Manage 以打开 Dashboard 页面。

点击我们刚创建的仪表盘,你将看到其包含不同 panel 的主页。要编辑 panel,点击 panel 的名称,会弹出一个下拉菜单。点击其中的 Edit 链接继续。

点击 Alert Panel,然后点击 Create Alert 按钮以设置一个新的告警。

你现在可以配置 Grafana 发送告警所依据的条件。

规则
- Name - 为告警输入一个描述性的名称
- Evaluate every - 指定 Grafana 应多频繁地评估该告警。它也称为评估间隔(evaluation interval)。你可以在此处设置任意你想要的值。
- For - 指定查询需要违反阈值多长时间后才会触发告警。根据你的需要更改时间。
条件
Grafana 基于以下格式的查询来决定何时触发告警。
avg() OF query(A, 15m, now) IS BELOW 14
- avg() 控制如何将每个序列的值缩减为可与阈值比较的值。你可以点击函数名以选择不同的函数,例如 avg()、min()、max()、sum()、count() 等。
- query(A, 15m, now) 括号中的字母定义了要从 Metrics 选项卡执行哪个查询。接下来的两个参数定义了时间范围。15m, now 表示从 15 分钟前到现在。
- IS BELOW 14 定义阈值的类型和阈值数值。你可以点击 IS BELOW 以选择不同的阈值类型。

query(A, 15m, now) 括号中的字母定义了要从 Metrics 选项卡执行哪个查询。接下来的两个参数定义了时间范围。15m, now 表示从 15 分钟前到现在。
IS BELOW 14 定义阈值的类型和阈值数值。你可以点击 IS BELOW 以选择不同的阈值类型。

你可以通过点击第一个条件下方的 + 按钮在下方添加第二个条件。目前,在多个条件之间只能使用 AND 和 OR 运算符。
无数据与错误处理
你可以通过以下条件配置 Grafana 如何处理返回无数据或仅返回 null 值的查询:
- No Data - 将规则状态设置为 NoData
- Alerting - 将规则状态设置为 Alerting
- Keep Last State - 保持当前的规则状态,无论它是什么
- Ok - 将告警规则状态设置为 Ok,也就是说即使一切正常你也会收到告警。
你可以告诉 Grafana 如何处理执行或超时错误。
- Alerting - 将规则状态设置为 Alerting
- Keep Last State - 保持当前的规则状态,无论它是什么
通知
你可以指定告警规则通知,并附带一条关于该规则的详细信息。你可以在消息中添加任何内容,或包含你想添加的与告警相关的信息。
- Send to - 选择我们之前配置用于发送告警的通知渠道。
- Message - 输入一条随告警一起发送的文本消息。
- Tags - 指定要在通知中包含的标签列表(key/value)。并非所有通知渠道(包括 Email)都支持它们,因此你可以将其留空。它们通常用于在邮件中发送变量及其值。
完成后,点击 Test rule 按钮以查看一切是否正常工作。点击右上角的 Apply 按钮完成告警的添加。
你现在应该开始收到邮件中的告警了。
结语
至此,关于在基于 Rocky Linux 8 的服务器上安装和配置 TIG 栈的教程就结束了。如果你有任何问题,请在下方评论中留言。