じっぱひとからげ

十把一絡げになんでもかんでもつづる。

第02回 Hinemos 6.1でもあそぼう!(プロセス監視編)

blog.jippahitokarage.com

インストールができたところで、まずはプロセス監視を実装してみよう。

プロセス監視

監視対象のプロセスを確認

  • 例えばsshdのプロセスを監視してみる。psコマンドでコマンド名を確認しておく
[root@jm01 ~]# ps -ef | grep sshd
root       763     1  0 19:07 ?        00:00:00 /usr/sbin/sshd -D
root      1004   763  0 19:07 ?        00:00:00 sshd: vagrant [priv]
vagrant   1009  1004  0 19:07 ?        00:00:00 sshd: vagrant@pts/0
root     17851  1038  0 21:09 pts/0    00:00:00 grep --color=auto sshd
[root@jm01 ~]# 

プロセス監視設定を入れる

 監視設定パースペクティブから監視設定[一覧]で「作成」をクリックし、プロセス監視(数値)を選択する
f:id:jippahitokarage:20180616064605p:plain

 監視したいコマンドやその他パラメータを入力する。ここでは、上記で確認している/usr/sbin/sshdを監視することにする。基本的にはプロセスが0なのか1なのかを検知できれば良いが、設定の仕様上プロセスが1つあれば"情報"、2つ以上100未満であれば"警告"、その他(例えば0)であれば"危険"とする。

 プロセス監視は、いま生きているのか死んでいるのかを確認するPOLLINGが必要なので、通知にはEVENT_FOR_POLLINGとSTATUS_FOR_POLLINGを入れておく。

f:id:jippahitokarage:20180616064614p:plain

 時間が経つと監視履歴パースペクティブのイベントとステータスに監視の結果が通知される。しかし、Hinemos エージェントのみをインストールしたbt01だけ"不明"で上がってきている。

f:id:jippahitokarage:20180616064618p:plain

 エラーの詳細を確認すると、"SNMPの応答に当該キーのデータが含まれません"とある。

f:id:jippahitokarage:20180616070724p:plain

 さらに詳細を確認すると、以下のようにOID:1.3.6.1.2.1.25.4.2.1.2が得られなかったことがわかる。Hinemos マネージャはプロセス監視にsnmpを使っているので、実際にsnmpwalkして、当該OIDが取得できるかどうか確認する。

f:id:jippahitokarage:20180616070725p:plain

[root@jm01 snmp]# snmpwalk -v 2c -c public 192.168.100.13 .1.3.6.1.2.1.25.4.2.1.2
HOST-RESOURCES-MIB::hrSWRunName = No more variables left in this MIB View (It is past the end of the MIB tree)

HOST-RESOURCES-MIBに値がないと言われる。つまり、エージェント側のsnmpdからプロセスの情報が取得できていないために"不明"となっていることがわかる。マネージャ側からエージェント側のプロセス情報を取得するには、エージェント側の/etc/snmp/snmpd.conf に以下の行を追加する必要がある。

view    systemview    included   .1.3.6.1

設定を反映するため、snmpdのサービスを再起動する。

[root@bt01 ~]# service snmpd restart
Redirecting to /bin/systemctl restart snmpd.service
[root@bt01 ~]# 

あらためてHinemos マネージャからHinemosエージェントに対して、当該OIDに対してsnmpwalkすると、プロセスの名前が拾えるようになる。目的としていたsshdのプロセス名もsnmpwalkによって取得できていることがわかる。

