在现代网站运维中,完善的监控体系是保障服务稳定运行的基础。没有监控就如同盲人摸象,无法及时发现和定位问题。Prometheus作为云原生时代最受欢迎的监控系统,搭配Grafana强大的可视化能力,构成了当前最主流的监控运维方案。本文将详细介绍如何从零搭建一套完整的网站监控体系。
一、监控体系架构设计
一个完善的监控体系应该覆盖以下几个层面:基础设施层(CPU、内存、磁盘、网络)、应用服务层(HTTP状态码、响应时间、请求量)和业务层(用户注册数、订单量等业务指标)。Prometheus采用拉取模式采集数据,整体架构包括数据采集、存储、展示和告警四个环节。
核心组件包括:Prometheus Server负责数据采集与存储,Node Exporter采集服务器硬件指标,Blackbox Exporter进行HTTP/TCP探测,Grafana负责数据可视化,Alertmanager处理告警通知。
二、Prometheus安装与基础配置
首先安装Prometheus Server,以下是基于Linux环境的安装步骤:
wget https://github.com/prometheus/prometheus/releases/download/v2.50.0/prometheus-2.50.0.linux-amd64.tar.gz
tar xzf prometheus-2.50.0.linux-amd64.tar.gz
cd prometheus-2.50.0.linux-amd64
vim prometheus.yml
核心配置文件prometheus.yml的关键配置项:
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- "rules/*.yml"
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://www.example.com
- https://api.example.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
三、Node Exporter部署与关键指标
Node Exporter是采集服务器硬件指标的核心组件,部署方式简单:
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xzf node_exporter-1.7.0.linux-amd64.tar.gz
./node_exporter --web.listen-address=:9100
Node Exporter提供的关键监控指标包括:
node_cpu_seconds_total:CPU使用时间统计,可计算CPU使用率。
node_memory_MemAvailable_bytes:可用内存大小。
node_filesystem_avail_bytes:磁盘可用空间。
node_network_receive_bytes_total:网络接收字节数。
四、Grafana数据可视化配置
Grafana提供了丰富的图表类型和仪表盘模板,安装后添加Prometheus数据源即可开始可视化配置:
yum install -y grafana
systemctl enable grafana-server
systemctl start grafana-server
在Grafana中创建Prometheus数据源后,可以使用以下PromQL查询语句构建关键监控面板:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}
rate(node_network_receive_bytes_total{device!~"lo"}[5m])
Grafana官方模板库中有大量现成的Dashboard模板,推荐使用ID为1860的Node Exporter Full面板,该面板包含了服务器各项硬件指标的完整可视化。
五、告警规则与通知配置
监控的价值在于及时发现问题并告警。以下是一个典型的告警规则配置示例:
groups:
- name: server_alerts
rules:
- alert: HighCpuUsage
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU使用率过高"
description: "CPU使用率已达 {{ printf \"%.1f\" $value }}%"
- alert: LowMemory
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
for: 3m
labels:
severity: critical
annotations:
summary: "内存不足"
description: "可用内存仅剩 {{ printf \"%.1f\" $value }}%"
- alert: DiskSpaceLow
expr: 1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"} > 0.85
for: 10m
labels:
severity: warning
annotations:
summary: "磁盘空间不足"
description: "磁盘使用率超过85%"
Alertmanager可以配置多种通知渠道,包括邮件、钉钉、企业微信等。以下是一个邮件通知的配置示例:
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'ops@example.com'
from: 'alert@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'alert@example.com'
auth_password: 'your_password'
总结
Prometheus与Grafana组合构成了一个功能强大且灵活的监控运维体系。通过合理的指标采集、清晰的仪表盘展示和及时的告警通知,运维团队可以全面掌握网站运行状态,在问题影响用户之前进行干预。建议在实际部署中遵循"先覆盖核心指标、再逐步完善"的原则,逐步建立起适合自身业务的监控体系。同时定期review告警规则,避免告警疲劳,确保每一条告警都有实际的处理价值。