JMXを使わないJVMヒープ監視
お世話になっております。
Zabbix-OS CentOS8 (4.18.0-240.10.1.el8_3.x86_64 )
Zabbix Server 5.0.8
監視対象OS CentOS7(3.10.0-1160.11.1.el7.x86_64 )
Zabbix-agent2 5.0.8
表題の通り、JMXを用いずにJVMのヒープ領域(jstatで言うところのS0C,S0U,S1C,S1U,EC,EU,OC,OU)を監視したいと考えております。
監視対象OS上のZabbix_agent2.confではAllowKey=system.run[*]を有効化しておりsystem.runでのデータ取得は可能な状態になっています。
例)system.run[hostname] →ホスト名が正しく帰ってくる。
監視対象OSではJDKがインストールされており、jps及びjstatにて値を取得することができる状態です。
例)(OS上で)# jstat -gc `jps | grep metabase | awk '{print $1}'` | awk '{print $1}'
→下記2行が標準出力される。※最右のawkの変数を変えれば他の値も取れます。
S0C
0.0
1.下記のようにアイテムを指定したところ
system.run[jstat -gc `jps | grep metabase | awk '{print $1}'` | awk '{print $1}']
invalid argument count
Usage: jstat --help|-options
とjstatのエラーが返却されました。どのようにエスケープすればOS上で狙ったコマンド同様の挙動をさせられますでしょうか?
2.取得されて返ってきた値に対し、保存前処理を利用して浮動小数点値としてZabbix内に格納したいと考えております。
保存前処理の正規表現パターン [0-9]*\.[0-9] で取得可能でしょうか?
お手間をおかけしますが、ご回答いただけますと幸いです。
以上、よろしくお願いいたします。
hirotaka.fukkoshi - 投稿数: 4
jps | grep metabase の部分が失敗しており、zabbixユーザの権限でサービスとして起動しているmetabaseのプロセスIDが取得できないのが原因でした。
hirotaka.fukkoshi - 投稿数: 4
zabbixユーザをsudoersに追加してsudoをパス無しで利用できるようにして
system.run[sudo jstat -gc `sudo jps |grep metabase |awk '{print $1}'` | awk '{print $1}']
とすることでS0Cの値を受け取ることに成功。
保存前処理と組み合わせて浮動小数点数値で取得したいが、保存前処理に現状うまくいっていない。
出力が
S0C
0.0
と2列になっているため前削除で[S0C\n]とすると[.0]となってしまう。
かといって[S0C]のみ前削除するとスペースと改行が入って浮動小数点数値と認識しない。
うまい保存前処理法はありませんでしょうか?
TNK - 投稿数: 4730
保存前処理で以下の2つを設定してみてはいかがでしょうか?
・先頭文字列削除で「S0C」
・正規表現で「([0-9]*.[0-9]*)」と「\1」
hirotaka.fukkoshi - 投稿数: 4
TNK様
ご返事ありがとうございます。
また、返事が送れてしまい申し訳ございません。
ご提案いただいた保存前処理を利用することで無事データを取得することができるようになりました。
また、のちに参照される方のためにメモとして記載しておくと、jstatの利用においては出力単位がKBなので、
保存前処理の最後に乗数処理で1024倍にしてあげる必要がある、ということを記載しておきます。
本件につきまして、問題点は解決できましたのでクローズとさせていただきます。