[root@jm01 ~]# snmpwalk -v 2c -c public 192.168.100.13 .1.3.6.1.2.1.25.4.2.1.2
HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: "systemd"
HOST-RESOURCES-MIB::hrSWRunName.2 = STRING: "kthreadd"
HOST-RESOURCES-MIB::hrSWRunName.3 = STRING: "ksoftirqd/0"
HOST-RESOURCES-MIB::hrSWRunName.5 = STRING: "kworker/0:0H"
HOST-RESOURCES-MIB::hrSWRunName.6 = STRING: "kworker/u4:0"
HOST-RESOURCES-MIB::hrSWRunName.7 = STRING: "migration/0"
HOST-RESOURCES-MIB::hrSWRunName.8 = STRING: "rcu_bh"
HOST-RESOURCES-MIB::hrSWRunName.9 = STRING: "rcu_sched"
HOST-RESOURCES-MIB::hrSWRunName.10 = STRING: "watchdog/0"
HOST-RESOURCES-MIB::hrSWRunName.11 = STRING: "watchdog/1"
HOST-RESOURCES-MIB::hrSWRunName.12 = STRING: "migration/1"
HOST-RESOURCES-MIB::hrSWRunName.13 = STRING: "ksoftirqd/1"
HOST-RESOURCES-MIB::hrSWRunName.15 = STRING: "kworker/1:0H"
HOST-RESOURCES-MIB::hrSWRunName.17 = STRING: "kdevtmpfs"
HOST-RESOURCES-MIB::hrSWRunName.18 = STRING: "netns"
HOST-RESOURCES-MIB::hrSWRunName.19 = STRING: "khungtaskd"
HOST-RESOURCES-MIB::hrSWRunName.20 = STRING: "writeback"
HOST-RESOURCES-MIB::hrSWRunName.21 = STRING: "kintegrityd"
HOST-RESOURCES-MIB::hrSWRunName.22 = STRING: "bioset"
HOST-RESOURCES-MIB::hrSWRunName.23 = STRING: "kblockd"
HOST-RESOURCES-MIB::hrSWRunName.24 = STRING: "md"
HOST-RESOURCES-MIB::hrSWRunName.30 = STRING: "kswapd0"
HOST-RESOURCES-MIB::hrSWRunName.31 = STRING: "ksmd"
HOST-RESOURCES-MIB::hrSWRunName.32 = STRING: "khugepaged"
HOST-RESOURCES-MIB::hrSWRunName.33 = STRING: "crypto"
HOST-RESOURCES-MIB::hrSWRunName.41 = STRING: "kthrotld"
HOST-RESOURCES-MIB::hrSWRunName.42 = STRING: "kworker/u4:1"
HOST-RESOURCES-MIB::hrSWRunName.43 = STRING: "kmpath_rdacd"
HOST-RESOURCES-MIB::hrSWRunName.44 = STRING: "kpsmoused"
HOST-RESOURCES-MIB::hrSWRunName.46 = STRING: "ipv6_addrconf"
HOST-RESOURCES-MIB::hrSWRunName.66 = STRING: "deferwq"
HOST-RESOURCES-MIB::hrSWRunName.97 = STRING: "kauditd"
HOST-RESOURCES-MIB::hrSWRunName.100 = STRING: "kworker/1:3"
HOST-RESOURCES-MIB::hrSWRunName.129 = STRING: "ata_sff"
HOST-RESOURCES-MIB::hrSWRunName.130 = STRING: "scsi_eh_0"
HOST-RESOURCES-MIB::hrSWRunName.132 = STRING: "scsi_tmf_0"
HOST-RESOURCES-MIB::hrSWRunName.133 = STRING: "scsi_eh_1"
HOST-RESOURCES-MIB::hrSWRunName.134 = STRING: "scsi_tmf_1"
HOST-RESOURCES-MIB::hrSWRunName.152 = STRING: "kworker/0:1H"
HOST-RESOURCES-MIB::hrSWRunName.153 = STRING: "kworker/1:1H"
HOST-RESOURCES-MIB::hrSWRunName.162 = STRING: "bioset"
HOST-RESOURCES-MIB::hrSWRunName.163 = STRING: "xfsalloc"
HOST-RESOURCES-MIB::hrSWRunName.164 = STRING: "xfs_mru_cache"
HOST-RESOURCES-MIB::hrSWRunName.165 = STRING: "xfs-buf/sda1"
HOST-RESOURCES-MIB::hrSWRunName.166 = STRING: "xfs-data/sda1"
HOST-RESOURCES-MIB::hrSWRunName.167 = STRING: "xfs-conv/sda1"
HOST-RESOURCES-MIB::hrSWRunName.168 = STRING: "xfs-cil/sda1"
HOST-RESOURCES-MIB::hrSWRunName.169 = STRING: "xfs-reclaim/sda"
HOST-RESOURCES-MIB::hrSWRunName.170 = STRING: "xfs-log/sda1"
HOST-RESOURCES-MIB::hrSWRunName.171 = STRING: "xfs-eofblocks/s"
HOST-RESOURCES-MIB::hrSWRunName.172 = STRING: "xfsaild/sda1"
HOST-RESOURCES-MIB::hrSWRunName.223 = STRING: "systemd-journal"
HOST-RESOURCES-MIB::hrSWRunName.267 = STRING: "systemd-udevd"
HOST-RESOURCES-MIB::hrSWRunName.273 = STRING: "auditd"
HOST-RESOURCES-MIB::hrSWRunName.291 = STRING: "iprt-VBoxWQueue"
HOST-RESOURCES-MIB::hrSWRunName.358 = STRING: "polkitd"
HOST-RESOURCES-MIB::hrSWRunName.360 = STRING: "systemd-logind"
HOST-RESOURCES-MIB::hrSWRunName.364 = STRING: "rsyslogd"
HOST-RESOURCES-MIB::hrSWRunName.365 = STRING: "dbus-daemon"
HOST-RESOURCES-MIB::hrSWRunName.369 = STRING: "chronyd"
HOST-RESOURCES-MIB::hrSWRunName.386 = STRING: "irqbalance"
HOST-RESOURCES-MIB::hrSWRunName.395 = STRING: "crond"
HOST-RESOURCES-MIB::hrSWRunName.396 = STRING: "login"
HOST-RESOURCES-MIB::hrSWRunName.499 = STRING: "VBoxService"
HOST-RESOURCES-MIB::hrSWRunName.700 = STRING: "tuned"
HOST-RESOURCES-MIB::hrSWRunName.702 = STRING: "rhsmcertd"
HOST-RESOURCES-MIB::hrSWRunName.716 = STRING: "rhnsd"
HOST-RESOURCES-MIB::hrSWRunName.871 = STRING: "java"
HOST-RESOURCES-MIB::hrSWRunName.2164 = STRING: "NetworkManager"
HOST-RESOURCES-MIB::hrSWRunName.2193 = STRING: "dhclient"
HOST-RESOURCES-MIB::hrSWRunName.2607 = STRING: "sshd"
HOST-RESOURCES-MIB::hrSWRunName.2611 = STRING: "sshd"
HOST-RESOURCES-MIB::hrSWRunName.2612 = STRING: "bash"
HOST-RESOURCES-MIB::hrSWRunName.2629 = STRING: "sudo"
HOST-RESOURCES-MIB::hrSWRunName.2630 = STRING: "su"
HOST-RESOURCES-MIB::hrSWRunName.2631 = STRING: "bash"
HOST-RESOURCES-MIB::hrSWRunName.2844 = STRING: "bash"
HOST-RESOURCES-MIB::hrSWRunName.2864 = STRING: "sudo"
HOST-RESOURCES-MIB::hrSWRunName.2865 = STRING: "su"
HOST-RESOURCES-MIB::hrSWRunName.2866 = STRING: "bash"
HOST-RESOURCES-MIB::hrSWRunName.2897 = STRING: "kworker/1:1"
HOST-RESOURCES-MIB::hrSWRunName.2931 = STRING: "sshd"
HOST-RESOURCES-MIB::hrSWRunName.2935 = STRING: "kworker/0:1"
HOST-RESOURCES-MIB::hrSWRunName.2958 = STRING: "kworker/0:2"
HOST-RESOURCES-MIB::hrSWRunName.3059 = STRING: "kworker/0:0"
HOST-RESOURCES-MIB::hrSWRunName.3093 = STRING: "snmpd"
[root@jm01 ~]# 

