Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警

时间:2024-10-11 18:50:59

前言

Prometheus 是一个开放性的监控解决方案,通过各种 Exporter 采集当前主机/服务的数据,和 Grafana 相结合可以实现强大的监控和可视化功能

本篇将分享使用 docker compose 构建 Prometheus+Grafana,并监控之前文章所搭建的主机&服务,分享日常使用的一些使用经验
文章较长,已安装可略过,推荐先看第三节 常用服务的 Prometheus+Grafana 配置

特点

  • 成熟稳定且强大
  • 丰富的插件,大部分情况都能满足
  • 轻量级部署,资源占用少

使用情况

  • 主要用来作为监控面板使用
  • 使用 Grafana 监控:linux ,windows,redis,clickhouse,mongodb,mysql, RabbitMQ,站点情况
  • 使用 Grafana 设置告警当服务出现无法访问时通知到企业微信群
  • Grafana 版本问题,可能存在面板失效,需要做一些调整

使用 docker compose 安装 Prometheus

配置文件说明

  • prometheus 版本:v2.47.2

  • 指定运行参数:

    • 启动配置文件路径:'--=/etc/prometheus/'
    • 数据存储目录:'--=/prometheus'
    • 数据保留时间:'--=30d'
    • 允许使用 curl -X POST ``http://localhost:9090/-/reload 重载其配置:'---lifecycle'
    • 指定 web 控制台配置,添加了账号密码:'--=/etc/prometheus/'
  • 开放端口:9090

  • 指定网络:devopsnetwork (docker network create devopsnetwork

  • 挂载配置文件及数据目录,需要对数据目录进行创建及赋予权限:mkdir prometheus_data && chown 65534 ./prometheus_data 关于持久化权限的讨论

  • 用到了三个配置文件:

  • docker compose 文件:

version: '3.1'
services:
  prometheus:
    restart: always
    container_name: prometheus
    image: prom/prometheus:v2.47.2
    command:
      # 配置文件
      - '--=/etc/prometheus/'
      # 指定web面板账号密码访问
      - '--=/etc/prometheus/'
      # 数据目录
      - '--=/prometheus'
      # 数据保留时间
      - '--=30d'
      # 运行使用 curl -X POST http://localhost:9090/-/reload  重载其配置
      - '---lifecycle'
    volumes:
      # 需要权限 mkdir prometheus_data && chown 65534 ./prometheus_data
      - ./:/etc/prometheus/
      - ./prometheus_data:/prometheus
      - ./:/etc/prometheus/
    ports:
      - 9090:9090
    networks:
      - devopsnetwork
      
networks:
  devopsnetwork:
    external: true
  • prometheus 配置文件示例:,

    • 指定了 prometheus ,并设置了访问密码 root devops666
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
   - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
    # 启用了账号密码  basic_auth_users 需要配置
    basic_auth:
      username: root
      password: devops666
  • web 控制台配置:

    • 指定账号密码 root devops666
basic_auth_users:
  root: $2a$10$c6OOt9f6LuhiabPyW0nkNOprb1ndQ/HHSfqjB/exe7yh5FaYUqvBy
  • 启动:docker compose up -d

Prometheus 指定账号密码访问

  • 设置 https 或基础密码验证文档
  • 要启用 web 面板账号密码访问,指定 web 访问配置文件 '--=/etc/prometheus/'
  • 映射 指定账号密码 root devops666 ,Prometheus 密码需要使用 htpasswd 生成 bcrypt 密码 在线生成工具
basic_auth_users:
  root: $2a$10$kmkC.lHR3Kwl19DE9l1KRerMDinEejEbNmJigrJZYAGkgzbVBUpa2
  • 如果需要使用 Prometheus 监听 Prometheus ,并且 Prometheus 启用了身份验证,需要在配置出增加 basic_auth 配置节
scrape_configs:
   - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']
    # 启用了账号密码  basic_auth_users 需要配置
    basic_auth:
      username: root
      password: devops666
  • 掉坑里去了,如果一开始 basic_auth 没有配置对,重载配置是无效的,需要重启

重载配置

修改了配置文件后,可以使用 api 接口重载配置,如果启用了账号密码可以使用 -u 参数指定(basic_auth 修改重载配置无效),没有就不需要加 -u 参数

curl -X POST http://localhost:9090/-/reload
或
curl -X POST -u root:devops666 http://localhost:9090/-/reload

添加 nginx 配置

还不会在局域网申请 ssl 及配置的可以参考之前的文章 前后端都用得上的 Nginx 日常使用经验

server {

    listen 80;
    listen       443 ssl;
    server_name ;  # 自行修改成你的域名

    ssl_certificate      /certs//;
    ssl_certificate_key  /certs//;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
            proxy_pass http://prometheus:9090;
            proxy_http_version 1.1;
            proxy_buffering off;
            proxy_request_buffering off;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
    }
}

安装成功

根据上面的配置,完成了 Prometheus 的搭建,监听本身 Prometheus 的情况

通过/ 使用账号密码 root devops666 登陆后即可

使用 docker compose 安装 Grafana

Grafana 是一个开源的数据可视化和监控平台,它提供了丰富的图表和面板,用于展示各种指标和数据。提到 Prometheus,Grafana 自然是不不能落下,基于官方和社区,可以很快的制作出监控可视化面板,助力日常运维检测

配置文件说明

  • grafana 版本:v10.2.0
  • 指定账号密码: root devops666
  • 端口映射:3000
  • 挂载数据目录 ./grafana_data, 需要赋予权限:mkdir -p grafana_data && chown -R 472:472 ./grafana_data
  • 指定网络为 devopsnetwork(docker network create devopsnetwork
  • docker compose 文件: ,安装 v10.2.0 替换版本号即可
version: '3.1'
services:
    grafana:
      restart: always
      container_name: grafana
      image: grafana/grafana:10.2.0
      ports:
        - "3000:3000"
      volumes:
        - ./grafana_data:/var/lib/grafana
      environment:
        - GF_SECURITY_ADMIN_USER=root
        - GF_SECURITY_ADMIN_PASSWORD=devops666
        - GF_USERS_ALLOW_SIGN_UP=false
      networks:
        - devopsnetwork
      
networks:
  devopsnetwork:
    external: true
  • 启动:docker compose up -d