Docker進階-容器監控cAdvisor+InfluxDB+Granfana

2020-12-25 小碼農薛堯

概述

前面文章介紹使用docker compose組合應用並利用scale快速對容器進行擴容。

由於docker compose啟動的服務都在同一臺宿主機上,對於一個宿主機上運行多個容器應用時,容器的運行情況如:CPU使用率、內存使用率、網絡狀態、磁碟空間等一系列隨時間變化的時序數據信息,都是需要去了解,因此監控是必須的。

容器監控方案選擇

對於容器的監控方案可謂多種多樣,本身自帶命令docker stats命令,Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等。

通過docker stats命令可以很方便的看到當前宿主機上所有容器的CPU,內存以及網絡流量等數據。但是docker stats命令的缺點就是統計的只是當前宿主機的所有容器,而獲取的監控數據是實時的,沒有地方存儲,也沒有報警功能。

docker stats

而Scout、Sysdig Cloud、Data Dog雖然都提供了較完善的服務,但是它們都是託管的服務而且都收費,Sensu Monitoring Framework集成度較高,也免費,但是部署過於複雜。綜合考慮,我們選擇了CAdvisor做容器監控工具。

CAdvisor谷歌出品,優點是開源產品,監控指標齊全,部署方便,而且有官方的docker鏡像。缺點是集成度不高,默認只在本地保存2分鐘數據。不過可以加上InfluxDB存儲數據,對接Grafana展示圖表,比較便利地搭建好了容器監控系統,數據收集和圖表展示效果良好,對系統性能也幾乎沒有什麼影響。

CAdvisor

CAdvisor是一個容器資源監控工具,包括容器的內存,CPU,網絡IO,磁碟IO等監控,同時提供了一個WEB頁面用於查看容器的實時運行狀態。CAdvisor默認存儲2分鐘的數據,而且只是針對單物理機。不過,CAdvisor提供了很多數據集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上對應配置將監控數據發往這些資料庫存儲起來。

CAdvisor功能主要有兩點:

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

InfluxDB是用Go語言編寫的一個開源分布式時序、事件和指標資料庫,無需外部依賴。

前面說到,CAdvisor默認只在本機保存最近2分鐘的數據,為了持久化存儲數據和統一收集展示監控數據,需要將數據存儲到InfluxDB中。InfluxDB是一個時序資料庫,專門用於存儲時序相關數據,很適合存儲CAdvisor的數據。而且,CAdvisor本身已經提供了InfluxDB的集成方法,豐啟動容器時指定配置即可。

InfluxDB主要功能:

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

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

Grafana是一個開源的數據監控分析可視化平臺,支持多種數據源配置(支持的數據源包括InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite等)和豐富的插件及模板功能,支持圖表權限控制和報警。

Grafan主要特性:

靈活豐富的圖形化選項可以混合多種風格支持白天和夜間模式多個數據源CAdvisor+InfluxDB+Granfana

CAdvisor:負責收集容器的隨時間變化的數據InfluxDB:負責存儲時序數據Grafana:負責分析和展示時序數據

安裝部署

部署InfluxDB服務

docker run -d --name influxdb -p 8086:8086 \-v /data/influxdb:/var/lib/influxdb \--hostname=influxdb \influxdb

說明:

--name:啟運容器分配名字influxdb-p:映射埠,8083埠為influxdb管理埠,8086埠是influxdb的數據埠-v:掛載數據 -d:後臺運行此容器influxdb:通過這個容器來運行的,默認會在docker官方倉庫pull下來1、瀏覽器訪問influxdb的管理端,http://ip:8083

2、創建test的資料庫與root用戶,這個用於後期配granfa

docker exec it influxdb influxCREATEDATABASE"test"CREATEUSER"root"WITHPASSWORD'root'WITH ALL PRIVILEGES

部署CAdvisor服務

谷歌的cadvisor可以用於收集Docker容器的時序信息,包括容器運行過程中的資源使用情況和性能數據。

docker run --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 --volume=/cgroup:/cgroup:ro \--publish=8080:8080 --detach=true --privileged=true --name=cadvisor \google/cadvisor:latest\-storage_driver=influxdb-storage_driver_host=influxdb:8086\-storage_driver_db=test-storage_driver_user=root\-storage_driver_password=root

說明:

