Grafana 9 从零部署到核心特性实战:一站式监控可视化指南
2026/9/8 22:47:47 网站建设 项目流程

1. 项目概述:为什么现在要关注 Grafana 9?

如果你正在监控服务器、追踪业务指标,或者只是想把你手头那些零散的数据变成一张张直观、酷炫的图表,那么 Grafana 这个名字你一定不陌生。作为开源可视化和监控分析领域的“扛把子”,它几乎成了数据可视化的代名词。最近,Grafana 9 的发布带来了不少让人眼前一亮的新特性,无论是界面交互的流畅度,还是数据探索的深度,都有了显著的提升。我最近刚把生产环境的一套监控仪表板从 Grafana 8 升级到了 9,整个过程下来,感觉就像给老伙计换了一套更趁手、更智能的工具,很多以前需要绕弯子或者写复杂查询才能实现的效果,现在变得简单直接。

这篇文章,我就以一个一线运维和开发者的视角,带你从零开始,完成 Grafana 9 最新版的下载、安装、配置,并重点体验那些让我觉得“真香”的新特性。无论你是第一次接触 Grafana 的新手,还是考虑从旧版本升级的老用户,都能在这里找到可以直接“抄作业”的步骤和避坑指南。我们的目标很明确:让你用最短的时间,把 Grafana 9 稳稳地跑起来,并立刻感受到它带来的效率提升。

2. 部署前准备:环境与方案选型

在真正动手下载安装包之前,花几分钟时间规划一下部署方案,能避免后续很多不必要的麻烦。Grafana 的部署方式非常灵活,你需要根据你的团队规模、技术栈和运维习惯来选择。

2.1 环境与依赖检查

Grafana 9 对运行环境的要求并不苛刻,但提前确认可以确保安装过程一帆风顺。

  • 操作系统:官方支持 Linux(主流的发行版如 Ubuntu、CentOS/RHEL、Debian)、Windows 和 macOS。对于生产环境,Linux 是绝对的主流选择,社区支持和文档也最丰富。我个人的生产服务器全部采用 Ubuntu 20.04 LTS 或 22.04 LTS,长期运行非常稳定。
  • 处理器与内存:这完全取决于你的数据源数量和仪表板的复杂度。对于个人学习或小型项目,2核CPU、4GB内存的虚拟机就足够了。但如果你的 Grafana 需要连接十几个 Prometheus 实例,同时渲染上百个面板,那么建议至少配置4核CPU、8GB内存。内存不足是导致 Grafana 界面卡顿的最常见原因。
  • 存储:Grafana 本身不存储时序数据(那是 Prometheus、InfluxDB 等数据源的工作),它主要存储仪表板配置、用户信息、组织数据、插件等元数据。默认使用内嵌的 SQLite 数据库,这对于单机、轻量级使用完全没问题。对于任何严肃的生产环境,我强烈建议将数据库切换到 MySQL 或 PostgreSQL。这不仅能提升性能和可靠性,更是后续进行高可用部署的基础。你需要为数据库准备独立的存储空间。
  • 网络:确保你的服务器可以访问你需要连接的所有数据源(如 Prometheus、MySQL、Elasticsearch 的地址和端口)。同时,考虑 Grafana 服务本身将对哪个网络(如公司内网或互联网)提供服务,这关系到后续的防火墙和安全配置。

2.2 部署方案选型解析

现在我们来看看几种主流的部署方式,以及它们各自的适用场景。

  1. 直接安装包部署(本次演示采用)

    • 是什么:直接从 Grafana 官网下载对应操作系统(.deb, .rpm, .exe, .pkg)的安装包进行安装。
    • 为什么选它这是最经典、最直接、最适合新手和快速单机部署的方式。安装过程标准化,服务管理(systemd)集成好,升级路径清晰。本次教程将以此方式在 Ubuntu 22.04 上展开,其步骤和思路可以轻松迁移到其他系统。
    • 注意事项:你需要自行管理依赖、备份和升级。对于单一服务器场景,它的复杂度最低。
  2. Docker 容器化部署

    • 是什么:使用 Docker 拉取官方grafana/grafana镜像并运行容器。
    • 为什么选它环境隔离极好,部署速度极快,非常适合在云环境、CI/CD 流水线中快速搭建测试或临时环境。通过docker-compose可以轻松编排 Grafana 与其数据库(如 Postgres 容器)。
    • 实操心得:务必通过卷挂载(Volume)grafana.ini配置文件、插件目录 (/var/lib/grafana/plugins) 和数据目录 (/var/lib/grafana) 持久化到宿主机,否则容器重启后所有配置都会丢失。命令示例:docker run -d -p 3000:3000 -v /your/path/grafana.ini:/etc/grafana/grafana.ini -v /your/path/data:/var/lib/grafana --name=grafana grafana/grafana-enterprise
  3. Kubernetes 编排部署

    • 是什么:在 K8s 集群中通过 Helm Chart 或原生 YAML 文件部署 Grafana,通常与 Prometheus Operator 等监控栈一起使用。
    • 为什么选它这是云原生时代生产环境的标准答案,提供了无缝的弹性伸缩、高可用和声明式配置管理。如果你已经在使用 K8s 管理你的应用,那么 Grafana 也应该纳入其中。
    • 注意事项:复杂度较高,需要具备 K8s 运维知识。重点在于配置 ConfigMap 存储配置文件、PersistentVolumeClaim 存储数据,以及 Ingress 对外暴露服务。

