構建Docker容器監控系統(更多的適用於純docker環境)

Docker做爲目前十分出色的容器管理技術,獲得大量企睞,在生產環境中使用Docker容器部署服務及應用的場景愈來愈多。因此面對日益龐大的docker服務羣應用,如何具備針對性的,有效的監控也變成了企業運維人員工做需求。sql

容器信息採集及監控的方案有不少,有 docker自身的 docker stats命令、 Scout、Data Dog、Prometheus等,本次爲搭建分享兩款比較經典的容器開源監控組合方案Cadvisor+InfluxDB+Grafana和Cadvisor+Prometheus+Grafana。docker

Cadvisor+InfluxDB+Grafana

1.一、Cadvisor

Cadvisor是 Google用來監測單節點資源信息的監控工具。 Cadvisor提供了基礎查詢界面和http接口,方便其餘組件如 Grafana、 Prometheus等進行數據抓取。 Cadvisor能夠對Docker主機上的資源及容器進行實時監控和性能數據採集,包括CpU使用狀況、內存使用狀況、網絡吞吐量及文件系統使用狀況等。Cadvisor使用Go語言開發,利用Liunx的Cagroups獲取容器的資源使用信息。
        Google的 Kubernetes中也默認地將其做爲單節點的資源監控工具,各個節點默認會安裝上 Advisor組件。數據庫

Cadvisor產品特色:後端

  • 能夠展現主機和容器兩個層次的監控數據。
  • 能夠展現歷史變化數據。
  • 谷歌公司的開源產品。
  • 監控指標齊全。
  • 方便部署,有官方的 docker鏡像。
  • 默認只在本地保存1分鐘數據,能夠繼承InfluxDB等第三方存儲使用。

因爲Cadvisor提供的操做界面略顯簡陋,並且須要在不一樣頁面之間跳轉,而且只能 監控一個Host,這難免會讓人質疑它的實用性。但Cadvisor的一個亮點是他能夠將監控到的數據處處給第三方工具,由這些工具進一步加工處理。bash

咱們能夠把Cadvisor定位爲一個監控數據收集器,收集和導出數據是它的強項,而非展現數據。服務器

1.二、InfluxDB

InfluxDB是一個InfluxData開發的開源非關係型時序型數據庫。它由Go寫成,着力於髙性能地査詢與存儲時序型數據。 InfluxDB被普遍應用於存儲系統的監控數據,loT行業的實時數據等場景。同類型的數據庫產品還有 Elasticsearch、Graphite等。←
        InfluxDB應用場景:性能監控,應用程序指標,物聯網傳感器數據和實時分析等的後端存儲。
nfluxDB主要功能:網絡

  • 基於時間序列,支持與時間有關的相關函數(如最大,最小,求和等);
  • 可度量性:你能夠實時對大量數據進行計算;
  • 基於事件:它支持任意的事件數據;

InfluxDB主要特色:架構

  • 無結構(無模式):能夠是任意數量的列;
  • 支持拓展;
  • 支持min,max,sum, count,mean, median等一系列函數,方便統計;
  • 原生的HTTP支持,內置HTTP API;
  • 強大的類SQL語法;

1.三、Grafana

Grafana是一個可視化面板(Dashboard)工具,有着很是漂亮的圖標和佈局等展現功能,功能齊全的度量儀表盤和編譯器,支持Graphite、zabbix、InfluxDB、Prometheus和Grafana主要特性運維

  • 靈活豐富的圖形化選項;
  • 能夠混合多種風格;
  • 支持白天和夜間模式;
  • 支持多個數據源;

1.四、監控組建架構

監控組件架構圖:tcp

提示:InfluxDB用於數據存儲,Cadvisor用戶數據採集,Grafana用於數據展現。

監控組件架構部署方案:

  1. 建立自定義網絡monitor(自定義網絡名稱),用於後期容器加入此網絡中;
  2. 建立InfluxDB容器,建立數據用戶、數據庫;
  3. 建立Cadvisor容器;
  4. 建立Grafana容器,配置grafana;

1.五、開始部署

[root@flag ~]# iptables -F 
[root@flag ~]# setenforce 0
setenforce: SELinux is disabled
[root@flag ~]# systemctl stop firewalld

安裝docker-ce配置鏡像加速 略

下載鏡像組件

