見出し画像

ログ分析のためにTF-IDFパッケージを使う練習 その2

今朝は5時半から開発開始です。
昨日から始めたTF-IDFパッケージを使う練習の続きです。
ログの数が多い時に計算した結果がおかしくなる問題は、TF-IDFパッケージの処理にバグがありました。ログの数の問題ではなくログに同じ行があると読み込みを終了してまう問題でした。たまたま、テストしたログが

Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161

のような感じで最初の3行がまったく同じでした。
パッケージのソースを見ると

のように間違っていました。同じ行を見つけた瞬間に読み込みを終了しています。スキップして継続するようにしました。

この問題を修正すると、大量のログの中から稀なログを見つけることができるようになりました
かなり楽しくなってなってきて、パッケージのコマンドを追加することにしました。

例えば、

Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
Jun  3 07:13:57 minipc gravwell_simple_relay[550]: <14>1 2023-06-03T07:13:57.057382+09:00 minipc simplerelay - ingest/muxer.go:1394 [gw@1 indexer="pipe:///opt/gravwell/comms/pipe" ingester="simplerelay" ingesteruuid="cd6c92b5-8fdb-4b84-a87f-1cab42c0033e"] initializing connection
Jun  3 07:13:57 minipc gravwell_simple_relay[550]: <12>1 2023-06-03T07:13:57.05767+09:00 minipc simplerelay - ingest/muxer.go:1402 [gw@1 indexer="pipe:///opt/gravwell/comms/pipe" ingester="simplerelay" ingesteruuid="cd6c92b5-8fdb-4b84-a87f-1cab42c0033e" error="dial unix /opt/gravwell/comms/pipe: connect: no such file or directory"] connection error
Jun  3 07:14:01 minipc CRON[10234]: (root) CMD (/usr/sbin/mon.sh)
Jun  3 07:14:01 minipc memmon: Mem:        7987020      743760      171064      465844     7072196     6467548
Jun  3 07:14:01 minipc loadmon:  07:14:01 up 209 days, 23:56,  1 user,  load average: 0.99, 0.91, 0.92
Jun  3 07:14:07 minipc gravwell_simple_relay[550]: <14>1 2023-06-03T07:14:07.061471+09:00 minipc simplerelay - ingest/muxer.go:1394 [gw@1 indexer="pipe:///opt/gravwell/comms/pipe" ingester="simplerelay" ingesteruuid="cd6c92b5-8fdb-4b84-a87f-1cab42c0033e"] initializing connection
Jun  3 07:14:07 minipc gravwell_simple_relay[550]: <12>1 2023-06-03T07:14:07.061758+09:00 minipc simplerelay - ingest/muxer.go:1402 [gw@1 indexer="pipe:///opt/gravwell/comms/pipe" ingester="simplerelay" ingesteruuid="cd6c92b5-8fdb-4b84-a87f-1cab42c0033e" error="dial unix /opt/gravwell/comms/pipe: connect: no such file or directory"] connection error
Jun  3 07:14:17 minipc gravwell_simple_relay[550]: <14>1 2023-06-03T07:14:17.065364+09:00 minipc simplerelay - ingest/muxer.go:1394 [gw@1 indexer="pipe:///opt/gravwell/comms/pipe" ingester="simplerelay" ingesteruuid="cd6c92b5-8fdb-4b84-a87f-1cab42c0033e"] initializing connection
Jun  3 07:14:17 minipc gravwell_simple_relay[550]: <12>1 2023-06-03T07:14:17.065608+09:00 minipc simplerelay - ingest/muxer.go:1402 [gw@1 indexer="pipe:///opt/gravwell/comms/pipe" ingester="simplerelay" ingesteruuid="cd6c92b5-8fdb-4b84-a87f-1cab42c0033e" error="dial unix /opt/gravwell/comms/pipe: connect: no such file or directory"] connection error
Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:65404->[192.168.1.210]:161
Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:64336->[192.168.1.210]:161
Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:57419->[192.168.1.210]:161
Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:65404->[192.168.1.210]:161
Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:65404->[192.168.1.210]:161
Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:57419->[192.168.1.210]:161
Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:65404->[192.168.1.210]:161
Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161

のようなログを対象に実行すると

Score	Log
1.767	Jun  3 07:14:01 minipc loadmon:  07:14:01 up 209 days, 23:56,  1 user,  load average: 0.99, 0.91, 0.92
1.730	Jun  3 07:14:01 minipc memmon: Mem:        7987020      743760      171064      465844     7072196     6467548
1.622	Jun  3 07:14:01 minipc CRON[10234]: (root) CMD (/usr/sbin/mon.sh)
1.110	Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
1.110	Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
1.110	Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
1.110	Jun  3 07:13:48 minipc snmpd[23595]: Connection from UDP: [192.168.1.4]:57885->[192.168.1.210]:161
1.041	Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:65404->[192.168.1.210]:161
1.041	Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:65404->[192.168.1.210]:161
1.041	Jun  3 07:14:22 minipc snmpd[23595]: Connection from UDP: [192.168.1.250]:64336->[192.168.1.210]:161

のように稀なログ(同じようなログがないもの)の順番に出力します。
何日か前に、本業で悪銭苦闘した150MBちかいログで試してみました。
かなりいい感でエラーログが上位の表示されました。いつもと違うログを見つけてくれたのです。
欲がでてきてコマンド版には、

  • 正規表現でフィルターする機能

  • ログ専用の単語分割する機能

  • ログ専用の単語分割ではタイムスタンプを削除する機能

をつけています。
もう少しテストしてコマンド版を公開します。ご期待ください。
その後GUI版のログ分析ツールに組み込むつもりです。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。