見出し画像

タイムスタンプの形式が沢山ありすぎて困った

今朝は5時から開発開始です。ちなみに、昨日は3時から開発してました。
起きるのが5時ぐらいじゃないと夜、頭がいたくなりました。

本業でログ分析ツールを使っていいて気になったことをの改善をしています。
調査のために提供されたログがExcelでした。CSVに出力すればログ分析ツール(TWLogAIAN)で読み込めましたが、タイムスタンプが変わっていて日時がおかしなことなってしまいました。

2022/12/26 0:00:02,.....	_Msg:Dec 26 00:00:01 ......
2023/1/1 7:01:34,........_Msg:Jan  1 07:01:34 .......

のような形式です。….の部分は省略してあります。 先頭にログサーバーが認識したタイムスタンプ、_Msg: の後に生のsyslogのタイムスタンプがあります。
最初の
2023/1/1 7:01:34
を認識すれば、年が取得できます。
2つめの
Jan 1 07:01:34
は、syslogの標準フォーマットですが、年がありません。
このまま、ログ分析ツールで読み込むと2つめのタイムスタンプを使ってしまいました。仕組みとしては、ログの行の中にタイムスタンプぽい形式の
文字列を探して最初に一致したものを採用するというものです。

2023/1/1 7:01:34
を見つけてもよさそうですが、だめでした。
よくみると1桁の数値の前に0がない形式になっています。
ログ分析ツールに組み込まれている形式で一番近いのは
2006/01/02 15:04:05

ですが、月、日、時が1桁の時に、前に0を付ける形式
になっています。
といわけで、特別に、
2023/1/1 7:01:34
の形式を組み込みました。

// 2022/12/26 5:48:00
if p, err := timegrinder.NewUserProcessor("custom02", `\d\d\d\d/\d+/\d+\s+\d+:\d\d:\d\d`, "2006/1/2 3:04:05"); err == nil && p != nil {
   if _, err := b.processConf.TimeGrinder.AddProcessor(p); err != nil {
	OutLog("AddProcessor err=%v", err)
   }
}

この修正だけでは解決できませんでした。どうやら、判断する順番が
後になって、Jan 1 07:01:34が優先されました。
そこで、優先順位を変える仕組みが必要になりました。

のような設定を追加して

のリストから優先するタイムスタンプを選べるようにしました。たくさんありすぎです。UKという形式は、日が最初で、少数点がカンマです。
カスタムを選べば判断する正規表現とタイムスタンプのフォーマットを設定できるようにしました。

もう一つ気になったのが読み込んだログのヒートマップ

で、ログのいっぱいあるところの時刻を、すばらく検索したいというものです。とりあえず、ダブルクリックすると、日時をクリップボードにコピー
するようにしました。
コピーできた時の反応がないので、ちょっと考え中です。

明日に続く

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