Zabbixの監視対象としてOpenPBSを加えたいと思う
横軸を時間として縦軸は提供したcpu-core数とか.

2022y05m14d_053119350.png

Zabbix/OpenPBS/memo

OpenPBS管理ノードにZabbix-agentをインストール

OpenPBS管理ノード「zabbix-pbs」を構築してZabbix/Hostと同じようにzabbixの監視対象にします

*OpenPBSサーバはSELinuxを無効にします.
作ったスクリプトをzabbix-agentのUserParameter経由で実行したらSELinuxに怒られた...回避を考えたが面倒そうなのでSELinux自体を無効にしてます. 今後再度チャレンジしてSELinux有効でも動かせたいと思う

[root@zabbix-pbs ~]# getenforce
Disabled
[root@zabbix-pbs ~]#

監視項目

zabbixサーバから定期的にOpenPBS管理ノードに使用中のslots数を数えさせて、その値をzabbixサーバが貰い受ける.

監視対象から目的の値を得るには、zabbix-agent、snmp、IMPI経由らがある.
ここでは目的の値を得るためにスクリプトを組んで行うつもりで、その実行方法にzabbix-agentのUserParameter経由というのがある.
自分で作ったスクリプトを動かすにはこれ以外にも経路があります

OpenPBSのpbsnodeコマンドで得られるデータを整理して目的の値を出そうと思う.
pbsnodeにはjson形式で出力できるので、それを解析する「jq」コマンドを使うためまずはこの「jq」をインストールします

[root@zabbix-pbs ~]# dnf install jq

っで、全CPU-core数は

[root@zabbix-pbs ~]# pbsnodes -aSF json | jq '[.nodes[].ncpus]|add'
(欠損ノードを除くなら)
[root@zabbix-pbs ~]# pbsnodes -aSF json |jq  '[.nodes[]|select( (.State=="free") or (.State=="job-busy") )|.ncpus]|add'

で得られる.
GPUの総枚数は

[root@zabbix-pbs ~]# pbsnodes -aSF json | jq '[.nodes[].ngpus]|add'

で得られる. OpenPBS/GPUの設定が必要です
複数のqueueで運用していて、特定のqueueの全CPU-core数は

(queue名が gpu )
[root@zabbix-pbs ~]# pbsnodes -aSF json |  jq  '[.nodes[]|select(.queue =="gpu")|.ncpus]|add'
(queue名が cpu )
[root@zabbix-pbs ~]# pbsnodes -aSF json |  jq  '[.nodes[]|select(.queue =="cpu")|.ncpus]|add'

で得られる. OpenPBSでのgpu数は手動で定義する必要があります OpenPBS/GPU

次に現在どれくらい消費されているのかを調べる
「pbsnodes -ajF json」を使うと「resources_assigned」と現在計算ノードでアサインされているリソースが分かる.

[root@zabbix-pbs ~]# pbsnodes -ajF json | jq  '[.nodes[].resources_assigned.ncpus]|add'
 
各queue毎なら
[root@zabbix-pbs ~]# pbsnodes -ajF json |  jq  '[.nodes[]|select(.queue=="gpu")|.resources_assigned.ncpus]|add'
 
[root@zabbix-pbs ~]# pbsnodes -ajF json |  jq  '[.nodes[]|select(.queue=="cpu")|.resources_assigned.ncpus]|add'

で得られる
gpu枚数も調べられるが、queuingの際に「-l select=1:ncpus=4:ngpus=4」とか明示的でないと得られないです

UserParameterを定義する

前段でzabbixに送る数値の算出方法を決めた. 次にこのコマンドらをzabbix-agentに仕込んで定期定期に値を取得してもらうようにします

変数としては、CPUとGPU、そして全ノードかqueue毎があるかなと. そうなるとスクリプトを用意しました「/opt/pbs/bin/zabbix-openpbs.sh」

#!/bin/bash

