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

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」とか明示的でないと得られないです
前段でzabbixに送る数値の算出方法を決めた. 次にこのコマンドらをzabbix-agentに仕込んで定期定期に値を取得してもらうようにします
変数としては、CPUとGPU、そして全ノードかqueue毎があるかなと. そうなるとスクリプトを用意しました「/opt/pbs/bin/zabbix-openpbs.sh」
|
このスクリプトを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この方法が正しいのか不明なのですが、まず[設定]->[ホストグループ]を開き、右上の「ホストグループの作成」を押下します.
表示された「ホストグループ」画面でグループ名に「OpenPBS」を入力して「追加」ボタンを押下します

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

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

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

データ元となるアイテムは2つ作ります
まずは「openpbs available slots」のアイテムを作ります.テンプレート画面で「OpenPBS by Zabbix agent」をクリックして「アイテム」リンクをクリックします

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

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

「アイテム」画面に戻り、「追加」ボタンを押下します.
![]()
これで1つめのアイテム「openpbs available slots」設定は完了.
次にもう1つ「openpbs assigned slots」アイテムを作ります. 再度右上の「アイテムの作成」をクリックします

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

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

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

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

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


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

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

値がないもののグラフの外形が見えます

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




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

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

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