第02回 Hinemos 6.1でもあそぼう!(プロセス監視編)
インストールができたところで、まずはプロセス監視を実装してみよう。
プロセス監視
監視対象のプロセスを確認
- 例えば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 ~]#
プロセス監視設定を入れる
監視設定パースペクティブから監視設定[一覧]で「作成」をクリックし、プロセス監視(数値)を選択する
監視したいコマンドやその他パラメータを入力する。ここでは、上記で確認している/usr/sbin/sshdを監視することにする。基本的にはプロセスが0なのか1なのかを検知できれば良いが、設定の仕様上プロセスが1つあれば"情報"、2つ以上100未満であれば"警告"、その他(例えば0)であれば"危険"とする。
プロセス監視は、いま生きているのか死んでいるのかを確認するPOLLINGが必要なので、通知にはEVENT_FOR_POLLINGとSTATUS_FOR_POLLINGを入れておく。
時間が経つと監視履歴パースペクティブのイベントとステータスに監視の結果が通知される。しかし、Hinemos エージェントのみをインストールしたbt01だけ"不明"で上がってきている。
エラーの詳細を確認すると、"SNMPの応答に当該キーのデータが含まれません"とある。
さらに詳細を確認すると、以下のようにOID:1.3.6.1.2.1.25.4.2.1.2が得られなかったことがわかる。Hinemos マネージャはプロセス監視にsnmpを使っているので、実際にsnmpwalkして、当該OIDが取得できるかどうか確認する。
[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プロセスも正しく認識できるようになっている。
テストとして、bt01のsshdプロセスを落としてみると、イベント通知、ステータス通知両方でプロセスが0個になったことを検知して"危険"が通知される。
sshdサービスを再開すると、プロセスが1個になったことを検知して"情報"に更新される。
なぜ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"であれば危険と判定すれば良いので、カスタム監視(数値)を選択する
ここでプロセスの数だけでなく、echo -n "sshd process"とつけているのはHinemosマネージャの使用でカンマ区切りの2つの値を監視のインプットとする必要がある。1列目は値の指し示す名前で2列目は監視対象となる数値が入るようにコマンドを用意する。
監視の結果を見ると、VALUE : sshd process=1.0となっている。コマンドの結果として"1"が得られたので、"情報"と判断しているということになる。
この方法を使えば、snmp経由でプロセス情報を取得せずともプロセスの監視をすることができる。