FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD 从入门到追忆(第三版:草稿)
  • 编辑日志
  • 目录
  • 致谢
  • 初版序言:好望角与塔吊
  • 再版序言:回到复制粘贴,面向教程本身
  • 三版序言:且有大觉而后知此其大梦也(草稿)
  • 前言
  • 第 1 章 FreeBSD 初见
    • 第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD
    • 第 1.2 节 FreeBSD 简史
    • 第 1.3 节 谁在使用 FreeBSD?
    • 第 1.4 节 为什么要使用 FreeBSD?
    • 第 1.5 节 Linux 用户迁移指南
    • 第 1.6 节 FreeBSD 桌面发行版
  • 第 2 章 安装 FreeBSD
    • 第 2.1 节 安装前准备(新手入门版本)
    • 第 2.2 节 FreeBSD 安装图解(新手入门版本)
    • 第 2.3 节 UNIX 基础(新手入门版本)
    • 第 2.4 节 命令行基础(新手入门版本)
    • 第 2.5 节 安装 FreeBSD——基于 VMware Workstation Pro
    • 第 2.6 节 安装 FreeBSD——基于 Virtual Box
    • 第 2.7 节 手动安装双系统(先安装 FreeBSD)
    • 第 2.8 节 手动安装双系统(后安装 FreeBSD)
    • 第 2.9 节 安装 FreeBSD——基于 Apple M1 & Parallels Desktop 20
    • 第 2.10 节 安装 FreeBSD——基于 Apple M1 & VMware Fusion Pro
    • 第 2.11 节 Qemu 安装 RISC-V FreeBSD(基于 x86 Windows)
    • 第 2.12 节 云服务器安装 FreeBSD(基于腾讯云轻量云)
    • 第 2.13 节 安装 FreeBSD——基于 Hyper-V
  • 第 3 章 包管理器与 FreeBSD 系统更新
    • 第 3.1 节 FreeBSD 镜像站现状
    • 第 3.2 节 FreeBSD 换源方式
    • 第 3.3 节 gitup 的用法
    • 第 3.4 节 通过 pkg 包管理器安装二进制包
    • 第 3.5 节 通过 Ports 以源代码方式安装软件
    • 第 3.6 节 通过 DVD 安装软件
    • 第 3.7 节 通过 freebsd-update 更新 FreeBSD
    • 第 3.8 节 通过源代码更新 FreeBSD
    • 第 3.9 节 使用 pkgbase 更新 FreeBSD
  • 第 4 章 桌面环境
    • 第 4.1 节 显卡驱动(英特尔、AMD)
    • 第 4.2 节 显卡驱动(NVIDIA)
    • 第 4.3 节 GNOME
    • 第 4.4 节 Mate
    • 第 4.5 节 Xfce
    • 第 4.6 节 Cinnamon
    • 第 4.7 节 Lumina
    • 第 4.8 节 LXQt
    • 第 4.9 节 bspwm
    • 第 4.10 节 IceWM
    • 第 4.11 节 Budgie
    • 第 4.12 节 i3wm
    • 第 4.13 节 CDE
    • 第 4.14 节 Hyprland
    • 第 4.15 节 LXDE
    • 第 4.16 节 Window Maker
    • 第 4.17 节 Fluxbox
    • 第 4.18 节 KDE6
    • 第 4.19 节 主题美化
    • 第 4.20 节 远程桌面
    • 第 4.21 节 root 登录桌面
  • 第 5 章 中文环境配置
    • 第 5.1 节 本地化环境变量
    • 第 5.2 节 Fcitx 输入法框架
    • 第 5.3 节 IBus 输入法框架
    • 第 5.4 节 五笔输入法
    • 第 5.5 节 Firefox 与 Chromium
    • 第 5.6 节 QQ(Linux 版)
    • 第 5.7 节 更换字体
    • 第 5.8 节 金山 WPS(Linux 版)
    • 第 5.9 节 压缩与解压
    • 第 5.10 节 微信(Linux 版)
  • 第 6 章 多媒体与外设
    • 第 6.1 节 声卡
    • 第 6.2 节 蓝牙
    • 第 6.3 节 打印机
    • 第 6.4 节 触摸板
    • 第 6.5 节 音频播放器
    • 第 6.6 节 视频播放器
    • 第 6.7 节 音频图形图像处理
  • 第 7 章 代理服务器
    • 第 7.1 节 HTTP 代理
    • 第 7.2 节 V2ray
    • 第 7.3 节 Mihomo(原 Clash)
    • 第 7.4 节 OpenVPN
  • 第 8 章 账户与权限
    • 第 8.1 节 sudo 与 doas
    • 第 8.2 节 用户与组
    • 第 8.3 节 用户权限
  • 第 9 章 Jail
    • 第 9.1 节 Jail 配置
    • 第 9.2 节 Jail 更新
    • 第 9.3 节 使用 Qjail 管理 Jail
  • 第 10 章 虚拟化
    • 第 10.1 节 通过 BVCP 以网页管理 BHyve
    • 第 10.2 节 使用 bhyve 安装 Windows 11(vm-bhyve)
  • 第 11 章 计算机概论
    • 第 11.1 节 存储卡参数简介与测试
    • 第 11.2 节 总线接口与协议
    • 第 11.3 节 网络基础
    • 第 11.4 节 操作系统
    • 第 11.5 节 MySQL 数据库
  • 第 12 章 引导恢复与 TTY 配置
    • 第 12.1 节 单用户模式与密码重置
    • 第 12.2 节 配置 rEFInd(双系统用)
    • 第 12.3 节 FreeBSD 中文 TTY 控制台
    • 第 12.4 节 引导界面与控制台界面
    • 第 12.5 节 Grub & UEFI 与 efibootmgr
  • 第 13 章 FreeBSD 系统管理
    • 第 13.1 节 FreeBSD src 源码概览
    • 第 13.2 节 FreeBSD 系统概览
    • 第 13.3 节 bsdconfig 系统配置工具
    • 第 13.4 节 SSH 配置与相关工具
    • 第 13.5 节 BSD init 管理服务
    • 第 13.6 节 利用脚本自动生成 BSDlibc 库文本
  • 第 14 章 网络管理
    • 第 14.1 节 TCP 堆栈
    • 第 14.2 节 WiFi
    • 第 14.3 节 USB 网络共享(USB tethering)
    • 第 14.4 节 USB 网卡 & 以太网卡
  • 第 15 章 FreeBSD 防火墙
    • 第 15.1 节 网络参数配置命令
    • 第 15.2 节 Packet Filter(PF)
    • 第 15.3 节 IPFilter(IPF)
    • 第 15.4 节 ipfirewall(IPFW)
    • 第 15.5 节 Fail2Ban(基于 IPFW、PF、IPF)
  • 第 16 章 服务器
    • 第 16.1 节 FTP 服务器
    • 第 16.2 节 MinIO 对象存储服务
    • 第 16.3 节 Gitlab-EE
    • 第 16.4 节 时间服务
    • 第 16.5 节 WildFly
    • 第 16.6 节 Rsync 同步服务
    • 第 16.7 节 Samba 服务器
    • 第 16.8 节 NFS 服务器
    • 第 16.9 节 Webmin
  • 第 17 章 网络服务器
    • 第 17.1 节 Apache
    • 第 17.2 节 Nginx
    • 第 17.3 节 PHP 8.X
    • 第 17.4 节 MySQL 5.X
    • 第 17.5 节 MySQL 8.X
    • 第 17.6 节 NextCloud——基于 PostgreSQL
    • 第 17.7 节 Telegraf+InfluxDB+Grafana 监控平台
    • 第 17.8 节 PostgreSQL 与 pgAdmin4
    • 第 17.9 节 AList
    • 第 17.10 节 prometheus 监控部署
    • 第 17.11 节 MongoDB 80
    • 第 17.12 节 Tomcat
    • 第 17.13 节 Caddy
    • 第 17.14 节 OnlyOffice(基于 PostgreSQL)
    • 第 17.15 节 Zabbix 监控(基于 PostgreSQL)
  • 第 18 章 嵌入式(树莓派、RISCV)
    • 第 18.1 节 树莓派简介与配件选用
    • 第 18.2 节 树莓派安装 FreeBSD
    • 第 18.3 节 树莓派 FreeBSD 配置
    • 第 18.4 节 树莓派与 Linux 兼容层
    • 第 18.5 节 树莓派与 OpenBSD
    • 第 18.6 节 在 RISCV 开发板上安装 OpenBSD
    • 第 18.7 节 Radxa X4(x86)
  • 第 19 章 文学故事
    • 第 19.1 节 BSD 与哲学家 George Berkeley(乔治·贝克莱)
    • 第 19.2 节 加州大学伯克利分校与“Fiat Lux”(要有光)
  • 第 20 章 游戏与科学
    • 第 20.1 节 游戏
    • 第 20.5 节 科研与专业工具
    • 第 20.6 节 我的世界(Minecraft)
  • 第 21 章 Linux 兼容层
    • 第 21.1 节 Linux 兼容层实现
    • 第 21.2 节 Linux 兼容层——基于 CentOS(FreeBSD Port)
    • 第 21.3 节 Linux 兼容层——基于 Ubuntu/Debian
    • 第 21.4 节 Linux 兼容层——基于 ArchLinux bootstrap
    • 第 21.5 节 Linux 兼容层——基于 archlinux-pacman
    • 第 21.6 节 Linux 兼容层——基于 OpenSUSE
    • 第 21.7 节 Linux 兼容层——基于 Gentoo Linux
    • 第 21.8 节 Linux 兼容层——基于 Rocky Linux
    • 第 21.9 节 Linux 兼容层——基于 Slackware Linux
    • 第 21.10 节 RockyLinux 兼容层(FreeBSD Port)
    • 第 21.11 节 Linux 兼容层——基于 Deepin
    • 第 21.12 节 Linux 兼容层与 Jail
    • 第 21.13 节 Linux 兼容层故障排除与未竟事宜
  • 第 22 章 编程环境与软件开发
    • 第 22.1 节 如何报告 Bug
    • 第 22.2 节 如何开发一个 Port
    • 第 22.3 节 如何参与 FreeBSD 开发
    • 第 22.4 节 C/C++ 环境的配置
    • 第 22.5 节 Java 环境的配置
    • 第 22.6 节 QT 环境的配置
    • 第 22.7 节 Python 与 VS Code
    • 第 22.8 节 Rust/Go 环境的配置
    • 第 22.9 节 Shell
    • 第 22.10 节 通过 IDA 7 调试 FreeBSD
    • 第 22.11 节 如何订阅 FreeBSD 的邮件列表
    • 第 22.12 节 code-server 和 clangd
    • 第 22.13 节 Node.js
  • 第 23 章 文件系统与磁盘管理
    • 第 23.1 节 自动挂载文件系统
    • 第 23.2 节 ZFS
    • 第 23.3 节 磁盘扩容
    • 第 23.4 节 NTFS & Fat32
    • 第 23.5 节 Swap 交换分区的设置
    • 第 23.6 节 Linux 文件系统
    • 第 23.7 节 ZFS 磁盘加解密
  • 第 24 章 DragonFly BSD
    • 第 24.1 节 DragonFly BSD 概述
    • 第 24.2 节 安装 DragonFly BSD
    • 第 24.3 节 配置 DragonFly BSD
  • 第 25 章 TwinCAT/BSD
    • 第 25.1 节 TwinCAT/BSD 系统安装与基本配置
    • 第 25.2 节 TwinCAT/BSD 开发环境配置
  • 第 26 章 OpenBSD
    • 第 26.1 节 OpenBSD 概述
    • 第 26.2 节 安装 OpenBSD
    • 第 26.3 节 配置 OpenBSD
    • 第 26.4 节 OpenBSD 包管理器
    • 第 26.5 节 桌面与其他软件
  • 第 27 章 NetBSD
    • 第 27.1 节 NetBSD 概述
    • 第 27.2 节 NetBSD 安装图解
    • 第 27.3 节 NetBSD 换源与包管理器
    • 第 27.4 节 桌面与中文环境常用软件
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • 框架
  • 安装基本工具
  • 安装 prometheus
  • 安装 grafana
  • 安装 node_exporter
  • 配置
  • prometheus
  • grafana
  • 安全认证
  • 基本认证
  • ca 证书认证
  • pushgateway
  • 告警
  • 远程存储
  • 参考文献
