Grafana 的使用
title: Grafana 的使用
category:
tag:
date: 2025-11-24
create_date: 2025-11-24 11:13
sort: 1
Grafana 的使用
读音:/ɡræfɑnɑ/
Grafana 是什么
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
Grafana 不对数据源作假设,它支持以下各种数据,也就是说如果你的数据源是以下任意一种,它都可以帮助生成仪表。同时在市面上,如果 Grafana 称第二,那么应该没有敢称第一的仪表可视化工具了。因此,如果你搞定了 Grafana,它几乎是一个会陪伴你到各个公司的一件称心应手的兵器。
Grafana 支持的数据源
- Prometheus
- Graphite
- OpenTSDB
- InfluxDB
- MySQL/PostgreSQL
- Microsoft SQL Server
- 等等
什么情况下会用到 Grafana 或者监控仪表盘
通常来说,对于一个运行时的复杂系统,你是不太可能在运行时一边检查代码一边调试的。因此,你需要在各种关键点加上监控。
用开车作为例子:车子本身是一个极其复杂的系统,而当你的车在高速上以 120 公里的速度狂奔时出现了噪音,你是不可能这时候边开车边打开发动机盖子来查原因的。通常来说,好一点的车会有内置电脑,在车子出问题时,告诉你左边轮胎胎压有问题,或是发动机缺水了之类。而这些检测,就是系统监控的一个例子。
对于驾驶员来说,他们开车时只关心几个指标:
- 我的位置是哪里,在路中间么(当然这个无法通过监控系统实现,得看路)
- 我的速度是多少 - 速度仪表盘
- 我的油、发动机水温等等关键指标是多少 - 其它仪表盘
通过仪表盘,你不一定能清楚地了解车子出问题的具体原因,但至少可以给你一个大概的方向。比如说,如果水温很高时出现了问题,你大概率可以尝试加点水降温来尝试是否解决问题。
把上面的车换成计算机系统或者一个软件系统也是一样:仪表盘就是你的速度表和水温表,通过这些表盘你可以实时了解你的系统运行情况。
仪表盘应用极广,我能想到的一些例子:
- 阿里在双十一控制室用了监控仪表盘,因此所有双十一的新闻基本上都可以看到这个仪表盘
- 各酷炫公司大厅里常常放一个仪表盘来展示实力(用户数啦、营收啦之类)
- 你的 PC 上的资源管理器、Mac 上的 Activity Monitor 都是某种意义上的仪表盘
综上,在任何需要监控系统运行状况的地方就大概率会用到仪表盘,而用到仪表盘的时候就可以用 Grafana (不管你用什么语言)
下面用一个服务器 CPU、内存等信息查看面板作为实践的例子,初步体验一下。目标是希望能快速的查看 CPU、内存的信息和最近的波动状况。因此,我们就需要添加这么一个仪表盘,能实时查看信息。
安装和配置 Prometheus、Grafana、数据采集工具
使用 docker、docker-compose 快速搭建。
Grafana 是个仪表控制系统,只用来展示。
数据源采用 prometheus (普罗米修斯),这是个时序数据库用于保存采集上来的数据。
采集系统信息使用 prometheus 提供出来的工具 node-exporter 作为系统信息采集工具
基于上述,编写 docker-compose.yml 文件
services:
prometheus:
image: prom/prometheus
container_name: prometheus
hostname: prometheus
ports:
- 9080:9090
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
prometheus-exporter:
image: prom/node-exporter
container_name: node-exporter
hostname: node-exporter
pid: host # 让容器共享宿主机的 PID 命名空间,node exporter 才能看到宿主机级别的进程信息
network_mode: host # 使用宿主机网络,开放 9100 端口不需要容器端口映射
volumes:
- /:/host:ro,rslave # 文件系统占用
- /proc:/host/proc:ro # 读取CPU、内存、进程、网络
- /sys:/host/sys:ro # 读取硬件状态、文件系统信息
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
- /run:/host/run:ro
- /dev:/host/dev:ro
command:
- '--path.rootfs=/host'
restart: always
grafana:
image: grafana/grafana
container_name: grafana
hostname: grafana
ports:
- 3000:3000
volumes:
- ./grafana.ini:/etc/grafana/grafana.ini
- grafana-data:/var/lib/grafana # <--- 数据持久化,不然每次重启配置都丢了
volumes:
grafana-data: # <--- 必须声明采集工具 node-exporter
因为是 docker 启动的采集工具 node-exporter,容器需要做映射共享宿主机的信息,不然信息不准确。启动后 http://localhost:9100/metrics 会显示采集的信息
启动 Prometheus
有启动 prometheus.yml 的配置文件,需要配置 job,拉取 node-exporter 的信息
global:
scrape_interval: 10s
scrape_configs:
- job_name: node
static_configs:
- targets: ['192.168.2.69:9100'] # 不是localhost启动 Grafana
有启动 grafana.ini 的配置文件,需要配置用户名密码,不然每次重启数据都丢了。也可以空文件,先试着用么
1️⃣ 配置文件挂载(grafana.ini)
- 路径示例:
volumes: - ./grafana.ini:/etc/grafana/grafana.ini - 作用:覆盖 Grafana 默认的配置文件。
- 特点:
- 只影响 启动时的配置(端口、管理员密码、认证方式、日志级别等)。
- 不会保存 Dashboard、数据源、用户操作等运行时数据。
- 适合统一管理配置、版本控制。
- 注意点
- 覆盖整个文件,如果文件不完整,默认值不会生效。
- 文件权限需可读,容器内一般 Grafana 用户 UID 472。
2️⃣ 数据持久化(Volume 或宿主机目录)
- 路径示例:
volumes: - grafana-data:/var/lib/grafana - 或宿主机绑定:
volumes: - ./grafana-data:/var/lib/grafana - 作用:保存 运行时数据:
- Dashboards
- 数据源配置
- 用户账户
- 团队和组织信息
- SQLite/Postgres/MySQL 数据库(如果使用 SQLite 默认是
/var/lib/grafana/grafana.db)
- 特点:
- 即使容器删除重建,数据不会丢失。
- 推荐总是挂载 volume 或宿主机目录。
- 如果使用 SQLite,数据库文件位于
/var/lib/grafana;MySQL/Postgres 也可通过外部 DB 持久化。
启动效果
下面是启动效果, 在 docker-compose.yml 文件夹下,执行 docker-compose up -d, -d 是后台运行。

启动完成后逐一验证:
验证采集 curl http://localhost:9100/metrics | grep node_cpu 有显示内容,成了 OK
验证 Prometheus ,浏览器访问:http://192.168.2.69:9080/ 默认端口是 9090 ,我 9090 在用,改成了 9080,进入有页面,成了 OK
可以通过如下方式判断采集数据采集状态

验证 grafana,浏览器访问:http://192.168.2.69:3000/ 进入让登陆,成了 OK
默认的用户名和密码都是:admin
添加数据源
添加数据源,找到 Data Source 菜单

点击添加 promethus

填写数据源地址

滚动到最下,保存和测试

配置看板
导入模版


这里我们就用一个标准的仪表盘:1860
在左侧的加号里,点 Import 即导入,在出现的界面中填入 1860 即我们要导入的仪表盘编号即可。
确认之后 Grafana 就会根据你的本机信息,生成类似 CPU 负载,内存和 I/O 之类的信息。我的服务器状况如图:

参考文章:
https://mp.weixin.qq.com/s/ivK0UmZjvtrJ_WyonwxN2w
https://blog.csdn.net/qq_51010919/article/details/131733743
# grafana.ini文件详解