TWSNMP開発日誌:夏休みの宿題2つ解決(syslogとARP監視の問題)
今朝は3時台に一度起きましたが、二度寝して4時半から開発開始です。
昨日からTWSNMP FCの夏休みの宿題に取り組んでいます。2つあります。
1つ目は、モバイル版のsyslogサーバーテスト機能を作っている時に発見したRFC5424(IETF)形式のsyslogが受信できない問題の調査です。
最初は使っているGO言語のsyslogのパッケージを疑っていました。
です。RFC5424(IETF)形式のログの解析ができないのではないかと思ってソースコードをダウンロードして調べてみました。GO言語の古い書き方なので組み込まれているテストコードをうまく動かすことができませんでした。
そこで、パッケージのテストするプログラムを別に作ってみました。
package main
import (
"fmt"
"gopkg.in/mcuadros/go-syslog.v2/format"
)
func main() {
b := `<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] An application event log entry...`
// b := "<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - 'su root' failed for lonvick on /dev/pts/8"
// b := "<165>1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts."
// b := "<165>1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 012345678901234567890123456789012345678901234567 8710 - - %% It's time to make the do-nuts."
// with STRUCTURED-DATA
// b := `<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] An application event log entry...`
// STRUCTURED-DATA Only
// b := `<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"][examplePriority@32473 class="high"]`
// STRUCTURED-DATA Only
// b := `<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 `
// b := "<34>Oct 11 22:14:15 mymachine su: 'su root' failed for lonvick on /dev/pts/8"
buff := []byte(b)
// p := format.Automatic{}
p := format.RFC5424{}
logp := p.GetParser(buff)
if logp == nil {
panic("err")
}
err := logp.Parse()
if err != nil {
panic(err)
}
fmt.Println(logp.Dump())
}
思っていたのと違って、ちゃんとsyslogを解析できました。人の作ったものを疑ってすみません。テストプログラムの出力をよく見ると
TWSNMP FCで受信できるBSD形式のsyslogは、
map[content:'su root' failed for lonvick on /dev/pts/8 facility:4 hostname:mymachine priority:34 severity:2 tag:su timestamp:2022-10-11 22:14:15 +0000 UTC]
受信できないRFC5424(IETF)形式は、
map[app_name:evntslog facility:20 hostname:mymachine.example.com message:An application event log entry... msg_id:ID47 priority:165 proc_id:- severity:5 structured_data:[exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] t
です。tagがapp_nameにcontentがmessageになっています。
この影響で受信したsyslogはDBに記録できていても検索の時に、tagやcontentの項目がないために結果に含めない状態になっていました。
このためにログの検索で表示されなかったのです。受信はできていたのです。この問題を修正しました。
2つ目の宿題は、利用者から問い合わせにあったARP監視の結果で通知したいという課題です。ARPログをポーリングで監視する機能が使えない状態だったので修正しました。最初は選択子がないだけの問題かと思っていましたが、内部処理にもいくつか間違いがあって修正しました。
ポーリングの設定画面も縦長でノートPCとかだとはみ出しそうなので、
ついでに修正しました。
を
のような感じにしました。
赤い矢印のように設定すればARPログに新規のMACアドレスを発見した時に、軽度のイベントが発生します。これをトリガーにメール通知もできます。フィルターのNewという設定を空欄にすれば、変化した時も検知できます。Changeを設定すれば変化した時だけ通知できます。
もう少しテストして来週v1.12.2としてリリースしようと思います
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。