AWS ParallelCluster 標準モニタリングシステム(Ganglia)有効化

AWS ParallelClusterに標準モニタリングシステムのGangliaを有効化する設定例を紹介します。
2020.08.13

この記事は公開されてから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をデータソースで扱えるプラグインは今のところありませんでした。