はじめに
マイクロサービスや組み込みの不具合解析においてログを見ることが多いのですが、情報量が多いため時間がかかることがあります。そこで、シーケンス図を自動作成し俯瞰的に見ることで解析時間の削減を狙おうというツールになります。
ツールは以下になります。
https://github.com/yusan25c/log2mermaid/
仕組み
- キーワードをmatch.csvに登録する
- ログを1行ずつ読み出してmatch.csvに登録されているキーワードがあるかチェックする
- キーワードがあればmermaid形式でシーケンス図を出力する
- match.csvのsrcからdstに向かってメッセージを出す
- 元のログも残すためシーケンスからログを参照しやすい
mermaid形式シーケンス図
https://docs.mermaidchart.com/mermaid-oss/syntax/sequenceDiagram.html
実際に使ってみる
対象のログ(log.txt)を準備
Nov 2 12:34:56 : [12345678.012345] hogehoge function exec
Nov 2 12:34:56 : [12345678.012345] Component1 func:1245 hogehoge val 1
Nov 2 12:34:56 : [12345678.012345] hogehoge2 func exec
Nov 2 12:34:56 : [12345678.012345] Component2 func:1245 str=abc val 1
Nov 2 12:34:56 : [12345678.012345] Component2 func:1245 str=def val 2
Nov 2 12:34:56 : [12345678.012345] hogehoge function ret: 0
スクリプトを実行
python3 log2mermaid.py log.txt match.csv > diagram.mmd
cat diagram.mmd
sequenceDiagram
participant P1 as "API Server"
participant Client
P1 ->> Client: hogeFunc1
Note over P1,Client: Nov 2 12:34:56 : [12345678.012345] Component1 func:1245 hogehoge val 1
Client ->> P1: hogeFunc2
Note over Client,P1: Nov 2 12:34:56 : [12345678.012345] Component2 func:1245 str=abc val 1
diagram.mmdをmermaid live editor等で変換かける
ポイント
キーワードには正規表現を使うことができます。例えば以下のようなログの場合「func」と「abc」でマッチさせたいことがあります。
Nov 2 12:34:56 : [12345678.012345] Component2 func:1245 str=abc val 1
その場合は以下をキーワードとして使えばマッチします。
func.*abc
最後に
シンプルな作りにしているため本スクリプトを参考に別の用途でも使えるかもしれません。何かのお役に立てれば幸いです。また、不具合や機能の要望などあればコメントorGithubのIssueでいただければ対応するかもしれません。

