GUI上からのログ監視用除外キーワードの設定について

お世話になります。

現在、バージョン2.4.8を使っています。
正規表現を使ったログ監視用の除外キーワードを
zabbix GUI上で設定する際の仕様について質問させて下さい。
管理→設定からホスト名(除外キーワード)を作成し条件式にて除外キーワードを設定しています。

①GUI上で見る限り条件式(除外キーワード)を1つ1つ設定していく必要があるように思われますが、
まとめて登録する方法はありますでしょうか。

②上記の設定方法でまとめて登録するのは仕様上できないということであれば、その他の方法はありますでしょうか。
※除外キーワード用のトリガ一覧をcsvで作成しインポートする等

除外キーワード一覧を作成した際にキーワードが約8000行程になり、合理的な方法がないものか
模索していた次第です。

お手数ですが、よろしくお願い致します。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー heya の写真

>管理→設定からホスト名(除外キーワード)を作成し
ホスト名 というのは 正規表現 の書き間違いですかね。
そうだと仮定して・・・
GUI 上では無理でしょうね。
そして、正規表現は API が用意されていないので、直接 SQL 文で INSERT するしかないと思います。
関連するのは regexps テーブルと expressions テーブルです。

参考までに、以下は 2.2 のときのメモです。
2.4 でも似たようなものだとは思いますが、確認はしていません。

regexps テーブル
 regexpid  ID
 name  名前
 test_string  テスト文字列

expressions テーブル
 expressionid  ID
 regexpid  regexps テーブルのID
 expression  条件式
 expression_type  条件式の形式(※1)
 exp_delimiter  (expression_type=1 の場合の)区切り文字(,./ のどれか)
 case_sensitive  大文字小文字を区別
※1
 0 : 文字列が含まれる
 1 : いずれかの文字列が含まれる
 2 : 文字列が含まれない
 3 : 結果が真
 4 : 結果が偽
※2
 0 : チェックなし
 1 : チェックあり

CSV を読ませて INSERT するには、MySQL なら LOAD DATA LOCAL INFILE というのがあるようです。

ユーザー TNK の写真

具体的にどのように設定されているのかわかりませんが、正規表現
は使用されていますか?

使用されていないのであれば、まずは、正規表現を使用して条件式
を見直してみてください。

ユーザー T-A の写真

heya様 TNK様

早速の返信有難うございます。

当方の書き方が明確ではなく申し訳ございません。

>管理→設定からホスト名(除外キーワード)を作成し
ホスト名 というのは 正規表現 の書き間違いですかね。

ご指摘の通り、管理→一般設定→正規表現です。

そこから例えば"ホスト名除外キーワード(/var/log/messages)"という名前を作成し、
条件式に正規表現を使っての除外キーワードを設定していっています。

ご質問させていただいた意図としては、GUI上での条件式の追加を1行ずつ追加する方法以外の方法が
あるかということでした。

GUI上ではできないとのことで理解しました。

>そして、正規表現は API が用意されていないので、直接 SQL 文で INSERT するしかないと思います。
関連するのは regexps テーブルと expressions テーブルです。

上記の方法について承知しました。一旦検証環境でテストしてみるなど検討したいと思います。
直接SQL文でINSERTした場合は、GUI上の正規表現の設定画面からは設定を確認できないという認識でよろしいでしょうか。
例 Host A除外キーワード(/var/log/messages)という名前を作成し除外キーワードをip_tables.*Netfilter Core Team
と設定したい場合、SQL文で直接インサートするとGUI上では確認できない

よろしくお願い致します。

ユーザー heya の写真

直接 INSERT でも、きちんと不整合がないように追加できていれば、追加後に GUI で普通に確認できますよ。

ユーザー T-A の写真

heya様

お礼が遅くなり申し訳ありません。
直接INSERTでもGUI上で確認できる旨承知しました。
有難うございます。

ユーザー T-A の写真

お世話になっております。

正規表現の設定に関連して、
zabbixの正規表現の使用方法について2点確認させていただけますでしょうか。
①エスケープ
GUIの正規表現の設定で下記の条件式を追加したところエラーとなり条件式を追加できませんでした。
条件式
\/proc\/net\/if_inet6
エラー
正規表現"\\/proc\\/net\\/if_inet6"が正しくありません: "Unknown modifier 'p'"

\を除外したところ、登録できました。
/proc/net/if_inet6の/を通常のスラッシュとして扱う場合に\でエスケープする必要があると思いますが、
/proc/net/if_inet6の/部分をエスケープしなくとも通常のスラッシュとして扱われているということでしょうか。

②条件式でのAND条件を設定することは可能でしょうか。
Exception/ && $'=~/closing socketという条件式を設定したい場合に
上記の記述方法でAかつBの文字列の除外という条件がzabbix上で満たされていますでしょうか。

お手数ですが、よろしくお願い致します。

ユーザー heya の写真

>①エスケープ
ソース(include/classes/validators/CRegexValidator.php)を見たところ、正規表現をチェックするときは
・入力した文字列の / を \/ に置換する
・// で囲んで preg_match() に渡す
・エラーが出たら失敗
という流れでチェックしているようです。
というわけで、GUI での入力時に / を \ でエスケープする必要はありません。

#余談ですが、// で囲むというのは正規表現自体の文法ではなく、
#正規表現として扱うときに囲む文字として / を使っている処理系が多い、というだけのことです。
#preg系の関数もその処理系の一種で、正規表現中の / は \ でエスケープすることになっている、
#という話です。

>②条件式でのAND条件を設定することは可能でしょうか。
○○と××を同時に含むものを除外したい、ということですかね?
そういうことなら、○○.*×× と ××.*○○ の二つの条件式を設定すればいいと思います。
&& が特別な意味を持つというのは聞いたことがないので、単に「& という文字が二つ」と解釈されると思います。