1. 为什么选择Prometheus监控方案
在分布式系统和微服务架构盛行的当下,传统的监控工具往往难以应对动态变化的环境。Prometheus作为CNCF毕业项目,其多维数据模型和强大的查询语言PromQL,使其成为云原生监控的事实标准。我在多个生产环境中验证过,相比传统方案,它具有三个显著优势:
- 主动拉取模式更适合动态IP环境,无需在目标端配置推送
- 内置服务发现机制完美适配Kubernetes等容器平台
- 单个服务器即可处理百万级时间序列,实测在8核16G机器上可稳定处理10万样本/秒
2. 环境准备与依赖安装
2.1 系统基础配置
首先确保Ubuntu 22.04系统为最新状态:
sudo apt update && sudo apt upgrade -y sudo timedatectl set-timezone Asia/Shanghai # 重要!避免监控数据时间戳混乱关键细节:Prometheus对系统时间同步极其敏感,务必配置NTP服务:
sudo apt install chrony -y sudo systemctl enable --now chronyd2.2 创建专用系统用户
为安全考虑,应使用非root用户运行:
sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir /etc/prometheus /var/lib/prometheus sudo chown prometheus:prometheus /var/lib/prometheus3. 二进制安装Prometheus
3.1 获取最新版本
推荐从官网获取稳定版本(截至2023年7月最新为2.47.0):
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz tar xvf prometheus-*.tar.gz cd prometheus-*/3.2 文件部署与权限设置
sudo cp prometheus promtool /usr/local/bin/ sudo cp -r consoles console_libraries /etc/prometheus/ sudo chown -R prometheus:prometheus /etc/prometheus验证安装:
prometheus --version # 应显示版本信息4. 配置系统服务
4.1 创建systemd单元文件
/etc/systemd/system/prometheus.service配置示例:
[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path=/var/lib/prometheus \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 Restart=always [Install] WantedBy=multi-user.target4.2 关键启动参数解析
--storage.tsdb.retention.time=15d:控制数据保留周期(默认15天)--web.enable-lifecycle:启用配置热重载API(生产环境慎用)--log.level=debug:调试时使用,正常应设为info
启动服务:
sudo systemctl daemon-reload sudo systemctl enable --now prometheus sudo systemctl status prometheus # 验证状态5. 配置文件深度优化
5.1 基础监控配置
修改/etc/prometheus/prometheus.yml:
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node" static_configs: - targets: ["localhost:9100"] # Node Exporter地址5.2 高级服务发现配置
对于Kubernetes环境,建议使用pod发现:
- job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true6. 配套组件安装
6.1 Node Exporter部署
获取并安装节点监控组件:
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz tar xvf node_exporter-*.tar.gz sudo cp node_exporter-*/node_exporter /usr/local/bin/创建systemd服务:
[Unit] Description=Node Exporter After=network.target [Service] User=node_exporter ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target6.2 Alertmanager配置(可选)
告警管理组件安装:
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz tar xvf alertmanager-*.tar.gz sudo cp alertmanager-*/alertmanager /usr/local/bin/7. 安全加固方案
7.1 基础防护措施
- 启用防火墙规则:
sudo ufw allow 9090/tcp comment 'Prometheus' sudo ufw allow 9100/tcp comment 'Node Exporter'- 配置Nginx反向代理(推荐):
location /prometheus/ { proxy_pass http://localhost:9090/; auth_basic "Prometheus"; auth_basic_user_file /etc/nginx/.htpasswd; }7.2 TLS加密配置
生成自签名证书:
sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/prometheus.key \ -out /etc/ssl/certs/prometheus.crt -days 365 -nodes -subj "/CN=yourdomain.com"修改Prometheus启动参数:
ExecStart=/usr/local/bin/prometheus \ --web.config.file=/etc/prometheus/web.yml \ ...8. 日常运维技巧
8.1 数据备份方案
建议每天备份TSDB数据:
sudo tar -czvf prometheus-data-$(date +%Y%m%d).tar.gz /var/lib/prometheus/8.2 性能调优参数
内存优化配置(8G内存机器示例):
ExecStart=/usr/local/bin/prometheus \ --storage.tsdb.retention.time=30d \ --storage.tsdb.wal-compression \ --storage.tsdb.max-block-duration=2h \ --storage.tsdb.min-block-duration=2h \ --query.max-concurrency=20 \ --query.timeout=2m9. 常见问题排查
9.1 启动失败排查
查看详细日志:
journalctl -u prometheus -f --no-pager常见错误:
- 端口冲突:检查9090端口占用
ss -tulnp | grep 9090 - 权限问题:确保
/var/lib/prometheus目录属主正确 - 配置错误:使用
promtool check config /etc/prometheus/prometheus.yml验证
9.2 数据采集异常
诊断步骤:
- 检查target状态:http://localhost:9090/targets
- 手动测试采集端点:
curl http://localhost:9100/metrics - 查看Prometheus日志过滤WARN/ERROR级别信息
10. 监控体系扩展
10.1 主流中间件监控
MySQL监控示例:
- job_name: 'mysql' static_configs: - targets: ['localhost:9104'] params: collect[]: - global_status - info_schema.innodb_metrics10.2 Grafana集成方案
安装Grafana:
sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt-get update && sudo apt-get install grafana导入官方仪表板:
- Node Exporter:ID 11074
- Prometheus:ID 3662