提示:对于绝大多数个人开发者、中小团队或初次使用者,从“直接安装包部署”开始是最佳选择。它能让你最清晰地理解 Grafana 的组件和文件结构,为后续更复杂的部署方式打下坚实基础。本教程后续内容均基于此方案。

3. 一步步安装与初始配置 Grafana 9

理论准备就绪,我们开始动手。以下操作在 Ubuntu 22.04 LTS 系统上完成,其他 Linux 发行版的命令仅有包管理器的区别(如 CentOS 用yum),核心步骤一致。

3.1 下载与安装

首先,我们需要将 Grafana 的官方 APT 仓库添加到系统中,这样可以通过包管理器方便地安装和未来升级。

# 1. 安装必要的依赖包 sudo apt-get install -y software-properties-common wget # 2. 添加 Grafana 的官方 GPG 密钥(用于验证软件包) sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key # 3. 将稳定版仓库添加到 APT 源列表 echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list # 4. 更新本地软件包缓存 sudo apt-get update # 5. 安装 Grafana 9 最新版 sudo apt-get install -y grafana

安装完成后,系统会创建一个名为grafana-server的 systemd 服务。但先别急着启动,我们最好先进行一些关键配置。

3.2 核心配置文件详解

Grafana 的主配置文件位于/etc/grafana/grafana.ini。在启动前修改它,是保证服务按我们预期运行的关键。我建议先备份原文件,然后使用sudo vimsudo nano进行编辑。

sudo cp /etc/grafana/grafana.ini /etc/grafana/grafana.ini.bak sudo vim /etc/grafana/grafana.ini

下面是我认为在初次部署时必须关注的几个核心配置项及其含义:

# 在 [server] 部分 [server] # HTTP 服务监听的端口,默认是 3000。如果此端口已被占用,可修改为其他端口,如 33000。 http_port = 3000 # 对外的完整 URL,用于构建重定向、邮件通知中的链接。如果是内网 IP 或域名,请务必修改。 # 例如:http://192.168.1.100:3000 或 https://grafana.your-company.com domain = your-server-ip-or-domain # 在 [database] 部分 - 生产环境关键! [database] # 默认使用 SQLite,路径如下。对于单机测试可以,生产环境请注释掉并配置下面的 mysql/postgres 部分。 # type = sqlite3 # path = /var/lib/grafana/grafana.db # 生产环境推荐使用 MySQL 或 PostgreSQL type = mysql host = 127.0.0.1:3306 # 你的数据库地址和端口 name = grafana_db # 数据库名 user = grafana # 数据库用户 password = your_strong_password_here # 如果使用 ssl,需要配置下面选项 # ssl_mode = disable # 在 [security] 部分 [security] # 管理员用户的初始密码。首次登录后必须修改! admin_password = admin # 强烈建议首次启动登录后立即修改! # 在 [auth.anonymous] 部分 - 用于公开仪表板 [auth.anonymous] # 是否启用匿名访问 enabled = false # 匿名访问对应的组织角色(Viewer, Editor, Admin) org_role = Viewer # 如果设置为 true,未登录用户只能看到这个组织下的仪表板 org_name = Main Org.

