在 Ubuntu 上安装和使用 Grafana:完整指南
掌握 Grafana 的设置,用于监控与可视化
Grafana 是领先的开源监控和可观测性平台,通过令人惊叹的可视化将指标、日志和跟踪转化为可操作的见解。
这是来自 Grafana 官方网站的截图。
什么是 Grafana?
Grafana 是一个跨平台的开源分析和交互式可视化网络应用程序。它通过连接支持的数据源,为网络提供图表、图形和警报。Grafana 广泛用于 DevOps 中,用于监控基础设施、应用程序和服务。
主要功能:
- 通用仪表板:使用灵活的模板创建美观、动态的仪表板
- 多种数据源:连接 150 多个数据源,包括 Prometheus、InfluxDB、Elasticsearch、MySQL、PostgreSQL 等
- 警报:统一的警报系统,支持通知渠道(Slack、PagerDuty、电子邮件、Webhook)
- 团队协作:共享仪表板、创建团队并管理用户权限
- 插件生态系统:通过面板、数据源和应用程序扩展功能
- 云原生:非常适合 Kubernetes、Docker 和云环境
为什么在 Ubuntu 上使用 Grafana?
Ubuntu LTS 版本为托管 Grafana 提供了稳定、安全的基础。如果您是全新开始,或者需要为监控基础设施设置新的 Ubuntu 环境,请查看我们的全面指南:如何安装 Ubuntu 24.04 并安装有用的工具,以准备您的系统。
优势包括:
- 长期支持和安全更新
- 大型社区和广泛的文档
- Grafana Labs 提供的原生 APT 仓库支持
- 优秀的 Docker 兼容性
- 适用于开发和生产环境
安装方法
方法 1:通过 APT 仓库安装(推荐)
这是最简单的方法,通过 Ubuntu 的包管理器提供自动更新。如果您是 Ubuntu 终端的新手,或者想要提高工作效率,我们的 Ubuntu 键盘快捷键速查表 可以帮助您更高效地浏览系统。
步骤 1:安装依赖项
sudo apt-get install -y apt-transport-https software-properties-common wget
步骤 2:添加 Grafana GPG 密钥
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
步骤 3:添加 Grafana APT 仓库
对于稳定版本:
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
步骤 4:更新并安装 Grafana
sudo apt-get update
sudo apt-get install grafana
步骤 5:启动并启用 Grafana 服务
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server.service
步骤 6:验证安装
sudo systemctl status grafana-server
Grafana 现在将在 http://localhost:3000 上运行。
方法 2:使用 Docker 安装
Docker 提供了容器化部署的隔离和更简单的管理。
步骤 1:安装 Docker(如果尚未安装)
sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker
步骤 2:运行 Grafana 容器
docker run -d \
--name=grafana \
-p 3000:3000 \
-v grafana-storage:/var/lib/grafana \
grafana/grafana-oss
为了持久化配置:
docker run -d \
--name=grafana \
-p 3000:3000 \
-v grafana-storage:/var/lib/grafana \
-v $(pwd)/grafana.ini:/etc/grafana/grafana.ini \
-e "GF_SERVER_ROOT_URL=http://your-domain.com" \
-e "GF_SECURITY_ADMIN_PASSWORD=your-secure-password" \
grafana/grafana-oss
方法 3:使用 Docker Compose 安装
创建一个 docker-compose.yml 文件:
version: '3.8'
services:
grafana:
image: grafana/grafana-oss:latest
container_name: grafana
restart: unless-stopped
ports:
- '3000:3000'
volumes:
- grafana-storage:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=your-secure-password
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SERVER_ROOT_URL=http://your-domain.com
volumes:
grafana-storage:
启动:
docker-compose up -d
初始配置
第一次登录
- 访问
http://your-server-ip:3000 - 默认凭据:
- 用户名:
admin - 密码:
admin
- 用户名:
- 您将被提示立即更改密码(强烈建议!)
配置第一个数据源
示例:添加 Prometheus
- 点击 配置(齿轮图标)→ 数据源
- 点击 添加数据源
- 选择 Prometheus
- 配置:
- 名称:Prometheus
- URL:
http://localhost:9090(根据您的 Prometheus 实例进行调整) - 访问方式:服务器(默认)
- 点击 保存并测试
示例:添加 InfluxDB
- 选择 InfluxDB 作为数据源
- 配置:
- 查询语言:Flux 或 InfluxQL
- URL:
http://localhost:8086 - 数据库:your_database_name
- 用户/密码:您的凭据
- 点击 保存并测试
创建第一个仪表板
- 点击 创建(+ 图标)→ 仪表板
- 点击 添加新面板
- 选择您的数据源
- 编写查询(Prometheus 示例):
rate(http_requests_total[5m])
- 自定义可视化:
- 选择面板类型(图表、仪表、统计、表格等)
- 配置图例、坐标轴、阈值
- 如需,添加转换
- 点击 应用 保存面板
- 点击 保存仪表板(磁盘图标)
高级配置
配置 Grafana 设置
编辑主配置文件:
sudo nano /etc/grafana/grafana.ini
重要设置:
[server]
# 协议(http, https, h2, socket)
protocol = http
http_port = 3000
domain = your-domain.com
root_url = http://your-domain.com
[security]
admin_user = admin
admin_password = your-secure-password
secret_key = your-secret-key
[users]
# 禁用用户注册
allow_sign_up = false
allow_org_create = false
[auth.anonymous]
enabled = false
[smtp]
enabled = true
host = smtp.gmail.com:587
user = your-email@gmail.com
password = your-app-password
from_address = your-email@gmail.com
from_name = Grafana
更改后重启:
sudo systemctl restart grafana-server
设置反向代理(Nginx)
安装 Nginx:
sudo apt install nginx
创建 Nginx 配置:
sudo nano /etc/nginx/sites-available/grafana
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
启用并重启:
sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
使用 Let’s Encrypt 启用 HTTPS
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
配置警报
步骤 1:配置通知渠道
- 导航到 警报 → 联系点
- 点击 新建联系点
- 选择类型(电子邮件、Slack、PagerDuty、Webhook 等)
- 配置设置(例如,Slack Webhook URL)
- 测试并保存
步骤 2:创建警报规则
- 编辑仪表板中的面板
- 点击 警报 选项卡
- 配置条件:
- 当:avg()
- 在:query(A, 5m, now)
- 高于:80
- 设置评估间隔
- 添加通知渠道
- 保存
流行的使用案例
基础设施监控
堆栈:Prometheus + Node Exporter + Grafana
监控系统指标:
- CPU、内存、磁盘使用情况
- 网络流量
- 系统负载
- 磁盘 I/O
对于 NVIDIA GPU 监控,您可能需要探索与 Grafana 集成良好的 Linux/Ubuntu GPU 监控应用程序。
导入仪表板 ID:1860(Node Exporter 全部)
Kubernetes 监控
堆栈:Prometheus + kube-state-metrics + Grafana
监控 K8s 集群:
- Pod 和容器指标
- 集群资源使用情况
- 部署状态
- Ingress/服务监控
导入仪表板 ID:15757(Kubernetes 集群监控)
应用性能监控
堆栈:Loki + Promtail + Grafana
监控应用程序日志和指标:
- 请求速率和延迟
- 错误率
- 日志聚合和过滤
- 分布式追踪
数据库监控
监控 MySQL、PostgreSQL、MongoDB:
- 查询性能
- 连接池
- 慢查询
- 复制状态
仪表板最佳实践
- 按用途组织:为不同团队/服务创建单独的仪表板
- 使用变量:使用模板变量创建动态仪表板
- 设置适当的时间范围:默认使用有意义的时间窗口
- 添加注释:标记部署和事件
- 使用文件夹:逻辑组织仪表板
- 启用版本控制:跟踪仪表板更改
- 设置刷新间隔:平衡实时需求与性能
- 添加文档:使用文本面板解释指标
常见问题排查
Grafana 服务无法启动
# 查看日志
sudo journalctl -u grafana-server -f
# 检查配置
sudo grafana-cli admin reset-admin-password newpassword
数据源连接问题
- 验证网络连接:
telnet datasource-host port - 检查防火墙规则
- 验证凭据
- 检查数据源服务日志
性能问题
- 减少查询时间范围
- 优化数据源查询
- 增加服务器资源
- 尽可能使用缓存
- 考虑查询结果缓存
仪表板无法加载
- 清除浏览器缓存
- 检查浏览器控制台中的错误
- 验证仪表板 JSON 是否损坏
- 检查 Grafana 服务器日志
备份与维护
备份 Grafana 数据库
# 停止 Grafana
sudo systemctl stop grafana-server
# 备份 SQLite 数据库
sudo cp /var/lib/grafana/grafana.db /backup/grafana-$(date +%Y%m%d).db
# 备份配置
sudo cp /etc/grafana/grafana.ini /backup/grafana-ini-$(date +%Y%m%d).bak
# 启动 Grafana
sudo systemctl start grafana-server
自动化备份脚本
这是一个用于自动化 Grafana 备份的 bash 脚本。如果您需要快速参考 bash 脚本语法和命令,请查看我们的 Bash 速查表 以获取有用的提示和示例。
#!/bin/bash
BACKUP_DIR="/backup/grafana"
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d_%H%M%S)
# 备份数据库
sudo cp /var/lib/grafana/grafana.db $BACKUP_DIR/grafana-$DATE.db
# 通过 API 备份仪表板
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3000/api/search?type=dash-db | \
jq -r '.[] | .uid' | \
xargs -I{} curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3000/api/dashboards/uid/{} > $BACKUP_DIR/dashboards-$DATE.json
# 保留最近 30 天的备份
find $BACKUP_DIR -mtime +30 -delete
更新 Grafana
# APT 方法
sudo apt update
sudo apt upgrade grafana
# Docker 方法
docker pull grafana/grafana-oss:latest
docker-compose down
docker-compose up -d
安全加固
- 立即更改默认凭据
- 使用 HTTPS 并使用有效证书
- 配置防火墙:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable - 禁用匿名访问
- 使用强身份验证(LDAP、OAuth、SAML)
- 定期更新 保持 Grafana 更新
- 限制用户权限 使用基于角色的访问控制
- 启用审计日志
- 使用只读数据源(如可能)
- 实施速率限制
监控 Grafana 本身
监控您的 Grafana 实例:
- 在
grafana.ini中启用指标端点:[metrics] enabled = true - 将 Grafana 添加为 Prometheus 目标
- 导入 Grafana 指标仪表板
有用的插件
通过 CLI 安装插件:
sudo grafana-cli plugins install <plugin-id>
sudo systemctl restart grafana-server
推荐插件:
- grafana-piechart-panel:增强的饼图
- grafana-worldmap-panel:地理数据可视化
- grafana-clock-panel:显示时间和日期
- grafana-simple-json-datasource:连接自定义 JSON API
- alexanderzobnin-zabbix-app:Zabbix 集成
集成示例
Grafana + Prometheus + Node Exporter
完整的监控堆栈设置:
# 安装 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter
# 创建 systemd 服务
sudo tee /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
Grafana 与 InfluxDB 和 Telegraf
时间序列监控设置:
# 安装 InfluxDB
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt update && sudo apt install influxdb
sudo systemctl start influxdb
sudo systemctl enable influxdb
# 安装 Telegraf
sudo apt install telegraf
sudo systemctl start telegraf
sudo systemctl enable telegraf
性能优化
查询优化
- 使用适当的时间范围
- 限制返回的数据点
- 使用缓存策略
- 在源端聚合数据(如可能)
- 在 Prometheus 中使用记录规则
服务器优化
[database]
# 增加最大连接数
max_open_conn = 300
max_idle_conn = 100
[dataproxy]
# 超时设置
timeout = 30
keep_alive_seconds = 30
[rendering]
# 启用并发渲染限制
concurrent_render_limit = 10
有用的链接
- 官方文档
- Grafana GitHub
- Prometheus 文档
- InfluxDB 文档
- 如何安装 Ubuntu 24.04 & 有用的工具
- Linux / Ubuntu 中的 GPU 监控应用程序
- Ubuntu 键盘快捷键:完整速查表
- Bash 速查表
结论
在 Ubuntu 上使用 Grafana 提供了一个强大且灵活的监控和可观测性平台。无论您是在监控单个服务器还是大规模的 Kubernetes 集群,Grafana 丰富的可视化功能、广泛的数据源支持和活跃的社区,使其成为 DevOps 团队的绝佳选择。
从使用 APT 仓库方法进行简单设置开始,连接第一个数据源,并逐步扩展您的监控能力。随着 Grafana 部署的增长,请记住优先考虑安全性、定期备份和性能优化。
通过适当的配置和最佳实践,Grafana 成为了您可观测性堆栈中不可或缺的工具,提供可操作的见解,帮助维护可靠且高性能的系统。