十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

从零部署Prometheus+Grafana监控系统:原理、安装与生产实践

从零部署Prometheus+Grafana监控系统:原理、安装与生产实践 1. 从零到一为什么选择PrometheusGrafana这套监控组合如果你正在搭建一套新的服务或者管理着几台服务器迟早会面临一个问题我怎么知道它们现在运行得好不好CPU是不是快爆了内存是不是悄悄被吃光了服务是不是还活着以前你可能得手动登录服务器敲一堆top、df、ps命令或者写一些简陋的脚本把数据记到日志里。这种方式对付一两台机器还行一旦服务多了、架构复杂了简直就是灾难。你需要一个能自动采集、集中存储、并且能直观展示数据的系统。这就是监控系统的核心价值。在开源监控领域Prometheus和Grafana的组合几乎是当前事实上的标准。我这么说不是因为它最流行而是因为这套组合在设计和实践上确实解决了很多实际问题。Prometheus负责“抓取”和“存储”指标数据它采用拉模型Pull主动从配置好的目标比如你的应用、服务器、数据库上拉取指标。这种设计让被监控端变得很简单只需要暴露一个HTTP端点通常是/metrics即可。Grafana则负责“展示”它本身不存储数据而是作为一个强大的可视化仪表板可以从Prometheus以及其他多种数据源查询数据并绘制成精美的图表。为什么是它们俩首先生态极其丰富。从操作系统、数据库、中间件如Nginx, Redis, MySQL到各种云服务和容器平台Kubernetes几乎都有现成的Exporter可以理解为适配器能直接把内部状态转换成Prometheus能理解的格式。这意味着你不需要为每一个组件都从头写监控代码。其次查询语言强大。Prometheus自带一种叫PromQL的查询语言非常灵活你可以用它做各种数据聚合、计算和预测比如“计算过去5分钟每秒的平均请求数”、“预测磁盘空间还能用多久”。最后告警能力集成。Prometheus内置了Alertmanager可以基于你设定的规则比如CPU使用率超过80%持续5分钟触发告警并通过邮件、钉钉、微信等渠道通知你。所以无论你是想监控一个简单的个人博客还是一个微服务集群从PrometheusGrafana开始都是一个非常扎实且面向未来的选择。接下来我会带你从最干净的Linux环境开始一步步完成这套监控系统的部署和基础配置。整个过程我会尽量详细包括我踩过的坑和最佳实践目标是让你部署完就能用起来并且理解每一步在做什么。2. 部署环境规划与前期准备在真正动手安装之前花几分钟规划一下环境能避免后面很多麻烦。很多人一上来就wget、tar、启动结果发现端口冲突、目录不对、权限问题折腾半天又得重来。2.1 系统与环境假设我假设你有一台全新的、干净的CentOS 7或者Ubuntu 20.04/22.04 LTS服务器。这是目前企业环境中最常见的两类Linux发行版步骤具有代表性。如果你的系统是RHEL、Debian或者其他变种大部分命令也是通用的可能只是包管理器的命令yumvsapt稍有不同。我将以CentOS 7为主要操作环境进行演示并在关键差异处指出Ubuntu的区别。这台服务器需要满足以下最低要求CPU: 1核以上现代云服务器最低配通常为1核。内存: 2GB以上。Prometheus和Grafana本身不占太多内存但你的监控数据量大了之后尤其是查询复杂图表时内存会消耗较多。2GB是保证流畅体验的起步线。磁盘: 20GB以上。监控数据是时间序列数据会持续增长。你需要为Prometheus的数据目录默认在/data下我们后面会改预留足够的空间。如果监控目标多、采集频率高数据增长会很快。网络: 服务器需要能访问外网以下载安装包同时你部署的应用/服务器需要能和这台监控服务器的对应端口通信默认为Prometheus的9090端口和Grafana的3000端口。注意生产环境强烈建议将Prometheus的数据目录挂载到独立的、容量较大的磁盘分区上避免因日志或系统文件增长导致监控数据磁盘被写满。2.2 关键决策安装方式选型安装Prometheus和Grafana主要有三种方式二进制包直接部署、使用Docker容器化部署、通过系统包管理器如yum/apt安装。网络热词里也提到了Docker和K8s部署这里我们先从最基础、最能理解原理的二进制包安装开始。二进制包安装这是最经典、最透明的方式。你需要手动下载官方编译好的可执行文件自己管理配置文件、数据目录和启动服务。优点是过程清晰你对整个系统的文件结构、配置有完全的控制权排错时一目了然。缺点是需要手动配置系统服务systemd步骤稍多。这是本教程采用的方式因为它能让你最深刻地理解这套系统是如何组织起来的。Docker安装非常流行尤其适合在已经容器化的环境中快速部署。你只需要docker run两条命令配合数据卷挂载几分钟就能跑起来。优点是极其快速、隔离性好、版本管理方便。缺点是对Docker有依赖且配置文件、数据持久化需要额外处理卷volume对初学者来说黑盒程度稍高出了问题可能不知道从何查起。包管理器安装有些Linux发行版的社区仓库或第三方仓库如EPEL提供了Prometheus和Grafana的包。优点是集成度高安装卸载方便。缺点是版本可能不是最新的配置文件的位置可能和官方标准有差异。对于学习和理解原理我强烈推荐从二进制安装开始。走通一遍之后你再换成Docker部署会发现一切都很简单。2.3 服务器初始化配置在开始安装监控软件前我们先对服务器做一些基础的、必要的配置。1. 关闭防火墙或放行端口仅用于实验环境在生产环境你应该配置防火墙规则只开放必要的端口。但为了简化实验我们可以先临时关闭防火墙学习完成后请务必重新打开并配置规则。CentOS 7:# 停止firewalld服务 sudo systemctl stop firewalld # 禁止开机启动 sudo systemctl disable firewalldUbuntu:# Ubuntu通常使用ufw sudo ufw disable2. 关闭SELinux仅用于实验环境SELinux是增强的安全模块但在初期配置时可能会带来权限困扰。我们同样先将其设置为宽松模式。CentOS 7:# 临时设置为宽松模式 sudo setenforce 0 # 永久禁用需要重启生效编辑配置文件 sudo sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config提示生产环境建议在了解SELinux规则后配置适当的策略而不是直接关闭。3. 创建专用系统用户为了安全我们不建议使用root用户直接运行Prometheus和Grafana。创建一个没有登录权限的专用用户来运行这些服务是更佳实践。# 创建名为prometheus的用户组和用户并指定其家目录为/opt/prometheus一个常见位置 sudo groupadd --system prometheus sudo useradd -s /sbin/nologin --system -g prometheus -d /opt/prometheus prometheus # 创建名为grafana的用户组和用户 sudo groupadd --system grafana sudo useradd -s /sbin/nologin --system -g grafana -d /opt/grafana grafana这里/sbin/nologinshell确保了该用户无法用于登录系统--system标志表示这是一个系统用户。准备工作就绪现在我们可以开始安装核心组件了。3. Prometheus的安装与核心配置详解Prometheus是整个监控体系的数据引擎我们先把它装好并配置明白。3.1 下载与安装Prometheus服务器首先访问 Prometheus官方下载页面 。找到最新稳定版的Linux二进制文件。你可以直接在服务器上使用wget下载。以下以版本2.51.2为例请务必检查官网获取最新版本号。# 进入一个临时目录比如/usr/local/src cd /usr/local/src # 下载Prometheus压缩包 sudo wget https://github.com/prometheus/prometheus/releases/download/v2.51.2/prometheus-2.51.2.linux-amd64.tar.gz # 下载完成后验证文件的完整性可选但推荐。你需要从同一发布页面找到对应的sha256sums文件核对哈希值。 # sudo wget https://github.com/prometheus/prometheus/releases/download/v2.51.2/sha256sums.txt # sudo sha256sum -c sha256sums.txt 21 | grep prometheus-2.51.2.linux-amd64.tar.gz # 解压压缩包 sudo tar xvf prometheus-2.51.2.linux-amd64.tar.gz # 将解压后的目录移动到合适的安装位置并重命名为prometheus以简化路径 sudo mv prometheus-2.51.2.linux-amd64 /opt/prometheus # 进入安装目录 cd /opt/prometheus现在/opt/prometheus目录下应该有以下关键文件和目录prometheus主程序二进制文件。promtool用于检查配置、规则等的工具。prometheus.yml核心配置文件我们马上要修改它。consoles/和console_libraries/用于Web控制台的模板文件一般用不到。3.2 理解并配置prometheus.ymlprometheus.yml是Prometheus的大脑它定义了抓取什么、怎么抓取、存到哪里以及根据什么规则告警。让我们先看看默认配置并修改成我们需要的样子。使用cat或vim查看默认的prometheus.yml# my global config global: scrape_interval: 15s # 默认抓取间隔每15秒拉取一次目标指标 evaluation_interval: 15s # 规则评估间隔每15秒评估一次告警规则 # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # 默认注释掉了告警功能我们后续单独部署 # Load rules once and periodically evaluate them according to the global evaluation_interval. rule_files: # - first_rules.yml # - second_rules.yml # A scrape configuration containing exactly one endpoint to scrape: # Here its Prometheus itself. scrape_configs: # The job name is added as a label jobjob_name to any timeseries scraped from this config. - job_name: prometheus # metrics_path defaults to /metrics # scheme defaults to http. static_configs: - targets: [localhost:9090] # 默认只监控自己这个配置很简单全局设置每15秒采集一次然后定义了一个名为prometheus的抓取任务job目标是本机的9090端口也就是Prometheus自己。Prometheus会通过HTTP访问http://localhost:9090/metrics来获取自身的运行指标。现在我们要增加对Linux主机本身的监控。我们需要一个叫node_exporter的组件。它是一个独立的二进制程序运行在需要被监控的Linux主机上收集CPU、内存、磁盘、网络等系统指标并通过/metrics端点暴露出来。Prometheus再去抓取它。1. 首先下载并安装node_exporter。同样在/usr/local/src目录下操作cd /usr/local/src # 下载node_exporter以1.7.0版本为例 sudo wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz sudo tar xvf node_exporter-1.7.0.linux-amd64.tar.gz sudo mv node_exporter-1.7.0.linux-amd64 /opt/node_exporter2. 为node_exporter创建系统服务。这样它就能在后台运行并且开机自启。创建服务文件/etc/systemd/system/node_exporter.servicesudo vim /etc/systemd/system/node_exporter.service写入以下内容[Unit] DescriptionNode Exporter Afternetwork.target [Service] Userprometheus # 使用我们之前创建的prometheus用户来运行 Groupprometheus Typesimple ExecStart/opt/node_exporter/node_exporter # 可以在这里添加一些采集器参数例如--collector.systemd --collector.processes # 使用 node_exporter --help 查看所有可用的采集器 [Install] WantedBymulti-user.target启动并设置开机自启sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter sudo systemctl status node_exporter # 检查状态应该是active (running)现在node_exporter应该已经在运行并监听在9100端口。你可以用curl localhost:9100/metrics测试一下会看到大量以node_开头的指标输出。3. 修改prometheus.yml添加对node_exporter的抓取。编辑/opt/prometheus/prometheus.yml在scrape_configs部分添加一个新的jobscrape_configs: - job_name: prometheus static_configs: - targets: [localhost:9090] - job_name: node_exporter # 新增的job名字可以自定义会作为标签 static_configs: - targets: [localhost:9100] # node_exporter默认端口 labels: instance: monitor-server # 为这个目标添加一个实例标签便于区分多台主机实操心得instance标签非常重要当你有成百上千台服务器时仅靠job都是node_exporter无法区分具体是哪台机器。instance标签通常设置为目标的主机名或IP地址是定位问题主机的关键标识。3.3 创建Prometheus系统服务并启动和node_exporter一样我们也为Prometheus创建一个systemd服务以便管理。创建服务文件/etc/systemd/system/prometheus.servicesudo vim /etc/systemd/system/prometheus.service写入以下内容。这里有几个关键点需要注意[Unit] DescriptionPrometheus Server Documentationhttps://prometheus.io/docs/introduction/overview/ Afternetwork.target [Service] Userprometheus Groupprometheus Typesimple # 重点1指定配置文件路径 # 重点2指定数据存储目录。默认是./data相对路径我们最好指定一个绝对路径比如/opt/prometheus/data # 重点3通过--web.enable-lifecycle启用生命周期API允许通过HTTP API热重载配置后面会用到 ExecStart/opt/prometheus/prometheus \ --config.file/opt/prometheus/prometheus.yml \ --storage.tsdb.path/opt/prometheus/data \ --web.enable-lifecycle \ --web.listen-address:9090 Restarton-failure [Install] WantedBymulti-user.target解释一下关键参数--config.file指定配置文件路径必须准确。--storage.tsdb.path指定时间序列数据库TSDB的存储路径。务必确保这个目录存在且运行用户prometheus有读写权限。我们马上来创建并授权。--web.enable-lifecycle启用/-/reload端点允许我们通过发送POST请求到这个端点来热重载配置文件而无需重启服务。这在修改配置后非常有用。--web.listen-address指定监听地址和端口默认就是:9090这里显式写出更清晰。现在创建数据目录并设置权限sudo mkdir -p /opt/prometheus/data # 将/opt/prometheus目录及其下所有文件的所有权赋予prometheus用户和组 sudo chown -R prometheus:prometheus /opt/prometheus启动Prometheus服务sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus如果一切正常status命令会显示active (running)。现在打开你的浏览器访问http://你的服务器IP:9090你应该能看到Prometheus的Web UI了。在顶部导航栏点击“Status” - “Targets”你应该能看到两个状态为“UP”的目标prometheus和node_exporter。这证明Prometheus已经成功抓取到了它自己和主机的指标。4. Grafana的安装、数据源配置与仪表板创建有了数据源Prometheus我们现在需要一个强大的面板来展示它们。Grafana就是这个角色。4.1 下载与安装GrafanaGrafana提供了针对不同Linux发行版的仓库用包管理器安装是最方便的方式。这里我们以CentOS 7为例Ubuntu的步骤类似只是包管理命令和仓库添加方式不同。对于CentOS/RHEL/Fedora# 添加Grafana的官方仓库 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然后安装sudo yum install -y grafana对于Ubuntu/Debian# 安装必要的依赖 sudo apt-get install -y software-properties-common wget # 添加Grafana的GPG密钥 sudo wget -q -O /usr/share/keyrings/grafana.key https://packages.grafana.com/gpg.key # 添加稳定版仓库 echo deb [signed-by/usr/share/keyrings/grafana.key] 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 -y grafana安装完成后Grafana的相关文件会按照Linux标准存放二进制文件/usr/sbin/grafana-server配置文件/etc/grafana/grafana.ini数据目录/var/lib/grafana日志文件/var/log/grafana4.2 启动Grafana并进行初始登录Grafana同样使用systemd管理。# 启动Grafana服务 sudo systemctl start grafana-server # 设置开机自启 sudo systemctl enable grafana-server # 检查状态 sudo systemctl status grafana-server现在打开浏览器访问http://你的服务器IP:3000。默认端口是3000。你会看到Grafana的登录页面。首次登录的默认凭证是用户名admin密码admin输入后Grafana会强制要求你修改密码。请务必设置一个强密码并牢记。完成这一步后你就进入了Grafana的主界面。4.3 添加Prometheus作为数据源这是连接Grafana和Prometheus的关键一步。在Grafana首页点击左侧导航栏的齿轮图标Configuration然后选择Data Sources。点击蓝色的Add data source按钮。在列表中找到并点击Prometheus。在配置页面你只需要关注一个必填项HTTP - URL。填入你的Prometheus服务器的地址。因为Grafana和Prometheus安装在同一台机器上所以可以填http://localhost:9090。如果它们不在同一台机器请填写正确的IP和端口例如http://192.168.1.100:9090。其他选项如“Auth”、“Scrape interval”可以先保持默认。滚动到页面底部点击Save Test。如果一切配置正确你会看到一个绿色的提示框显示“Data source is working”。这表示Grafana已经成功连接到了你的Prometheus实例并且可以查询数据了。4.4 导入你的第一个仪表板空白的Grafana没什么用我们需要一个仪表板Dashboard来展示图表。从头创建一个仪表板对于新手来说有点复杂好在Grafana社区有海量现成的、优秀的仪表板模板我们可以直接导入。最常用、最经典的就是Node Exporter Full仪表板它专门用于展示node_exporter收集的系统指标。在Grafana首页点击左侧导航栏的“”号选择Import。在“Import via grafana.com”输入框中输入仪表板ID1860。这是Node Exporter Full仪表板在Grafana官网的ID。你也可以输入8919这是一个更简洁、更流行的版本。这里我们以1860为例。点击Load。在下一个页面为仪表板选择一个名字可以保持默认最关键的是在底部选择我们刚刚添加的Prometheus数据源。然后点击Import。瞬间一个包含CPU、内存、磁盘、网络、系统负载等全方位监控信息的精美仪表板就出现在你面前了图表都是基于PromQL查询自动生成的。你可以看到当前服务器的实时状态。踩坑实录导入仪表板后如果所有图表都显示“No data”请检查两个地方第一确认数据源选择是否正确第二确认Prometheus的scrape_configs里job_name是否为node_exporter以及instance标签的值是否与仪表板查询中的过滤条件匹配。社区仪表板的查询语句里通常会包含jobnode_exporter这样的标签选择器。5. 生产环境进阶配置与优化要点基础的安装和配置已经完成但要让这套系统在生产环境中稳定、可靠地运行还需要做一些额外的功课。这部分内容往往在简单教程里被忽略但却是区分“能用”和“好用”的关键。5.1 Prometheus数据持久化与存储优化Prometheus默认将数据存储在本地TSDB中。随着时间的推移数据量会越来越大。1. 数据保留时间配置在Prometheus启动参数或配置文件中可以设置数据保留时长。编辑prometheus.service文件在ExecStart行添加参数--storage.tsdb.retention.time15d这表示只保留15天的原始数据。对于监控数据通常保留15天到1个月已经足够用于问题回溯。更久远的数据可以考虑使用更廉价的长期存储方案如Thanos、Cortex或VictoriaMetrics。修改服务文件后需要重载并重启sudo systemctl daemon-reload sudo systemctl restart prometheus2. 数据目录规划如前所述/opt/prometheus/data目录应该位于一个独立的大容量磁盘分区上。避免使用根分区/以防监控数据写满导致系统崩溃。你可以通过挂载新磁盘到该目录来实现。3. 启用压缩和WAL预写日志这些是默认开启的但你需要知道它们的作用。WAL确保了在Prometheus崩溃时最近的数据不会丢失。压缩则定期合并数据块提升查询效率。通常不需要手动干预。5.2 Grafana安全与用户管理默认的admin/admin密码是极其危险的。1. 强制修改默认密码我们已经在首次登录时做过了。2. 创建只读或编辑权限的用户对于团队协作不要所有人都用admin账号。 * 点击左侧导航栏的Administration盾牌图标 -Users and access-Users。 * 点击New user创建新用户并为其分配适当的角色Viewer只读Editor可编辑仪表板Admin全权限。3. 配置外部认证可选Grafana支持LDAP、OAuth如GitHub, Google等多种外部认证方式可以集成到公司的统一登录系统中。这需要在/etc/grafana/grafana.ini配置文件中进行详细配置。5.3 配置告警规则与Alertmanager集成监控的最终目的不仅是“看”更是“知”。当出现问题时系统应该能主动通知我们。这需要两步在Prometheus中定义告警规则并配置Alertmanager来处理和发送告警。1. 在Prometheus中定义告警规则首先创建一个规则文件例如/opt/prometheus/rules/node_alerts.yml。sudo mkdir -p /opt/prometheus/rules sudo vim /opt/prometheus/rules/node_alerts.yml写入一个简单的规则监控主机是否存活groups: - name: node_alerts rules: - alert: InstanceDown expr: up{jobnode_exporter} 0 for: 1m # 持续1分钟条件满足才触发告警避免网络抖动误报 labels: severity: critical annotations: summary: Instance {{ $labels.instance }} down description: {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute.这个规则的意思是查询up指标Prometheus抓取目标的状态1为正常0为异常筛选jobnode_exporter的如果值等于0即失联并且持续了1分钟就触发一个名为InstanceDown的告警严重等级为critical。然后修改prometheus.yml让Prometheus加载这个规则文件rule_files: - rules/node_alerts.yml # 相对于prometheus.yml的路径2. 安装与配置AlertmanagerAlertmanager是一个独立的组件负责对告警进行去重、分组、静默并通过各种接收器Receiver发送通知。下载安装步骤与Prometheus类似从 官网 下载二进制包解压到/opt/alertmanager并创建系统服务。配置Alertmanager主要配置文件是alertmanager.yml。一个最简单的配置是发送邮件。你需要配置SMTP服务器信息、接收邮箱等。修改Prometheus配置在prometheus.yml中取消alerting部分的注释并指向Alertmanager的地址例如localhost:9093。启动服务启动Alertmanager并重载Prometheus配置通过curl -X POST http://localhost:9090/-/reload前提是启动时启用了--web.enable-lifecycle。3. 在Grafana中配置告警通道替代方案Grafana自身也具备强大的告警功能并且配置起来比PrometheusAlertmanager更直观。你可以在Grafana的仪表板图表上直接设置告警规则并配置通知渠道如钉钉、邮件、Webhook等。对于中小型系统或初学者直接从Grafana配置告警是一个更快的入门选择。5.4 监控Prometheus和Grafana自身监控系统本身也需要被监控。我们可以用Prometheus监控自己它已经做了也可以用Grafana监控自己。Prometheus自监控访问http://localhost:9090/targets确保prometheusjob是UP状态。还可以查看http://localhost:9090/graph输入prometheus_target_interval_length_seconds等指标来查看抓取性能。Grafana自监控Grafana内置了Metrics端点。你需要启用它并让Prometheus去抓取。编辑/etc/grafana/grafana.ini找到[metrics]部分将enabled设置为true并可以修改basic_auth等设置。然后在Prometheus的scrape_configs中添加一个新的job来抓取localhost:3000/metrics。6. 日常维护、故障排查与性能调优系统上线后日常的维护和问题排查是保证其长期稳定运行的关键。6.1 常用维护操作重载Prometheus配置当你修改了prometheus.yml或规则文件后不需要重启服务可以发送POST请求热重载curl -X POST http://localhost:9090/-/reload确保Prometheus启动时包含了--web.enable-lifecycle参数。查看服务日志这是排错的第一现场。# 查看Prometheus日志 sudo journalctl -u prometheus -f # 查看Grafana日志 sudo journalctl -u grafana-server -f # 查看node_exporter日志 sudo journalctl -u node_exporter -f清理旧数据Prometheus会自动根据保留策略清理数据。你也可以手动删除某个时间范围的数据块不推荐或者使用promtool工具操作TSDB。6.2 常见问题与排查思路问题1Prometheus Web UI或Targets页面无法访问。检查服务状态sudo systemctl status prometheus。检查端口监听sudo netstat -tlnp | grep 9090。检查防火墙确认9090端口已开放。查看日志journalctl -u prometheus看是否有错误信息。问题2Targets状态为“DOWN”。检查网络连通性从Prometheus服务器curl一下目标的/metrics端点例如curl http://localhost:9100/metrics。检查目标服务确保node_exporter等服务正在运行。检查配置确认prometheus.yml中targets的IP和端口是否正确。检查标签如果使用了instance标签确保格式正确。问题3Grafana图表显示“No data”。检查数据源在Grafana的Data Source页面点击“Save Test”测试连接。检查时间范围确保仪表板右上角的时间范围选择器设置正确例如“Last 1 hour”。检查PromQL在仪表板编辑模式下查看图表的查询语句尝试在Prometheus的Graph页面执行相同的PromQL看是否有数据返回。检查抓取间隔Prometheus的scrape_interval和Grafana图表的查询步长Step需要匹配。如果图表查询步长小于抓取间隔可能会没有数据。问题4磁盘空间增长过快。调整保留时间缩短--storage.tsdb.retention.time。评估抓取目标是否监控了太多不必要的高频指标可以在Exporter端通过参数禁用某些采集器collector。考虑降采样对于长期历史数据可以使用Recording Rule将高频数据聚合成低频数据存储。6.3 性能调优建议Prometheus内存Prometheus会将最近使用的数据缓存在内存中。如果监控目标非常多数千个或者查询非常复杂内存消耗会很大。监控process_resident_memory_bytes指标。如果内存不足考虑增加机器内存或使用联邦Federation架构拆分负载。Prometheus磁盘IO数据写入和压缩是IO密集型操作。使用SSD可以极大提升性能。Grafana查询性能避免在单个仪表板上放置过多图表尤其是查询范围很大如“Last 30 days”的图表。复杂的PromQL查询也会给Prometheus带来压力。合理使用Recording Rule预先计算常用聚合指标。抓取配置优化对于不同的监控目标可以设置不同的scrape_interval。例如基础设施指标可以15秒一次业务指标可以30秒或1分钟一次。在scrape_configs的每个job中可以通过scrape_interval覆盖全局设置。走到这里你已经完成了一个功能完整、可用于生产环境原型的监控系统搭建。从规划、安装、配置到优化每一步都包含了原理说明和实操细节。这套系统就像你运维世界的“眼睛”和“耳朵”能让你对系统的健康状况了如指掌。记住监控是一个持续迭代的过程随着业务增长你需要不断调整指标、优化仪表板、完善告警。现在你可以尝试去监控你的第一个应用比如一个Nginx或者MySQL服务只需要找到对应的Exporter加入到prometheus.yml的scrape_configs中然后在Grafana里导入相应的仪表板就能立即获得可视化监控能力了。
返回列表