【Raspberry Pi】【AWK】【VBA】Raspberry PiのSyslogを,Excelで解析する仕込みとツール

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 とした。

「LogToCSV.zip」をダウンロード

 

仕込み② 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.AutoFilter

End Sub
Sub データクリア()
    On Error Resume Next ‘成否にかかわらず実行

    Cells.Select
    Selection.QueryTable.Delete
    Selection.ClearContents

End Sub

ここでは、Excel/Accessにある外部データの取り込み機能を利用

ポイントは、Piの文字コード(UTF-8)を指定すること。

「RaspberryPiLogCheck.zip」をダウンロード

考察(Windows側)

今回はExcelへ取り込みオートフィルターでログを眺めるというストーリーだが、通常運用だとログファイルは大量(Excelでさばける行数を超える)だろうから、Accessで取り込んだほうがよいかも。

データとしては、Accessでも使えます。

考察(Raspberry Pi側)

rsyslog側の設定でCSV化する(できるのかな?)、便利なコマンドをインストール(あるのかな?)とか、もっと効率的な方法があるかもしれないが、まだまだUnix系は素人に毛が生えた程度なので不明。

AWKなんて久しぶりに触った。大学生以来かもしれない。

以上

コメント

タイトルとURLをコピーしました