Raspberry Pi(というよりUnix系)のログを通していろいろな情報を知りたいのだが、まだUnixの扱いに慣れておらず、やれgrepでxxxからyyy抽出し、xxxdが表示されたらうんちゃらといったコンソール上でのログ解析をストレスなくできるレベルではない。
だったら、WindowsのExcelにデータを吸い出してオートフィルタで確認すればいいじゃないかと思い、仕込みを考えて作成したときのメモ。
1. この記事でできること
Raspberry Pi(Syslog)のログファイル(/var/log/auth.logや/var/log/messagesなど)を、AWKスクリプトを用いてCSV形式に変換し、Excelのマクロ(VBA)を使って自動で取り込んでオートフィルタで簡単に絞り込み・解析できるようにします。
2. 想定環境・前提条件
- Raspberry Pi側: /var/log/auth.log, /var/log/messages が閲覧できる権限(またはsudo等)
- Windows側: Microsoft Excel(VBAが有効な環境)
- 文字コード: UTF-8(Raspberry Piのログ出力に合わせて読み込みます)
3. 仕込み①:/var/log のログをCSV変換する(AWK)
まずはRaspberry Pi側でログを整形するためのシェルスクリプト(LogToCSV.sh)を作成します。
#!/bin/bash
# ヘッダー行 ExcelやAccessのヘッダ用
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,当該ファイルオリジナルメッセージ
対象は、とりあえず /var/log/messages と /var/log/auth.log としました。
4. 仕込み②:CSV変換後のログファイルをExcelに取り込む(VBA)
Windows側のExcelに以下のVBAコードを記述し、出力したCSVファイルを読み込んでオートフィルタを設定します。
Sub ログ取り込み()
' 画面描画と警告を停止して高速化
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' ファイル指定ダイアログを開く
Dim Filepath As Variant
Filepath = Application.GetOpenFilename("CSV Files (*.csv), *.csv", , "Syslog CSVファイルを選択してください")
If Filepath = False Then
Exit Sub
End If
' 既存データのクリア(1行目見出しを残して2行目以降を削除)
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Cells.Clear
' QueryTablesを使ってCSVをインポート
With ws.QueryTables.Add(Connection:="TEXT;" & Filepath, Destination:=ws.Range("$A$1"))
.TextFilePlatform = 65001 ' UTF-8
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.Refresh BackgroundQuery:=False
End With
' クエリ定義を解除して通常のセルデータにする
On Error Resume Next
ws.QueryTables(1).Delete
On Error GoTo 0
' 1行目にオートフィルタを設定
If ws.UsedRange.Rows.Count >= 1 Then
ws.Rows(1).AutoFilter
End If
' 列幅の自動調整
ws.Columns.AutoFit
' 設定を戻す
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox "ログの取り込みが完了しました。", vbInformation
End Sub
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月28日
- 変更途中で途切れていたExcel取り込み用のVBAコードブロックを修正し、完全な処理手順に置き換えました。
2026年9月26日
- 削除リンク切れとなっている古い外部ZIPファイルへのダウンロードリンクを削除しました。
- 追加AWKスクリプトとExcel VBAマクロのコードブロックを整形し、目的や前提条件、使い方を明確に追記しました。

