どうやるの?
Tomcatの起動プロセスの監視アイテムを作るぞ。
まずはzabbix_get
で動作確認だ。
$ zabbix_get -s 192.168.200.24 -k proc.num[httpd]
6
$ zabbix_get -s 192.168.200.24 -k proc.num[tomcat]
0
tomcatはどうやって取るんだ・・・?
答えはこれ
$ zabbix_get -s 192.168.200.24 -k proc.num[java,,,"org.apache.catalina.startup.Bootstrap start"]
1
環境
- RHEL 7.7 (Maipo)
- zabbix_server 4.0.16
- zabbix_agent 4.0.16
- Tomcat 8.5.50
リファレンスをちゃんと読む
Zabbix Documentation 2.2に使い方があったので調べてみると、プロセス名を知る必要があることを知る。
proc.num[<name>,<user>,<state>,<cmdline>]
- name - プロセス名(デフォルトは「全プロセス」)
- user - ユーザー名(デフォルトは「全ユーザー」)
- state - 可能な値: all (デフォルト)、run, sleep, zomb
- cmdline - コマンドラインによるフィルター(正規表現)
tomcatのプロセス名を調べる
起動しているtomcatの状態を調べます。
$ systemctl status tomcat
● tomcat.service - Apache Tomcat 8
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
Active: active (exited) since 木 2020-02-06 15:01:19 JST; 1h 29min ago
Process: 844 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 844 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/tomcat.service
└─875 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.prot...
2月 06 15:01:19 192.168.200.24 systemd[1]: Starting Apache Tomcat 8...
2月 06 15:01:19 192.168.200.24 systemd[1]: Started Apache Tomcat 8.
PID875
をさらに調べます。
$ cat /proc/875/stat
875 (java) S 1 844 844 0 -1 1077944320 19379 0 124 0 937 64 0 0 20 0 41 0 752 2357014528 21813 18446744073709551615 4194304 4196524 140724105374304 140724105356960 140023800299543 0 0 2 16800973 18446744073709551615 0 0 17 0 0 0 5 0 0 6294912 6295604 12607488 140724105383058 140724105383592 140724105383592 140724105383914 0
()で囲われている箇所がプロセス名です。
tomcatを起動しているプロセス名はjava
のようです。
解決(間違い)
$ zabbix_get -s 192.168.200.24 -k proc.num[java]
1
取れました!
...でもふと気づく。
これではただのJavaのプロセスなだけで、tomcatのプロセスかどうかは判別できないことに。
プロセスをもう一度確認
$ ps aux | grep java
tomcat 875 0.1 8.6 2301772 87452 ? Sl 15:01 0:10 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
どうやらこのプロセスはtomcatが実行しているようです。
$ zabbix_get -s 192.168.200.24 -k proc.num[java,tomcat]
1
取れました。
ただ、よくよく考えてみると、tomcatユーザがjavaコマンドを実行しているだけで
Tomcatの起動プロセスを監視しているわけではないことに気付きました。
もう一度調べる
プロセスを確認して気付きました。
optionが長くてわかりにくかったけど、起動プロセス(org.apache.catalina.startup.Bootstrap start
)の記述があるじゃないですか。
$ ps aux | grep java
tomcat 2023 83.6 7.3 2299724 74204 ? Sl 17:26 0:02
/usr/bin/java
-Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djdk.tls.ephemeralDHKeySize=2048
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Dorg.apache.catalina.security.SecurityListener.UMASK=0027
-Dignore.endorsed.dirs=
-classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
-Dcatalina.base=/opt/tomcat
-Dcatalina.home=/opt/tomcat
-Djava.io.tmpdir=/opt/tomcat/temp
org.apache.catalina.startup.Bootstrap start
proc.num[<name>,<user>,<state>,<cmdline>]
第4引数のコマンドラインを使えば抽出できそうです。
$ zabbix_get -s 192.168.200.24 -k proc.num[java,,,"org.apache.catalina.startup.Bootstrap start"]
1
無事に起動プロセスのカウントを取得できました。
tomcatユーザであるかどうかはあまり意味がないと思ったのであえて書きませんでした。
終わりに
長々と書いてしまいました。
proc.num[java,tomcat]
と書いてある記述も見かけたので、こちらを紹介させていただきました。
補足
Tomcatのインストール方法によっては上記のやり方とは異なりますが、調べ方さえ分かれば応用は効きくと思います。
私の場合はソースをDL・展開してインストールを行いました。
参考:ApacheとTomcatを連携させてみた