当サイトは、アフィリエイト広告を利用しています
システムのリソース監視をする必要があり
システムのリソースのモニタリングツールである
GlancesをDockerコンテナで使ってみたのでその使い方をまとめる。
システムのリソースのモニタリングツールであり
WEB画面やコマンドラインなどでシステムのリソース状況
を監視することができるツール
Glancesには下記の3つのモードがある
このモードは、自分のコンピュータ(ローカルマシン)のシステム情報をモニタリングするために使用する
例えば、自分のPCのCPU使用率やメモリ使用量などを確認したい場合に使う。
dockerコンテナで起動した場合は、起動したコンテナの情報をモニタリングできる
このモードは、他のコンピュータ(リモートマシン)のシステム情報をクライアント側から
モニタリングするために使用する
例えば、サーバーの状態を確認したい場合に利用する。
サーバーとクライアントの両方でGlancesをインストールしておく必要がある。
このモードは、WebブラウザからGlancesにアクセスするために使用する
サーバーで起動してるGlancesにブラウザからアクセスしてモニタリングするので
モニタリングする側はブラウザなのでGlancesをインストールする必要はない。
今回はDockerを使ってコンテナでGlancesを動作させるため
下記のような環境で行う
Docker for Windowsのインストール方法については下記記事で 紹介しています
プロジェクト構成は以下のようにする
.|-- app| `-- main.py|-- docker| |-- Dockerfile| `-- requirements.txt|-- docker-compose.yml`-- out
各ファイルを解説する
import pandas as pd# csv読み込みdf = pd.read_csv('output.csv')# エクセル出力df.to_excel('output.xlsx')
Glancesの出力結果をエクセル変換するPythonプログラム
output.csvはGlancesが作成してくれるので
後はPythonでdf型にすれば、エクセル変換とかグラフとか
いろいろできる
# イメージ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」を使う
jupyterlab==3.4.5pandas # csv編集用Glances # リソース監視Bottle # ブラウザ表示openpyxl # excel出力用
pipでインストールするPythonのパッケージを指定。
version: "3"# コンテナservices:# serverglances_server:container_name: "glances_server"# host名hostname: target_server# Dockerfileをビルドbuild:context: ./dockerdockerfile: Dockerfiletty: true# ポートマッピングports:- "61208:61208"# outをバインドマウントvolumes:- ./out:/workspace/out# glances_clientglances_client:container_name: "glances_client"# host名hostname: target_client# Dockerfileをビルドbuild:context: ./dockerdockerfile: Dockerfiletty: true# outをバインドマウントvolumes:- ./out:/workspace/out# blank_clientblank_client:container_name: "blank_client"# host名hostname: blank_client# Dockerfileをビルドimage: python:3.10tty: true
Dockerコンテナを作成するためのファイル
ここでは3つのコンテナを作成しておく。
glancesをインストールしたサーバーの役割のコンテナ
Web serverモードの検証をするために
ポートマッピングを設定しておく
glancesをインストールしたクライアントの役割のコンテナ
Client/Serverモードの検証をするために作成
glancesをインストールしてないクライアントの役割のコンテナ
Web serverモードの検証のために作成
docker-composeを実行して、コンテナを作る
WindowsTerminalから実行する
※docker-compose.ymlがあるディレクトリまで移動してから実行する
$ 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 psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMEScda6eb30418f glances-glances_client "python3" 6 minutes ago Up 6 minutes glances_cliente34f40464530 glances-glances_server "python3" 6 minutes ago Up 6 minutes 0.0.0.0:61208->61208/tcp glances_serverb5197a57958f python:3.10 "python3" 6 minutes ago Up 6 minutes blank_client
3つとも起動できた
コンテナが作成できたので各モードの動きを
それぞれ見ていく
最初に自分のパソコンをモニタリングするStandaloneモード
を動かしてみる。
$ docker exec -it glances_server glances
glances_serverに入ってglancesを起動する
Standaloneモードは「glances」コマンドで起動する
target_server(host名)のリソース状況をモニタリングできる
$ docker exec -it glances_client glances
glances_clientに入ってglancesを起動する
次はClient/Serverモードを動かしてみる。
これはglances_clientコンテナからglances_serverコンテナをモニタリングする
glances_serverコンテナ(host名:target_server)で
glancesを下記コマンドで起動する
Client/Serverモードのサーバー側は
「glances -s」
で起動する
$ docker exec -it glances_server glances -sGlances XML-RPC server is running on 0.0.0.0:61209
「glances -s」で起動したglances_serverコンテナを
glances_clientコンテナからモニタリングする
glances_clientコンテナで
glancesを下記コマンドで起動する
Client/Serverモードのクライアント側は
「glances -c ホスト名orIP」
で起動する
$ docker exec -it glances_client glances -c target_server
注意点としてはクライアント、サーバーの両方でglancesをインストールし
起動しておく必要がある
最後にブラウザからモニタリングするWeb serverモード を動かしてみる。
glances_serverコンテナ(host名:target_server)で
glancesを下記コマンドで起動する
Web serverモードの監視対象を
「glances -w」
で起動する
$ docker exec -it glances_server glances -wGlances Web User Interface started on http://0.0.0.0:61208/
起動できたら確認する
Web serverモードはブラウザから確認できるので
ホストのブラウザから確認する
ブラウザから下記のURLでアクセスする
http://localhost:61208/
※docker-composeでポートマッピングしているので
アクセスできる
Microsoft Edgeだと表示できた。
Web serverモードはクライアント側にglancesをインストール
しなくても使えることを確認するため
blank_client(glancesインストールなし)でも
curlコマンドでアクセスしてみる
$ docker exec -it blank_client bashroot@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のみをモニタリングしてみる
$ docker exec -it glances_server glances --stdout-csv now,cpu.user,mem.usednow,cpu.user,mem.used2023-10-20 07:56:14 UTC,0.5,13564272642023-10-20 07:56:16 UTC,0.2,13564108802023-10-20 07:56:18 UTC,0.0,13564108802023-10-20 07:56:20 UTC,0.1,13564026882023-10-20 07:56:22 UTC,0.1,13566607362023-10-20 07:56:24 UTC,0.1,13579509762023-10-20 07:56:26 UTC,0.1,13579509762023-10-20 07:56:28 UTC,0.0,13579509762023-10-20 07:56:30 UTC,0.0,13579509762023-10-20 07:56:32 UTC,0.2,1357692928
csv形式で出力させることもできる。
終了はctrl + c
上記はcsv形式で出力されるだけだが
ファイルに出力させることもできる
// 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 outroot@target_server:/workspace/out# cat target_server_out.csvnow,cpu.user,mem.used2023-10-20 08:02:29 UTC,0.1,N/A2023-10-20 08:02:31 UTC,0.0,N/A2023-10-20 08:02:33 UTC,0.2,N/A
ファイルが出力される
Dockerコンテナを使ってPythonのモニタリングツールである
Glancesの動作をまとめてみた。
モードもたくさんあり、使い勝手も良いので
システム負荷テストをする時などに併用すれば
使い勝手はよさそう