ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

三天速通Prometheus+Grafana:从零搭建服务器监控系统

三天速通Prometheus+Grafana:从零搭建服务器监控系统 1. 先搞清楚这套监控方案到底能帮你解决什么问题如果你手上有几台服务器不管是云上的还是自己机房的想知道它们现在 CPU 用得多不多、内存还剩多少、磁盘是不是快满了、服务是不是还活着那 Prometheus Grafana 这套组合就是你最该优先考虑的监控方案。它不是什么新东西但确实是目前最主流、最灵活的开源监控栈之一。很多人一听到“监控”就觉得复杂要装一堆东西配一堆文件。但 Prometheus Grafana 的核心价值在于它把数据采集Prometheus和数据展示Grafana拆开了让你能先用最少的配置看到服务器的基本状态再根据需求慢慢加监控项和告警。三天时间足够你从零搭出一个能用的监控面板并且理解每个环节在干什么。最关键的是这套东西的“可视化”做得很好。Grafana 的仪表盘Dashboard配置起来像搭积木你不需要写前端代码拖拖拽拽就能把 CPU 使用率、内存趋势、网络流量做成漂亮的曲线图。这对于运维、开发甚至是项目管理者来说都是快速了解系统健康度的利器。所以这篇内容就是给想快速上手、看到效果的人准备的。我会按“先跑通再优化”的顺序带你走一遍从安装、配置到出图的完整流程。过程中我会重点说那些容易卡住的地方比如权限、路径、配置文件格式以及怎么判断你的监控数据已经采集成功了。2. 部署前先理清你的环境和资源需求在动手安装任何东西之前先花五分钟确认你的环境。这能避免一半的“装不上”和“启动失败”问题。2.1 服务器环境与基础准备首先我们默认的操作系统是Linux并且是主流的发行版比如 CentOS 7/8 或者 Ubuntu 20.04/22.04。Windows 服务器虽然也能跑但涉及的服务管理、路径格式差异很大对于新手来说在 Linux 上成功跑通的概率要高得多。如果你的服务器是 Windows我强烈建议你先在 Linux 虚拟机或一台 Linux 测试机上完成首次搭建理解了流程再考虑迁移。你需要有这台服务器的root 权限或者至少是一个有 sudo 权限的普通用户。很多安装步骤和目录操作需要提权。网络方面服务器需要能访问互联网以下载安装包。如果处于内网环境你需要提前将所需的安装包如 Prometheus、Grafana 的压缩包Node Exporter 等下载到本地再上传到服务器。资源需求CPU 内存对于监控少量服务器比如10台以内Prometheus 和 Grafana 本身对资源消耗不大。给个参考2核 CPU、4GB 内存的虚拟机完全足够。Prometheus 吃内存主要是因为它会把时间序列数据缓存在内存里加速查询监控目标不多时不用担心。磁盘空间这是需要提前规划的重点。Prometheus 采集的数据会持久化存储在本地磁盘上。你需要预留足够的空间给数据目录默认是data/。一个简单的估算方法是监控的指标越多、采集频率越高、数据保留时间越长需要的磁盘空间就越大。对于学习和小规模使用先预留20-50GB是合理的。记得把数据目录放在空间充足的分区。防火墙与端口这套方案会用到几个默认端口你需要确保它们在防火墙中是放行的或者你事先知道如何管理防火墙规则。Prometheus:默认使用9090端口。这是你访问 Prometheus Web UI 和管理 API 的端口。Grafana:默认使用3000端口。这是你访问可视化仪表盘的端口。Node Exporter:默认使用9100端口。这是采集服务器主机指标如CPU、内存的代理暴露数据的端口。2.2 组件角色与下载准备别被一堆名词吓到我们先理清三个核心组件的关系Prometheus普罗米修斯数据采集与存储引擎。它负责按照你配置的时间间隔如每15秒去“抓取”scrape各个监控目标暴露出来的指标数据然后把这些时间序列数据存储在自己的时序数据库中。它自己也有一个简单的 Web 界面用于执行查询和查看基础状态。Node Exporter节点导出器监控数据提供者Agent。它是一个需要安装在被监控服务器上的轻量级程序。它的工作就是收集本机的各项硬件和内核指标如 CPU、内存、磁盘、网络等并通过一个 HTTP 接口默认9100端口以 Prometheus 能理解的格式暴露出来。Prometheus 会来这个接口抓取数据。Grafana格拉法纳数据可视化与仪表盘平台。它本身不存储监控数据。它的强项是连接像 Prometheus 这样的数据源然后通过强大的图表库和灵活的仪表盘配置将枯燥的数据变成直观的曲线图、仪表盘、表格等。我们最终看的那个“监控大盘”就是在 Grafana 里创建的。下载准备建议直接去官网下载最新稳定版的二进制压缩包这种方式比用系统包管理器如 yum, apt更灵活不受发行版仓库版本滞后的影响。Prometheus:访问 prometheus.io 选择对应你服务器架构通常是 linux-amd64的.tar.gz文件。Node Exporter:同样在 Prometheus 官网的下载页面找到 “node_exporter” 进行下载。Grafana:访问 grafana.com 选择 “Linux” 版本使用提供的命令安装或者下载二进制包。对于初学直接用官方提供的安装脚本或包管理命令往往更简单。把它们都先下载到服务器的某个临时目录比如/tmp或你的用户家目录下。3. 第一步安装并启动 Prometheus 与 Node Exporter我们的目标是先让数据流跑通Node Exporter 采集数据 - Prometheus 抓到数据。先从 Prometheus 服务端开始。3.1 安装与配置 Prometheus假设你将prometheus-2.xx.x.linux-amd64.tar.gz下载到了/tmp目录。# 1. 解压并移动到合适目录 cd /tmp tar -xzf prometheus-2.*.linux-amd64.tar.gz sudo mv prometheus-2.*.linux-amd64 /usr/local/prometheus # 2. 创建 Prometheus 系统用户可选但推荐用于以非root身份运行 sudo useradd --no-create-home --shell /bin/false prometheus # 3. 更改目录权限 sudo chown -R prometheus:prometheus /usr/local/prometheus # 4. 配置 Prometheus 抓取自身和 Node Exporter # 编辑主配置文件 prometheus.yml sudo vim /usr/local/prometheus/prometheus.yml关键的配置文件prometheus.yml通常长这样我们需要修改scrape_configs部分global: scrape_interval: 15s # 全局抓取间隔每15秒抓一次 evaluation_interval: 15s # 规则评估间隔 scrape_configs: # 监控 Prometheus 自己 - job_name: prometheus static_configs: - targets: [localhost:9090] # Prometheus 自己的地址 # 监控节点服务器这里 job_name 可以自定义 - job_name: node_exporter static_configs: - targets: [localhost:9100] # Node Exporter 的地址目前先监控本机 # 可以在这里添加多台服务器 # - targets: [192.168.1.101:9100, 192.168.1.102:9100]保存退出后继续设置 systemd 服务这样服务可以开机自启管理也方便。# 5. 创建 systemd 服务文件 sudo vim /etc/systemd/system/prometheus.service将以下内容写入服务文件[Unit] DescriptionPrometheus Monitoring System Documentationhttps://prometheus.io/docs/introduction/overview/ Afternetwork.target [Service] Userprometheus Groupprometheus Typesimple ExecStart/usr/local/prometheus/prometheus \ --config.file/usr/local/prometheus/prometheus.yml \ --storage.tsdb.path/usr/local/prometheus/data \ --web.console.templates/usr/local/prometheus/consoles \ --web.console.libraries/usr/local/prometheus/console_libraries \ --web.listen-address:9090 Restartalways [Install] WantedBymulti-user.target注意--storage.tsdb.path指定了数据存储目录确保这个路径有足够的磁盘空间并且prometheus用户有读写权限。# 6. 重新加载 systemd 配置启动并启用服务 sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus # 7. 检查服务状态和日志 sudo systemctl status prometheus # 查看实时日志 sudo journalctl -u prometheus -f如果状态是active (running)并且日志没有持续报错就可以打开浏览器访问http://你的服务器IP:9090。如果能看到 Prometheus 的 Web 界面点击上方菜单 “Status” - “Targets”应该能看到prometheus和node_exporter两个 job 的状态都是UP尽管 node_exporter 还没装状态会是 DOWN。这说明 Prometheus 服务本身启动成功了。3.2 安装与启动 Node ExporterNode Exporter 的安装更简单因为它只是一个独立的二进制文件。# 1. 解压并移动 cd /tmp tar -xzf node_exporter-1.*.linux-amd64.tar.gz sudo mv node_exporter-1.*.linux-amd64/node_exporter /usr/local/bin/ # 2. 创建系统用户可选 sudo useradd --no-create-home --shell /bin/false node_exporter sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter # 3. 创建 systemd 服务文件 sudo vim /etc/systemd/system/node_exporter.service服务文件内容[Unit] DescriptionNode Exporter Afternetwork.target [Service] Usernode_exporter Groupnode_exporter Typesimple ExecStart/usr/local/bin/node_exporter Restartalways [Install] WantedBymulti-user.target# 4. 启动并启用服务 sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter # 5. 检查状态和端口 sudo systemctl status node_exporter sudo netstat -tlnp | grep 9100 # 应该能看到 9100 端口在监听现在再次刷新 Prometheus 的 Targets 页面 (http://IP:9090/targets)。node_exporter这个 job 的状态应该会从DOWN变为UP。绿色 UP 是监控里最让人安心的颜色它意味着 Prometheus 已经成功从 Node Exporter 抓取到了数据。验证数据在 Prometheus 的 Web 界面你可以切换到 “Graph” 页签在表达式输入框里尝试输入一些指标名比如node_memory_MemAvailable_bytes可用内存点击 “Execute”如果能在下方看到数据曲线或表格恭喜你数据链路已经通了4. 第二步安装 Grafana 并连接数据源数据有了现在需要一个更强大的工具来展示它们。Grafana 的安装通常通过包管理器会更方便。4.1 安装与启动 Grafana这里以 CentOS/RHEL 系列为例Ubuntu/Debian 系列请参考官网的 apt 命令。# 1. 添加 Grafana 的 yum 仓库 sudo vim /etc/yum.repos.d/grafana.repo将以下内容写入文件[grafana] namegrafana baseurlhttps://packages.grafana.com/oss/rpm repo_gpgcheck1 enabled1 gpgcheck1 gpgkeyhttps://packages.grafana.com/gpg.key sslverify1 sslcacert/etc/pki/tls/certs/ca-bundle.crt# 2. 安装 Grafana sudo yum install -y grafana # 3. 启动并启用服务 sudo systemctl start grafana-server sudo systemctl enable grafana-server # 4. 检查状态和端口 sudo systemctl status grafana-server sudo netstat -tlnp | grep 3000安装完成后访问http://你的服务器IP:3000。默认登录账号和密码都是admin。首次登录会要求你修改密码。4.2 添加 Prometheus 作为数据源这是连接 Grafana 和 Prometheus 的关键一步。登录 Grafana 后点击左侧导航栏的齿轮图标 “Configuration”选择 “Data sources”。点击 “Add data source”。在列表中选择 “Prometheus”。在配置页面只有一个必填项URL。这里填写你的 Prometheus 服务的地址通常是http://localhost:9090如果 Grafana 和 Prometheus 装在同一台服务器。如果分开放置则填写 Prometheus 服务器的实际 IP 和端口例如http://192.168.1.100:9090。其他选项如 “Auth”, “Scrape interval” 可以先保持默认。滑动到页面底部点击 “Save test”。如果出现绿色的 “Data source is working” 提示框说明连接成功。4.3 导入现成的监控仪表盘Dashboard从头创建一个图表太慢Grafana 社区有大量现成的、精美的仪表盘模板我们可以直接导入。点击左侧导航栏的 “” 号选择 “Import”。在 “Import via grafana.com” 输入框中输入仪表盘 ID。对于服务器监控最经典的就是Node Exporter Full仪表盘。它的 ID 是1860。你也可以在 Grafana Dashboards 官网 搜索 “node exporter” 找到更多。点击 “Load”。在下一个页面选择我们刚刚添加的 Prometheus 数据源然后点击 “Import”。瞬间一个包含 CPU、内存、磁盘、网络、系统负载等全方位信息的监控大盘就出现在你面前了。图表是自动刷新的你可以直观地看到服务器的实时状态和历史趋势。5. 第三步配置与优化让监控真正可用到这一步可视化面板已经有了。但要让这个监控系统真正“可用”而不是一个好看的玩具还需要做一些配置和优化。5.1 监控更多服务器目前我们只监控了 Prometheus 所在的这一台服务器。要监控其他服务器步骤是重复的在被监控服务器上按照3.2节的步骤安装并启动 Node Exporter。确保其 9100 端口可被 Prometheus 服务器访问检查防火墙。在 Prometheus 服务器上编辑prometheus.yml配置文件在node_exporter这个 job 的targets列表里添加新服务器的 IP 和端口。- job_name: node_exporter static_configs: - targets: [localhost:9100, 192.168.1.101:9100, 192.168.1.102:9100] # 添加新服务器 labels: group: production-servers # 可以给这组服务器打上标签便于在 Grafana 中筛选保存配置后重启 Prometheus 服务sudo systemctl restart prometheus。回到 Prometheus 的 Targets 页面或 Grafana 的仪表盘等待片刻新服务器的指标就会出现。在 Grafana 的仪表盘左上角通常会有变量下拉框如instance或job可以选择查看不同服务器的数据。5.2 调整数据保留策略与存储Prometheus 默认将数据存储在本地保留时间为 15天。对于生产环境你可能需要调整。编辑 Prometheus 启动参数在prometheus.service文件中--storage.tsdb.retention.time30d将数据保留时间改为 30 天。--storage.tsdb.path/data/prometheus将数据目录迁移到更大容量的磁盘分区。修改后记得sudo systemctl daemon-reload和sudo systemctl restart prometheus。注意对于数据量非常大或需要长期存储的场景需要考虑远程存储方案如 Thanos, Cortex, M3DB但这超出了“三天速通”的范围先让本地版本稳定运行起来是第一步。5.3 Grafana 告警规则初探可选Grafana 自 8.0 版本后内置了强大的告警引擎。你可以在仪表盘上直接为某个图表设置告警。例如想监控 CPU 使用率在仪表盘上编辑 CPU 使用率的图表。找到 “Alert” 标签页点击 “Create alert”。配置规则比如 “当最近5分钟的 CPU 平均使用率 80% 时触发”。设置通知渠道比如邮件、钉钉、Slack、Webhook 等需要先在 “Configuration” - “Alerting” - “Contact points” 中配置好。告警是一个深水区初期可以先了解配置流程。更复杂的告警规则如基于 PromQL 的聚合判断通常在 Prometheus 的rules.yml文件中定义然后由 Alertmanager 处理这是后续进阶的内容。6. 常见问题排查与日常维护要点即使按照教程一步步来也可能遇到问题。这里列出几个高频卡点和我自己的排查顺序。6.1 服务启动失败或状态异常现象sudo systemctl status XXXX显示failed或inactive。排查顺序看日志sudo journalctl -u prometheus -n 50 --no-pager以 prometheus 为例。日志是定位问题的第一手资料。常见错误permission denied检查数据目录/usr/local/prometheus/data的所属用户和权限是否为prometheus。address already in use端口冲突。检查是否有其他程序占用了 9090 或 9100 端口sudo netstat -tlnp | grep :9090。error loading config配置文件prometheus.yml格式错误通常是缩进必须是空格不能是 Tab或冒号后缺少空格。可以用promtool check config /usr/local/prometheus/prometheus.yml命令检查语法。检查依赖确保系统时间同步timedatectl status某些证书验证或时间序列依赖正确的时间。检查资源df -h看磁盘空间是否满了free -h看内存是否严重不足。6.2 Prometheus Targets 显示 DOWN现象Prometheus Web UI 的 Targets 页面某个 target 状态为红色 DOWN。排查顺序网络连通性在 Prometheus 服务器上用curl http://目标IP:目标端口如curl http://192.168.1.101:9100测试是否能访问到被监控端的暴露接口。如果不通检查目标服务器的 Node Exporter 服务是否运行sudo systemctl status node_exporter。目标服务器的防火墙是否放行了 9100 端口。如果是云服务器检查安全组Security Group规则。配置错误检查prometheus.yml中targets的 IP 和端口是否写错。抓取超时如果网络延迟大或目标服务器负载极高可能导致抓取超时。可以在prometheus.yml的scrape_configs下为 job 增加scrape_timeout参数如scrape_timeout: 30s。6.3 Grafana 中看不到数据或报错现象Grafana 图表显示 “No data” 或查询报错。排查顺序检查数据源在 Grafana 的 “Data sources” 设置中测试 Prometheus 数据源连接是否成功。检查查询语句在仪表盘编辑模式查看图表的查询语句Query。确认指标名称如node_cpu_seconds_total拼写正确。最简单的验证方法是回到 Prometheus 的 Graph 页面输入相同的指标名看是否有数据。检查时间范围确认 Grafana 右上角的时间范围选择器没有设到一个很久以前的时间段。检查标签匹配如果你的 Prometheus 配置了labelsGrafana 查询中可能需要用对应的标签选择器例如{jobnode_exporter, instance192.168.1.101:9100}。6.4 日常维护建议日志轮转systemd 默认管理了服务日志但 Prometheus 自身也有日志输出。可以配置logrotate来管理其应用日志如果指定了输出文件的话。监控 Prometheus 自己别忘了Prometheus 本身也是一个需要被监控的服务。确保prometheus这个 job 在 Targets 里是 UP 状态。也可以为它设置简单的告警比如抓取失败或自身重启。定期备份配置prometheus.yml和 Grafana 的仪表盘可以通过 Export 功能导出 JSON 文件是核心资产定期备份。容量规划定期检查 Prometheus 数据目录的磁盘使用情况。估算公式每天数据量 ≈ 指标数量 × 样本大小 × 采集频率 × 86400秒。当磁盘使用超过 80% 时就要考虑清理旧数据或扩容存储。三天时间第一天完成基础安装和单机监控第二天配置多服务器监控和熟悉 Grafana 图表第三天研究告警和尝试优化配置这个节奏是完全可以实现的。最关键的是不要一开始就追求大而全先让最简单的流程跑起来看到数据在流动图表在更新你就有信心去解决后面更复杂的问题了。这套组合的灵活性很高等你用熟了再去探索 Kubernetes 监控、自定义业务指标、Alertmanager 告警路由等高级特性会顺畅很多。
返回列表