在GitHub上编辑
导出为 PDF
  1. 第 17 章 网络服务器

第 17.10 节 prometheus 监控部署

上一页第 17.9 节 AList下一页第 17.11 节 MongoDB 80

最后更新于15天前

框架

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。配置文件大部分为 yaml 格式,注意缩进。如果是 prometheus,可以用 promtool check 先检查正确与否。

安装基本工具

安装 prometheus

# pkg install prometheus2

或者:

# cd /usr/ports/net-mgmt/prometheus2/ 
# make install clean

服务项

# service prometheus enable
# service prometheus start

安装 grafana

# pkg install grafana

或者:

# cd /usr/ports/www/grafana/ 
# make install clean

服务项

# service grafana enable
# service grafana start

安装 node_exporter

# pkg install node_exporter

或者:

# cd /usr/ports/sysutils/node_exporter/ 
# make install clean

服务项

# service node_exporter enable
# service node_exporter start

配置

prometheus

prometheus 的主要配置文件是 /usr/local/etc/prometheus.yml,在其中找到:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

scrape_configs 是用于配置采集数据的结点,这里默认的 targets: ["localhost:9090"] 是 prometheus 服务本身。

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

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node_exporter_local"
    static_configs:
      - targets: ["localhost:9100"]

重启 prometheus:

