通信メッセージからCPU使用率レポートを自動生成する仕組みを作ってみた
【1. はじめに】
組み込みソフトウェアの開発において、通信メッセージ内に含んだデバッグを解析することがあると思います。例えばCPU使用率などのシステムの負荷傾向を把握することは重要です。
私のチームや関連するチームにて、このログを手動で解析する作業が煩雑であったり、ローカル環境でのPython実行環境構築がネックになっていたり、面倒だからそもそもやらなかったりと、運用面で課題がありました。
そこで、誰でも簡単に解析ができるよう、Jenkinsを活用してログをアップロードするだけで自動的にレポートが出力される仕組みを構築しました。本記事ではその構成と工夫ポイントについて紹介します。
【2. 解決アプローチの全体像】
- ログ解析ツール自体はPythonで作成。
- Jenkinsを用いて以下のフローを構築:
- ユーザーがログファイルをアップロード
- JenkinsがPythonスクリプトを実行して解析
- 結果をレポートとしてArtifactに出力
- Jenkinsを選定した理由は、GitLab CI/CDで同様の仕組みを試みた際、以下の課題があったため:
- リポジトリに解析対象のログファイルをコミットする必要がある
- 不要なログファイルが履歴や容量を圧迫する
- 無駄なコミットが発生してしまう
【3. Jenkins構築とプラグイン】
File Parameter Plugin
このプラグインを使用すると、ジョブの実行時にユーザーがファイルをアップロードできます。
これにより、リポジトリにログを登録する必要がなくなり、柔軟な運用が可能になります。
Discard Old Builds Plugin
Jenkins上で出力されたArtifact(解析レポート)が増えてストレージを圧迫しないように、一定数以上のビルドを自動で削除する設定を行いました。
【4. 実際のジョブ構成】
今回はFreestyle Projectを使用して構成しました。
- パラメータ設定で"File Parameter"を追加(名前:log_file など)
- ビルドステップに以下のようなシェルスクリプトを追加:
#!/bin/bash
python3 parse_cpu_log.py "$log_file"
- 解析結果(例:HTML, CSV, PNG)をJenkinsのワークスペース内に保存
- Post-build Actionで「ビルド成果物を保存」にチェックを入れて、成果物をダウンロード可能に
【5. 実行イメージと運用の流れ】
- Jenkinsジョブの「ビルド」ボタンを押下
- ログファイルをアップロード
- 数秒で自動解析&レポート出力
- 結果はブラウザからArtifactとしてダウンロード可能
解析にPythonの知識や環境構築は不要で、誰でもブラウザだけで操作できます。
【6. GitLab CI/CDではなくJenkinsを選んだ理由】
GitLab CI/CDでの自動化も試みましたが、以下の問題がありました:
- ログファイルをGitにコミットする必要がある
- ストレージ容量が増加し、不要な履歴が残る
- 開発フローと混在してしまい、管理が煩雑になる
Jenkinsであれば「一時的なファイルを解析して破棄する」というユースケースに非常に向いていると感じました。
【7. 今後の展望】
- アップロードされた複数ファイルのバッチ解析対応
- JenkinsのUIをさらにわかりやすくカスタマイズ
- クラウド化(例:Jenkinsを外部サーバに配置)やWebhook連携
- GitLabとのハイブリッド運用も検討余地あり
【8. まとめ】
- PythonツールをJenkinsと連携することで非エンジニアでも簡単に解析が可能に
- File Parameter Pluginによりユーザーの入力を柔軟に
- JenkinsのArtifact保存&削除設定によりストレージ管理も自動化
- Gitと分離することで開発フローを汚さずに解析処理を提供可能
シンプルな仕組みですが、ちょっとした工夫で「誰でも使えるログ解析環境」を実現できました。