Prometheus2.53.3 | 监控系统安装与配置指南(已成功安装)
本文旨在为读者提供一个完整的 Prometheus 监控系统的安装与配置教程,涵盖 Prometheus 主程序、常用 Exporters(如 Node Exporter 和 Mysqld Exporter)、Pushgateway 以及 Alertmanager 的部署步骤。通过本指南,您将能够:
- 搭建一个功能完备的监控系统:实时监控主机性能、数据库状态以及自定义指标。
- 实现告警功能:通过邮件等方式接收系统异常通知。
- 适用于生产环境:配置了 systemd 服务、SELinux 兼容性和防火墙规则,确保系统健壮性与安全性。
- 支持离线安装:提供明确的下载链接和步骤,方便在无网络环境中部署。
本文适用于运行 CentOS 9 或类似 Linux 发行版的用户,假设您具有基本的 Linux 操作知识和 root 权限。
通过本文,您可以:
- 部署完整的 Prometheus 监控生态:包括 Prometheus 主程序、主机监控(Node Exporter)、数据库监控(Mysqld Exporter)、数据推送(Pushgateway)和告警管理(Alertmanager)。
- 实现生产级配置:支持 systemd 服务管理、SELinux 兼容性和防火墙设置,适用于企业环境。
- 掌握调试与验证方法:通过日志检查、端口测试和 curl 请求,确保系统正常运行。
- 灵活调整:根据实际需求修改配置文件(如端口、密码、SMTP 设置)。
1. 安装 Prometheus 主程序
Prometheus 是一个开源的监控和告警工具,以下是其在 Linux 环境下的安装步骤。
离线安装包:Prometheus相关安装包.7z资源-CSDN文库
1.1 下载并解压 Prometheus
下载 Prometheus 二进制文件并部署到指定目录。
cd /home
wget https://github.com/prometheus/prometheus/releases/download/v2.53.3/prometheus-2.53.3.linux-amd64.tar.gz
tar -xvzf prometheus-2.53.3.linux-amd64.tar.gz
sudo mkdir -p /usr/local/prometheus
sudo mv prometheus-2.53.3.linux-amd64/* /usr/local/prometheus/
sudo chown -R prometheus:prometheus /usr/local/prometheus
sudo chmod -R 755 /usr/local/prometheus
- 注释:
- wget 下载指定版本的 Prometheus(v2.53.3,适用于 Linux AMD64 架构)。
- tar -xvzf 解压下载的压缩包。
- 创建 /usr/local/prometheus 目录并移动文件,确保目录权限为 prometheus 用户所有。
1.2 创建数据目录
为 Prometheus 创建用于存储时间序列数据的目录。
sudo mkdir -p /usr/local/prometheus/data
sudo chown -R prometheus:prometheus /usr/local/prometheus/data
sudo chmod -R 755 /usr/local/prometheus/data
- 注释:
- 数据目录用于存储监控数据(如时间序列数据库 TSDB)。
- 使用 chown 和 chmod 设置权限,确保 Prometheus 进程可以读写。
1.3 配置 Prometheus
创建并编辑 Prometheus 的配置文件 prometheus.yml。
sudo tee /usr/local/prometheus/prometheus.yml > /dev/null <<EOF
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node_exporter"
static_configs:
- targets: ["localhost:9100"]
- job_name: "mysqld_exporter"
static_configs:
- targets: ["localhost:9104"]
- job_name: "pushgateway"
static_configs:
- targets: ["localhost:9091"]
alerting:
alertmanagers:
- static_configs:
- targets: ["localhost:9093"]
EOF
sudo chown prometheus:prometheus /usr/local/prometheus/prometheus.yml
sudo chmod 644 /usr/local/prometheus/prometheus.yml
- 注释:
- global 配置全局抓取和评估间隔为 15 秒。
- scrape_configs 定义监控目标,包括 Prometheus 自身(9090 端口)、Node Exporter(9100 端口)、Mysqld Exporter(9104 端口)和 Pushgateway(9091 端口)。
- alerting 指定告警管理器地址(Alertmanager,9093 端口)。
- 使用 tee 创建文件,避免手动编辑出错。
1.4 创建 Prometheus 用户和组
为 Prometheus 创建一个系统用户。
sudo useradd --no-create-home --system -s /bin/false prometheus
- 注释:
- useradd 创建一个无主目录的系统用户,禁用 shell 登录,提升安全性。
1.5 配置 SELinux 上下文
若系统启用了 SELinux,需配置上下文以确保兼容性。
# 安装 SELinux 工具(若未安装,需联网执行)
sudo dnf install -y setools-console policycoreutils-python-utils
# 配置二进制文件 SELinux 上下文
sudo chcon -t bin_t /usr/local/prometheus/prometheus
sudo semanage fcontext -a -t bin_t "/usr/local/prometheus/prometheus"
sudo restorecon -v /usr/local/prometheus/prometheus
# 配置数据目录 SELinux 上下文
sudo chcon -R -t var_lib_t /usr/local/prometheus/data
sudo semanage fcontext -a -t var_lib_t "/usr/local/prometheus/data(/.*)?"
sudo restorecon -R -v /usr/local/prometheus/data
- 注释:
- dnf install 安装 SELinux 管理工具(若已安装可跳过)。
- chcon 和 semanage fcontext 设置二进制文件和数据目录的 SELinux 类型。
- restorecon 应用上下文更改。
1.6 创建 systemd 服务文件
配置 Prometheus 为 systemd 服务,以便系统启动时自动运行。
sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[Unit]
Description=Prometheus Monitoring Server
After=network.target
[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStartPre=/bin/test -x /usr/local/prometheus/prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/usr/local/prometheus/data --web.listen-address=0.0.0.0:9090
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
- 注释:
- ExecStartPre 检查二进制文件是否存在,提升健壮性。
- ExecStart 指定启动命令,绑定 9090 端口并使用指定配置文件和数据路径。
- 输出重定向到 journal 日志,便于排查问题。
1.7 启动并启用 Prometheus 服务
启动服务并设置开机自启。
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
- 注释:
- daemon-reload 重新加载服务文件。
- start 和 enable 分别启动服务并设置开机自启。
1.8 配置防火墙
开放 Prometheus 的 9090 端口。
sudo firewall-cmd --add-port=9090/tcp --permanent
sudo firewall-cmd --reload
- 注释:
- firewall-cmd 配置防火墙规则,--permanent 确保重启后生效。
1.9 验证 Prometheus 运行状态
检查服务是否正常运行。
sudo systemctl status prometheus
sudo ss -tuln | grep 9090
curl http://localhost:9090
- 注释:
- systemctl status 查看服务状态。
- ss -tuln 检查 9090 端口是否监听。
- curl 测试 Web 界面是否可访问。
1.10 (可选)检查日志
查看 Prometheus 的运行日志。
journalctl -u prometheus -f
- 注释:
- -f 实时跟踪日志,便于调试。
1.11 (可选)处理 SELinux 问题
若遇到 SELinux 相关问题,可临时关闭 SELinux 测试。
sudo ausearch -m avc -ts recent
sudo setenforce 0
sudo systemctl restart prometheus
# 若成功运行后再恢复 SELinux
sudo setenforce 1
- 注释:
- ausearch 查看 SELinux 拒绝日志。
- setenforce 0 临时关闭 SELinux,测试后恢复。
2. 配置 Exporters(数据采集)
Exporters 用于采集各种系统或应用的指标数据并暴露给 Prometheus。
2.1 Node Exporter(主机监控)
安装 Node Exporter 以监控主机性能(如 CPU、内存、磁盘等)。
cd /home
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz
tar -xvzf node_exporter-1.9.0.linux-amd64.tar.gz
sudo mkdir -p /usr/local/bin
sudo mv node_exporter-1.9.0.linux-amd64/node_exporter /usr/local/bin/
sudo chmod +x /usr/local/bin/node_exporter
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
# 配置 SELinux 上下文(若启用 SELinux)
sudo chcon -t bin_t /usr/local/bin/node_exporter
sudo semanage fcontext -a -t bin_t "/usr/local/bin/node_exporter"
sudo restorecon -v /usr/local/bin/node_exporter
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/node-exporter.service > /dev/null <<EOF
[Unit]
Description=Node Exporter for Prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStartPre=/bin/test -x /usr/local/bin/node_exporter
ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start node-exporter
sudo systemctl enable node-exporter
# 检查服务状态
sudo systemctl status node-exporter
# 配置防火墙
sudo firewall-cmd --add-port=9100/tcp --permanent
sudo firewall-cmd --reload
- 注释:
- 下载并安装 Node Exporter v1.9.0。
- 配置 SELinux 和 systemd 服务,确保兼容性和开机自启。
- 开放 9100 端口以供 Prometheus 抓取指标。
2.2 Mysqld Exporter(MariaDB 监控)
安装 MariaDB 和 Mysqld Exporter 以监控数据库性能。
# 手动安装 MariaDB 10.5.27
cd /home
wget https://archive.mariadb.org/mariadb-10.5.27/bintar-linux-systemd-x86_64/mariadb-10.5.27-linux-systemd-x86_64.tar.gz
tar -xvzf mariadb-10.5.27-linux-systemd-x86_64.tar.gz
sudo mkdir -p /usr/local/mariadb
sudo mv mariadb-10.5.27-linux-systemd-x86_64/* /usr/local/mariadb/
sudo chown -R root:root /usr/local/mariadb
sudo mkdir -p /usr/local/mariadb/data
sudo chown -R mysql:mysql /usr/local/mariadb/data
# 创建 MariaDB 用户(若不存在)
sudo useradd --no-create-home --system -s /bin/false mysql
# 配置 SELinux 上下文(若启用 SELinux)
sudo chcon -t bin_t /usr/local/mariadb/bin/mysqld
sudo semanage fcontext -a -t bin_t "/usr/local/mariadb/bin/mysqld"
sudo restorecon -v /usr/local/mariadb/bin/mysqld
sudo chcon -R -t mysqld_db_t /usr/local/mariadb/data
sudo semanage fcontext -a -t mysqld_db_t "/usr/local/mariadb/data(/.*)?"
sudo restorecon -R -v /usr/local/mariadb/data
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/mariadb.service > /dev/null <<EOF
[Unit]
Description=MariaDB Database Server
After=network.target
[Service]
ExecStartPre=/bin/mkdir -p /usr/local/mariadb/data
ExecStartPre=/bin/chown -R mysql:mysql /usr/local/mariadb/data
ExecStart=/usr/local/mariadb/bin/mysqld --datadir=/usr/local/mariadb/data --pid-file=/usr/local/mariadb/data/mariadb.pid
User=mysql
Group=mysql
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# 启动并启用 MariaDB 服务
sudo systemctl daemon-reload
sudo systemctl start mariadb
sudo systemctl enable mariadb
# 运行安全配置脚本
sudo /usr/local/mariadb/scripts/mysql_secure_installation
# 下载并安装 Mysqld Exporter
cd /home
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.17.1/mysqld_exporter-0.17.1.linux-amd64.tar.gz
tar -xvzf mysqld_exporter-0.17.1.linux-amd64.tar.gz
sudo mkdir -p /usr/local/bin
sudo mv mysqld_exporter-0.17.1.linux-amd64/mysqld_exporter /usr/local/bin/
sudo chmod +x /usr/local/bin/mysqld_exporter
sudo chown prometheus:prometheus /usr/local/bin/mysqld_exporter
# 配置 SELinux 上下文(若启用 SELinux)
sudo chcon -t bin_t /usr/local/bin/mysqld_exporter
sudo semanage fcontext -a -t bin_t "/usr/local/bin/mysqld_exporter"
sudo restorecon -v /usr/local/bin/mysqld_exporter
# 配置 MariaDB 用户(将 'your_secure_password' 替换为实际密码)
sudo /usr/local/mariadb/bin/mysql -u root -p <<EOF
CREATE USER 'prometheus'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'prometheus'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF
# 创建 Mysqld Exporter 配置文件
sudo mkdir -p /etc/mysqld_exporter
sudo tee /etc/mysqld_exporter/mysqld_exporter.cnf > /dev/null <<EOF
[client]
user=prometheus
password=your_secure_password
EOF
sudo chmod 600 /etc/mysqld_exporter/mysqld_exporter.cnf
sudo chown prometheus:prometheus /etc/mysqld_exporter/mysqld_exporter.cnf
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/mysqld-exporter.service > /dev/null <<EOF
[Unit]
Description=Mysqld Exporter for MariaDB
After=network.target mariadb.service
[Service]
User=prometheus
Group=prometheus
ExecStartPre=/bin/test -x /usr/local/bin/mysqld_exporter
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/mysqld_exporter/mysqld_exporter.cnf --web.listen-address=:9104
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start mysqld-exporter
sudo systemctl enable mysqld-exporter
# 检查服务状态
sudo systemctl status mysqld-exporter
# 配置防火墙
sudo firewall-cmd --add-port=9104/tcp --permanent
sudo firewall-cmd --reload
- 注释:
- 安装 MariaDB 10.5.27 并配置为 systemd 服务。
- 创建数据库用户并授权给 Mysqld Exporter。
- 配置 SELinux 和防火墙,确保 9104 端口可用。
验证
# 检查 MariaDB 版本
/usr/local/mariadb/bin/mysql -V
# 检查服务状态
sudo systemctl status mariadb
sudo systemctl status mysqld-exporter
# 检查端口
sudo ss -tuln | grep 9104
# 测试指标
curl http://localhost:9104/metrics
注释:
- 验证 MariaDB 和 Mysqld Exporter 是否正常运行。
3. 配置 Pushgateway(数据推送)
Pushgateway 用于接收客户端推送的指标数据。
cd /home
wget https://github.com/prometheus/pushgateway/releases/download/v1.11.0/pushgateway-1.11.0.linux-amd64.tar.gz
tar -xvzf pushgateway-1.11.0.linux-amd64.tar.gz
sudo mkdir -p /usr/local/bin
sudo mv pushgateway-1.11.0.linux-amd64/pushgateway /usr/local/bin/
sudo chmod +x /usr/local/bin/pushgateway
sudo chown prometheus:prometheus /usr/local/bin/pushgateway
# 配置 SELinux 上下文(若启用 SELinux)
sudo chcon -t bin_t /usr/local/bin/pushgateway
sudo semanage fcontext -a -t bin_t "/usr/local/bin/pushgateway"
sudo restorecon -v /usr/local/bin/pushgateway
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/pushgateway.service > /dev/null <<EOF
[Unit]
Description=Prometheus Pushgateway
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStartPre=/bin/test -x /usr/local/bin/pushgateway
ExecStart=/usr/local/bin/pushgateway --web.listen-address=:9091
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start pushgateway
sudo systemctl enable pushgateway
# 检查服务状态
sudo systemctl status pushgateway
# 配置防火墙
sudo firewall-cmd --add-port=9091/tcp --permanent
sudo firewall-cmd --reload
- 注释:
- 安装 Pushgateway v1.11.0。
- 配置为 systemd 服务,监听 9091 端口。
4. 配置 Alertmanager(告警管理)
Alertmanager 用于处理 Prometheus 的告警并发送通知。
4.1 下载并安装 Alertmanager
cd /home
wget https://github.com/prometheus/alertmanager/releases/download/v0.28.0/alertmanager-0.28.0.linux-amd64.tar.gz
tar -xvzf alertmanager-0.28.0.linux-amd64.tar.gz
sudo mkdir -p /usr/local/bin
sudo mv alertmanager-0.28.0.linux-amd64/alertmanager /usr/local/bin/
sudo chmod +x /usr/local/bin/alertmanager
sudo chown prometheus:prometheus /usr/local/bin/alertmanager
4.2 配置 SELinux(若启用 SELinux)
sudo chcon -t bin_t /usr/local/bin/alertmanager
sudo semanage fcontext -a -t bin_t "/usr/local/bin/alertmanager"
sudo restorecon -v /usr/local/bin/alertmanager
4.3 创建配置文件和数据目录
sudo mkdir -p /etc/alertmanager /var/lib/alertmanager
sudo tee /etc/alertmanager/alertmanager.yml > /dev/null <<EOF
global:
resolve_timeout: 5m
smtp_smarthost: "smtp.qq.com:587"
smtp_from: "2296253383@qq.com"
smtp_auth_username: "2296253383@qq.com"
smtp_auth_password: "jxxtygeckecrdjig"
route:
receiver: "email"
group_by: ["instance"]
receivers:
- name: "email"
email_configs:
- to: "15157508942@139.com"
send_resolved: true
EOF
sudo chown prometheus:prometheus /etc/alertmanager/alertmanager.yml
sudo chown -R prometheus:prometheus /var/lib/alertmanager
sudo chmod 644 /etc/alertmanager/alertmanager.yml
sudo chmod 755 /var/lib/alertmanager
- 注释:
- 配置 SMTP 使用 QQ 邮箱发送告警邮件(需替换为实际账户和授权码)。
4.4 创建 systemd 服务文件
sudo tee /etc/systemd/system/alertmanager.service > /dev/null <<EOF
[Unit]
Description=Alertmanager for Prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStartPre=/bin/test -x /usr/local/bin/alertmanager
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --web.listen-address=:9093 --storage.path=/var/lib/alertmanager
Restart=always
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
4.5 启动并启用服务
sudo systemctl daemon-reload
sudo systemctl start alertmanager
sudo systemctl enable alertmanager
sudo systemctl status alertmanager
4.6 配置防火墙
sudo firewall-cmd --add-port=9093/tcp --permanent
sudo firewall-cmd --reload
4.7 测试邮箱通知
- 手动触发测试:
/usr/local/bin/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --web.listen-address=:9093 --storage.path=/var/lib/alertmanager
- 使用 curl 模拟告警:
curl -X POST -H "Content-Type: application/json" -d '[{"labels":{"alertname":"TestAlert"},"annotations":{"summary":"Test email notification"}}]' http://localhost:9093/api/v2/alerts
- 排查问题:
telnet smtp.qq.com 587
sudo firewall-cmd --add-port=587/tcp --permanent
sudo firewall-cmd --reload
journalctl -u alertmanager -f
- 注释:
- 测试邮件通知功能,确保 SMTP 配置正确。
5. 全局验证
验证所有组件是否正常运行。
# 检查所有服务状态
sudo systemctl status prometheus node-exporter mysqld-exporter pushgateway alertmanager
# 检查端口
sudo ss -tuln | grep -E "9090|9100|9104|9091|9093"
# 测试访问
curl http://localhost:9090 # Prometheus
curl http://localhost:9100/metrics # Node Exporter
curl http://localhost:9104/metrics # Mysqld Exporter
curl http://localhost:9091/metrics # Pushgateway
curl http://localhost:9093 # Alertmanager
- 注释:
- 确保所有服务启动成功,端口监听正常,指标数据可访问。
注意事项
- 密码替换:
- 在 mysqld_exporter.cnf 和 MariaDB 用户配置中,将 your_secure_password 替换为实际密码。
- 在 alertmanager.yml 中,确认 SMTP 配置(如邮箱和授权码)正确。
- SELinux 工具:
- 若 semanage 不可用,需联网安装 policycoreutils-python-utils。
- 防火墙:
- 根据网络需求调整开放的端口。
- 离线安装:
- 保存所有 .tar.gz 文件,以便在无网络环境中重复安装。