service prometheus restart

这样就向 prometheus 增加了一个新的监控节点,任务名是 node_exporter_local。别外 [] 中可以加入多个主机。

prometheus 提供 web 界面 (默认端口号:9090),查看监控目标信息如下:

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

稍微熟悉一下界面,就可以发现查看数据、查看 panel 等并不方便。这时就要用到 grafana,以更友好的方式展示数据。

grafana

浏览器打开 grafana 的 web 页(默认端口 3000):默认用户名 admin,密码 admin。如下图可切换中文界面

先新建与 prometheus 的连接

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

安全认证

在默认情况下,只有登录 grafana 需要密码。各部件间以 http 连接:如 node_exporter 可以通过访问 http://ip:9100/ 直接获取所以监控数据;prometheus 可以通过 http://ip:9090/ 直接访问。非实验环境中直接暴露这些信息是不安全的,所以安全认证是必要的。

基本认证

prometheus 的 basic_auth

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

basic_auth_users:
  prometheususer: $2a$10$mxpc1PdYgOwvGepNtCuBKO6RXVUzLDg8feOvuz6szOsBa9M28ECfe

第二行中:冒号前为用户名,冒号后为密码的 bcrypt 哈希值——这里使用了 sttr 工具生成,也可以用其它工具,这里假设密码为 prometheuspassword:

