
AWS ParallelCluster 標準モニタリングシステム(Ganglia)有効化
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
標準モニタリングシステム(Ganglia)の有効化
こんにちは、網走の大村です。
AWS ParallelClusterはAWSがサポートする、HPCクラスターの管理ツールです。
クラスター環境のモニタリングシステムとしてGangliaを簡単に導入できます。
標準モニタリングシステムを導入するParallelClusterの設定を紹介します。
何がうれしいのか
CloudWatchダッシュボードやグラフを作り込まなくても、クラスター環境をまとめたダッシュボードが用意されます。また、コンピュートノードのリソース監視(CPU、メモリ使用率など)が設定済みです。ダッシュボードを自作しなくて良いのはいいですよね。私はモニタリング用のダッシュボードを作るのは割と好きなのですが、あのメトリクスと、このメトリクスを並べて表示したいとか試行錯誤していると時間が吸われていくのが悩みです。
クラスターの起動数の表示画面
コンピュートノード4台にマスターノード(ジョブスケジューラ)1台を含めた合計数が表示されました。2vCPUのインスタンスが合計5台起動していたので、合計CPU数は10の表示。

クラスター全体のCPU使用率の表示画面
画面下の青い背景の部分が個別のコンピュートノードの情報で起動時に自動で拾って表示してくれます。赤い背景の部分は演算終了後コンピュートノードが削除され、モニタリングから外れたノード情報。

Ganglia?
クラスターや、グリッドコンピューティング、HPC環境向けのモニタリングシステムです。Zabbix、Mackerelといったモニタリングシステムの一種です。
詳しくはこちら
CfnCluster の標準モニタリング環境「Ganglia」の概要と簡単な使い方 | Developers.IO
設定方法
Black Beltの資料に以下のように設定方法が書かれています。
設定ファイル
[cluster]セクション下にextra_json = { "cluster" : { "ganglia_enabled" : "yes" } }を一行追記するだけです。それと、マスターノードのセキュリティグループにHTTPアクセスを許可が必要です。
テスト実行用のコンフィグ全文
構築する環境に合わせて適時変更してください。とくに下記の項目は環境に依存します。
- key_name
- post_install
- vpc_id
- master_subnet_id
- compute_subnet_id
[aws]
aws_region_name = ap-northeast-1
[global]
cluster_template = default
update_check = true
sanity_check = true
[aliases]
ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS}
[cluster default]
key_name = sandbox-key
base_os = alinux2
scheduler = slurm
vpc_settings = default
# Instance Type
master_instance_type = m5.large
compute_instance_type = m5.large
# Use Spot Instance
cluster_type = spot
# Use Placemanet Goup
placement = compute
placement_group = DYNAMIC
# Cluster Size
maintain_initial_size = false
initial_queue_size = 0
max_queue_size = 4
# Enable CloudWatchLogs
cw_log_settings = cluster-log
# Enable Ganglia
extra_json = { "cluster" : { "ganglia_enabled" : "yes" } }
# S3 Setting
s3_read_write_resource = *
post_install = s3://test-parallelcluster-ohmura/parallelcluster/postinstall.sh
[vpc default]
# VPC Setting
vpc_id = vpc-0c0dc247bce37f943
master_subnet_id = subnet-0f338a435397dcc13 # Public Subnet
compute_subnet_id = subnet-019c6696094c9ab3a # Private Subnet
[cw_log cluster-log]
# CloudWatchLogs Setting
enable = true
retention_days = 7
クラスター構築
上記の設定ファイルをganglia-configと名前を付けて保存しました。test-cluster2というクラスターの管理名称でクラスターを構築します。
> pcluster create test-cluster2 -c ganglia-config
実行結果
GangliaのURLが表示されました。
Beginning cluster creation for cluster: test-cluster2 Creating stack named: parallelcluster-test-cluster2 Status: parallelcluster-test-cluster2 - CREATE_COMPLETE MasterPublicIP: 54.250.119.238 GangliaPublicURL: http://54.250.119.238/ganglia/ ClusterUser: ec2-user MasterPrivateIP: 10.1.11.7 GangliaPrivateURL: http://10.1.11.7/ganglia/
セキュリティグループ設定変更
ParallelCluster構築時に自動で作成されたセキュリティグループではHTTPの80番ポートが開いていません。手動でセキュリティグループに設定を追加してください。
HTTPの80番ポートを開けました。

Gangliaへアクセス
マスターノードをパブリックサブネットに作成したためWEBブラウザから直接アクセスできます。ユーザ認証はありませんでした。
WEBブラウザから実行結果のhttp://54.250.119.238/ganglia/へアクセスします。
趣があります。

特筆すべきはクラスター全体のダッシュボードが少なくともあるということでしょう。ParallelClusterのコンピュートノードは演算時に新規で起動し、演算終了後に削除されます。新規のサーバが生まれ、消えていく動的な環境のモニタリングが用意されていることはありがたいです。

メトリクス一覧
グラフに表示されていたメトリクスの一覧を抽出しました。
CPU、メモリ、ディスク使用率、ネットワークのパケット数といった一般的なものでした。
apache_report apache_response_report boottime bytes_in bytes_out cpu_aidle cpu_idle cpu_nice cpu_num cpu_report cpu_speed cpu_steal cpu_system cpu_user cpu_wio disk_free disk_total gexec gmond_started ip_address last_reported last_reported_timestamp last_reported_uptime_in_sec load_all_report load_fifteen load_five load_one load_report location machine_type mem_buffers mem_cached mem_free mem_report mem_shared mem_total network_report nfs_v3_client_report os_name os_release packet_report part_max_used pkts_in pkts_out proc_run proc_total sample_report swap_free swap_total varnish_report
私が検証したかったもの
GPUインスタンス(G4シリーズ)をコンピュートノードで使用した場合、GPUの使用率、メモリ使用率がGangliaのメトリクスに存在するかでした。G4dn.xlargeをコンピュートノードで使用し確認した結果。
GPU関係のメトリクスはありませんでした。
おわりに
CloudWatchの標準メトリクスだとメモリ使用率は取れないため、通常のParallelCluster環境だとコンピュートノードのメモリ使用率をモニタリングするには、BootstrapでCloudWatchAgentをはじめとするモニタリング用の仕込みが必要になります。
Grafanaで描画できないかと調べたのですが、Gangliaをデータソースで扱えるプラグインは今のところありませんでした。








