当サイトは、アフィリエイト広告を利用しています

【Docker × Python】Glancesでリソースをモニタリングする

作成日:2023月10月20日
更新日:2023年10月20日

システムのリソース監視をする必要があり
システムのリソースのモニタリングツールである
GlancesをDockerコンテナで使ってみたのでその使い方をまとめる。

Glancesとは?

システムのリソースのモニタリングツールであり
WEB画面やコマンドラインなどでシステムのリソース状況
を監視することができるツール

Glancesには下記の3つのモードがある

  • Standaloneモード
  • Client/Serverモード
  • Web serverモード

Standaloneモード

  • 監視される側:ローカルマシン
  • 監視する側 :ローカルマシン

このモードは、自分のコンピュータ(ローカルマシン)のシステム情報をモニタリングするために使用する
例えば、自分のPCのCPU使用率やメモリ使用量などを確認したい場合に使う。

dockerコンテナで起動した場合は、起動したコンテナの情報をモニタリングできる

イメージ

2023-10-20-17-16-15

Client/Serverモード:監視対象がローカルマシン

  • 監視される側:サーバー
  • 監視する側 :クライアント

このモードは、他のコンピュータ(リモートマシン)のシステム情報をクライアント側から
モニタリングするために使用する
例えば、サーバーの状態を確認したい場合に利用する。

サーバーとクライアントの両方でGlancesをインストールしておく必要がある。

イメージ

2023-10-20-17-16-57

Web serverモード

  • 監視される側:サーバー
  • 監視する側 :ブラウザ

このモードは、WebブラウザからGlancesにアクセスするために使用する
サーバーで起動してるGlancesにブラウザからアクセスしてモニタリングするので
モニタリングする側はブラウザなのでGlancesをインストールする必要はない。

イメージ

2023-10-20-17-17-08

環境

今回はDockerを使ってコンテナでGlancesを動作させるため
下記のような環境で行う

  • Windows10
  • Docker version 24.0.2(Docker for Windows)

Docker for Windowsのインストール方法については下記記事で 紹介しています

構成

プロジェクト構成は以下のようにする

