1
0

【Zabbix】統合監視入門

Posted at

【Zabbix】統合監視入門

この記事でわかる・できること

  • WindowsにLinuxの仮想環境を作成してZabbixを構築

この記事の対象者

  • 統合監視を始めたい人

動作環境・使用するツールや言語

  • Windows Server 2019 Standard
  • Zabbix 6.0 LTS
  • Ubuntu 22.04

はじめに

統合監視ではサーバやネットワーク機器、ソフトウェアなどの状況を一元管理して、死活監視、パフォーマンス監視、syslog監視など様々な監視を行います。
Zabbixは人気のあるオープンソースの監視ミドルウェアです。
ただし2024年7月現在、Windowsは監視対象としてエージェントをインストールすることはできますが、サーバとしてはインストールできません。
Windows上で動かしたい場合は仮想化を行う必要があります。方法は色々ありますが、WSL(Windows SubSystem for Linux)が簡単です。

Windows上にLinux環境を構築

WSLの有効化

コントロールパネルの「Windowsの機能の有効化または無効化」から 「Linux用Windowsサブシステム」にチェックを入れて再起動します。
もしこれがエラーになる場合はBIOSで仮想化機能が有効になっていない可能性があります。この場合、DockerやVirtual Boxなど他の仮想化ソフトも使えません。
BIOSから有効化してください。

WSLのインストール

コマンドプロンプトかPowerShellを管理者権限で起動します。
Windowsのバージョンによっては単純に

wsl --install

でインストールされますが、今回の環境であるWindows Server 2019 Standardでは--install自体が使えません。
なおこの環境では関係ありませんが、WSLにはバージョン1と2があって、1だとsystemctlが使えないので後々zabbixを自動起動することが面倒になるため、可能であれば2にした方がよいです。(デフォルトで1がインストールされる場合もあるようです)
Microsoftの公式サイトからパッケージをダウンロードする必要があります。拡張子がappxになっていて、公式サイトでは色々とコマンドが書いてありますが、環境によってはエラーになって通らない場合もあります。
やることは拡張子をzipにして解凍するだけです。ディストリビューションによるかもしれませんが、appxを解凍するとさらにx64やARM64などのappxに分かれているので、それをさらにzipにして解凍します。
今回はUbuntu22.04のx64を選択しました。
最終的にexeが出てくるので、それを実行することでWSLおよびLinux環境が起動します。
最初にユーザ名とパスワードを聞かれるので設定します。
rootのパスワードも設定しておきましょう。

sudo passwd root

Linuxの設定

DNS

後々日本語パッケージをインストールする時に名前解決に失敗する場合があります。
/etc/resolve.confを編集してNameServerを8.8.8.8(GoogleのDNSサーバ)にしておきましょう。

Zabbixのダウンロード、インストール

Zabbixの公式サイトのダウンロードページでバージョンやOSを指定すると必要なコマンドを表示してくれます。
今回では下記の通りとしました。
 zabbix version:6.0 LTS
 OS:Ubunts
 OSバージョン:22.0.4
 zabbix component:Server,Frontend,Agent
 Database:MySQL
 Web Server:Apache
表示されたコマンドをコピペで実行しますが、データベースはインストールされないので自分でインストールします。

apt install mysql-server

WSL2があるなら

systemctl start mysql
systemctl enable mysql

で自動起動できますが、今回は無いのでとりあえず

service mysql start

で手動起動しておきます。apache2も起動しておいてください。

日本語パッケージのダウンロード
apt -y install language-pack-ja-base language-pack-ja ibus-mozc

DNSサーバを8.8.8.8などにしていないとエラーになる場合があります。

zabbixのインストール

http://localhost/zabbix
 にアクセスして画面の指示に従いインストールします。
インストール後は初期アカウントで
ユーザ名:Admin
パスワード:zabbix
でログインできます。

ファイアウォールの80番ポートの開放

他の端末からアクセスできるようにします。
コントロールパネルからWindows Defenderファイアウォールの設定で「受信の規則」から80番ポートを開放します。

ポートフォワーディング

他の端末から、Windows上の80番ポートに来たアクセスを、Zabbixが稼働しているLinuxの80番ポートに転送する必要があります。Linux上でifconfigを実行してIPアドレスを確認してください。WinodwsとIPアドレスが異なる場合はポートフォワーディングを設定します。IPアドレスが同じ場合は設定すると繋がらなくなるので設定しないでください。(Windows自体を仮想マシン上で実行していると同じになる場合があるようです)
管理者権限でPowerShellかコマンドプロンプトを起動します。
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=【LinuxのIPアドレス】

agentのインストール