-d:後臺運行此容器--name:啟動容器分配名字cadvisor-p:映射埠8080--mount:把宿主機的相關目錄綁定到容器中,這些目錄都是cadvisor需要採集的目錄文件 和監控內容-storage_driver:需要指定cadvisor的存儲驅動、資料庫主機、資料庫名通過ip:8080埠訪問測試一下

部署Granfana服務

grafana是一款開源的時序數據分析工具,而且界面專業簡單。

docker run -d -p 3000:3000 \-v /data/grafana:/var/lib/grafana \--link=influxdb:influxdb\--name grafana grafana/grafana

注意:如果使用-v把數據掛載出來會出現容器啟動失敗,錯誤為mkdir:cannot create directory '/var/lib/grafana/plugins':Permission denied,此時可以使用docker run --entrypoint "id" grafana/grafana得到uid,gid,groups(默認是472);

接著使用chown -R 472:472 /data/grafana/修改目錄權限就可以啟動成功。

通過ip:3000埠來訪問grafana的web服務,第一次訪問需要修改admin用戶密碼,默認用戶名/密碼為admin/admin

docker-compose快速部署

啟動docker-compose文件

docker-compose up

查看三個服務容器是否啟動

瀏覽grafana服務,http://ip:3000

登陸grafana服務

瀏覽influxdb服務,http://ip:8083/

配置grafana工具

1、配置數據源

選擇influxdb數據源

具體配置如下

配置完成後,如下圖

2、配置面板

選擇面板類型

選擇圖形

配置查詢條件

配置完後,效果如下圖

grafana支持查詢條件,可以從influxdb中了解

瀏覽cAdvisor服務,http://ip:8080/

