docker-compose 搭建 Prometheus+Grafana監控系統

2022-06-13 06:01:23

有關監控選型之前有寫過一篇文章: 監控系統選型,一文輕鬆搞定!

監控物件

  • 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原稿和原圖片。其它情況一律禁止轉載!