• docker-compose 搭建 Prometheus+Grafana监控系统


    有关监控选型之前有写过一篇文章: 监控系统选型,一文轻松搞定!

    监控对象

    • Linux服务器
    • Docker
    • Redis
    • MySQL

    数据采集

    1)、prometheus: 采集数据

    2)、node-exporter: 收集操作系统和硬件信息的metrics

    3)、cadvisor : 收集Docker的metrics

    4)、redis-exporter: 收集Redis的metrics

    5)、 mysql-exporter: 收集MySQL的metrics

    报表

    • grafana: 图表展示

    一、环境搭建

    1、MySQL用户授权

    之前想用root账号尝试收集MySQL的metrics,但在启动docker的时候一直报错:

    Error pinging mysqld" err="Error 1049: Unknown database
    

    后来去官方地址在发现,需要对用户进行授权才能收集监控数据信息。

    gitHub开源项目有说明: https://github.com/prometheus/mysqld_exporter

    所以这里重新创建用户并授权。

    CREATE USER 'exporter'@'%' IDENTIFIED BY '123456';
    GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'%';
    GRANT SELECT ON performance_schema.* TO 'exporter'@'%';
    

    注意:建议为用户设置最大连接限制,以避免在重负载下监控抓取使服务器过载。

    2、配置docker-compose.yml

    我在/etc/prometheus创建一个docker-compose.yml文件,文件内容如下

    version: '2'
    
    networks:
        monitor:
            driver: bridge
    
    services:
        prometheus:
            image: prom/prometheus
            container_name: prometheus
            hostname: prometheus
            restart: always
            volumes:
                - ./prometheus.yml:/etc/prometheus/prometheus.yml
            ports:
                - "9090:9090"
            networks:
                - monitor
    
        alertmanager:  #预警模块
            image: prom/alertmanager
            container_name: alertmanager
            hostname: alertmanager
            restart: always
            ports:
                - "9093:9093"
            networks:
                - monitor
    
        grafana:
            image: grafana/grafana
            container_name: grafana
            hostname: grafana
            restart: always
            ports:
                - "3000:3000"
            networks:
                - monitor
    
        node-exporter:
            image: quay.io/prometheus/node-exporter
            container_name: node-exporter
            hostname: node-exporter
            restart: always
            ports:
                - "9100:9100"
            networks:
                - monitor
    
        cadvisor:
            image: google/cadvisor:latest
            container_name: cadvisor
            hostname: cadvisor
            restart: always
            volumes:
                - /:/rootfs:ro
                - /var/run:/var/run:rw
                - /sys:/sys:ro
                - /var/lib/docker/:/var/lib/docker:ro
            ports:
                - "8899:8080"
            networks:
                - monitor
    
        redis-exporter:
            image: oliver006/redis_exporter
            container_name: redis-exporter
            hostname: redis-exporter
            restart: always
            ports:
                - "9121:9121"
            command:
                - "--redis.addr=redis://127.0.0.1:6379"
            networks:
                - monitor
    
        mysql_xporter:
            image: prom/mysqld-exporter
            container_name: mysql-exporter
            hostname: mysql-exporter
            restart: always
            ports:
                - "9104:9104"
            environment:
                DATA_SOURCE_NAME: 'exporter:123456@(127.0.0.1:3306)'
            networks:
                - monitor 
    

    因为这里prometheus容器的配置文件重新挂载了,挂载到/etc/prometheus/目录下,所以在该目录创建好prometheus.yml文件。

    3、配置prometheus.yml

    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['ip:9090'] //ip为自己服务器IP
      - job_name: 'cadvisor'
        static_configs:
        - targets: ['ip:8899']
      - job_name: 'node'
        static_configs:
        - targets: ['ip:9100']
      - job_name: 'redis_exporter'
        static_configs:
        - targets: ['ip:9121']
      - job_name: 'mysql_exporter'
        static_configs:
        - targets: ['ip:9104']
    

    二、docker-compose启动

    在docker-compose.yml文件目录下通过 docker-compose up -d 启动容器。

    我们可以通过 docker-compose ps 容器是否成功。

    启动成功,就可以分别访问:

    • http://ip:9090 :prometheus的原生web-ui
    • http://ip:3000 :Grafana开源的监控可视化组件页面
    • http://ip:9100 :收集服务器的metrics
    • http://ip:8899 :收集docker的metrics
    • http://ip:9100 :收集redis的metrics
    • http://ip:9104 :收集mysql的metrics

    打开 http://ip:9090/targets ,如果State都是UP即代表Prometheus工作正常,如下图所示:

    从图中可以看出所有State都是UP,说明已经搭建成功了,接下来就通过Grafana来展示监控数据。

    三、Grafana配置监控

    打开http://ip:3000, 使用默认账号密码admin/admin登录

    默认进来是创建数据库的页面,在如下图所示中,选择Prometheus

    输入prometheus数据源的信息,主要是输入name和url

    数据源配置好之后,我们就可以配置对应的监控信息了,常见的配置监控已经有对应的模板了,就不需要我们一个一个地去配置了。(如果不满足的话,那可以手动配置)


    四、选择监控模版

    grafana提供了许许多多精美的模版,我们可以在模版库中选择我们需要到模版导入到当前项目就可以了,使用非常方便。

    模板地址: https://grafana.com/grafana/dashboards/

    1、Linux硬件信息监控

    本次要导入的模板:https://grafana.com/grafana/dashboards/11074

    选择好模版后,只需要导入到Grafana中就可以了。

    导入成功后,选择数据源,为该模版命名

    即可看到逼格非常高的系统主机节点监控信息了

    2、docker监控

    模版ID :893

    监控效果

    3、Mysql监控

    模版ID :7362

    监控效果

    4、Redis监控

    模版ID :10534

    监控效果

    每种监控都有非常多的模版样式,我们可以去模版库中去找自己喜欢的就可以。这里监控就搭建完成了。



    声明: 公众号如需转载该篇文章,发表文章的头部一定要 告知是转至公众号: 后端元宇宙。同时也可以问本人要markdown原稿和原图片。其它情况一律禁止转载!

  • 相关阅读:
    使用Android辅助功能AccessibilityService实现微信自动聊天【外挂插件】
    阜时科技联合客户发布全固态激光雷达面阵SPAD芯片及雷达整机
    蓝牙技术|上半年全国新增 130 万台充电桩,蓝牙充电桩将成为市场主流
    国际结算重点完整版
    ​打造企业自己代码规范IDEA插件(上)
    显著性目标检测(一)——与图像分割、目标检测的区别
    淘宝(tmall)获取sku详细信息API接口(item_sku-获取sku详细信息)代码展示
    Java如何绑定线程到指定CPU上执行?
    操作系统安全:Linux安全审计,Linux日志详解
    Django路由层之有名分组和无名分组、反向解析、路由分发、伪静态的概念、名称空间、虚拟环境、Django1和Django2的区别
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/16325893.html