相關焦點

  • 如何使用Elasticsearch和cAdvisor監控Docker容器
    你需要監控下面的參數: 容器的數量和狀態。 一臺容器是否已經移到另一個節點了,如果是,那是在什麼時候,移動到哪個節點? 給定節點上運行著的容器數量。 一段時間內的通信峰值。 孤兒卷和網絡(LCTT 譯註:孤兒卷就是當你刪除容器時忘記刪除它的卷,這個卷就不會再被使用,但會一直佔用資源)。
  • Docker應用之CockroachDB數據存儲:開發和部署容器的力量
    開發容器靜態的連接二進位文件和測試功能。主要二進位文件放入一個最小的容器中,測試功能可以被安裝在這個容器中來檢查功能是否可用。開發鏡像cockroachdb-dev簡單來說,CockroachDB原始碼使用GO語言和C++編寫。
  • Docker 添加容器到一個網絡
    例如,我們希望運行一個容器來運行 PostgreSQL 資料庫,並且傳遞 --net=my_bridge 標記來到你新網絡的連接中,可以運行下面的命令:$ docker run -d --net=my_bridge --name db training/postgres如果你檢查你的
  • 攻擊和審計Docker容器01
    Docker容器鏡像是一個輕量級,獨立的可執行軟體包,包含運行應用程式所需的一切:代碼,運行時,系統工具,系統庫和設置。容器鏡像在運行時成為容器,在Docker容器的情況下- 鏡像在Docker Engine上運行時成為容器。適用於基於Linux和Windows的應用程式,無論基礎架構如何,容器化軟體都將始終運行相同。容器將軟體與其環境隔離開來,並確保它可以統一工作,儘管開發和演示之間存在差異。
  • 通過容器化一個Python Web應用學習Docker容器技術
    "VirtualSize": 103263332, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/c349c378637d8211bb08eab95d5e7abdbf6d394c304ba57a64b8664a5c728b2a
  • 上手 Docker 容器數據管理
    創建網絡,便於容器互聯docker network create dream-net# 啟動 MongoDB 容器(dream-db)docker run --name dream-db --network dream-net -d mongo# 啟動 Express API 容器(dream-api)docker run -p 4000:4000
  • Docker系列教程02-操作Docker容器
    [root@qll251 ~]# docker run -it ubuntu /bin/bashroot@8b18b6758bb6:/#docker run相當於執行了兩個步驟:將鏡像放入容器中(docker create),然後啟動容器(docker start)。
  • 【Docker】系列教程02-操作Docker容器
    ~]# docker run -it ubuntu /bin/bashroot@8b18b6758bb6:/#docker run相當於執行了兩個步驟:將鏡像放入容器中(docker create),然後啟動容器(docker start)。
  • 雲計算核心技術Docker教程:Docker Compose yml常用配置指令簡介
    Docker Compose 默認使用文件名 docker-compose.yml,例如以下就是一個docker-compose.yml文件示例:version:指定本 yml 依從的 compose 哪個版本制定的services:用於定義不同的應用服務,上例中分別定義了兩個服務
  • 【乾貨】解密監控寶Docker監控實現原理
    以下是此次分享的實錄,請聽Neeke細說端詳:  1、Docker監控概況  在雲時代,仍有大量物理機直接支持服務,相較於虛擬技術來講,這種方式已經落伍很多,於是各種開源容器技術大大推進了虛擬化技術的發展。  Docker容器相較於其他容器技術來講,是比較新的,而且發展最為迅速。原因不用多說,背後有老大哥谷歌撐腰。
  • docker容器的啟動方式
    由於剛裝上Docker,沒有任何鏡像,所以會先下載一個最新的ubuntu18.04的docker鏡像。一次操作容器在處理完操作後會立即關閉容器。:docker ps [-a][-l]      省略參數:列出正在運行的容器      -a: 列出所有容器      -l: 列出最近的容器    >查看指定的容器:docker inspect  name|id    >重新啟動停止的容器:docker start [-i] 容器名    >刪除停止的容器
  • Docker 監控實戰
    )怎麼說:容器的監控問題也花了我們很多精力。監控、告警是運營系統最核心的功能之一,騰訊內部有一套很成熟的監控告警平臺,而且開發運維同學已經習慣這套平臺,如果我們針對 Docker 容器再開發一個監控告警平臺,會花費很多精力,而且沒有太大的意義。所以,我們儘量去兼容公司現有的監控告警平臺。
  • Docker 容器的網絡
    嘗試運行下面的命令:$ docker run -itd --name=networktest ubuntu74695c9cea6d9810718fddadc01a727a5dd3ce6a69d09752239736c030599741通過檢查網絡,可以非常容易的找到你容器的
  • docker鏡像及容器命令
    運行容器docker run <容器名>3. 查看容器列表docker ps -a4.後臺運行容器docker run -d <容器名>-d 後臺執行5.暴露容器埠docker run -d -P <容器名>5.1 自定義埠暴露docker run -d -p 2020:80 2021:443 <容器名>
  • 雲計算核心技術Docker教程:Docker Compose run命令詳解
    --rm 運行後刪除容器,後臺運行模式除外(-d).-p, --publish=[] 開放埠--service-ports compose文件中配置什麼埠,就映射什麼埠.--use-aliases 使用網絡服務的網絡別名(s)容器連接。-v, --volume=[] 綁定掛載卷-T 禁用TTY.
  • 如何開始docker - docker架構及創建容器
    docker的組成docker是採用C/S模式,使用遠程API來管理創建docker。容器的創建過程: 鏡像倉庫 ->pull 鏡像到本地 -> 本地鏡像 -> run容器 from 鏡像 -> 創建容器並執行程序->程序退出->容器退出1、dockerd服務端(守護進程),dockerd是docker的守護進程。
  • 雲計算核心技術Docker教程:Docker容器使用
    要退出客戶端程序,直接輸入 exit:查看所有的容器命令如下:$ docker ps -a使用 docker start 啟動一個已停止的容器:$ docker start <容器 ID>$ docker run -itd --name ubuntu-test ubuntu /bin/bash要停止一個容器運行使用如下命令:$ docker stop <容器 ID>要重啟一個容器運行使用如下命令:
  • 雲計算核心技術Docker教程:rm/rmi命令詳解
    在docker客戶端命令行中我們可以使用rm刪除一個或多個容器,使用rmi刪除本地一個或多少鏡像。示例:docker rm :刪除一個或多個容器。語法:docker rm [OPTIONS] CONTAINER [CONTAINER...]OPTIONS說明:-f :通過 SIGKILL 信號強制刪除一個運行中的容器。-l :移除容器間的網絡連接,而非容器本身。-v :刪除與容器關聯的卷。
  • 理解docker鏡像與容器
    docker有兩個重要的概念:鏡像,容器。首先在說一下docker鏡像的存儲位置/var/lib/docker/,在aufs/layer/下可以看到ubuntu15.04鏡像的分層,正是這四層組成了ubuntu15.04鏡像。
  • CoreOS實踐指南(七):Docker容器管理服務
    這個腳本需要額外創建並放置到 /opt/bin 目錄下面,其作用是檢測是否已經有一個同名的容器在運行了,如果沒有則執行相應的 docker run 命令,否則直接使用 docker start 命令啟動已經存在的容器。其內容如下:#!