打造高逼格、可視化的Docker容器監控系統平臺

運維2018-07-17 23:36:37

來自:民工哥技術之路(微信號:jishuroad)

為什麼需要??

對於一個物理機上運行多個應用時,容器的運行情況如:CPU使用率、內存使用率、網絡狀態、磁盤空間等信息,都是需要去了解的,因此監控是必須的。對於容器的監控方案可謂多種多樣,本身自帶命令docker stats。
[[email protected] ~]# docker stats
CONTAINER      CPU %    MEM USAGE / LIMIT    MEM %      NET I/O         BLOCK I/O    PIDS
bd96d72ed9c7   0.04%  14.97 MiB / 7.64 GiB  0.19%    8.22 MB / 805 MB   0 B / 0 B      9
665563143eb7   0.01%  18.12 MiB / 7.64 GiB   0.23%  19.7 MB / 18.5 MB   0 B / 39.4 MB  8
f2304dad5855  0.18%  98.45 MiB / 7.64 GiB   1.26%   1.07 GB / 9.97 MB   0 B / 2.13 GB  9
今天民工哥要介紹的是一款開源方案cAdvisor+InfluxDB+Grafana。

組件簡介

cAdvisor:用於採集

cadvisor谷歌公司自己用來監控他們基礎設施的一款工具,這個工具厲害之處不僅能監控docker容器的實時信息,而且還能將你的cadvisor這容器所在的主機的系統的實時信息,但是由於cadvisor只是能監控到實時的信息而不能保存。


InfluxDB:用於數據存儲

InfluxDB 是用Go語言編寫的一個開源分佈式時序、事件和指標數據庫,無需外部依賴。所以我們要使用influxdb將這些實時監控到的信息存放起來。

InfluxDB主要特色功能
  • 基於時間序列,支持與時間有關的相關函數(如最大,最小,求和等);

  • 可度量性:你可以實時對大量數據進行計算;

  • 基於事件:它支持任意的事件數據;

InfluxDB主要特點
  • 無結構(無模式)

  • 可以是任意數量的列

  • 可拓展的;

  • 支持min, max, sum, count, mean, median 等一系列函數,方便統計

  • 原生的HTTP支持,內置HTTP API

  • 強大的類SQL語法

  • 自帶管理界面,方便使用

  • 參考文章:https://www.influxdata.com/products/


Grafana: 用於數據展示

Grafana是一個可視化面板(Dashboard),有著非常漂亮的圖表和佈局展示,功能齊全的度量儀表盤和圖形編輯器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為數據源。

Grafana主要特性:
  • 靈活豐富的圖形化選項

  • 可以混合多種風格

  • 支持白天和夜間模式

  • 多個數據源。


安裝佈署過程

首先得有docker環境,這個就不用介紹了吧,請參考前面的文章

Docker容器技術入門(一)

1、部署influxDB服務

[[email protected] ~]# docker run -d --name influxdb -p 8086:8086 tutum/influxdb
Unable to find image 'tutum/influxdb:latest' locally
Trying to pull repository docker.io/tutum/influxdb ...
latest: Pulling from docker.io/tutum/influxdb
a3ed95caeb02: Pull complete
23efb549476f: Pull complete
aa2f8df21433: Pull complete
ef072d3c9b41: Pull complete
c9f371853f28: Pull complete
a248b0871c3c: Pull complete
749db6d368d0: Pull complete
db2492acfcc3: Pull complete
b7e7d2e12d53: Pull complete
4272a53eef10: Pull complete
9b2fefdb5321: Pull complete
Digest: sha256:5b7c5e318303ad059f3d1a73d084c12cb39ae4f35f7391b79b0ff2c0ba45304b
Status: Downloaded newer image for docker.io/tutum/influxdb:latest
f384db08ffc78e01fc27bf4c35dc6503b0fd2473cd8d5114b4d8a5475f928b53
說明:
  • -d :後臺運行此容器

  • --name :啟運容器分配名字influxdb

  • -p :映射,8083端口為infuxdb管理端口,8086端口是infuxdb的數據端口

  • tutum/influxdb:通過這個容器來運行的,默認會在docker官方倉庫pull下來