配置要点解析

  • domain:这个配置项非常容易忽略,但至关重要。如果你使用反向代理(如 Nginx)或通过 IP 访问,不设置正确的domain,可能会导致登录后无限重定向、插件无法加载等问题。最简单的做法是设置为服务器的 IP 地址和端口,如http://192.168.1.100:3000
  • 数据库:如果你决定为生产环境使用 MySQL/PostgreSQL,需要提前手动创建数据库和用户,并授予相应权限。例如对于 MySQL:
    CREATE DATABASE grafana_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'grafana'@'%' IDENTIFIED BY 'your_strong_password_here'; GRANT ALL PRIVILEGES ON grafana_db.* TO 'grafana'@'%'; FLUSH PRIVILEGES;
  • 匿名访问:根据需求谨慎开启。如果只是内部团队使用,保持enabled = false。如果需要将某个仪表板公开给外部用户查看(如公网状态页),可以开启并限制其角色为Viewer

3.3 启动服务与防火墙放行

配置保存后,就可以启动 Grafana 服务了。

# 1. 重载 systemd 配置,使新的服务文件生效 sudo systemctl daemon-reload # 2. 设置 Grafana 服务开机自启 sudo systemctl enable grafana-server.service # 3. 启动 Grafana 服务 sudo systemctl start grafana-server.service # 4. 检查服务运行状态,确认状态为 active (running) sudo systemctl status grafana-server.service

如果服务器开启了防火墙(如ufw),需要放行 Grafana 的端口(默认3000)。

sudo ufw allow 3000/tcp sudo ufw reload

现在,打开浏览器,访问http://<你的服务器IP>:3000。你应该能看到 Grafana 的登录页面。使用默认用户名admin和你在配置文件中设置的admin_password(默认为admin)进行登录。系统会强制要求你修改 admin 密码,请务必设置一个强密码并妥善保管。

4. Grafana 9 核心新特性深度体验

登录成功后,我们就进入了 Grafana 9 的全新界面。相比之前的版本,Grafana 9 在用户体验、数据探索和可观测性整合上下了很大功夫。下面我挑几个让我印象最深、最能提升日常效率的特性来详细说说。

4.1 全新的导航与界面布局

Grafana 9 最直观的变化就是左侧导航栏。它从之前的图标+文字混合模式,变成了更简洁、现代的全图标模式,鼠标悬停时才会显示文字标签。这个设计一开始可能需要适应几分钟,但习惯后会发现屏幕有效空间变大了,视觉干扰更少。

实操心得

  • 快速搜索(Command/Ctrl + K):这是导航效率的飞跃。在任何页面,按下Cmd+K(Mac) 或Ctrl+K(Windows/Linux),会弹出一个全局搜索框。你可以直接搜索仪表板名称、数据源、甚至面板内的查询语句,结果几乎实时呈现。对于管理着上百个仪表板的我来说,这个功能节省了大量滚动和点击的时间。
  • 星标与最近访问:在导航栏顶部,你可以快速访问“已加星标”和“最近访问”的仪表板。养成给你最核心、最常用的仪表板“加星标”的习惯,能极大缩短日常访问路径。

4.2 增强的“探索(Explore)”模式

“探索”模式是 Grafana 用于临时查询和故障排查的利器。在 9.x 版本中,它变得更加强大。

  • 拆分视图:现在你可以将“探索”界面水平或垂直拆分,同时运行两个独立的查询。这在对比不同时间段的指标、或者同时查看应用日志和关联的性能指标时极其有用。例如,左边查询某个微服务的错误率,右边查询同一时间段该服务的响应延迟,因果关系一目了然。
  • 查询历史与收藏:所有在“探索”中运行过的查询都会被自动保存。你可以回溯历史查询,甚至将常用的查询语句“收藏”起来,下次一键复用。这避免了重复编写复杂 PromQL 或 LogQL 语句的麻烦。
  • 实时尾随日志:如果你使用 Loki 作为日志数据源,“探索”模式下的日志面板现在支持真正的实时尾随(Live Tail),日志条目会像tail -f命令一样自动滚动更新,对于追踪正在发生的错误流非常直观。

4.3 改进的告警管理与统一化

Grafana 的告警引擎在 9.x 版本中继续演进,目标是提供更统一、更强大的告警管理体验。

  • Grafana 托管告警:这是默认且推荐的告警方式。告警规则直接在 Grafana 中定义、管理和评估,不再依赖外部告警管理器(如 Prometheus Alertmanager)。它的优势在于配置更简单直观,与仪表板、数据源集成度更高。
    • 如何创建:在仪表板中编辑任何一个图形面板,在右侧的“警报”选项卡中,点击“创建警报规则”。你可以基于该面板的查询直接定义条件(如avg() of query(A, 5m, now) IS ABOVE 0.8)。
    • 通知策略:你可以在“警报”->“通知策略”中,精细地配置谁、在什么情况下、通过什么渠道(如 Slack, Email, Webhook)收到告警。可以基于标签(如team=backend,severity=critical)进行路由。
  • 与外部告警器的集成:Grafana 仍然可以完美地作为 Prometheus Alertmanager 或其他告警系统的可视化前端。你可以在“警报”->“警报规则”中看到来自这些系统的告警,并在统一的界面中进行静默、管理。

