在 Ubuntu 上安装和使用 Grafana:完整指南

掌握 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

初始配置

第一次登录

  1. 访问 http://your-server-ip:3000
  2. 默认凭据:
    • 用户名admin
    • 密码admin
  3. 您将被提示立即更改密码(强烈建议!)

配置第一个数据源

示例:添加 Prometheus

  1. 点击 配置(齿轮图标)→ 数据源
  2. 点击 添加数据源
  3. 选择 Prometheus
  4. 配置:
    • 名称:Prometheus
    • URLhttp://localhost:9090(根据您的 Prometheus 实例进行调整)
    • 访问方式:服务器(默认)
  5. 点击 保存并测试

示例:添加 InfluxDB

  1. 选择 InfluxDB 作为数据源
  2. 配置:
    • 查询语言:Flux 或 InfluxQL
    • URLhttp://localhost:8086
    • 数据库:your_database_name
    • 用户/密码:您的凭据
  3. 点击 保存并测试

创建第一个仪表板

  1. 点击 创建(+ 图标)→ 仪表板
  2. 点击 添加新面板
  3. 选择您的数据源
  4. 编写查询(Prometheus 示例):
rate(http_requests_total[5m])
  1. 自定义可视化:
    • 选择面板类型(图表、仪表、统计、表格等)
    • 配置图例、坐标轴、阈值
    • 如需,添加转换
  2. 点击 应用 保存面板
  3. 点击 保存仪表板(磁盘图标)

高级配置

配置 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:配置通知渠道

  1. 导航到 警报联系点
  2. 点击 新建联系点
  3. 选择类型(电子邮件、Slack、PagerDuty、Webhook 等)
  4. 配置设置(例如,Slack Webhook URL)
  5. 测试并保存

步骤 2:创建警报规则

  1. 编辑仪表板中的面板
  2. 点击 警报 选项卡
  3. 配置条件:
    • :avg()
    • :query(A, 5m, now)
    • 高于:80
  4. 设置评估间隔
  5. 添加通知渠道
  6. 保存

流行的使用案例

基础设施监控

堆栈: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:

  • 查询性能
  • 连接池
  • 慢查询
  • 复制状态

仪表板最佳实践

  1. 按用途组织:为不同团队/服务创建单独的仪表板
  2. 使用变量:使用模板变量创建动态仪表板
  3. 设置适当的时间范围:默认使用有意义的时间窗口
  4. 添加注释:标记部署和事件
  5. 使用文件夹:逻辑组织仪表板
  6. 启用版本控制:跟踪仪表板更改
  7. 设置刷新间隔:平衡实时需求与性能
  8. 添加文档:使用文本面板解释指标

常见问题排查

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

安全加固

  1. 立即更改默认凭据
  2. 使用 HTTPS 并使用有效证书
  3. 配置防火墙
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    
  4. 禁用匿名访问
  5. 使用强身份验证(LDAP、OAuth、SAML)
  6. 定期更新 保持 Grafana 更新
  7. 限制用户权限 使用基于角色的访问控制
  8. 启用审计日志
  9. 使用只读数据源(如可能)
  10. 实施速率限制

监控 Grafana 本身

监控您的 Grafana 实例:

  1. grafana.ini 中启用指标端点:
    [metrics]
    enabled = true
    
  2. 将 Grafana 添加为 Prometheus 目标
  3. 导入 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

有用的链接

结论

在 Ubuntu 上使用 Grafana 提供了一个强大且灵活的监控和可观测性平台。无论您是在监控单个服务器还是大规模的 Kubernetes 集群,Grafana 丰富的可视化功能、广泛的数据源支持和活跃的社区,使其成为 DevOps 团队的绝佳选择。

从使用 APT 仓库方法进行简单设置开始,连接第一个数据源,并逐步扩展您的监控能力。随着 Grafana 部署的增长,请记住优先考虑安全性、定期备份和性能优化。

通过适当的配置和最佳实践,Grafana 成为了您可观测性堆栈中不可或缺的工具,提供可操作的见解,帮助维护可靠且高性能的系统。