あらためてHinemosマネージャでプロセスを確認するとbt01のsshdプロセスも正しく認識できるようになっている。
f:id:jippahitokarage:20180616064624p:plain

テストとして、bt01のsshdプロセスを落としてみると、イベント通知、ステータス通知両方でプロセスが0個になったことを検知して"危険"が通知される。
f:id:jippahitokarage:20180616064628p:plain

sshdサービスを再開すると、プロセスが1個になったことを検知して"情報"に更新される。

f:id:jippahitokarage:20180616064636p:plain

なぜjm01はsnmpからプロセス情報が取得できたのか?

Hinemosマネージャであるjm01はマネージャインストール時に、/etc/snmp/snmpd.confが自動的に編集され、末尾に"view systemview included .1.3.6.1"が追加されている。

 インストール時にバックアップファイルが自動的に作成される。バックアップファイルとのdiffを取ると、.1.3.6.1が自動的に追加されていることがわかる。

[root@jm01 ~]# ll /etc/snmp/
合計 44
-rw-------. 1 root root 18897  6月 15 18:13 snmpd.conf
-rw-------  1 root root 18861  4月 23 18:53 snmpd.conf.saved_20180615-181354
-rw-------. 1 root root   220  4月 23 18:53 snmptrapd.conf

[root@jm01 ~]# diff /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.saved_20180615-181354 
463d462
< view	systemview	included   .1.3.6.1
[root@jm01 ~]# 

カスタム監視を利用したプロセス監視

Hinemosが用意しているプロセス監視はsnmp経由でプロセスを監視する仕組みだが、単純にpsコマンドの結果をプロセス監視に利用することもできる。

例えば、このコマンドでsshdのプロセスを確認することができる。

[root@jm01 ~]# ps -ef | grep "/usr/sbin/sshd" 
root       788     1  0 04:57 ?        00:00:00 /usr/sbin/sshd -D
root      5085  3532  0 07:21 pts/1    00:00:00 grep --color=auto /usr/sbin/sshd

さらに、grep自身が現れないようにした上でwcコマンドで個数をカウントする。

[root@jm01 ~]# ps -ef | grep "/usr/sbin/sshd" | grep -v grep | wc -l
1

このコマンドの結果が"1"になれば"情報"でそれ以外、例えば"0"であれば危険と判定すれば良いので、カスタム監視(数値)を選択する

f:id:jippahitokarage:20180616073556p:plain

ここでプロセスの数だけでなく、echo -n "sshd process"とつけているのはHinemosマネージャの使用でカンマ区切りの2つの値を監視のインプットとする必要がある。1列目は値の指し示す名前で2列目は監視対象となる数値が入るようにコマンドを用意する。

f:id:jippahitokarage:20180616073559p:plain

監視の結果を見ると、VALUE : sshd process=1.0となっている。コマンドの結果として"1"が得られたので、"情報"と判断しているということになる。

f:id:jippahitokarage:20180616073602p:plain

この方法を使えば、snmp経由でプロセス情報を取得せずともプロセスの監視をすることができる。

blog.jippahitokarage.com