# pkg install sttr
$ sttr bcrypt prometheuspassword
$2a$10$mxpc1PdYgOwvGepNtCuBKO6RXVUzLDg8feOvuz6szOsBa9M28ECfe%

这里的 % 只是终端里的输出在没有换行符时出现的,忽略即可。

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

在 prometheus 的配置下加入下面三行,

    basic_auth:
      username: prometheususer
      password: prometheuspassword

注意缩进,完整示例:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
    basic_auth:
      username: prometheususer
      password: prometheuspassword

  - job_name: "node_exporter_local"
    static_configs:
      - targets: ["localhost:9100"]
  • 修改 prometheus 启动配置,并重启

# sysrc prometheus_args="--web.config.file='/usr/local/etc/prometheus_webconfig.yml'"
# service prometheus restart

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

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

exporter 的 basic_auth

下面以 node_exporter 为例

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

basic_auth_users:
  node_exporter_user: $2a$10$XoJoz.x.m9FTEbaTF3hBsehE9C8zCWjCQUHkSL0Isk53UnUTjR4hi
  • 修改 node_exporter 启动配置,并重启

# sysrc node_exporter_args="--web.config.file='/usr/local/etc/node_exporter_webconfig.yml'"
# service node_exporter restart
  • 编辑 /usr/local/etc/prometheus.yml,如下:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
    basic_auth:
      username: tome
      password: jake

