Zabbix4.0LTS Windowsを監視対象に追加

ウチでは Ubuntu サーバーが大活躍しているが、会社では Windows Server が大活躍している。これらを監視する最低限の知識を身につけておこう。



やること。

※アイテムタイプのマニュアル
ZABBIX / Item types 4.0LTS(英語)
ZABBIX / アイテムタイプ 2.2(日本語)

 

Windows 10を監視対象に追加

Windows10 でサービス提供することはほとんどないと思うけど、できないわけじゃないし、やっても全然問題はない。ウチみたいにヘンテコな設定をしたサーバーをいくつも立てて運用するより、必要なときにPCを立ち上げて運用する方がいい場合だってある。

エージェントのインストール

ということで、Windows 10の試用版で試させていただく。おぉ、試用版をインストールしてからもう80日近くたってるのか…
この Windows 10は、ドメイン参加の手順を試した関係でドメイン参加している。

Zabbix のエージェントは本家サイトからダウンロードできる。
ZABBIX / Download and install pre-compiled Zabbix agents

今回は、4.0.12 Windows(msi) amd64 版をダウンロードしてインストール開始。
Welcome 画面で Next をクリック。

ライセンス条項を確認して Next をクリック。

このPCはWinTempというホスト名にしていて、自動入力されていた。
サーバーのIPアドレスなどを入力する。リモートコマンドとかは使うかもしれないけど、今の時点ではよく分かっていないのでチェックしていない。
Next をクリック。

一通り全てをインストールするので、このまま Next をクリック。

Install ボタンをクリックしてインストールを完了させる。

インストール完了。

インストール後の設定ファイルは以下に。ファイル名は Ubuntu の時と同じ。

C:\Program Files\Zabbix Agent\zabbix_agentd.conf
Server=172.16.nnn.nnn
ServerActive=172.16.nnn.nnn
Hostname=WINTEMP

 

監視するアイテムとグラフの登録

Ubuntu で色々設定したけれど、それと同じ値が取れるのか zabbix_get で確認してみる。

# CPU使用率
$ zabbix_get -s wintemp -k "proc.cpu.util[all,all users,total,avg1]"
ZBX_NOTSUPPORTED: Unsupported item key.

# ディスク使用帯域
$ zabbix_get -s wintemp -k "vfs.dev.read[all,sps,avg1]"
ZBX_NOTSUPPORTED: Unsupported item key.
$ zabbix_get -s wintemp -k "vfs.dev.write[all,sps,avg1]"
ZBX_NOTSUPPORTED: Unsupported item key.

# メモリ利用率
$ zabbix_get -s wintemp -k vm.memory.size[pused]39.884591

# ネットワーク使用帯域
$ zabbix_get -s wintemp -k net.if.list

Ethernet enabled 172.16.nnn.nnn Intel(R) 82574L Gigabit Network Connection

$ zabbix_get -s wintemp -k "net.if.in[Intel(R) 82574L Gigabit Network Connection,bytes]"
431092361
$ zabbix_get -s wintemp -k "net.if.out[Intel(R) 82574L Gigabit Network Connection,bytes]"
7915472

 

メモリとネットワーク使用帯域は取れそう(NICの名前がちょっと大変だけど)。

しかし、CPU使用率やディスク使用帯域は取れそうもない。調べてみると…
HACK NOTE / Zabbixエージェントを利用してWindowsのディスクIOを測定する
ここに perf_counter というキーワードを発見。

マニュアルにたどり着き…
ZABBIX / Zabbix Documentation – Windows performance counters (4.0)
ZABBIX / Zabbix Documentation – Windows performance counters (2.2)

Windows のコマンドプロンプトで一覧を出してみると…

C:\Users\Administrator>typeperf -qx

\Processor Information(_Total)\% Processor Utility

\PhysicalDisk(0 C:)\Avg. Disk sec/Transfer
\PhysicalDisk(_Total)\Avg. Disk sec/Transfer
\PhysicalDisk(0 C:)\Avg. Disk sec/Read
\PhysicalDisk(_Total)\Avg. Disk sec/Read
\PhysicalDisk(0 C:)\Avg. Disk sec/Write
\PhysicalDisk(_Total)\Avg. Disk sec/Write

 

どうやらこれで取れそうなので試してみる。

# CPU使用率
$ zabbix_get -s wintemp -k "perf_counter[\Processor Information(_Total)\% Processor Utility]"
1.980957