避坑指南

  • 数据源权限:Grafana 托管告警需要对应的数据源具有“查询(Query)”权限。确保你的数据源账号(如 Prometheus)有足够的权限执行告警规则中定义的查询。
  • 评估频率:在告警规则配置中,注意“评估间隔”设置。太频繁(如5秒)会给数据源和 Grafana 自身带来压力;太稀疏(如5分钟)可能导致告警不及时。对于业务监控,1分钟间隔是一个不错的起点。

4.4 面板与可视化功能的增强

  • “值映射(Value mappings)”功能升级:现在你可以为字段值创建更丰富的映射关系。例如,当某个状态字段的值为1时,不仅可以将文本显示为“健康”,还可以将整个表格行或状态图的颜色设置为绿色。这让状态展示的语义更加清晰。
  • “数据链接(Data links)”更灵活:你可以在图表的数据点上右键,通过数据链接快速跳转到其他相关的仪表板、系统或日志查询,并自动携带上下文变量(如时间范围、标签值),构建了真正可交互的监控拓扑。
  • 新的“状态时间线(State timeline)”面板:这个面板专门用于可视化系统或服务在不同时间点的状态变迁,比如 Pod 的生命周期(Pending, Running, Succeeded, Failed),非常直观。

5. 连接第一个数据源与创建仪表板

Grafana 本身不产生数据,它的魅力在于连接和可视化。让我们以最流行的监控数据源Prometheus为例,完成从连接到可视化的全过程。

5.1 添加 Prometheus 数据源

  1. 点击左侧导航栏的齿轮图标(配置)-> “Data sources”。
  2. 点击右上角的 “Add data source”。
  3. 在列表中选择 “Prometheus”。
  4. 在配置页面,最关键的一项是 “HTTP” -> “URL”。填入你的 Prometheus 服务器地址,例如http://localhost:9090(如果 Prometheus 运行在同一台机器)或http://your-prometheus-ip:9090
  5. 向下滚动,可以配置其他选项如“Scrape interval”,但通常保持默认即可。
  6. 点击最下方的 “Save & test”。如果配置正确,你会看到一个绿色的提示框,显示 “Data source is working”。

5.2 创建你的第一个仪表板

  1. 点击左侧导航栏的 “+” 号 -> “Dashboard”。
  2. 点击 “Add new panel”。
  3. 现在你进入了面板编辑界面。
    • 数据源:选择刚才添加的 “Prometheus”。
    • 查询编辑器:在 “Metrics browser” 中输入一个 PromQL 表达式,例如up,这个指标可以告诉你 Prometheus 抓取的各个 target 是否健康。点击 “Run queries”,下方应该会出现一个表格或图形。
    • 可视化类型:在右侧的 “Visualization” 下拉菜单中,可以尝试切换不同的图表类型,比如 “Time series”(折线图)、“Stat”(统计值)、“Table”(表格)。对于up指标,“Stat” 或 “Table” 可能更直观。
  4. 配置面板标题:在右侧 “Panel options” -> “Title” 中输入,如 “服务健康状态”。
  5. 点击右上角的 “Apply” 保存这个面板到仪表板。
  6. 回到仪表板页面,点击顶部的 “Save dashboard” 图标(软盘形状),为你的仪表板起个名字并保存。

一个实用的进阶示例:让我们创建一个更实用的面板,监控服务器的 CPU 使用率。假设你使用 Node Exporter 暴露了主机指标。

  1. 在仪表板添加一个新面板。
  2. 在查询框中输入:
    100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
    这个 PromQL 查询计算的是非空闲CPU时间的百分比,即CPU使用率。
  3. 可视化类型选择 “Time series”。
  4. 在右侧 “Standard options” 中,可以设置 “Unit” 为 “Percent (0-100)”,这样Y轴就会显示百分比。
  5. 在 “Legend” 设置中,可以修改图例格式,比如{{instance}}来只显示实例名。
  6. 保存面板和仪表板。

