日々是好日

これまで使ってきたOSSの備忘録です

Zabbixでsyslogのログ監視

1.はじめに

  Zabbixでsyslogのログ監視を行う場合、OS既定値のままだとログの日時やプライオリティを認識できない。そのため、認識できるようにする設定方法を説明する。

 

 【環境】

 CentOS 8

 Zabbix 5.0

 

2.rsyslog.confの設定

(1) rsyslog.confの編集

  /etc/rsyslog.confに、以下の2行を追加する。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

# テンプレートの定義

$template SyslogMonitor,"%timegenerated:::date-rfc3339% %hostname% [%syslogfacil
ity-text%.%syslogseverity-text%] %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-l
ast-lf%\n"


# warn以上をログ出力
*.warn /var/log/syslog-monitor;SyslogMonitor

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

(2) rsyslogの再起動

  systemctl restart rsyslog

(3) テストメッセージの通知

  logger -p local1.crit "test crit message."

(4) テストメッセージが、監視用のsyslogファイル(syslog-monitor)に出力されたことを確認する。

  tail /var/log/syslog-monitor

(5) Zabbixでログ監視できるように、読み取り権限を追加

  chmod +r /var/log/syslog-monitor

 

3.監視用のsyslogファイル(syslog-monitor)のローテーション設定

(1) logroateに、syslog-monitorをローテーションする設定を追加する。

 

4.Zabbixの監視アイテムの設定

(1) 設定ーホストーZabbix-serverのアイテムを開く

(2) アイテムの作成を開く

(3) 名前は任意の名前を入力する

(4) タイプは、「Zabbixエージェント(アクティブ)」を選択する

(5) キーは、logrt[/var/log/syslog-monitor,,,,,,,]と入力する

(6) データは、「ログ」を選択する

(7) ログの時間の形式に、「yyyy-MM-ddThh:mm:ss」と入力する

(8) 追加ボタンをクリックする。

f:id:sincnick:20210925215944p:plain

 

5.Zabbixの監視トリガーの設定

(1) 監視トリガーの設定

 ①設定ーホストーZabbix-serverのトリガーを開く

 ②トリガーの作成を開く

 ③任意の名前をつける。(名前の後ろに{ITEM.VALUE}と入力する)

 ④深刻度を「警告」にする。

 ⑤条件式で、以下のように定義する

  (({Zabbix server:logrt[/var/log/syslog-monitor,,,,,,,].iregexp(.warning])})<>0)

 ⑥追加ボタンをクリックする。

f:id:sincnick:20210925234221p:plain

(2) 他の深刻度の設定

  警告以外の深刻度も、上記(1)①~⑥を参考に設定する。

 設定例

f:id:sincnick:20210926212122p:plain

(3) loggerコマンドを使い、テストメッセージを通知してみる。

 (警告の場合)

  logger -p local1.warn "test warn message."

 

 Zabbixのトリガー設定ができていれば、SYSLOGのプライオリティ(優先度)に応じたZabbixの深刻度が表示させる。

f:id:sincnick:20210926212927p:plain

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

【解説】

今回紹介したsyslogのログ監視は、下図の通り。

①OSのsyslogデーモンが、syslog-monitorファイルにメッセージを出力する。

②Zabbix-agentが、syslog-monitorのファイルを読み込む。

③トリガーの条件式に基づき、syslogのメッセージを障害判定する。

f:id:sincnick:20210926224156p:plain

rsyslog.confの設定

 syslog(/var/log/messages)の既定では、日付が「Sep 26」というような形式になっているため、Zabbixのログ監視では日付を認識できない。そのためrsyslog.confにテンプレートを定義して、日付をrfc3339形式で出力するようにしている。また、プライオリティ(優先度)も出力するように定義している。

 

Zabbixの監視アイテム

 今回はlogrtを使用しているが、syslogログのローテーションの設定で、copytruncateを指定した場合は、logrtのオプションでcopytruncateを指定する必要がある。

 

Zabbixの監視トリガー

 syslogのプライオリティ(優先度)とZabbixの深刻度の種類は、一致しないため環境に合わせてカスタマイズが必要になる。また、監視トリガーの名前に{ITEM.VALUE}をつけておくと、Zabbixのダッシュボードに、syslogのメッセージも表示されるので見やすくなる。

 

以上

 

 

 

 

ZabbixでDNSフェールオーバーを作ってみた(その4)

4.複数拠点からWeb監視する

  これまでの説明で、DNSフェールオーバーは実現できるのだが、データセンターのWebサーバーを監視するZabbixサーバーが1か所だけでは心許ない。そのため、2か所(例えば東日本リージョンと西日本リージョン)に配置したZabbixから、Web監視するように改良する。

 

(1) 事前準備

 ①東日本リージョンと西日本リージョンに、Zabbixサーバーを配置する。

 ②それぞれのZabbixサーバーにWeb監視を設定する

 

f:id:sincnick:20210923222333p:plain

 

(2) Zabbix APIを利用したスクリプトを用意する

 

(3) スクリプトで取り込んだ監視結果を、トリガーの条件に組み込む。

 

以上

ZabbixでDNSフェールオーバーを作ってみた(その3)

3.権威DNSを書き換えるスクリプトをZabbixで実行する

(1) 事前準備

 ①権威DNSを書き換えるスクリプトを用意する。

  (例:DNS_Change.sh)

 

(2) スクリプトファイルをZabbixサーバーに配置する。

 ①Zabbixサーバーに、SSH接続する

 ②以下のフォルダにスクリプトファイルを配置する

  /usr/lib/zabbix/externalscripts/

 ③配置したスクリプトファイルにZabbixアカウントで実行できるように、ファイルに実行権限を付与する。

  cd /usr/lib/zabbix/externalscripts   

  chmod 755 DNS_Change.sh

 

