Raspberry Pi(というよりUnix系)ログを通していろいろな情報を知りたいのだが、まだUnixの扱いになれておらず、やれgrepでxxxからyyy抽出し、xxxdが表示されたらうんちゃらといったコンソール上でログの解析能力がストレスなくできるレベルじゃない。
だったら、WindowsのExcelにデータを吸い出してオートフィルタで確認すればいいじゃないかって思い、仕込みを考えて作成したときのメモ。
仕込み① /Var/logのログをCSV変換(【Raspberry Pi】【AWK】)
$ cat LogToCSV.sh
#ヘッダー行 ExcelやAcsessのヘッダ用
echo "ファイル名,時間,サーバー名,facility,オリジナルメッセージ" > result.csv
#auth.log ログイン解析
awk ‘{ print FILENAME","$1" "$2" "$3","$4","$5","$0 }’ /var/log/auth.log >> result.csv
#各種ログ
awk ‘{ print FILENAME","$1" "$2" "$3","$4","$5","$0 }’ /var/log/messages >> result.csv
$
ここではまず
Dec 7 19:17:23 raspberrypi kernel: [ 22.247673] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
といったフォーマットのログをインプットに
当該ファイル名,時間,サーバー名,facility,当該ファイルオリジナルメッセージ
がカンマ区切りで抽出されるAWKのスクリプトを作成。
対象は、とりあえず /var/log/messagesと/var/log/auth.log とした。
仕込み② CSV変換後のログファイルを取り込む(【VBA】)
Sub ログ取り込み()
Call データクリア ‘初期化
‘ファイル指定
Dim Filepath As String
Filepath = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
If Filepath = "False" Then
Exit Sub
End If
‘データの取り込み
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Filepath, Destination:=Range("$A$1"))
‘ .CommandType = 0 ‘マクロの記録に入ってくるが、不要(というか再実行でエラーになるのでコメントアウト)
.Name = "result_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001 ‘Piの文字コードであるUTF-8を指定、ヘッダ文字に日本語を使用しているため
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 5, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Range("E14").Select‘最後にオートフィルタを設定
Columns("A:E").Select
Range("E1").Activate
Selection.AutoFilterEnd Sub
Sub データクリア()
On Error Resume Next ‘成否にかかわらず実行Cells.Select
Selection.QueryTable.Delete
Selection.ClearContentsEnd Sub
ここでは、Excel/Accessにある外部データの取り込み機能を利用
ポイントは、Piの文字コード(UTF-8)を指定すること。
「RaspberryPiLogCheck.zip」をダウンロード
考察(Windows側)
今回はExcelへ取り込みオートフィルターでログを眺めるというストーリーだが、通常運用だとログファイルは大量(Excelでさばける行数を超える)だろうから、Accessで取り込んだほうがよいかも。
データとしては、Accessでも使えます。
考察(Raspberry Pi側)
rsyslog側の設定でCSV化する(できるのかな?)、便利なコマンドをインストール(あるのかな?)とか、もっと効率的な方法があるかもしれないが、まだまだUnix系は素人に毛が生えた程度なので不明。
AWKなんて久しぶりに触った。大学生以来かもしれない。
以上
コメント