6. 常见问题排查与运维技巧

即使按照步骤操作,在实际部署和日常使用中也可能遇到一些问题。这里记录了几个我踩过的坑和解决方法。

6.1 安装与启动问题

  • 问题:访问http://ip:3000无法连接。

    • 检查1:服务状态:运行sudo systemctl status grafana-server,确认服务是active (running)。如果不是,查看日志sudo journalctl -u grafana-server -f寻找错误信息。
    • 检查2:端口监听:运行sudo ss -tlnp | grep 3000,看是否有进程在监听3000端口。如果没有,可能是 Grafana 没启动或配置了其他端口。
    • 检查3:防火墙:确认服务器防火墙和云服务商的安全组(Security Group)已放行3000端口。
  • 问题:登录后出现“无效的 CSRF token”或页面循环重定向。

    • 原因:这几乎总是因为grafana.ini中的domainroot_url配置不正确。Grafana 用这个值来构建内部链接和校验请求来源。
    • 解决:检查并修正grafana.ini中的domain配置,确保它与你浏览器地址栏中访问的地址(IP或域名)完全一致(包括协议 http/https)。修改后重启服务sudo systemctl restart grafana-server

6.2 数据源与查询问题

  • 问题:添加数据源时测试失败,提示“连接被拒绝”或“超时”。

    • 解决
      1. 从 Grafana 服务器上,用curltelnet命令测试是否能连通数据源地址端口,例如curl http://prometheus-host:9090/api/v1/status/config
      2. 检查数据源服务本身是否正常运行。
      3. 检查网络策略、防火墙是否阻止了 Grafana 服务器到数据源服务器的连接。
  • 问题:图表中显示“No data”。

    • 排查步骤
      1. 检查查询语句:在面板编辑器中,点击查询编辑器旁的 “Query inspector” 按钮。在 “Data” 标签页下,查看原始查询返回的 JSON 数据是否为空。这能帮你判断是数据源没数据,还是 Grafana 渲染问题。
      2. 检查时间范围:确认仪表板右上角的时间选择器范围是否合理。如果选择了未来的时间或者很久以前没有数据的时间段,自然会没数据。
      3. 检查指标名:确认你查询的指标名称在数据源中确实存在。Prometheus 可以通过http://your-prometheus:9090/api/v1/label/__name__/values查看所有指标名。

6.3 性能与优化建议

  • 现象:Grafana 界面加载缓慢,特别是打开复杂仪表板时。

    • 可能原因与优化
      1. 面板过多:一个仪表板内尽量不要放置超过20个面板。可以考虑拆分仪表板,或使用“行(Row)”进行折叠收纳。
      2. 查询过于复杂或范围太大:避免在单个查询中拉取过长时间范围(如30d)的高基数数据(即标签组合非常多的时间序列)。优化 PromQL,使用rate()increase()等函数时,合理设置区间向量选择器(如[5m])。
      3. 数据库瓶颈:如果使用 SQLite,在频繁读写后可能变慢。生产环境务必迁移到 MySQL/PostgreSQL
      4. 资源不足:监控 Grafana 服务器本身的 CPU 和内存使用情况。可以通过 Grafana 自己监控自己(添加localhost:3000的 Prometheus 数据源,抓取 Grafana 自身的指标)。
  • 定期备份:你的核心资产是仪表板配置和用户数据。定期备份以下目录:

    • /var/lib/grafana/grafana.db(SQLite 数据库文件)
    • /var/lib/grafana/dashboards/(如果以文件形式存储了仪表板)
    • 整个/etc/grafana/目录(配置文件) 对于生产环境,建议将仪表板全部通过 Grafana 的 “Dashboard Settings” -> “JSON Model” 导出为 JSON 文件,并纳入版本控制系统(如 Git)进行管理。

从下载安装到核心配置,再到深度体验新特性并连接真实数据,Grafana 9 的整个部署和上手过程其实非常顺畅。它最大的魅力在于将复杂的数据监控变得平民化和可视化。我个人在升级后,最深的体会是“探索”模式的拆分视图和全局搜索这两个小功能,它们实实在在地缩短了我日常排查问题的时间。如果你还在使用旧版本,9.x 的新界面和增强的告警功能绝对值得你花时间升级体验。下一步,你可以尝试安装一些实用的插件(如时钟面板、流程图面板),或者探索如何将告警通知接入你们团队的钉钉、企业微信,让监控系统真正“活”起来,主动找你报告问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询