本文将手把手带你搭建一个完整的服务器监控与告警系统。你不需要任何监控经验,只需要一台能上网的服务器,按照步骤操作,就能实现对服务器CPU、内存、磁盘、网络等核心指标的实时监控,并在出现问题时立刻收到告警通知。
我们选择最经典、应用最广的开源监控组合:Prometheus(采集与存储)、Grafana(可视化)、Alertmanager(告警管理)以及Node Exporter(主机指标暴露器)。这套组合稳定、高效,是业界事实上的标准。
确保你有一台安装有Linux系统(以CentOS 7为例)的服务器,并已配置好sudo权限的账户。所有组件都将安装在这台服务器上。
通过以下命令检查系统并更新软件包:
``` sudo yum update -y ```为安全和管理方便,为监控组件创建专用用户和统一的安装目录。
``` sudo useradd -m -s /bin/bash prometheus sudo mkdir -p /opt/monitoring/{prometheus,grafana,alertmanager,exporters} sudo chown -R prometheus:prometheus /opt/monitoring ```Node Exporter用于收集主机硬件和操作系统指标,并暴露给Prometheus抓取。
以prometheus用户身份操作,下载最新稳定版Node Exporter。
``` sudo su - prometheus cd /opt/monitoring/exporters wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz tar xvf node_exporter-1.6.0.linux-amd64.tar.gz mv node_exporter-1.6.0.linux-amd64 node_exporter ```退出prometheus用户,回到具有sudo权限的账户。创建Systemd服务文件以便管理。
``` exit sudo vim /etc/systemd/system/node_exporter.service ```将以下内容完整写入该文件:
``` [Unit] Description=Node Exporter Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/opt/monitoring/exporters/node_exporter/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target ```保存后,启动并设置开机自启:
``` sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter ```验证服务是否运行,并监听在9100端口:
``` sudo systemctl status node_exporter curl http://localhost:9100/metrics ```Prometheus负责定时抓取Node Exporter暴露的指标数据,并进行存储。
切换回prometheus用户进行安装。
``` sudo su - prometheus cd /opt/monitoring/prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz tar xvf prometheus-2.45.0.linux-amd64.tar.gz mv prometheus-2.45.0.linux-amd64 prometheus-server ```编辑主配置文件,定义要抓取的目标(即我们的Node Exporter)。
``` cd /opt/monitoring/prometheus/prometheus-server vim prometheus.yml ```用以下配置完全替换原有文件内容:
``` global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: - localhost:9093 rule_files: - "alert_rules.yml" scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100'] ```接着,创建告警规则文件。我们定义一个简单的“实例宕机”和“高CPU使用率”规则。
``` vim alert_rules.yml ```输入以下内容:
``` groups: - name: host_monitoring rules: - alert: InstanceDown expr: up == 0 for: 1m labels: severity: critical annotations: summary: "Instance {{ $labels.instance }} down" description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute." - alert: HighCpuUsage expr: (100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) 100)) > 80 for: 5m labels: severity: warning annotations: summary: "High CPU usage on {{ $labels.instance }}" description: "CPU usage on {{ $labels.instance }} is above 80% for 5 minutes, current value is {{ $value }}%." ```退出prometheus用户,创建Systemd服务。
``` exit sudo vim /etc/systemd/system/prometheus.service ```写入以下配置:
``` [Unit] Description=Prometheus Server Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/opt/monitoring/prometheus/prometheus-server/prometheus \ --config.file=/opt/monitoring/prometheus/prometheus-server/prometheus.yml \ --storage.tsdb.path=/opt/monitoring/prometheus/data \ --web.console.templates=/opt/monitoring/prometheus/prometheus-server/consoles \ --web.console.libraries=/opt/monitoring/prometheus/prometheus-server/console_libraries \ --web.listen-address=:9090 Restart=on-failure [Install] WantedBy=multi-user.target ```启动并启用服务:
``` sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus ```验证:访问 http://你的服务器IP:9090/targets,应看到prometheus和node_exporter两个目标状态均为“UP”。
Alertmanager负责接收Prometheus发出的告警,并进行去重、分组,然后路由到正确的接收器(如邮箱)。
假设你使用QQ邮箱发送告警。你需要开启QQ邮箱的SMTP服务并获取授权码(这里用`your_auth_code`代替)。

创建配置文件:
``` cd /opt/monitoring/alertmanager/alertmanager-server vim alertmanager.yml ```输入以下完整配置,将`smtp.qq.com`处的`your_email@qq.com`和`your_auth_code`替换为你的实际信息:
``` global: smtp_smarthost: 'smtp.qq.com:465' smtp_from: 'your_email@qq.com' smtp_auth_username: 'your_email@qq.com' smtp_auth_password: 'your_auth_code' smtp_require_tls: true route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'email-notifications' receivers: - name: 'email-notifications' email_configs: - to: 'your_receive_email@example.com' send_resolved: true ```写入配置:
``` [Unit] Description=Alertmanager Server Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/opt/monitoring/alertmanager/alertmanager-server/alertmanager \ --config.file=/opt/monitoring/alertmanager/alertmanager-server/alertmanager.yml \ --storage.path=/opt/monitoring/alertmanager/data \ --web.listen-address=:9093 Restart=on-failure [Install] WantedBy=multi-user.target ```启动并启用服务:
``` sudo systemctl daemon-reload sudo systemctl start alertmanager sudo systemctl enable alertmanager ```验证:访问 http://你的服务器IP:9093,应看到Alertmanager的Web界面。
Grafana用于将Prometheus中的数据绘制成直观的图表仪表盘。
Grafana建议通过官方YUM仓库安装。
``` sudo vim /etc/yum.repos.d/grafana.repo ```写入以下仓库配置:
``` [grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt ```安装并启动Grafana:
``` sudo yum install -y grafana sudo systemctl start grafana-server sudo systemctl enable grafana-server ```Grafana默认运行在3000端口。首次访问 http://你的服务器IP:3000,使用默认账号密码`admin/admin`登录,系统会要求立即修改密码。
登录后,点击左侧齿轮图标“Configuration”,选择“Data Sources”。
点击“Add data source”,选择“Prometheus”。
在“HTTP”部分的URL栏,填写 http://localhost:9090。
其他保持默认,滚动到页面底部,点击“Save & Test”,看到“Data source is working”提示即表示成功。
接下来导入一个现成的主机监控仪表盘。点击左侧“+”号,选择“Import”。
在“Import via grafana.com”输入框中,输入仪表盘ID 1860,然后点击Load。
在下一个页面,选择Prometheus数据源为你刚添加的数据源,点击“Import”。
现在,你就能看到一个完整的、包含CPU、内存、磁盘IO、网络流量等各项指标的专业主机监控仪表盘了。
系统已全部搭建完成。现在,让我们触发一个高CPU告警来测试整个链路是否通畅。
在服务器上运行一个消耗CPU的命令,持续几分钟:
``` dd if=/dev/zero of=/dev/null & ```等待约5-10分钟后,你应该:
测试完成后,记得停止压力测试命令:
``` sudo pkill -f "dd if=/dev/zero" ```至此,一个可用的监控告警系统已搭建完毕。为了长期稳定运行,请注意:
这套系统是运维的“眼睛”和“耳朵”,请确保其自身的高可用。对于核心生产环境,建议将Prometheus、Alertmanager部署为多实例集群,并将关键仪表盘配置在Grafana的“Starred”中以便快速查看。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图