(3) Zabbix エージェントでスクリプトを実行できるようにする。

 ①Zabbix エージェントのコンフィグに、EnableRemoteCommands=1を追加する。

  vi /etc/zabbix/zabbix_agentd.conf

EnableRemoteCommands=1

 ②Zabbixエージェントを再起動する

  systemctl restart zabbix-agent

 

(4) アクションを設定する

 ①「設定」ー「アクション」を開く

 ②右上の「アクションの作成」を開く

 ③アクションタブで、任意の名前を入力する

 ④実行条件で、データセンタの障害を検知するトリガー名を指定する

 ⑤実行内容タブを開く

 ⑥実行内容欄の「追加」をクリックする

 ⑦下図のように、上記(2)で配置したスクリプトを実行するように設定する  

f:id:sincnick:20210921220648p:plain

 ⑧Addをクリックする

 ⑨「追加」ボタンをクリックする。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

【解説】

スクリプトの実行方法で「Zabbixサーバー」を指定した場合、5分以内にスクリプトの実行が終了しないと強制終了してしまう。スクリプトの実行が5分以内であれば、「Zabbixサーバー」でも構わない。

 

実際に使ってみた権威DNSだと、API経由でDNSレコードを書き換えようとすると、1レコードあたり1秒くらいかかったので、5分間では300レコードしか書き換えできず、物足りなかった。そのため、Zabbixエージェントでスクリプトを実行するようにした。

 

Zabbixエージェントを利用する注意点としては、スクリプトの実行が非同期実行になるため、スクリプトの実行が途中で停止すると、永遠にプロセスが残ってしまう可能性がある。別途、スクリプトの実行を監視する仕組みが必要になってくるが、これは別の機会に説明したい。

 

次回は、複数拠点のZabbixのWeb監視を連携する方法を説明する。

 

 

 

ZabbixでDNSフェールオーバーを作ってみた(その2)

2.自社データセンターの障害監視

(1)  Web監視の設定

 ①「設定」ー「ホスト」ー「Zabbix server」ー「web」を開く。

 ②右上の「Webシナリオの作成」を開く。

 ③シナリオタブで、任意の名前を入力する。

 ④ステップタブを開き、「追加」をクリックする。

 ⑤Webシナリオのステップで任意の名前を入力し、URL欄に自社データセンターのWebサーバーのURLを入力する。 

f:id:sincnick:20210920223139p:plain

Webシナリオ

 ⑥追加ボタンをクリックする。

 ⑦追加ボタンをクリックする。

 

(2) トリガー条件の設定

 ①「設定」ー「ホスト」ー「Zabbix server」ー「トリガー」を開く。

 ②右上の「トリガーの作成」を開く。

 ③任意の名前を入力する。

 ④条件式の追加ボタンをクリックする

 ⑤アイテムは、上記(1)で追加したWeb監視の「Failed step of scenario・・・」を選択する

 ⑥関数は、sum()※を選択する。

  ※障害判定の例として、直近10回中5回接続に失敗した場合を障害とする。sum()ではなく、count()を利用する方法もある。

 ⑦「挿入」をクリックする

f:id:sincnick:20210920232425p:plain

トリガー条件式

 ⑧「追加」ボタンをクリックする。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

【解説】

AWS Route53やAzure Traffic Managerを使わずに、Zabbixを利用するメリットは、上記2(2)の通り、細かく監視条件を指定できる点にある。特に〇回中〇回失敗した場合という条件式は、Route53やTraffic Managerではできない。(指定できるのは〇回連続で失敗した場合という条件になる)

 

私見だが、データセンターの障害は、まったく接続できなくなるというより、接続できたりできなかったりするケースのほうが多いと思っている。そのため、障害判定の条件は、連続〇回接続に失敗した場合ではなく、〇回中〇回接続に失敗した場合のほうが妥当だと思う。

 

なお、データセンターの障害監視としては、本来複数のURLを監視すべきだが、今回は説明の都合上、1URLとしている。

 

次回は、アクションの設定を説明する。

 

ZabbixでDNSフェールオーバーを作ってみた(その1)

0.はじめに

 Zabbixを使ったDNSフェールオーバーを紹介してみようと思う。

 DNSフェールオーバーといえば、AWS Route53やAzure Traffic Managerがメジャーどころだと思うが、ZabbixのWeb監視を使って同じような仕組みが実現できる。

 

 ZabbixのWeb監視を利用するメリットは以下の通り。

(1) DNSフェールオーバーの発動条件を詳細に定義できる。

(2) DNSフェールオーバー発動時に、メールやSNSといった通知と連動できる。

(3) DNSクエリ数によっては、Route 53やTraffic Managerより安い。

 

 反面、デメリットとするとRoute 53やTraffic Mangerは、設定だけで複数の拠点(プロープ)からWebサーバーを監視してくれるが、ZabbixのWeb監視の場合、複数の拠点から監視するには、Zabbix APIを使う必要があり、ちょっと手間がかかる。

 

1.システム概要

(1) Zabbixを使ったDNSフェールオーバーは、下図の通り。

 ①通常時は、権威DNSが自社データセンターのWebサーバーのIPアドレスを返す。これにより、利用者は自社データセンターのWebサーバーにアクセスする。

 ②Zabbixが自社データセンターの障害を監視し、障害を検知したら、権威DNSのレコードを書き換える。

 ③レコード書き換え後、権威DNSは外部データセンターのSorryサーバのIPアドレスを返す。これにより、利用者は外部データセンターのSorryサーバにアクセスする。

f:id:sincnick:20210921232637p:plain

(2) 使用したZabbixのバージョン

  Zabbix 5.0(OSはCentOS

 

次回以降で、具体的な設定手順を説明する。