docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

容器監控的方案有不少,有docker自身的docker stats命令、有Scout、有Data Dog等等,本文主要和你們分享一下比較經典的容器開源監控方案組合:cAdvisor+InfluxDB+Grafan。docker

1.概念

  cAdvisor:用於數據採集
  InfluxDB:用於數據存儲
  Grafana: 用於數據展現

docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana數據庫

1.1 cAdvisor

它是Google用來監測單節點的資源信息的監控工具。Cadvisor提供了一目瞭然的單節點多容器的資源監控功能。Google的Kubernetes中也缺省地將其做爲單節點的資源監控工具,各個節點缺省會被安裝上Cadvisor。總結起來主要兩點:安全

  • 展現 Host 和容器兩個層次的監控數據。
  • 展現歷史變化數據。

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

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

1.2 InfluxDB

InfluxDB 是用Go語言編寫的一個開源分佈式時序、事件和指標數據庫,無需外部依賴。相似的數據庫有Elasticsearch、Graphite等。編輯器

InfluxDB主要特點功能分佈式

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

InfluxDB主要特色ide

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

1.3 Grafana

Grafana是一個可視化面板(Dashboard),有着很是漂亮的圖表和佈局展現,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB做爲數據源。Grafana主要特性:靈活豐富的圖形化選項;能夠混合多種風格;支持白天和夜間模式;多個數據源。函數

2.部署過程

  • 建立自定義網絡monitor(自定義網絡名稱),用於後期容器加入此網絡中,固然你也能夠忽略此步;
  • 建立Influxdb容器,建立數據用戶、數據庫;
  • 建立cAdvisor容器;
  • 建立Grafana容器,配置grafana;

3.開始部署

3.1 建立自定義網絡

  • 前面也說過了,你能夠不用建立自定網絡,做者只是爲了把後期建立的cAdvisor+InfluxDB+Grafana這三個容器都加入本身定義的網絡便於理解和管理,因此才新建一個自定義網絡:工具

    [root@ganbing ~]# docker network create monitor
    cc193568263604e3bc3e7a5d78f18d07af99810e1d5c19bac99fccfa045f48f5
  • 查看建立的網絡:
    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

3.2 建立influxdb容器

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

    [root@ganbing ~]# docker run -d --name influxdb --net monitor -p 8083:8083 -p 8086:8086 tutum/influxdb

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

  • 查看influxdb容器是否啓動:

    [root@ganbing ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
    30b9789e680d        tutum/influxdb      "/run.sh"           22 seconds ago      Up 21 seconds       0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb
  • 訪問influxdb控制檯,ip+8083端口訪問:
    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana
從上圖能夠看到,在Query Templates選項中提供了經常使用的操做模板,可根據這些模版來管理influxdb,下面咱們就來建立數據庫和數據庫用戶。

  • 建立cadvisor數據庫cadvisor、用戶root,用戶和數據庫你們能夠自行隨意定義,不必定要跟我同樣,只是用於後期grafana的配置:

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

docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

CREATE DATABASE "cadvisor"

docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

3.3 建立cadvisor容器

  • 運行cadvisor容器:

    $docker run -d \
    --name=cadvisor \
    --net monitor \
    -p 8080:8080 \
    --mount type=bind,src=/,dst=/rootfs,ro \
    --mount type=bind,src=/var/run,dst=/var/run \
    --mount type=bind,src=/sys,dst=/sys,ro \
    --mount type=bind,src=/var/lib/docker/,dst=/var/lib/docker,ro \
    google/cadvisor \
    -storage_driver=influxdb \
    -storage_driver_db=cadvisor \
    -storage_driver_host=influxdb:8086

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

  • 查看cadvisor容器:

    [root@ganbing ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    90871ba5be7e        google/cadvisor     "/usr/bin/cadvisor -…"   51 seconds ago      Up 50 seconds       0.0.0.0:8080->8080/tcp   cadvisor
  • 經過ip+8080端口訪問測試一下,第一次訪問這個頁面有點慢:
    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana
    從上圖能夠看到,其實cadvisor也有基礎的圖形展現功能,咱們這裏主要用它來作數據採集。

3.4 建立granafa容器

  • 運行granafa容器:

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

    這裏的參數比較簡單,跟上面都差很少,不作詳細解釋。

  • 查看運行結果:

    [root@ganbing ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
    a90e03e2017a        grafana/grafana     "/run.sh"           17 seconds ago      Up 16 seconds       0.0.0.0:3000->3000/tcp   grafana
  • 訪問granfa,經過ip+3000端口的方式訪問,默認帳戶密碼(admin/admin):
    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

  • 添加數據源Add data source,以下圖:
    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

  • 新建New dashboard,以下圖:
    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

  • 新建了一個監控項以後,回來HOME,能夠發現剛纔建立的項目:
    docker:快速構建容器監控系統cAdvisor+InfluxDB+Grafana

到這裏cAdvisor+InfluxDB+Grafana容器監控系統就部署完成了,至於其它grafana的監控項配置不是本文的重點,就不在這裏一一介紹其它監控項怎麼玩了,你們若是感興趣能夠參考一些官方資料或者百度一些資料參閱,都是圖形化的界面操做,多點、多玩、多測兩個就搞明白了。

4.總結

 監控沒有最好、最優的監控方案,須要根據企業環境的自身特色結合每一個監控產品的優點來達到監控的目的。一個企業完整的監控體系包括如下幾個組成部分:

  • 監控數據採集的時效與精確
  • 監控數據採集存儲與歸檔
  • 監控數據的圖形化展現
  • 監控數據的自動化分析與聯動處理
  • 監控的告警及自動化處理
  • 監控工具自身的安全控制
  • 監控告警的響應及跟蹤

喜歡個人文章,請點擊最上方右角處的《關注》支持一下!

相關文章
相關標籤/搜索