agentは無くても監視できますが、入れておいた方が幅広い設定が可能です。
agentをダウンロードして監視対象のサーバにインストールします。
ポートの開放などはインストールの過程で実行してくれます。
エージェントを入れる場合はサーバのIPアドレスを指定しますが、これはWindows側のIPアドレスを設定します。

Zabbixの設定

ホスト作成

設定⇒ホスト⇒右上の「ホストの作成」でホストを作成できます。
エージェントをインストールしたサーバはインタフェースのタイプを「エージェント」にしてIPアドレスを指定します。
基本的に何かを作成するときは右上にあります。
画面によっては見切れているのでスクロールする必要があります。
ホストはいずれかのホストグループに所属させる必要があります。
ホストを作成すると一覧に表示されますが、エージェントの状態はまだ無効(赤色)になっています。
1つ以上監視項目を作って監視させなければ有効(緑色)になりません。

テンプレート

テンプレートを作成して監視項目を登録すればまとめてホストに登録できます。
既存のテンプレートも色々あるのでそれを使ってもいいです。

アイテム、トリガー

アイテムが監視項目、トリガーがアラートを出す条件です。
構文があるので随時調べて設定します。
テンプレートから改造してもいいです。

ディスカバリ

例えばディスク使用率は本来CドライブとかFドライブとか指定する必要がありますが、自動で見つけてもらう機能があります。
それがディスカバリです。
例えば「vfs.fs.size[C:,pused]という構文でCドライブのディスク使用率を見ていますが、ディスカバリルールとして「vfs.fs.size{#FSNAME},pused]とすると各ドライブを見つけてくれます。
ディスカバリは他にもネットワークのIPアドレスの範囲からネットワーク機器を発見するようなこともできます。

メール通知

管理⇒メディアタイプ⇒Email(HTML)で設定します。
例えばMicrosoft365のoutlookの場合は以下のようになります。
 SMTPサーバ:smtp.offie365.com
 ポート番号:587
 SMTP hello:ドメイン名(メールアドレスの@より後ろ)
 送信元メールアドレス:【メールアドレス】
 接続セキュリティ:STARTTLS
 認証:ユーザ名とパスワード
 ユーザ名:【メールアドレス】
 メッセージフォーマット:HTML
メディアタイプのページで右にスクロールすると送信テストができます。

管理⇒ユーザー⇒Admin⇒メディアタブでEmail(HTML)と紐づけます。

設定⇒アクション⇒トリガーアクションでReport problems to Zabbix administratorsをクリックし、有効にチェックを入れておきます。
実行内容のところにメッセージを送信する旨が記載されています。

以上でトリガーに引っかかったらメールが送られてくるはずです。

Zabbix自体の監視

監視対象のサーバからZabbixのプロセス「zabbix_server」が落ちていないか監視しましょう。監視対象のサーバも死活監視すれば相互監視になります。

$var = Get-Process -ComputerName Zabbixサーバのホスト名】 | out-string -Stream | select-string "zabbix_server"

if($var -eq $null){

	Write-Host '異常あり'
	
	# Office 365 の認証情報
	$o365User = '【ユーザ名】';
	$o365Pass = '【パスワード】'
	# 差出人
	$from    = '【メールアドレス】';
	# 宛先
	$to      = '【メールアドレス】';
	# メールのタイトルと本文
	$subject = 'zabbixアラート';
	$body    = 'zabbix-serverが起動していません。';

	# MailMessage インスタンス作成
	$msg = New-Object System.Net.Mail.MailMessage($from, $to, $subject, $body);

	# Office 365 の SMTP サーバーを設定して SmtpClient インスタンスを作成
	$SMTPClient = New-Object Net.Mail.SmtpClient("smtp.office365.com", 587) ;

	# SSL を True に設定
	$SMTPClient.EnableSsl = $true;

	# Office 365 への認証
	$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($o365User, $o365Pass);

	# メール送信
	$SMTPClient.send($msg);
	
}
else{
	Write-Host '異常なし'
}

このPowershellを管理者で実行するバッチを作成し、タスクスケジューラに登録して定期実行します。

@echo off
cd C:\zabbix_monitor
echo 開始 > mail_send.log
echo %date%%time% >> mail_send.log
powershell -NoProfile -ExecutionPolicy Unrestricted .\mail_send.ps1 >> mail_send.log
echo 完了 >> mail_send.log
exit

なおZabbixはクラスタ構成にすることもできますが、データベースは共有しなければならないようです。

Zabbixサーバが落ちた時

サーバを起動してWSLまたはLinuxのEXEを再度実行します。
サービスが自動起動になっていない場合は諸々起動します。

service mysql start
service apache2 start
service zabbix-server start
service zabbix-agent start
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0