Prometheus+Grafana监控部署完整教程:从安装到可视化告警的实战指南
Prometheus+Grafana监控部署完整教程:从安装到可视化告警的实战指南 一套好用的监控体系,是运维工程师的"眼睛"。没有监控,服务器CPU飙到100%你不知道,磁盘满了你不知道,服务挂了你还是不知道——等用户投诉过来,已经晚了。 在开源监控领域,Prometheus + Grafana 这对组合几乎是事实标准。Prometheus负责采集和存储指标数据,Grafana负责把数据变成好看的图表和告警。两套工具都是开源的,社区活跃,文档齐全,生产环境经过大量验证。 本文从零开始,手把手教你把这套监控体系跑起来。不废话,直接上实战。 一、Prometheus架构与核心概念 Prometheus最初由SoundCloud开发,后来捐给了CNCF(云原生计算基金会),和Kubernetes是"同门师兄弟"。它的核心设计思想很清晰: 拉模式(Pull Model):Prometheus主动去抓取(scrape)各个目标暴露的指标数据,而不是各个目标主动推送。这样中心端可以统一控制采集频率和超时,架构更简单。 时间序列数据库(TSDB):采集到的指标按时间戳存储,支持高效的时序查询。 多维数据模型:每个指标可以带多个标签(label),比如cpu_usage{host="web01",env="prod"},查询时可以按标签灵活过滤和聚合。 PromQL查询语言:专为时序数据设计的查询语言,支持聚合、率计算、预测等高级操作。 Prometheus的核心组件: Prometheus Server:核心服务,负责采集、存储、查询 Exporter:运行在被监控目标上的代理,暴露HTTP指标接口(比如Node Exporter暴露主机CPU、内存、磁盘指标) Pushgateway:用于短生命周期任务的指标推送(可选) Alertmanager:接收Prometheus发送的告警,去重、分组、路由到邮件/钉钉/Slack等渠道 Grafana:可视化层,把指标数据变成图表和仪表盘 二、Grafana简介与优势 Grafana是一个可视化平台,本身不采集数据,它负责把各种数据源(Prometheus、MySQL、Elasticsearch、Loki等)的数据变成漂亮的仪表盘。 为什么选Grafana而不是只用Prometheus自带的Web UI? 仪表盘颜值高:图表类型丰富,配色专业,支持热力图、状态面板、直方图等高级可视化 数据源广泛:一个Grafana可以接多个Prometheus集群,也可以同时接MySQL、Loki(日志)、Tempo(追踪),实现可观测性三大支柱的统一展示 权限管理完善:支持团队、文件夹权限隔离,适合多团队共用 告警功能强:Grafana 8.0之后内置了统一的告警引擎,可以直接在Grafana里配置告警规则,不依赖Alertmanager也能工作 社区仪表盘丰富:Grafana官方仪表盘市场有上万套现成的,导入即用,不用自己从头画图表 三、环境准备与前置条件 演示环境用Ubuntu 22.04(CentOS/RHEL同理,包名和防火墙命令略有差异)。需要两台机器: 监控服务器:运行Prometheus + Grafana,建议2核4G起步 被监控服务器:运行Node Exporter,采集主机指标 前置条件: # 放行端口(生产环境用安全组/iptables规则代替直接关闭防火墙) # Ubuntu sudo ufw allow 9090/tcp # Prometheus sudo ufw allow 3000/tcp # Grafana sudo ufw allow 9100/tcp # Node Exporter # CentOS sudo firewall-cmd --permanent --add-port=9090/tcp sudo firewall-cmd --permanent --add-port=3000/tcp sudo firewall-cmd --permanent --add-port=9100/tcp sudo firewall-cmd --reload # 安装基础工具 sudo apt update && sudo apt install -y wget curl # Ubuntu/Debian # 或 sudo yum install -y wget curl # CentOS/RHEL 四、Prometheus安装与配置 4.1 创建prometheus系统用户 sudo useradd --no-create-home --shell /bin/false prometheus 4.2 下载并安装Prometheus # 查看最新版本:https://prometheus.io/download/ cd /tmp wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz tar -xvf prometheus-2.53.0.linux-amd64.tar.gz cd prometheus-2.53.0.linux-amd64 sudo cp prometheus /usr/local/bin/ sudo cp promtool /usr/local/bin/ prometheus --version # 验证安装成功 4.3 创建配置文件目录 sudo mkdir -p /etc/prometheus sudo mkdir -p /var/lib/prometheus sudo cp -r consoles /etc/prometheus/ sudo cp -r console_libraries /etc/prometheus/ sudo cp prometheus.yml /etc/prometheus/ 4.4 配置prometheus.yml 编辑 /etc/prometheus/prometheus.yml: global: scrape_interval: 15s # 每15秒采集一次 evaluation_interval: 15s # 每15秒评估一次告警规则 scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] # Prometheus自监控 # 后续添加Node Exporter目标(先注释,等Node Exporter装好再启用) # - job_name: "node" # static_configs: # - targets: ["被监控机器IP:9100"] 4.5 创建systemd服务 创建 /etc/systemd/system/prometheus.service: [Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple 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 [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable prometheus sudo systemctl start prometheus sudo systemctl status prometheus # 确认Running 浏览器访问 http://监控服务器IP:9090,看到Prometheus Web UI说明安装成功。在Status → Targets页面可以看到prometheus任务状态为UP。 五、Node Exporter安装(采集主机指标) 在被监控服务器上安装Node Exporter,它负责采集CPU、内存、磁盘、网络等主机指标,并通过HTTP接口暴露给Prometheus抓取: # 创建用户 sudo useradd --no-create-home --shell /bin/false node_exporter # 下载 cd /tmp wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz tar -xvf node_exporter-1.8.0.linux-amd64.tar.gz # 安装二进制 sudo cp node_exporter-1.8.0.linux-amd64/node_exporter /usr/local/bin/ node_exporter --version 创建systemd服务 /etc/systemd/system/node_exporter.service: [Unit] Description=Node Exporter Wants=network-online.target After=network-online.target [Service] User=node_exporter Group=node_exporter Type=simple ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable node_exporter sudo systemctl start node_exporter sudo systemctl status node_exporter 验证:访问 http://被监控服务器IP:9100/metrics,能看到满屏的指标数据说明正常。 5.1 把Node Exporter加入Prometheus采集配置 回到监控服务器,编辑 /etc/prometheus/prometheus.yml,在 scrape_configs 下追加: - job_name: "node" static_configs: - targets: ["被监控服务器IP:9100"] sudo systemctl restart prometheus 在Prometheus Web UI的"Status → Targets"页面,能看到node任务状态为UP,说明采集正常。 六、Grafana安装与初始化 6.1 安装Grafana(Ubuntu/Debian) sudo apt-get install -y apt-transport-https software-properties-common 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 /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana CentOS/RHEL用这个: sudo tee /etc/yum.repos.d/grafana.repo 80 for: 5m labels: severity: warning annotations: summary: "{{ $labels.instance }} CPU使用率超过80%" description: "当前值: {{ $value }}%" - alert: 主机内存使用率过高 expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85 for: 5m labels: severity: warning annotations: summary: "{{ $labels.instance }} 内存使用率超过85%" description: "当前值: {{ $value }}%" - alert: 磁盘空间不足 expr: (1 - (node_filesystem_avail_bytes{fstype!="tmpfs",fstype!="devtmpfs"} / node_filesystem_size_bytes)) * 100 > 85 for: 10m labels: severity: critical annotations: summary: "{{ $labels.instance }} {{ $labels.mountpoint }} 磁盘使用率超过85%" description: "当前值: {{ $value }}%" 在 prometheus.yml 中启用告警规则: rule_files: - "alerts.yml" sudo systemctl restart prometheus 9.2 安装配置Alertmanager(可选,生产推荐) Alertmanager负责接收Prometheus发出的告警,进行去重、分组、路由。小型部署可以直接用Grafana内置告警,中大型部署建议单独部署Alertmanager,支持邮件、钉钉、企业微信、Slack等渠道。 安装步骤和Prometheus类似,从 官网下载 解压后配置systemd服务即可。配置文件 alertmanager.yml 中配置告警接收渠道,然后在 prometheus.yml 中配置 alerting 段指向Alertmanager地址。 十、生产环境最佳实践 数据保留期限:Prometheus默认保留15天数据,生产环境建议调整到30-90天。启动参数加 --storage.tsdb.retention.time=90d 外接长期存储:Prometheus本地TSDB不适合长期存储,生产环境建议对接Thanos或VictoriaMetrics,实现长期存储和全局查询,也方便多Prometheus实例集中管理 高可用:Prometheus本身无集群模式,生产环境建议部署两套Prometheus(双写),Grafana查询时配置多数据源或用录制规则聚合,避免单点故障 安全:Prometheus和Grafana默认无认证,生产环境务必配置Grafana登录认证(LDAP/OAuth),Prometheus前端加反向代理(Nginx)并配置Basic Auth或JWT认证 标签基数控制:标签值过多的指标会导致Prometheus内存暴涨,设计告警规则时注意控制基数,避免出现类似user_id这样的高基数标签 录制规则(Recording Rules):对于查询耗时的PromQL表达式,用录制规则预先计算并存储结果,大幅提升Grafana仪表盘的加载速度 总结 Prometheus + Grafana 这套组合,从安装到跑起来,熟练的话半小时就能搞定。它能覆盖主机监控、服务监控、告警三大核心需求,是中小型团队性价比最高的监控方案。 当然,监控只是运维体系的一部分。服务器性能监控只是"看得见",真正要让系统稳定,还需要日志分析、链路追踪、自动告警等一系列工具配合。后续会持续更新相关实战内容。 相关阅读: Zabbix服务器监控搭建教程:Ubuntu系统从安装到配置的完整实战指南 Linux服务器性能监控工具推荐:从命令行到企业平台的完整选型指南 Nginx日志分析工具推荐:从命令行到可视化的完整选型指南本文来自:youres | 所思即所见,原地址:https://www.youres.cn/post/614.html
更多推荐

所有评论(0)