# ディスク使用帯域
$ zabbix_get -s wintemp -k "perf_counter[\PhysicalDisk(_Total)\Avg. Disk sec/Read]"
0.000000
$ zabbix_get -s wintemp -k "perf_counter[\PhysicalDisk(_Total)\Avg. Disk sec/Write]"
0.000394

 

Ubuntuと同じテンプレートで管理するのはちょっと無理があるかも…ということで、テンプレートを全て複製してみる。

そして、CPU使用率とディスク使用帯域を書き換え、ネットワークのNICを書き換える。

ホストを追加して…

ホストにテンプレートを適用。

スクリーンにグラフを追加。

どうやらこれで監視ができそう。

 

Windows Server 2016を監視対象に追加

Windows Server はものすごく安全性が高く作られているらしく、ブラウザで Zabbix のサイトにアクセスしても Zabbix エージェントのダウンロード機能がうまく働かない。

エージェントのダウンロード

モジュールのダウンロードが大変だったのでメモ。
標準のブラウザーでは Zabbix エージェントの選択肢が表示されない。
(他の選択肢も全然うまく動いていない)

Zabbix のサイトを信頼済みサイトに設定しても効果はなかった。

仕方がないので Chrome をインストールしてみる。
インターネットオプション で セキュリティ タブを開き、信頼済みサイト をクリック、サイトボタンをクリック。

信頼済みサイト に https://www.google.co.jp を追加。

ページをリロードすると、Chrome ダウンロードページに表示されるダウンロードボタンが機能する。だが、このままだと実際にはダウンロードでエラーが発生する。

現在のセキュリティ設定では、このファイルをダウンロードできません。

ダウンロードモジュールはまた別のところにあった。
信頼済みサイトに https://dl.google.com を追加する。

これで Chrome のインストーラーがダウンロードできる。

Chrome をインストールしたら、Zabbix のサイトにアクセスする。
エージェントの選択肢が出てきてクリックできるようになった。

4.0LTS の amd64 インストーラーをダウンロードする。

 

エージェントのインストール

インストーラーの動作は Windows 10の時と全く同じだった。

インストール後、エージェントに問い合わせてみた。

$ zabbix_get -s srvtemp -k agent.hostname
SRVTEMP

 

エージェントはうまく動作しているようだ。

 

監視するアイテムとグラフの登録

Windows 10との差分確認

Windows 10の時に設定した値が使えるのかどうかを確認。

$ zabbix_get -s srvtemp -k "perf_counter[\Processor Information(_Total)\% Processor Utility]"
0.460860

$ zabbix_get -s srvtemp -k "perf_counter[\PhysicalDisk(_Total)\Avg. Disk sec/Read]"
0.007648
$ zabbix_get -s srvtemp -k "perf_counter[\PhysicalDisk(_Total)\Avg. Disk sec/Write]"
0.000000

$ zabbix_get -s srvtemp -k vm.memory.size[pused]23.246995

$ zabbix_get -s srvtemp -k net.if.list

Ethernet enabled 172.16.nnn.nnn Intel(R) PRO/1000 MT Network Connection

$ zabbix_get -s srvtemp -k "net.if.in[Intel(R) PRO/1000 MT Network Connection,bytes]"
14386062
$ zabbix_get -s srvtemp -k "net.if.out[Intel(R) PRO/1000 MT Network Connection,bytes]"
393204

 

ネットワークインターフェースカード以外は同じ設定値で行けそうだ。
Windows 10 と Windows Server 2016 で同じハードウェアなんだろうけど、デバイスの名前が違うとは…

Windows 10との差分吸収

[訂正 2019/09/21] マクロ{IPADDRESS}は古かったのと、新しいマクロ{HOST.IP1}は今の知識ではうまく動作させられなかったので、ホストマクロを利用する方法に変更。

古いアイテムはバックアップして残しつつ、ネットワークインターフェースカードの名前を変換できるように設定。

具体的には以下のアイテムを設定している。
net.if.in[{$NICNAME},bytes]net.if.out[{$NICNAME},bytes]

Windows Server(SrvTemp) と Windows10(WinTemp) にネットワークインターフェースカードの名前をマクロ登録する。

{$NICNAME} -> Intel(R) PRO/1000 MT Network Connection

WinTemp には Windows 10 の側で調べた名前をマクロ登録する。

{$NICNAME} -> Intel(R) 82574L Gigabit Network Connection

スクリーンにグラフを追加したところ、ネットワーク帯域使用量が監視ができた。

 

これで、欲しいところは大体取り出すことができるようになった。

 

やったこと

