17.8 Prometheus 监控部署

框架

框架

Prometheus 监控部署框架如图所示。

  • Prometheus 是整个监控系统的中心

  • Grafana 用于将监控数据可视化显示

  • Exporter 用于数据采集;Prometheus 支持多种 Exporter,可使用 pkg search -L name -D prometheus 查找

  • Alertmanager 用于处理告警信息

  • Prometheus 可以配置多种远程存储

注意:Prometheus、Grafana、Exporter、Alertmanager 等组件不需要部署在同一台机器或相同操作系统上,Exporter 应安装在被监控的节点上。以下示例中,Prometheus、Grafana、Alertmanager 安装在同一台机器上,Exporter 根据需要单独部署。

此外,如果遇到服务启动问题,可先查看 /var/log/daemon.log。Prometheus 配置文件大部分采用 YAML 格式,请注意缩进。若是 Prometheus,可使用 promtool check 命令检查配置文件是否正确。

安装基本工具

安装 prometheus

使用 pkg 安装:

或者使用 ports 安装:

服务项

安装 grafana

使用 pkg 安装:

或者使用 ports 安装:

服务项

安装 node_exporter

使用 pkg 安装:

或者使用 ports 安装:

服务项

配置

prometheus

Prometheus 的主要配置文件为 /usr/local/etc/prometheus.yml,内容如下:

scrape_configs 用于配置采集数据的目标节点,这里默认的 targets: ["localhost:9090"] 指 Prometheus 服务本身。

现在增加用于监控主机信息的 node_exporter,在 scrape_configs 下写入如下:

重启 Prometheus:

这样就向 Prometheus 增加了一个新的监控节点,任务名为 node_exporter_local[] 中可添加多个主机。

Prometheus 提供 Web 界面(默认端口:9090),可查看监控目标信息如下:

监控目标

Graph 页:可以查看各项监控指标,支持表达式。例如:

空闲内存示例

熟悉界面后会发现,直接查看数据或 Panel 并不方便。此时可使用 Grafana 以更友好的方式展示数据。

grafana

在浏览器中打开 Grafana 的 Web 页面(默认端口为 3000),默认用户名为 admin,密码为 admin

如下图所示,可切换为中文界面:

grafana 切换中文界面

先新建与 prometheus 的连接

连接 prometheus 1
连接 prometheus 2
连接 prometheus 3

用创建的连接建立仪表板 (导入预设仪表板)

建仪表盘 1
建仪表盘 2
建仪表盘 3
建仪表盘 4
建仪表盘 5

安全认证

默认情况下,只有登录 Grafana 需要密码。各组件之间以 HTTP 连接,例如可通过访问 http://ip:9100/ 直接获取 Node Exporter 的监控数据,Prometheus 可通过 http://ip:9090/ 直接访问。

在生产环境中直接暴露这些信息存在安全风险,因此需要进行安全认证。

基本认证

prometheus 的 basic_auth

  • 编辑 /usr/local/etc/prometheus_webconfig.yml,格式如下

第二行中,冒号前为用户名,冒号后为密码的 bcrypt 哈希值——此处使用 sttr 工具生成,也可使用其他工具。假设密码为 prometheuspassword

这里的 % 是终端在未换行时显示的输出符号,可忽略。

  • 编辑 /usr/local/etc/prometheus.yml 文件,在 prometheus 的配置下加入下面三行:

请注意缩进,完整示例如下:

  • 修改 prometheus 启动配置,并重启

访问 http://ip:9090/ 时,Prometheus 会要求先登录:

登录 prometheus

相应的 grafana 在连接数据源时要设置相应认证信息

exporter 的 basic_auth

下面以 node_exporter 为例

  • 编辑 /usr/local/etc/node_exporter_webconfig.yml,格式如下

  • 修改 node_exporter 启动配置,并重启

  • 编辑 /usr/local/etc/prometheus.yml,如下:

重启 prometheus

CA 证书认证

对安全要求很高的情况下,还可以使用 CA 证书认证方式加强安全,但是这不是每个 exporter 都支持这个认证方式。

以下仍以 Node Exporter 为例,假设其节点 IP 为 10.0.11.1。

生成证书

生成 prometheus 端证书

生成 node_exporter 端证书

  1. 创建一个 OpenSSL 配置文件,以便在生成证书时指定 SAN(Subject Alternative Name)。

创建一个文件,比如叫 san.cnf。内容如下:

  1. 生成证书请求时使用 SAN 配置

使用这个配置文件来生成证书签名请求(CSR)和证书。

指定 SAN(Subject Alternative Name)非常重要,否则可能无法访问。也可以在 Prometheus 中配置忽略证书验证,但这和安全相悖,所以这里不再提及。

配置 prometheus 和 node_exporter

编辑 /usr/local/etc/node_exporter_webconfig.yml 文件,如下:

最后一句重要,只有这个选项才是安全的。

修改 /usr/local/etc/prometheus.yml 文件如下:

这两个文件在 基本认证 中已经提及,用法相同。

请注意密钥和证书文件的存放位置及权限设置,应只赋予最低访问权限。

重启 prometheus 和 node_exporter 即可。

pushgateway

上述介绍均为 Pull 方式,由 Prometheus 从各个 Exporter 拉取数据;Pushgateway 则允许监测点主动推送数据到 Pushgateway,再由 Prometheus 从 Pushgateway 拉取数据。适用于临时任务和批量任务的监控场景。

  1. 安装 pushgateway

  1. 在 prometheus 中配置 pushgateway

编辑 /usr/local/etc/prometheus.yml 文件,增加如下内容:

  1. 临时任务举例

假设有一个查看僵尸进程的管理脚本,如下:

第一行用于检查僵尸进程数量,第二行将僵尸进程计数发送到 Pushgateway。(注意:发送的数据每行必须以换行符 \n 结尾)

告警

Prometheus 的告警依赖 Alertmanager 组件。此处示例以 Jail Exporter 为例(安装配置较为简单,参见上文),同时需要在 /boot/loader.conf 文件中写入 kern.racct.enable=1 以开启系统记账功能。

  1. 使用 pkg 安装:

  1. 配置 alertmanager 告警路由规则

这里只展示简单的 email 方式,alertmanager 也支持其它方式通知。

其中 global 指定全局配置,这里指定了 smtp 服务。route 指定发送路由规则。receivers 指定接收者信息。

  1. 配置告警规则

编写规则文件,如 /usr/local/etc/prometheus/alert.rules.yml 文件:

alert 指定告警的名字。

expr 指定告警触发条件表达式,这里是名为 dox 的 jail。如果没有 jail id,则触发告警。

for 指触发告警的等待时间,此处为 5 分钟。如果在 5 分钟内问题得到解决,则不会发送告警。

  1. 在 prometheus 配置文件中引入规则文件,并连接 alertmanager

  1. 重启 prometheus 和 alertmanager

  1. 测试

关闭 jail 以触发规则:

5 分钟后发送告警邮件。

再开启 jail:

告警规则重置为非活动。

远程存储

prometheus 的数据支持远程存储。下面以 InfluxDB 为例。

  1. 请读者参考本书其他章节,自行安装配置 InfluxDB。

请注意 InfluxDB 的服务名是 influxd

出于安全考量,应该修改 /usr/local/etc/influxd.conf,在 http 段开启 http 认证:

  1. 创建 InfluxDB 用户和数据库

influx 进入命令行客户端

重启 InfluxDB 即可。

  1. 配置 prometheus

编辑 /usr/local/etc/prometheus.yml

FreeBSD Ports 中的 InfluxDB 为 v1 版本,请使用 v1 API 进行配置。

重启 prometheus 服务即可。

  1. 验证

可使用 influx 命令查询数据库中的数据指标:

参考文献

最后更新于

这有帮助吗?