/var/log/wtmp を Log Analytics ワークスペースにそのまま取り込もうとすると、文字化けが発生します。
ネット上に情報が無く、サポートに問い合わせて解決に至りましたので、小ネタですが誰かの助けになればと思い記事にします。
やりたいこと
Azure Log Analytics ワークスペースからクエリ投げて、/var/log/wtmpのログを表示したいです。
しかしwtmpファイルの性質上、うまくいきませんでした。
wtmpとは
概要
/var/log/wtmpはLinux OSにおいてログインのイベントを記録するファイルです。
システムの利用状況を把握し、セキュリティ監査やトラブルシューティングを行うために利用されます。
本記事において重要なのが、テキストファイルではなく、バイナリファイルとして記録されていることです。
バイナリファイル
バイナリファイル内のデータは0と1のビット列で構成されており、人間では解釈できない構造になってます。
つまりcatコマンドを入力しても中身見れないのです。(Linux OSのVMにログインして入力することを想定)
専用のlastコマンドが必要で、
これだと人間が読める形式で表示してくれます。
Log Analytics 使ってみる
データ収集ルール
VMにログインせずともAzureポータルからログを確認するために、Log Analyticsを使用します。
データソースの追加
データソースの種類:カスタムテキストログ
ファイルパターン:/var/log/wtmp
テーブル名:wtmp_CL
レコード区切り記号:End-of-Line
変換:source
問題点
設定完了しましたら、Log Analytics ワークスペースで実施します。
結果のRawData列に注目してほしいのですが、文字化けしてます。
“}pts/0ߢOh��1pts/0ts/0vmlinux-tomioka0110.15.172.5��Oh�”
Log Analyticsのデータ収集ルールの機能には様々なデータソースの種類がありますが、使用している「カスタムテキストログ」ではその名の通りテキストファイルのみを対象とします。
「それなら、別のデータソースの種類にすれば良いのでは?」と思われるかもしれません。
しかし、残念ながら別のデータソースの種類ではファイルパターン(’/var/log/wtmp’)の指定できません。
つまり
- カスタムテキストログを使用 → 文字化けが発生
- 別のデータソースの種類を使用 → /var/log/wtmp を読み取ること自体ができない
という八方塞がりの状態になってしまうのです。
解決策
単純ですが、lastコマンドの結果を新しいテキストファイルに出力して、そのテキストファイルを読み取ることで解決します
手順
1.Linux OSのVMにログインして以下のコマンド入力します。
2.Azureポータルのデータ収集ルールに移動し、ファイルパターンを/var/log/wtmp.logに変更
3.Log Analytics ワークスペースで テーブル名のクエリを入力して実行
RawData列に人間が読める形式で出力されました。
“vmlinux- pts/0 10.15.172.5 Mon Jun 16 07:46 – 08:31 (00:44)”
さいごに
本当は余計なテキストファイルを追加せずに、読み取る方法があれば良いなと思っています。
Log Analytics ワークスペースが /var/log/wtmpのようなバイナリ形式のログファイルを直接サポートし、ログを収集・分析できるようになる未来を期待しています。