TWSNMPのログ検索を改善する
昨日、考えたログの圧縮保存は思ったより簡単に組み込むことができました。
今朝5時、猫に起こされて昨日から動かしておいた結果を確認するとログの保存量を30%以上減っているという効果が得られました。少ない作業で効果が出るととても気持ちが良いものです。
圧縮して保存したログが正しく検索できるか試しているうちにログの検索機能を改善したくなってきました。
最初に考えた検索機能
フィルターに、文字列を入力して<検索>ボタンをクリックすると、保存したログから入力した文字が含まれるものだけリストアップするというシンプルな検索方法でした。文字列に*(アスタリスク)を含まればその部分をワイルドカード(どんな文字でもよい)で検索できます。フィルターの文字列を`(バッククオート)で囲めば正規表現も使えるように作りました。
気に入らない点
errorを含むログだけというような単純に文字列でフィルタするだけなら簡単ですが、送信元がrpiでFasilityがmailのログだけ表示したいような時はうまく正規表現を組み立てないと検索できません。
更に、検索する対象の文字列がデータベースに保存したログの内部形式(JSON形式)なので、そのことも考えて検索のフィルターを作るのは、かなり面倒でストレスがたまります。
例えば
*\"facility\":2*\"hostname\":\"rpi\"
のような書き方になります。
自分で作っておきながら使う時にストレスがたまるのはよろしくない。
ログ検索機能の改善案
で、どうするか?
例えば
facility=2 and hostname=rpi
と入力すれば、内部的に、先の検索文に変換して実行する案も考えましたが、覚えなければならない検索文の書き方が増えるだけなので、いまいちスッキリしません。
やっぱり、ダイアログで必要な項目を入力して検索するほうが、多くの人に分かりやすいような気がしてきて、
のように、<詳細>ボタンで、検索条件を入力するダイアログを表示するようにしました。このダイアログで、<検索>ボタンを押せば、例に書いた検索文を内部的に作って検索する方法にしました。
つづく