- job_name: "node_exporter_local"
    static_configs:
      - targets: ["localhost:9100"]
    basic_auth:
      username: node_exporter_user
      password: node_exporter_password

重启 prometheus

service prometheus restart

ca 证书认证

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

下面还是以 node_exporter 为例,假设 node_exporter 结点 ip 为 10.0.11.1。

生成证书

# 生成 CA 私钥
openssl genpkey -algorithm RSA -out ca.key
# 生成 CA 证书
openssl req -new -x509 -key ca.key -out ca.crt -days 3650 -subj "/CN=my-ca"

生成 prometheus 端证书

# 生成 Prometheus 客户端私钥
openssl genpkey -algorithm RSA -out prometheus.key
# 生成客户端证书请求
openssl req -new -key prometheus.key -out prometheus.csr -subj "/CN=prometheus-client"
# 使用 CA 对客户端证书请求进行签名
openssl x509 -req -in prometheus.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out prometheus.crt -days 3650

生成 node_exporter 端证书

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

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

[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
prompt = no

[ req_distinguished_name ]
CN = node-exporter-server

[ v3_ca ]
# 添加 SAN 字段
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = node-exporter-server.example.com  # 如果你有域名,添加它
IP.1 = 10.0.55.1  # 如果你用的是 IP 地址,添加它
  1. 生成证书请求时使用 SAN 配置

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

# 首先,生成私钥
openssl genpkey -algorithm RSA -out node_exporter.key
#然后,生成带有 SAN 字段的 CSR:
openssl req -new -key node_exporter.key -out node_exporter.csr -config san.cnf
用 CA 签署证书
openssl x509 -req -in node_exporter.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out node_exporter.crt -days 3650 -extensions v3_ca -extfile san.cnf

指定 SAN(Subject Alternative Name)比较重要,不然可能不能访问。也可以在 prometheus 中配置忽略证书验证,但这和安全相悖,所以这里不再提及。

配置 prometheus 和 node_exporter

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

tls_server_config:
  cert_file: /path/to/node_exporter.crt
  key_file: /path/to/node_exporter.key
  client_ca_file: /path/to/ca.crt
  client_auth_type: "RequireAndVerifyClientCert"

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

修改 /usr/local/etc/prometheus.yml

  - job_name: "node_exporter_local"
    static_configs:
      - targets: ["10.0.55.1:9100"]
    scheme: 'https'
    tls_config:
      cert_file: '/path/to/prometheus.crt'
      key_file: '/path/to/prometheus.key'
      ca_file: '/path/to/ca.crt'

另外注意秘钥和证书文件的存放位置和权限,只给出最低访问权限。

重启 prometheus 和 node_exporter 即可。

pushgateway

上面介绍的都是以 pull 方式,由 prometheus 从各个 exporter 拉取,pushgateway 则是监测点主动推送数据到 pushgateway,再由 prometheus 从 pushgateway 拉取数据。适合用于临时任务和批量任务。

  1. 安装 pushgateway

# pkg install pushgateway
# service pushgateway enable
# service pushgateway start
  1. 在 prometheus 中配置 pushgateway

编辑 /usr/local/etc/prometheus.yml 增加下面内容:

  - job_name: "pushgateway"
    static_configs:
      - targets: ["localhost:9091"]
  1. 临时任务举例

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

num=$(ps aux |awk 'NR>1 {print $8}'|grep Z|wc -l)
echo "process_zombie $num"|curl --data-binary @- http://10.0.55.1:9091/metrics/job/check_processes

第一行用于检查僵尸进程数,第二行向 pushgateway 发送僵尸进程计数。(注意:发送的数据每行必须 "\n" 结尾

告警

prometheus 告警依赖 alertmanager 组件。这里示例以 jail_exporter 为例(安装配置较为简单,参见上文,不再说明。另需要 /boot/loader.conf 中写入 kern.racct.enable=1,以开启系统记账功能)。

  1. 安装:

# pkg install alertmanager
  1. 配置 alertmanager 告警路由规则

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

global:
  smtp_smarthost: 'smtp.sina.com:25'
  smtp_from: 'xxxxx@sina.com'
  smtp_auth_username: 'xxxxx'
  smtp_auth_password: 'xxxxxxxxxxxxxxx'
templates:
  - '/etc/alertmanager/template/*.tmpl'
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: safreya

  routes:
    - matchers:
        - alertname=~"jail"
      receiver: xxxxx
      routes:
        - matchers:
            - severity="critical"
          receiver: xxxxx

receivers:
  - name: 'xxxxx'
    email_configs:
      - to: 'xxxxx@qq.com'

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

  1. 配置告警规则

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

groups:
- name: jails-alerts
  rules:
  - alert: jail_down
    expr: absent(jail_id{name="dox"})
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "jail dox is down"
      description: "jail dox is down"

alert 指定告警的名字。

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

for 指触发告警的等待时间,这里是 5 分钟。即如果在 5 分钟内得到解决,则不发送告警

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

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 10.0.55.1:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  - "/usr/local/etc/prometheus/alert.rules.yml"
  1. 重启 prometheus 和 alertmanager

service prometheus restart
service alertmanager restart
  1. 测试

jail -r dox 关闭 jail,触发规则,5 分钟后发送告警邮件。jail -c dox 开启 jail,告警规则重置为非活动。

远程存储

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

  1. 安装配置 influxdb:

# pkg install influxdb
# service influxd enable
# service influxd start

注意 influxdb 的服务名是 influxd。

考虑安全问题应该修写 /usr/local/etc/influxd.conf,在 http 段开启 http 认证:

[http]
auth-enabled = true
  1. 创建 influxdb 用户和数据库

用 influx 进入命令行客户端

create database "prometheus"
create user prometheus with password '123'
grant read on prometheus to prometheus
grant write on prometheus to prometheus

重启 influxdb 即可。

  1. 配置 prometheus 以连接

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

remote_write:
  - url: "http://10.0.55.1:8086/api/v1/prom/write?db=prometheus&u=prometheus&p=123"
remote_read:
  - url: "http://10.0.55.1:8086/api/v1/prom/read?db=prometheus&u=prometheus&p=123"

FreeBSD 的 pkg 中 influxdb 是 v1 版本,用 v1 的 api 配置

重启 prometheus 即可。

  1. 验证

用 influx 命令进行数据库,查询数据指标即可:

use prometheus
select * from jail_id
1739497283285000000 jail_id  192.168.0.100:9452 jail_exporter prometheus 1
1739497298285000000 jail_id  192.168.0.100:9452 jail_exporter dox        4
1739497298285000000 jail_id  192.168.0.100:9452 jail_exporter prometheus 1
1739497313285000000 jail_id  192.168.0.100:9452 jail_exporter dox        4
1739497313285000000 jail_id  192.168.0.100:9452 jail_exporter prometheus 1
1739497328285000000 jail_id  192.168.0.100:9452 jail_exporter dox        4
1739497328285000000 jail_id  192.168.0.100:9452 jail_exporter prometheus 1
1739497343285000000 jail_id  192.168.0.100:9452 jail_exporter dox        4
1739497343285000000 jail_id  192.168.0.100:9452 jail_exporter prometheus 1
1739497358285000000 jail_id  192.168.0.100:9452 jail_exporter dox        4
1739497358285000000 jail_id  192.168.0.100:9452 jail_exporter prometheus 1
1739497373285000000 jail_id  192.168.0.100:9452 jail_exporter dox        4
1739497373285000000 jail_id  192.168.0.100:9452 jail_exporter prometheus 1

参考文献

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

exporter 配置参考
prometheus 配置参考
远程存储相关
alertmanager 配置参考
基本认证
框架
监控目标
空闲内存示例
grafana 切换中文界面
连接 prometheus 1
连接 prometheus 2
连接 prometheus 3
建仪表盘 1
建仪表盘 2
建仪表盘 3
建仪表盘 4
建仪表盘 5
登录 prometheus