usage="usage: `basename $0` (available|assigned) (ncpus|ngpus) [quene name]"
if [ $# -eq 0 ]; then
  echo $usage
  exit 1
fi
if  [ "$1" != "available" ] && [ "$1" != "assigned" ] ; then
  echo $usage
  exit 1
fi
if  [ "$2" != "ncpus" ] &&  [ "$2" != "ngpus" ]; then
  echo $usage
  exit 1
fi
PATH=/opt/pbs/bin:$PATH
#-------------------------------------------------------------------#
if  [ "$3" == "" ]; then

  if [ "$1" == "available" ]; then
     cmd="pbsnodes -aSF json |jq -r '[.nodes[]|select( (.State==\"free\") or (.State==\"job-busy\") )|.$2]|add'"
  elif [ "$1" == "assigned" ]; then
     cmd="pbsnodes -ajF json |jq -r '[.nodes[].resources_assigned.$2]|add'"
  fi

else
  if [ "$1" == "available" ]; then
     cmd="pbsnodes -ajF json |jq -r '[.nodes[]|select( ( (.state==\"free\") or (.state==\"job-busy\") ) and (.queue==\"$3\") )|.resources_available.$2]|add'"
  elif [ "$1" == "assigned" ]; then
     cmd="pbsnodes -ajF json |jq -r '[.nodes[]|select(.queue==\"$3\")|.resources_assigned.$2]|add'"
  fi
fi
#echo $cmd
value=`eval $cmd`

if [ "$value" == "null" ]; then
  echo 0
else
  echo $value
fi

このスクリプトをzabbix-agentに参照させるために「/etc/zabbix/zabbix_agentd.d/openpbs_userparams.conf」を用意します

[root@zabbix-pbs ~]# vi /etc/zabbix/zabbix_agentd.d/openpbs_userparams.conf
UserParameter=openpbs[*],/opt/pbs/bin/zabbix-openpbs.sh $1 $2 $3
 
[root@zabbix-pbs ~]# systemctl restart zabbix-agent

zabbixサーバ側でホストグループ「OpenPBS」を作る

この方法が正しいのか不明なのですが、まず[設定]->[ホストグループ]を開き、右上の「ホストグループの作成」を押下します.
表示された「ホストグループ」画面でグループ名に「OpenPBS」を入力して「追加」ボタンを押下します
2022y05m14d_053808846.png

これで「ホストグループ」に「OpenPBS」が追加されました
2022y05m14d_054018759.png

zabbixサーバ側でテンプレート「OpenPBS by Zabbix agent」を作る

次に[設定]->[テンプレート]を開き、右上の「テンプレートの作成」を押下します.
テンプレート名は「OpenPBS by Zabbix agent」として、テンプレートは未選択、(ホスト)グループに先ほど作った「OpenPBS」を選択します. そして「追加」ボタンを押下します.
2022y05m14d_054453887.png

テンプレート画面に戻ります. 下図は「openpbs」で検索した結果を示してます. 1件のみ表示されています
このテンプレートにデータ取得のitem、グラフ表示設定を追加していくことになります.
2022y05m14d_054708878.png

アイテムの作成

データ元となるアイテムは2つ作ります

  • openpbs available slots
    利用可能なcpu-core数
  • openpbs assigned slots
    計算ノードに割り当てているcpu-core数

まずは「openpbs available slots」のアイテムを作ります.テンプレート画面で「OpenPBS by Zabbix agent」をクリックして「アイテム」リンクをクリックします
2022y05m14d_055015663.png

「アイテム」画面になったら、右上の「アイテムの作成」リンクをクリックします
名前は「openpbs available slots」、タイプは「Zabbixエージェント」、キーは「openpbs[available,ncpus]」で
得られる値のデータ型は「数値(整数)」とします. 入力が済んだら「テスト」ボタンを押下して動作確認を行います
2022y05m14d_063514521.png

表示された「アイテムのテスト」にてホストのアドレスにzabbix-agent先、ポートはzabbix-agentが使用しているport(10050が既定)を指定します。そして「値の取得とテスト」ボタンを押下します。ここでエラーがないことを確認します. 確認後「キャンセル」ボタンを押下します.
2022y05m14d_063529185.png

「アイテム」画面に戻り、「追加」ボタンを押下します.
2022y05m14d_064635081.png
これで1つめのアイテム「openpbs available slots」設定は完了.

次にもう1つ「openpbs assigned slots」アイテムを作ります. 再度右上の「アイテムの作成」をクリックします
2022y05m14d_064850633.png

今度は名前は「openpbs assigned slots」タイプは「Zabbixエージェント」、キーは「openpbs[assigned,ncpus]」とします
2022y05m14d_065121409.png

同じようにテストを行って、「追加」ボタンを押下します.
これでアイテムが2つ作れました.
2022y05m14d_065240098.png

グラフの設定

テンプレート「OpenPBS by Zabbix agent」にグラフを追加します
テンプレート画面で「グラフ」リンクをクリックします
2022y05m14d_152537422.png

グラフ画面に移ったら、右上の「グラフ作成」ボタンを押下します
2022y05m14d_152707151.png

名前を「OpenPBS slots usage」として、アイテム欄の「追加」リンクを押下します.
2022y05m14d_152921974.png

  • するとグラフの要素を選ぶ画面になります. ここでは2つのアイテム「openpbs available slots」と「openpbs assigned slots」を選んで「選択」ボタンを押下します.
    2022y05m14d_153152302.png

グラフ画面に戻り、アイテム欄が埋まりました. 形状や色など調節して「追加」ボタンを押下します.
2022y05m14d_153521207.png

ここで、グラフ画面の上部にある「プレビュー」リンクを押下します.
2022y05m14d_153702911.png

値がないもののグラフの外形が見えます
2022y05m14d_153813768.png

作ったテンプレートをホストに適用する

最後の段階.

[設定]->[ホスト]画面に移り、OpenPBSサーバが稼働するホスト「zabbix-pbs」に先ほど作ったテンプレート「OpenPBS by Zabbix agent」を適用させる. 「zabbix-pbs」リンクをクリックします.
「zabbix-pbs」はテンプレート「Linux by Zabbix agent」のみ適用されている
2022y05m14d_154112511.png

  • ホスト画面が表示され、テンプレート欄で「選択」ボタンを押下します.
    2022y05m14d_154512927.png
    • テンプレート画面が表示され、ホストグループの選択ボタンを押下します.
      2022y05m14d_154704703.png
      • ホストグループから「OpenPBS」を選択します
        2022y05m14d_154805479.png
    • テンプレート画面に戻り、ホストグループ「OpenPBS」で選べるテンプレート「OpenPBS by Zabbix agent」を選択します
      2022y05m14d_155005751.png
  • ホスト画面に戻り、テンプレート欄に「OpenPBS by Zabbix agent」が入りました. 画面下の「更新」ボタンを押下します
    2022y05m14d_155202135.png

対象となったホスト「zabbix-pbs」にテンプレート「OpenPBS by Zabbix agent」が適用されました.
2022y05m14d_160008184.png

グラフ表示

[監視データ]->[ホスト]で監視対象リストから目的のホスト「zabbix-pbs」のグラフリンクをクリックします
2022y05m14d_160333120.png

その中に「zabbix-pbs: OpenPBS by Zabbix agent」のグラフが表示される
2022y05m14d_160451904.png


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2022-05-31 (火) 10:06:04 (26d)