查看容器
[[email protected] ~]# docker ps
CONTAINER ID      IMAGE          COMMAND      CREATED           STATUS                   PORTS                      NAMES
f2304dad5855   tutum/influxdb   "/run.sh"   4 seconds ago   Up 4 seconds  0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp   influxdb

現在可以通過瀏覽器去訪問influxdb的管理端了

接下來創建cadvisor的數據庫與用戶,這個用於後期配置granfa

回車直接創建完成如下圖

創建管理用戶

創建完成如下圖

同時也是可以使用CLI命令行界面來創建的,命令一樣

2、佈署cadvisor服務

[[email protected] ~]# docker run -d 
--name=cadvisor
-p 8082:8080
-v /:/rootfs,ro
-v /var/run:/var/run
-v /sys:/sys,ro
-v /var/lib/docker/:/var/lib/docker,ro
google/cadvisor
-storage_driver=influxdb
-storage_driver_db=cadvisor
-storage_driver_host=influxdb:8086

Unable to find image 'google/cadvisor:latest' locally
Trying to pull repository docker.io/google/cadvisor ...
latest: Pulling from docker.io/google/cadvisor
ab7e51e37a18: Pull complete
a2dc2f1bce51: Pull complete
3b017de60d4f: Pull complete
Digest: sha256:9e347affc725efd3bfe95aa69362cf833aa810f84e6cb9eed1cb65c35216632a
Status: Downloaded newer image for docker.io/google/cadvisor:latest
a212dc33c9424b6e36485334511e6317bdebc06977b9af374b81b0cab113e724
說明:
  • -d :後臺運行此容器

  • --name :啟運容器分配名字cadvisor

  • -p :映射端口8082:8080(由於環境8080端口被佔用,cadvisor默認端口是8080不建議修改)

  • -v:把宿主機的目錄映射到容器中,這些目錄都是cadviso需要採集的目錄文件和監控內容

  • -storage_driver:需要指定cadvisor的存儲驅動、數據庫主機、數據庫名

  • google/cadvisor:通過cadvisor這個鏡像來運行容器,默認會在docker官方倉庫把鏡像pull下來;

查看cadvisor容器:
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
a212dc33c942        google/cadvisor     "/usr/bin/cadvisor..."   2 minutes ago       Up 2 minutes        0.0.0.0:8082->8080/tcp                 cadvisor

現在可以通過瀏覽訪問cadisor的管理頁面

cadvisor的基礎圖形功能也酷炫的

測試是否寫入influxdb數據庫

3、佈署granafa

[[email protected] ~]# docker run -d --name grafana -p 3000:3000 grafana/grafana
Unable to find image 'grafana/grafana:latest' locally
Trying to pull repository docker.io/grafana/grafana ...
latest: Pulling from docker.io/grafana/grafana
f2aa67a397c4: Pull complete
89573effc7c8: Pull complete
b55c103da375: Pull complete
Digest: sha256:364bec4a39ecbec744ea4270aae35f6554eb6f2047b3ee08f7b5f1134857c32c
Status: Downloaded newer image for docker.io/grafana/grafana:latest
665563143eb74e5e2e76b7a1533cbf67a68590d355b0b22d453eac07e0e0b616
[[email protected] ~]# docker ps
CONTAINER ID      IMAGE             COMMAND        CREATED          STATUS              PORTS                  NAMES
665563143eb7  grafana/grafana       "/run.sh"   48 seconds ago    Up 47 seconds    0.0.0.0:3000->3000/tcp     grafana

訪問WEB管理端

用戶名:密碼 admin:admin

添加數據源

之後保存並測試連接

新建New dashboard

這裡隨便選擇一個容器做為測試使用,實際環境可根據實際環境填寫

保存返回到HOME界面後,如下圖

最終的效果圖如下



●編號190,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓
 

Linux學習

更多推薦18個技術類微信公眾號

涵蓋:程序人生、算法與數據結構、黑客技術與網絡安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、數據庫、運維等。

閱讀原文

TAGS: