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。
如下图所示,可切换为中文界面:

先新建与 prometheus 的连接



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





安全认证
默认情况下,只有登录 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 会要求先登录:

相应的 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 端证书
创建一个 OpenSSL 配置文件,以便在生成证书时指定 SAN(Subject Alternative Name)。
创建一个文件,比如叫 san.cnf。内容如下:
生成证书请求时使用 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 拉取数据。适用于临时任务和批量任务的监控场景。
安装 pushgateway
在 prometheus 中配置 pushgateway
编辑 /usr/local/etc/prometheus.yml 文件,增加如下内容:
临时任务举例
假设有一个查看僵尸进程的管理脚本,如下:
第一行用于检查僵尸进程数量,第二行将僵尸进程计数发送到 Pushgateway。(注意:发送的数据每行必须以换行符 \n 结尾)
告警
Prometheus 的告警依赖 Alertmanager 组件。此处示例以 Jail Exporter 为例(安装配置较为简单,参见上文),同时需要在 /boot/loader.conf 文件中写入 kern.racct.enable=1 以开启系统记账功能。
使用 pkg 安装:
配置 alertmanager 告警路由规则
这里只展示简单的 email 方式,alertmanager 也支持其它方式通知。
其中 global 指定全局配置,这里指定了 smtp 服务。route 指定发送路由规则。receivers 指定接收者信息。
配置告警规则
编写规则文件,如 /usr/local/etc/prometheus/alert.rules.yml 文件:
alert 指定告警的名字。
expr 指定告警触发条件表达式,这里是名为 dox 的 jail。如果没有 jail id,则触发告警。
for 指触发告警的等待时间,此处为 5 分钟。如果在 5 分钟内问题得到解决,则不会发送告警。
在 prometheus 配置文件中引入规则文件,并连接 alertmanager
重启 prometheus 和 alertmanager
测试
关闭 jail 以触发规则:
5 分钟后发送告警邮件。
再开启 jail:
告警规则重置为非活动。
远程存储
prometheus 的数据支持远程存储。下面以 InfluxDB 为例。
请读者参考本书其他章节,自行安装配置 InfluxDB。
请注意 InfluxDB 的服务名是 influxd。
出于安全考量,应该修改 /usr/local/etc/influxd.conf,在 http 段开启 http 认证:
创建 InfluxDB 用户和数据库
用 influx 进入命令行客户端
重启 InfluxDB 即可。
配置 prometheus
编辑 /usr/local/etc/prometheus.yml
FreeBSD Ports 中的 InfluxDB 为 v1 版本,请使用 v1 API 进行配置。
重启 prometheus 服务即可。
验证
可使用 influx 命令查询数据库中的数据指标:
参考文献
最后更新于
这有帮助吗?