docker pull tutum/influxdb
docker pull google/cadvisor
docker pull grafana/grafana
[root@flag ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
grafana/grafana     latest              651ff2dc930f        2 weeks ago         187MB
google/cadvisor     latest              eb1210707573        2 years ago         69.6MB
tutum/influxdb      latest              c061e5808198        4 years ago         290MB

建立自定義網絡

爲了把後期建立的Cadvisor+InfluxDB+Grafana這三個容器都加入本身定義的網絡便於理
解和管理,因此才新建一個自定義網絡。(讓這三個容器相互之間進行統一的管理和通訊)

[root@flag ~]# docker network create monitor
0533cc85ed9f3f9d6865e091120aa2ed051cbde09d8daf342dab456b6d7fc0ca
[root@flag ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
8aecbd2a0b19        bridge              bridge              local
fc1c55c5fa26        host                host                local
0533cc85ed9f        monitor             bridge              local
8714055457ff        none                null                local

建立InfluxDB容器

啓動容器,tutum/influxdb鏡像這裏沒有指定版本,默認會pull最新版本的InfluxDB:

參數說明:

  • -d:後臺運行此容器;
  • --name:啓運容器分配名字influxdb;
  • --net:把容器加入到新的網絡monitor;
  • -p:映射端口,8083端口爲influxdb後臺控制端口,8086端口是infuxdb的數據端口;
  • tutum/influxdb:經過這個容器來運行的,默認會在docker官方倉庫pull下來;

 

查看influxdb容器是否啓動:

[root@flag ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
a6f6543140ed        tutum/influxdb      "/run.sh"           6 minutes ago       Up 6 minutes        0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

 

訪問influxdb控制檯http://192.168.200.111:8083

        從上圖能夠看到,在Query Templates選項中提供了經常使用的操做模板,可根據這些模板來管理influxdb,下面咱們就來建立數據庫和數據庫用戶。

CREATE USER "root" WITH PASSWORD '890' WITH ALL PRIVILEGES

        建立Cadvisor數據庫cadvisor、用戶root,用戶和數據庫你們能夠自行隨意定義,用於後期grafana的配置:

CREATE DATABASE "cadvisor"

建立Cadvisor容器

[root@flag ~]# docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --net monitor --publish=8080:8080 --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086
effa70d8cd00189b6ea51ae8e187d29df574fcd6194e5deda2ab5cd218430a55

參數說明:

  • -d:後臺運行次容器;
  • --name:啓動容器分配名字Cadvisor;
  • --net:把容器加入到新的網絡monitor;
  • -p:映射端口8080;
  • --mout:把宿主機的相文目錄綁定到容器中,這些目錄都是Cadvisor須要採集的目錄文件和監控內容;
  • -storage_driver:須要指定Cadvisor的存儲驅動、數據主機、數據庫名;
  • google/Cadvisor:經過Cadvisor這個鏡像來運行容器,默認會在docker官方倉庫把鏡像pull下來;

查看Cadvisor容器;

[root@flag ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
effa70d8cd00        google/cadvisor     "/usr/bin/cadvisor -…"   6 minutes ago       Up 6 minutes        0.0.0.0:8080->8080/tcp   cadvisor

經過http://192.168.200.10:8080短褲訪問測試一下,第一次訪問這個頁面有點慢

        從上圖能夠看到,其實Cadvisor也有基礎的圖形界面展現功能,我麼這裏主要由它來作數據採集。

建立grafana容器

[root@flag ~]# docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana
6a4a527897bcf6b009ae8cc00e0ed21f1e330f9cd0aa4e5f004685a55ed38e71

查看運行結果:

[root@flag ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
6a4a527897bc        grafana/grafana     "/run.sh"           8 seconds ago       Up 6 seconds        0.0.0.0:3000->3000/tcp   grafana

        訪問grafana,經過http://192.168.200.10:3000端口的方式訪問,默認帳號密碼(admin/admin),首次陸續須要更新密碼。

添加數據源Add data source,以下圖:

 

 

 

新建Dashboard,以下圖:

Cadvisor+Prometheus+Grafana

2.一、Cadvisor產品簡介

        Cadvisor是Google開源的一款用於展現和分析容器運行狀態的可視化工具。經過在主機上運行Cadvisor用戶能夠輕鬆的獲取到當前主機上容器的運行統計信息,並以圖表的方式向用戶展現。

2.二、部署Cadvisor

被監控主機上部署Cadvisor容器

[root@10 ~]# docker rm -f $(docker ps -aq)
6a4a527897bc
effa70d8cd00
a6f6543140ed
[root@10 ~]# docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
e7493105e8a02b82f1ec67517a2ee28124d2b6f2659d4c9524361ca0cdc95350

2.三、訪問Cadvisor頁面

訪問http://192.168.200.10 cadvisor頁面看到手機到的數據

2.四、Prometheus產品簡介

        Prometheus 是一個最初在 SoundCloud 上構建的開源系統監視和警報工具包。自 2012年成立以來,不少公司和組織都採用了Prometheus,該項目擁有很是活躍的開發者和用戶社區。 它如今是一個獨立的開源項目,能夠獨立於任何公司進行維護。 爲了強調這一點,並闡明項目的治理結構,Prometheus於2016年加入Cloud Native Computing Foundation,做爲繼 Kubernetes 以後的第二個託管項目。


Prometheus 的主要特徵有∶

  • 多維度數據模型-由指標鍵值對標識的時間序列數據組成
  • PromQL,一種靈活的查詢語言
  • 不依賴分佈式存儲;單個服務器節點是自治的
  • 以 HTTP 方式,經過 pull模型拉取時間序列數據
  • 支持經過中間網關推送時間序列數據
  • 經過服務發現或者靜態配置,來發現目標服務對象
  • 支持多種多樣的圖表和界面展現

2.五、部署Prometheus

[root@10 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
prom/prometheus     latest              0bc82119c95b        2 weeks ago         169MB
grafana/grafana     latest              651ff2dc930f        2 weeks ago         187MB
google/cadvisor     latest              eb1210707573        2 years ago         69.6MB

先準備配置

[root@10 ~]# vi /tmp/prometheus.yml 
# my global config
global:
  scrape_interval:      15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval:  15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'docker'  #定義一個叫docker的組
    static_configs:
      - targets: ['192.168.200.10:8080']        #填寫一個或多個cadvisor的主機地址用逗號隔開

運行容器

[root@10 ~]# docker run -d \
--name=prometheus -p 9090:9090 \
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /etc/localtime:/etc/localrime \
prom/prometheus

2.六、訪問Prometheus頁面

http://192.168.200.10:9090

看到docker組狀態up爲正常

 

查詢項是能夠查到數據的

2.七、部署Grafana

[root@10 ~]# docker run -d \
--name=grafana \
-p 3000:3000 \
grafana/grafana

2.八、配置Grafana

訪問http://192.168.200.10:3000默認帳戶admin密碼admin首次登錄須要修改密碼

配置數據源

導入模板

選擇對應的數據源,點擊導入,就能夠看到被監控主機的數據

準備測試容器

相關文章
相關標籤/搜索