bash
.
|-- app
| `-- main.py
|-- docker
| |-- Dockerfile
| `-- requirements.txt
|-- docker-compose.yml
`-- out

各ファイルを解説する

main.py

main.py
import pandas as pd
# csv読み込み
df = pd.read_csv('output.csv')
# エクセル出力
df.to_excel('output.xlsx')

Glancesの出力結果をエクセル変換するPythonプログラム
output.csvはGlancesが作成してくれるので
後はPythonでdf型にすれば、エクセル変換とかグラフとか
いろいろできる

Dockerfile

dockerfile
# イメージ
FROM python:3.10
# パッケージを最新化
RUN python -m pip install --upgrade pip
# workspaceディレクトリを作成
WORKDIR /workspace
# workspaceにrequirements.txtをコピー
COPY requirements.txt /workspace/
# # requirements.txtのパッケージをインストール
RUN pip install -r requirements.txt
# upyter NotebookのLabインターフェースを有効にするための設定
ENV JUPYTER_ENABLE_LAB = yes

dockerイメージを作るためのファイル
DockerfileでPython3.10のイメージを使い
pipを使ってGlancesをインストールする
※requirements.txtでインストールするパッケージを指定する

GlancesはPython 2.7以降とPython 3.4以降をサポートしてるので
今回は「python:3.10」を使う

requirements.txt

requirements.txt
jupyterlab==3.4.5
pandas # csv編集用
Glances # リソース監視
Bottle # ブラウザ表示
openpyxl # excel出力用

pipでインストールするPythonのパッケージを指定。

docker-compose.yml

docker-compose.yml
version: "3"
# コンテナ
services:
# server
glances_server:
container_name: "glances_server"
# host名
hostname: target_server
# Dockerfileをビルド
build:
context: ./docker
dockerfile: Dockerfile
tty: true
# ポートマッピング
ports:
- "61208:61208"
# outをバインドマウント
volumes:
- ./out:/workspace/out
# glances_client
glances_client:
container_name: "glances_client"
# host名
hostname: target_client
# Dockerfileをビルド
build:
context: ./docker
dockerfile: Dockerfile
tty: true
# outをバインドマウント
volumes:
- ./out:/workspace/out
# blank_client
blank_client:
container_name: "blank_client"
# host名
hostname: blank_client
# Dockerfileをビルド
image: python:3.10
tty: true

Dockerコンテナを作成するためのファイル
ここでは3つのコンテナを作成しておく。

glances_server

glancesをインストールしたサーバーの役割のコンテナ
Web serverモードの検証をするために
ポートマッピングを設定しておく

glances_client

glancesをインストールしたクライアントの役割のコンテナ
Client/Serverモードの検証をするために作成

blank_client

glancesをインストールしてないクライアントの役割のコンテナ
Web serverモードの検証のために作成

Dockerコンテナを作る

docker-composeを実行して、コンテナを作る
WindowsTerminalから実行する
※docker-compose.ymlがあるディレクトリまで移動してから実行する

GitBash
$ docker compose up -d
[+] Running 4/4
✔ Network glances_default Created 0.8s
✔ Container glances_client Started 2.1s
✔ Container glances_server Started 2.4s
✔ Container blank_client Started
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cda6eb30418f glances-glances_client "python3" 6 minutes ago Up 6 minutes glances_client
e34f40464530 glances-glances_server "python3" 6 minutes ago Up 6 minutes 0.0.0.0:61208->61208/tcp glances_server
b5197a57958f python:3.10 "python3" 6 minutes ago Up 6 minutes blank_client

3つとも起動できた

Glancesを使ってみる

コンテナが作成できたので各モードの動きを
それぞれ見ていく

Standaloneモード

最初に自分のパソコンをモニタリングするStandaloneモード
を動かしてみる。

glances_serverコンテナ(host名:target_server)のモニタリング

GitBash
$ docker exec -it glances_server glances

glances_serverに入ってglancesを起動する
Standaloneモードは「glances」コマンドで起動する 2023-10-20-15-48-13

target_server(host名)のリソース状況をモニタリングできる

glances_clientコンテナ(host名:target_client)のモニタリング

GitBash
$ docker exec -it glances_client glances

glances_clientに入ってglancesを起動する
2023-10-20-15-51-01 target_client(host名)のリソース状況をモニタリングできる

Client/Serverモード

次はClient/Serverモードを動かしてみる。
これはglances_clientコンテナからglances_serverコンテナをモニタリングする

glances_serverコンテナ(host名:target_server)

glances_serverコンテナ(host名:target_server)で
glancesを下記コマンドで起動する

Client/Serverモードのサーバー側は
「glances -s」
で起動する

GitBash
$ docker exec -it glances_server glances -s
Glances XML-RPC server is running on 0.0.0.0:61209

glances_clientコンテナ(host名:target_client)でモニタリング

「glances -s」で起動したglances_serverコンテナを
glances_clientコンテナからモニタリングする

glances_clientコンテナで
glancesを下記コマンドで起動する

Client/Serverモードのクライアント側は
「glances -c ホスト名orIP」
で起動する

GitBash
$ docker exec -it glances_client glances -c target_server

下記のようにクライアントからサーバーを監視できる
2023-10-20-16-02-19

注意点としてはクライアント、サーバーの両方でglancesをインストールし
起動しておく必要がある

Web serverモード

最後にブラウザからモニタリングするWeb serverモード を動かしてみる。

glances_serverコンテナ(host名:target_server)

glances_serverコンテナ(host名:target_server)で
glancesを下記コマンドで起動する

Web serverモードの監視対象を
「glances -w」
で起動する

GitBash
$ docker exec -it glances_server glances -w
Glances Web User Interface started on http://0.0.0.0:61208/

起動できたら確認する

ブラウザから確認する

Web serverモードはブラウザから確認できるので
ホストのブラウザから確認する

ブラウザから下記のURLでアクセスする
http://localhost:61208/

※docker-composeでポートマッピングしているので
アクセスできる 2023-10-20-16-47-33 ちょっとよくわからないがgoogle chromeだと表示されないが
Microsoft Edgeだと表示できた。

blank_clientコンテナから確認する

Web serverモードはクライアント側にglancesをインストール
しなくても使えることを確認するため
blank_client(glancesインストールなし)でも
curlコマンドでアクセスしてみる

GitBash
$ docker exec -it blank_client bash
root@blank_client:/# curl http://target_server:61208/
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Glances</title>
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<script>
window.__GLANCES__ = {
'refresh-time': '2'
}
</script>
<script src="glances.js" defer></script>
</head>
<body>
<div id="app"></div>
</body>
</html>
root@blank_client:/#

コンテナからのアクセスのため curl http://target_server:61208/ にアクセスする
※localhostではなく、host名を使う

監視オプション

上記まではGlancesで動かしていたが
自分のモニタリングしたい項目だけ指定することもできる

Standaloneモードで試してみる
※他のモードでも基本的には同じ

時間とcpuとmemoryをモニタリングする

時間とcpuとmemoryのみをモニタリングしてみる

GitBash
$ docker exec -it glances_server glances --stdout-csv now,cpu.user,mem.used
now,cpu.user,mem.used
2023-10-20 07:56:14 UTC,0.5,1356427264
2023-10-20 07:56:16 UTC,0.2,1356410880
2023-10-20 07:56:18 UTC,0.0,1356410880
2023-10-20 07:56:20 UTC,0.1,1356402688
2023-10-20 07:56:22 UTC,0.1,1356660736
2023-10-20 07:56:24 UTC,0.1,1357950976
2023-10-20 07:56:26 UTC,0.1,1357950976
2023-10-20 07:56:28 UTC,0.0,1357950976
2023-10-20 07:56:30 UTC,0.0,1357950976
2023-10-20 07:56:32 UTC,0.2,1357692928

csv形式で出力させることもできる。
終了はctrl + c

csv形式のファイルで出力

上記はcsv形式で出力されるだけだが
ファイルに出力させることもできる

js
// glancesを起動して結果をtarget_server_out.csvに出力させる
$ docker exec -it glances_server glances --stdout-csv now,cpu.user,mem.used > out/target_server_out.csv
// glances_serverコンテナに入る
$ docker exec -it glances_server bash
// 移動してファイルを確認
root@target_server:/workspace# cd out
root@target_server:/workspace/out# cat target_server_out.csv
now,cpu.user,mem.used 
2023-10-20 08:02:29 UTC,0.1,N/A
2023-10-20 08:02:31 UTC,0.0,N/A
2023-10-20 08:02:33 UTC,0.2,N/A

ファイルが出力される

まとめ

Dockerコンテナを使ってPythonのモニタリングツールである
Glancesの動作をまとめてみた。

モードもたくさんあり、使い勝手も良いので
システム負荷テストをする時などに併用すれば
使い勝手はよさそう

参考

関連記事

新着記事

top