部署搭建 Prometheus 和 Grafana教程

部署搭建 Prometheus 和 Grafana教程

  • 采用容器方式部署
  • 包括Node Exporter 和 cAdvisor(收集容器数据)
  • 部署机器是Ubuntu22.04

第一步:安装 Docker 和 Docker Compose

shell 复制代码
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# 添加GPG密钥和软件源
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER  #重新登录你的 SSH 会话或终端才能生效

docker --version
docker compose version

第二步: Docker Compose 配置文件和Prometheus配置文件

2.1创建 Prometheus 配置文件

shell 复制代码
# 创建一个名为 monitoring 的目录,并在其中创建 prometheus 子目录
mkdir -p /data/docker-compose/prometheus
cd /data/docker-compose/prometheus
vim prometheus.yml  # Prometheus的配置文件
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']

  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']

这个配置告诉 Prometheus 去采集它自己、Node Exporter 和 cAdvisor 的指标数据。

2.2创建 Docker Compose 文件

shell 复制代码
cd /data/docker-compose/prometheus
vim docker-compose.yml
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.enable-lifecycle'
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana-data:/var/lib/grafana
    networks:
      - monitoring
    depends_on:
      - prometheus

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    ports:
      - "9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--path.rootfs=/rootfs'
    networks:
      - monitoring

  cadvisor:
    image: gcr.nju.edu.cn/cadvisor/cadvisor:latest
    container_name: cadvisor
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge

volumes:
  grafana-data:

第三步:启动服务验证和访问

shell 复制代码
docker compose up -d
docker compose ps
四个服务(prometheus, grafana, node-exporter, cadvisor)的状态都是 Up

Prometheus:浏览器访问 http://<你的服务器IP>:9090。可以点击 "Status" -> "Targets" 查看所有监控目标是否都为 "UP" 状态。

Grafana:浏览器访问 http://<你的服务器IP>:3000。使用我们在配置文件中设置的用户名 admin 和密码 admin 登录。

第四步:在 Grafana 中配置并使用

4.1 添加 Prometheus 数据源

点击 Add data source,然后选择 Prometheus

在 HTTP -> URL 字段中,输入 http://prometheus:9090

点击页面底部的 Save & Test,看到 "Data source is working" 的绿色提示即表示连接成功

4.2 导入预置仪表盘

Grafana 官网提供了大量社区贡献的仪表盘,可以直接导入使用。

常用模板ID

监控容器:14282 3146 8685 10000 8588 315

监控物理机-虚拟机(Linux):8919 9276

监控物理机-虚拟机(Windows):10467 10171

监控协议http/icmp/tcp/dns:9965

额外:

设置Granfa中文

登录到 Grafana 后,点击右上角的头像,进入 Profile 页面

在 Preferences 栏目下找到 Language 选项

从下拉菜单中选择 中文(简体),然后点击 Save 按钮保存设置

Prometheus的原理和基本概念

3个核心基本概念

时间序列数据:将数据按照时间排列收集的技术

指标:具体指CPU使用率和内存占用等信息,每一个具体的监控项都是一个指标

exporter:专门替promthues采集数据的工具,例如 Mysql Exporter Node Exporter等,负责吧系统各项指标收集好,提供给promthues。

等promthues抓取

核心原理

Prometheus Server :采用"拉取模式"主动采集数据,间隔默认15s,去Exporter拿取最新的数据

Time-Series Database (TSDB) :拿到的数据回存在自带的TSDB数据库,默认保留15天,防止爆满

**Prometheus Exporters:**就是报告员,将指标从特定系统转换为普罗米修斯可以理解的格式。它可以是系统指标,如 CPU、内存等,也可以是 Java JMX 指标、MySQL 指标等

Prometheus Pushgateway :Prometheus 默认使用 pull 方式来抓取指标。然而,有些场景需要将指标推送到 prometheus

Prometheus Alert Manager :Alertmanager 是 Prometheus 监控系统的关键部分。它的主要工作是根据 Prometheus 警报配置中设置的指标阈值发送警报;Alertmanager 对告警去重、抑制、静默、分组,最后使用各类通知媒介(电子邮件、slack 等)发出告警事件

PromQL:PromQL 是一种灵活的查询语言,可用于从 prometheus 查询时间序列指标

常用promql表达式

CPU 使用率:100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}5m)) * 100) CPU使用率 = 100% - CPU空闲率

内存使用率:(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 内存使用率 = 1 - (可用内存 / 总内存)

磁盘使用率:(1 - node_filesystem_free_bytes{fstype!="tmpfs"} / node_filesystem_size_bytes) * 100 磁盘使用率 = 1 - (剩余空间 / 总空间)

相关推荐
云边有个稻草人5 小时前
Ubuntu部署Prometheus与Alertmanager:服务接入和远程监控
数据库·ubuntu·prometheus
A 糖醋排骨2 天前
grafana loki alloy轻量级日志采集
运维·grafana·loki
雨辰AI2 天前
K8s 国产数据库慢 SQL 自动监控|Prometheus+Grafana 可视化全落地
数据库·sql·安全·容器·kubernetes·grafana·prometheus
lee_curry2 天前
RuoYi Cloud:Gateway、Auth、System 接入 Prometheus JVM 监控,并练习多副本、滚动升级和故障恢复
jvm·gateway·prometheus
晨陌y3 天前
redis_exporter + Prometheus监控Redis: 指标采集、告警与远程抓取
redis·bootstrap·prometheus
七月稻草人3 天前
Grafana只能在内网看?配置HTTPS公网地址远程打开监控面板
网络协议·https·grafana
爱丶狸4 天前
Grafana_Zabbix_ImageRenderer_部署与前端操作手册
linux·前端·zabbix·grafana·kylin
小小洋洋4 天前
OpenWrt 从U盘迁移到内置 eMMC,并完成扩容与 Docker 安装
java·docker·eureka
江湖有缘6 天前
Docker实战 : 使用Docker部署Musicn音乐下载工具
docker·容器·eureka