Zabbixでログファイル監視をするには、log[]
かlogrt[]
のアイテムキーを使用します。
Linuxの場合だと、主にSyslog(シスログ)と言われるシステムログを監視する際に利用されます。
またログの中でも、特にローテーションするログについてはいくつか注意点がありますので、Zabbixで監視を設定する前にぜひ本記事を確認してください。
logrt[]キーの基本的な使い方
冒頭で2種類のアイテムキーを記載しましたが、今回はローテーションするログの監視をしますので、logrt[]
のアイテムキーを中心に説明していきます。
Zabbixのログファイル監視設定
まずは、アイテムのタイプを「Zabbixエージェント(アクティブ)」を設定します。
そして、ログファイル監視に使用するlogrt[]
キーの基本的な使い方はについては以下の通りです。
logrt[file_regexp,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>,<persistent_dir>]
logrt[]
キーの詳しい使い方とパラメータについては、公式サイトでご覧ください。
中でも特に注目していただきたいのが第1引数のfile_regex
です。log[]
キーとは異なり、ファイル名に正規表現が使えます!
正規表現を使うことにより、ローテーションされたファイルも見逃さずに監視することができます。
その他、比較的使用頻度の多いの引数としては、<encoding>
で文字コードを指定、それから<mode>
にskip
を指定することで、監視開始時のログの読み込みをスキップするくらいだと思います。
Zabbixのログファイル監視の仕組み
例えば、間隔を空けず常に出力され続けるログファイルがあるとします。
そのログファイルを、Zabbixでlog[]
キーを使用して監視を行い、仮に監視間隔が30秒だったとしましょう。
すると、Zabbixエージェントは以下のようにログファイルからデータを収集して、Zabbixサーバーに対して監視データを送信します。
そこで、上記の30秒毎の監視と監視の間にローテーションが行われたとすると、古いログファイルは読み込まなくなるのでログを見逃す(読み飛ばす)可能性があります。
しかし、logrt[]
キーの場合は前述の通りローテーションされる前のファイルも読み込むので、ローテーションによる見逃しを防止することができます。
Zabbixがローテーションを検知する条件
では、Zabbixがどのようにしてローテーションしたログファイルも見逃さずに監視ができるかを説明します。
Zabbixはログファイルの以下のいずれかの状態に変化があった場合、ローテーションされたことを検知します。
状態 | 変化 |
---|---|
サイズ | ファイルサイズが増えた、または減った場合 (減った場合はファイルの先頭から読み直します) |
更新日時 | ファイルの更新日時が変わった場合 |
inode | いわゆる一意のIDのようなもの。 ファイル名が同じでもファイルそのものが変わった場合 |
また、Zabbixはこれらの情報を基に、ログファイルをどこまで読み込んだかを記録しています。
ログファイルのローテーション方式を確認
始めにZabbixでのログファイル監視の設定をご紹介しましたが、それ自体は特に難しいこともありません。
しかし、ログファイル監視でしばしば問題になるのは、今から説明するログファイルのローテーション方式と、その後にご紹介するログファイルの圧縮方式です。
まず、ローテーション方式から順を追って説明していきます。
ローテーション方式の種類
ここでのログファイルのローテーション方式の種類とは、ログファイルがローテーション後に新しく生成されるログファイル、及び、ローテーションする前のログファイルをどう扱うかというものです。
一般的によく利用されるローテーション方式は、以下の3つのオプションだと思います。
ローテーション方式 | 説明 |
---|---|
create | ローテーションが行われた直後に新しいログファイルを作成する。 所有者やパーミッションを指定する。 省略した場合は元のログファイルと同じ属性を使用する。 |
copy | ログファイルのコピーを生成し、元のログファイルは変更なし。 |
copytruncate | 元のログファイルをリネームし、コピー元のログファイルを空にする。 |
copytruncate
が対応したのがバージョン3.2や4.0だったのは、まだ記憶に新しいですね。logrotate
には、他にも様々なオプションがありますので、気になる方はこちらの参考サイトをご覧ください。
Zabbixのログファイル監視で特に問題になるのは、create
オプションで設定している場合です。
所有者やパーミンションに注意!
logrotate
のローテーション方式がcopy
やcopytruncate
の場合は、所有者やパーミンションが変わることはありませんが、create
の場合はlogrotate
の指定した所有者やパーミッションで新しくファイルを作成するので、設定次第ではローテーション後にログが読めなくなることがあります。
ログファイルはデフォルトで所有者がroot
で、パーミッションは600
が一般的だと思いますが、Zabbixは基本的にzabbixユーザーが監視をするので、zabbixユーザーが読める権限でなければなりません。
所有者を変更すると色々問題が、かと言って、権限を緩くし過ぎるのもセキュリティ的に問題がありますので、おすすめはパーミッションだけ640
もしくは644
に設定する程度で良いと思います。
# 設定例 /var/log/syslog { ・・・ create 644 root root }
ちなみに、logtotate
で設定した内容はローテーションしないと適用されませんので、Zabbixでログファイル監視を始める前に、既存のログファイルのパーミッションも変更しておきましょう!
# chmod 644 /var/log/syslog*
この時、Zabbixは正規表現にマッチしたログファイルを全て読み込むので、過去にローテーションされて圧縮されたログファイルも全て変更しておきます。
ログファイルの圧縮方式を確認
もう1つ、Zabbixのログファイル監視で問題になるのは、ログファイルの圧縮方式です。
ログファイルの圧縮方式とは、ローテーションした際にログファイルを圧縮するかしないか、また圧縮する場合はどのタイミングで圧縮するかです。
圧縮方式の種類
圧縮方式はlogrotate
のオプションで、圧縮の有無やタイミングを設定することができます。
一般的によく利用される圧縮方式は、以下の3つのオプションだと思います。
※上記の参考サイトを参照
圧縮方式 | 説明 |
---|---|
nocompress | ローテションされたファイルは圧縮しない |
compress | ローテーションされたファイルは直ちに圧縮する |
delaycompress | ローテションされたファイルは次回以降のローテーション時に圧縮する |
Zabbixのログファイル監視で問題になるのは、compress
オプションで設定している場合です。
圧縮するタイミングに注意!
ローテーションで圧縮される際、一般的には~.gz
形式で圧縮されます。
当然、通常のテキストファイルではなく圧縮ファイルになりますので、Zabbixが正常に読み込むことができず文字化けしてしまいます。
つまり、上記で説明したZabbixのログファイル監視の仕組み上、compress
オプションを使用していると、ローテーションされた直後に圧縮されたログファイルも読み込むので、監視データが文字化けしてしまいます。
また、logrt[]
キーの<mode>
引数にskip
を指定しなかった場合も、現在存在している全ての圧縮ファイルも読み込み、文字化けした大量の監視データを受け取ることになりますので注意が必要です。
もちろん、ログファイルを圧縮しなければこの問題は起こりませんが、圧縮しなければディスクの容量を圧迫してしまいますので、おすすめはdelaycompress
オプションを設定することです!
# 設定例 /var/log/syslog { ・・・ delaycompress }
delaycompress
オプションを設定しておけば、ローテーションしても1世代前のログファイルは即時圧縮されず、次回のローテーションの際に圧縮するので文字化けを回避できます。
Zabbixのアイテムとlogrotateの設定まとめ
最後に、Zabbixでローテーションするログファイル監視とlogrotateのおすすめ設定をまとめました。
今回はトリガーの設定を割愛させていただきます。
Zabbixのログファイル監視設定
冒頭でも紹介したlogrt[]
キーを使います。
タイプは必ず「Zabbixエージェント(アクティブ)」で設定します。
ポイントはログファイル名の指定に正規表現が使えること、あとskip
はほぼ必死でしょうね。
設定項目 | 設定値 | 説明・注意点 |
---|---|---|
名前 | <ログファイル監視> | (任意の名前) |
タイプ | Zabbixエージェント(アクティブ) | Zabbixエージェント(アクティブ)のみ |
キー | logrt[/var/log/syslog,error,,,skip] | オプションが不要な場合は省略可 |
データ型 | ログ | ログ固定 |
監視間隔 | <30s> | (任意の間隔。トリガーも考慮する) |
もし、特にWinodws上のログファイルを監視する場合は文字コードにご注意ください。
監視間隔は、長いほど1度にZabbixサーバーへ送信するデータ量が多く、<maxlines>
オプションも考慮する必要が出てきますので、極端な話、1秒に設定していても問題ありません。
ログファイルとlogrotateの設定
Zabbixでログファイル監視を行うには、ログローテートの適切な設定が必要です。
まず、ログファイルのパーミッションの設定を行います。
# chmod 644 /var/log/syslog*
次に、logrotate
の設定を確認します。
Zabbixユーザーが読み込み可能なパーミッションであること、そして、ローテーションの際に即時圧縮しないことを確認してください。
/var/log/syslog { ・・・ delaycompress create 644 root root }
以上です!
これで、ログファイル監視に関するある程度の問題は解消できるはずです。
- Original:https://minory.org/zabbix-logrt.html
- Source:Minory
- Author:管理者