【基于 Docker-compose 部署 Prometheus 监控系统实战教程 】

提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会

文章目录

  • 前言
  • 一、安装Docker
  • 二、安装Docker-compose
  • 三、Docker-compose安装Prometheus
    • [3.1 创建alertmanager的配置文件](#3.1 创建alertmanager的配置文件)
    • [3.2 创建grafana的配置文件](#3.2 创建grafana的配置文件)
    • [3.3 创建prometheus的配置文件](#3.3 创建prometheus的配置文件)
    • [3.4 创建alert报警文件](#3.4 创建alert报警文件)
    • [3.5 创建docker-compose.yaml](#3.5 创建docker-compose.yaml)
    • [3.6 网页登录](#3.6 网页登录)
  • 四、使用Grafana展示Prometheus
    • [4.1 导入prometheus数据源](#4.1 导入prometheus数据源)
    • [4.2 创建dashboard](#4.2 创建dashboard)

前言

随着容器化技术普及,Docker部署服务愈发便捷高效。相较于传统二进制安装,使用Docker容器部署Prometheus监控组件,无需繁琐配置环境,一键拉起服务,部署速度快、隔离性强且迁移维护简单。本文将详细讲解通过Docker方式,一站式完成Prometheus、Alertmanager、Grafana与node-exporter的搭建部署,搭配完整配置实操,轻松搭建稳定好用的容器化监控平台

一、安装Docker

本文不再赘述 Docker 安装步骤,有需要的同学可参考下方教程的1.1小节,内含 Ubuntu 与 CentOS 系统完整的 Docker 部署流程https://blog.csdn.net/m0_63756214/article/details/158650241?spm=1001.2014.3001.5501

yaml 复制代码
# 安装好的docker
root@prometheus:~# docker --version
Docker version 24.0.2, build cb74dfc

二、安装Docker-compose

本文不再赘述 Docker-compose安装步骤,有需要的同学可参考下方教程的2.1小节
https://blog.csdn.net/m0_63756214/article/details/159487599?spm=1001.2014.3001.5501

yaml 复制代码
# 安装好的docker-compose
root@prometheus:~# docker-compose version
Docker Compose version v2.38.0
root@prometheus:~# 

三、Docker-compose安装Prometheus

yaml 复制代码
# 先创建一个grafana,prometheus,alertmanager的yaml文件存放目录
root@prometheus:~# mkdir -p /opt/prometheus
root@prometheus:~# mkdir -p /opt/prometheus/{grafana,prometheus,alertmanager}
root@prometheus:~# ls /opt/prometheus/
alertmanager  grafana  prometheus

3.1 创建alertmanager的配置文件

yaml 复制代码
root@prometheus:~# vim /opt/prometheus/alertmanager/config.yml 
global:
  #163服务器
  smtp_smarthost: 'smtp.163.com:465'
  #发邮件的邮箱
  smtp_from: '*****@163.com'
  #发邮件的邮箱用户名,也就是你的邮箱     
  smtp_auth_username: '*****@163.com'
  #发邮件的邮箱授权码
  smtp_auth_password: '*****'
  #进行tls验证
  smtp_require_tls: true

route:
  group_by: ['alertname']
  # 当收到告警的时候,等待group_wait配置的时间,看是否还有告警,如果有就一起发出去
  group_wait: 10s
  #  如果上次告警信息发送成功,此时又来了一个新的告警数据,则需要等待group_interval配置的时间才可以发送出去
  group_interval: 10s
  # 如果上次告警信息发送成功,且问题没有解决,则等待 repeat_interval配置的时间再次发送告警数据
  repeat_interval: 10m
  # 全局报警组,这个参数是必选的
  receiver: email

receivers:
- name: 'email'
  #收邮件的邮箱
  email_configs:
  - to: '*****@163.com'
    #当告警恢复后,是否发送邮件
    send_resolved: true
inhibit_rules:
 - source_match:
     severity: 'critical'
   target_match:
     severity: 'warning'
   equal: ['alertname', 'dev', 'instance']

3.2 创建grafana的配置文件

yaml 复制代码
root@prometheus:~# vim /opt/prometheus/grafana/config.monitoring 
GF_SECURITY_ADMIN_PASSWORD=Qing@123  # 待会登录grafana就用这个密码
GF_USERS_ALLOW_SIGN_UP=false

3.3 创建prometheus的配置文件

yaml 复制代码
root@prometheus:~# vim /opt/prometheus/prometheus/prometheus.yml 
# 全局配置
global:
  scrape_interval:     15s # 将搜刮间隔设置为每15秒一次。默认是每1分钟一次。
  evaluation_interval: 15s # 每15秒评估一次规则。默认是每1分钟一次。

# Alertmanager 配置
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['alertmanager:9093']

# 报警(触发器)配置
rule_files:
  - "alert.yml"

# 搜刮配置
scrape_configs:
  - job_name: 'prometheus'
    # 覆盖全局默认值,每15秒从该作业中刮取一次目标
    scrape_interval: 15s
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'alertmanager'
    scrape_interval: 15s
    static_configs:
    - targets: ['alertmanager:9093']
  - job_name: 'cadvisor'
    scrape_interval: 15s
    static_configs:
    - targets: ['cadvisor:8080']
      labels:
        instance: Prometheus服务器 

  - job_name: 'node-exporter'
    scrape_interval: 15s
    static_configs:
    - targets: ['node_exporter:9100']
      labels:
        instance: Prometheus服务器

3.4 创建alert报警文件

yaml 复制代码
root@prometheus:~# vim /opt/prometheus/prometheus/alert.yml
groups:
- name: Prometheus alert
  rules:
  # 对任何实例超过30秒无法联系的情况发出警报
  - alert: 服务告警
    expr: up == 0
    for: 30s
    labels:
      severity: critical
    annotations:
      summary: "服务异常,实例:{{ $labels.instance }}"
      description: "{{ $labels.job }} 服务已关闭"

3.5 创建docker-compose.yaml

yaml 复制代码
root@prometheus:~# vim /opt/prometheus/docker-compose.yaml 
version: '3.8'   # 更新版本

volumes:
  prometheus_data: {}
  grafana_data: {}
  alertmanager_data: {}  

networks:
  monitoring:
    driver: bridge

services:
  prometheus:
    image: prom/prometheus:v3.5.3
    container_name: prometheus
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./prometheus/:/etc/prometheus/
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
      - '--web.enable-lifecycle'
      - '--storage.tsdb.retention.time=30d'
    networks:
      - monitoring
    ports:
      - 9090:9090

  alertmanager:
    image: prom/alertmanager:v0.32.1
    container_name: alertmanager
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./alertmanager/:/etc/alertmanager/
      - alertmanager_data:/alertmanager   # 持久化
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
    networks:
      - monitoring
    ports:
      - 9093:9093

  # 采集容器指标:收集每个容器的资源占用、哪个容器异常、容器内部的文件系统使用情况等
  cadvisor:
    image: google/cadvisor:latest   
    container_name: cadvisor
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    networks:
      - monitoring
    # expose 可选,若需宿主机访问可加 ports: - 8080:8080
    expose:
      - '8080'

 # 只能看到整台机器的 CPU、内存总量,无法区分是哪个容器消耗的
  node_exporter:
    image: prom/node-exporter:v1.11.1
    container_name: node-exporter
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc|rootfs/var/lib/docker)($$|/)'
    networks:
      - monitoring
    ports:
      - '9100:9100'

  grafana:
    image: grafana/grafana:13.0.1
    container_name: grafana
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning/:/etc/grafana/provisioning/
    env_file:
      - ./grafana/config.monitoring   # 确保此文件存在
    networks:
      - monitoring
    ports:
      - 3000:3000
    depends_on:
      - prometheus
yaml 复制代码
# 启动docker-compose
root@prometheus:~# cd /opt/prometheus/
root@prometheus:/opt/prometheus# docker-compose up -d
root@prometheus:/opt/prometheus# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                       NAMES
f3898cd233fc   grafana/grafana:13.0.1       "/run.sh"                14 seconds ago   Up 11 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   grafana
2cd41dcfc974   prom/alertmanager:v0.32.1    "/bin/alertmanager -..."   15 seconds ago   Up 10 seconds   0.0.0.0:9093->9093/tcp, :::9093->9093/tcp   alertmanager
2cdc676f5778   prom/node-exporter:v1.11.1   "/bin/node_exporter ..."   15 seconds ago   Up 12 seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter
4464bb40da83   google/cadvisor:latest       "/usr/bin/cadvisor -..."   15 seconds ago   Up 13 seconds   8080/tcp                                    cadvisor
74d11263e24c   prom/prometheus:v3.5.3       "/bin/prometheus --c..."   15 seconds ago   Up 11 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus

3.6 网页登录

web访问地址

应用 访问地址 我的地址
Prometheus Prometheus ip:9090 192.168.13.141:9090
Grafana Grafana ip:3000 192.168.13.141:3000
Alertmanager Alertmanager ip:9093 192.168.13.141:9093
node-exporter node-exporter ip:9100/metrics 192.168.13.141:9100/metrics

Prometheus页面

Alertmanager 页面

node-exporter页面

Grafana页面

四、使用Grafana展示Prometheus

4.1 导入prometheus数据源

登录grafana,导入prometheus数据源

下拉点击"Save"保存

4.2 创建dashboard

grafana官网:https://grafana.com/grafana/dashboards/

登录grafana官网,找到node exporter,点击

拷贝ID


下面就是创建好的dashboard

至此,Prometheus 容器安装方式到此结束!


注:

文中若有疏漏,欢迎大家指正赐教。

本文为100%原创,转载请务必标注原创作者,尊重劳动成果。

求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~

相关推荐
米高梅狮子1 小时前
03.OpenStack使用
linux·前端·云原生·容器·架构·kubernetes·openstack
梦梦代码精2 小时前
LikeShop按摩到家系统:2026年本地生活创业新风口,上门服务O2O源码私有化部署实战
大数据·docker·小程序·uni-app·生活·高并发·开源软件
成为你的宁宁2 小时前
【Prometheus+Grafana 监控平台二进制安装配置(图文实操详解)】
grafana·prometheus
STDD2 小时前
KEDA:Kubernetes 事件驱动自动扩缩容
云原生·容器·kubernetes
珂玥c2 小时前
k8s集群高可用的碎碎念
云原生·容器·kubernetes
xiaogg36782 小时前
k8s 部署yaml文件和Dockerfile文件配置
java·docker·kubernetes
日取其半万世不竭3 小时前
Docker 网络模式详解:bridge、host、overlay 和 macvlan
网络·docker·容器
沪漂阿龙4 小时前
Docker 面试题详解:容器、镜像、Dockerfile、网络、Volume、Compose、安全与生产实践一次讲透
网络·安全·docker
小夏子_riotous4 小时前
Kubernetes学习路径——7. Pod控制器详解
docker·云原生·容器·kubernetes·云计算·paas·kubelet