Windows 10がpingを受け付けない

Windows 10は ping も受け付けない設定になっている。

$ ping wintemp
PING wintemp.hogeserver.hogeddns.jp (172.16.nnn.nnn) 56(84) bytes of data.
^C
--- wintemp.hogeserver.hogeddns.jp ping statistics ---
27 packets transmitted, 0 received, 100% packet loss, time 26603ms

 

ファイアウォールを設定する。
設定から ネットワークとインターネット をクリック。

Windows ファイアウォール をクリック。

Windows Defender セキュリティセンター の ファイアウォールとネットワーク保護 が表示されるので、詳細設定をクリック。

セキュリティが強化された Windows Defender ファイアウォール が起動する。
ping を許可するには ICMPv4 と ICMPv6 を許可する。

後から見たら、Zabbix のルールはインストーラーが作ってくれていて、既に設定されていたのだが、気付いていなかったので、このタイミングで一緒に作ってみてしまった。以降は全くいらない作業だったが、ポートを変えたりするときに役に立つかもしれないから書き残しておく。

Zabbix のルールは 新しい規則… で作成する。
新規の受診の規則ウィザード でポートを選択して 次へ をクリック。

TCP と 15000ポートを設定して 次へ をクリック。

接続を許可して 次へ をクリック。

適用するプロファイルを設定する。
このPCはドメインに参加しているので ドメイン だけを設定しておけば良いと思うが、パブリックだけを外すという手もあると思う。
プロファイルを設定したら 次へ をクリック。

後で忘れないように名前を付けて 次へ をクリック。

 

Windows 10のエージェントが応答しない

あれ…?

$ zabbix_get -s wintemp -k agent.hostname
zabbix_get [28351]: Get value error: ZBX_TCP_READ() failed: [104] Connection reset by peer
zabbix_get [28351]: Check access restrictions in Zabbix agent configuration

 

ポートは空いてると思う。インストーラーがちゃんと開けてくれている。

あ!インストールのメモを書いているときに、サーバーの IP アドレスを 172.16.nnn.nnn にしたままインストールを進めてしまっていたんだった…

C:\Program Files\Zabbix Agent\zabbix_agentd.conf
Server=172.16.nnn.nnn
ServerActive=172.16.nnn.nnn
Hostname=WINTEMP

 

…本当に nnn で設定しちゃってら…。修正して、サービスを再起動したら応答した。

$ zabbix_get -s wintemp -k agent.hostname
WINTEMP

 

マクロの利用に失敗

Windows 10 と Windows Server 2016 の差分を吸収して、できるだけ同じアイテムで監視ができるようにしたいと考えた。

調べてみると、IPアドレスを使ってもこの値を取ることができて、かつ、監視対象のIPアドレスを示すマクロがある模様。
ZABBIX Forum / Monitoring and graphing NICs in Windows

net.if.in[{IPADDRESS},bytes]net.if.out[{IPADDRESS},bytes]

複数NICを持っているときにはどうするの?とか、単一NICでも複数のIPアドレスを持っているときはどうなるの?という疑問はあるものの、今回の環境はどちらも単一NICで単一IPアドレスなので問題解決。

古いアイテムはバックアップして残しつつ、{IPADDRESS}指定のアイテムを追加して有効化した。

値が取れてなかった。

調べてみると {IPADDRESS} というマクロは既に廃止されていて、{HOST.IP<1~9>]}に変わっていたのだが、これを使うと今度はエラーが発生するようになった。

他に方法はないか?と探していたところ、ホストマクロというのがあったのでこれを使ってみたらうまく値が取れるようになった。

 

 

さいごに

ここまで試しているなかで、ウチのサーバー達はほとんどCPUを使っていないことが分かった。色々と節約気味に使っているからか、メモリもそれほど要求されているわけじゃなさそう。

時々サーバーがもたもたしているのはバックアップでハードディスクが使われているか、時々発生しているスワップによるらしい。

前々からサーバーを買い換えたいと思っているのだが、娘(大)(財務大臣)に予算申請できずにいたが、こういうことならハードディスクをSSDに変えるだけでパフォーマンスが大幅に向上するのではないかと思い始めた。これなら若干予算申請しやすいぞ!

まぁ、それにしても…サーバーが便利であることを娘1~3に理解してもらう必要がある。そのためにはビデオのハングアップを通知するなどの最低限の機能を実装する必要がある。ビデオはPINGだけのチェック?SNMP対応してる?いずれにしても、もう少し頑張ってみよう。

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です