Logparser は、構造化ログ分析の重要なステップである自動ログ解析のための機械学習ツールキットとベンチマークを提供します。logparser を適用することで、ユーザーは非構造化ログからイベントテンプレートを自動的に抽出し、生のログメッセージを構造化された一連のイベントに変換できます。ログ解析のプロセスは、文献ではメッセージテンプレート抽出、ログキー抽出、ログメッセージクラスタリングとしても知られています。

ログ解析の例
pip install logparser3 でインストールしてください。💡 logparser にパーサーコードを追加する PR を送信し、論文を表に追加してください。
pip install を使用して logparser パッケージと依存パッケージをインストールすることをお勧めします。``` pip install logparser3
特に、このパッケージは以下の要件に依存しています。Pythonでのregexマッチングは不安定なため、regexライブラリをバージョン2022.3.2に固定することをお勧めします。
Note: ``"Error: need to escape..."`` というエラーが発生した場合は、[こちら](https://github.com/logpai/logparser/issues/122)の指示に従ってください。
+ python 3.6+
+ regex 2022.3.2
+ numpy
+ pandas
+ scipy
+ scikit-learn
条件付き要件:
+ MoLFI を使用する場合: `deap`
+ SHISO を使用する場合: `nltk`
+ SLCT を使用する場合: `gcc`
+ LogCluster を使用する場合: `perl`
+ NuLog を使用する場合: `torch`, `torchvision`, `keras_preprocessing`
+ DivLog を使用する場合: `openai`, `tiktoken` (python 3.8+ が必要)
### はじめに
1. デモを実行する:
各ログパーサーについて、使い始めるのに役立つデモを用意しています。各デモは、対象のログパーサーの基本的な使い方と設定すべきハイパーパラメータを示しています。例えば、次のコマンドはDrainのデモを実行する方法を示しています。
```
cd logparser/Drain
python demo.py
```
2. ベンチマークを実行する:
各ログパーサーについて、解析精度を評価するために [loghub_2k データセット](https://github.com/logpai/logparser/tree/main/data#loghub_2k) でログ解析を実行するベンチマークスクリプトを提供しています。[ログ解析用のその他のベンチマークデータセット](https://github.com/logpai/logparser/tree/main/data#datasets) も使用できます。
```
cd logparser/Drain
python benchmark.py
```
ベンチマーク結果は各パーサーのREADMEファイルにあります。例: https://github.com/logpai/logparser/tree/main/logparser/Drain#benchmark.
3. 独自のログを解析する:
logparserを独自のログデータの解析に適用するのは簡単です。そのためには、まずlogparser3パッケージをインストールする必要があります。その後、以下のコードスニペットに従って独自のスクリプトを作成し、ログ解析を開始できます。完全なサンプルコードは [example/parse_your_own_logs.py](https://github.com/logpai/logparser/blob/main/example/parse_your_own_logs.py) にあります。
```python
from logparser.Drain import LogParser
input_dir = 'PATH_TO_LOGS/' # The input directory of log file
output_dir = 'result/' # The output directory of parsing results
log_file = 'unknow.log' # The input log file name
log_format = '<Date> <Time> <Level>:<Content>' # Define log format to split message fields
# Regular expression list for optional preprocessing (default: [])
regex = [
r'(/|)([0-9]+\.){3}[0-9]+(:[0-9]+|)(:|)' # IP
]
st = 0.5 # Similarity threshold
depth = 4 # Depth of all leaf nodes
parser = LogParser(log_format, indir=input_dir, outdir=output_dir, depth=depth, st=st, rex=regex)
parser.parse(log_file)
```
logparserを実行すると、出力フォルダに抽出されたイベントテンプレートと解析済みの構造化ログが得られます。
+ `*_templates.csv` (例: [HDFS_2k.log_templates.csv](https://github.com/logpai/logparser/blob/main/logparser/Drain/demo_result/HDFS_2k.log_templates.csv) を参照)
| EventId | EventTemplate | Occurrences |
|----------|------------------------------------------------|-------------|
| dc2c74b7 | PacketResponder <*> for block <*> terminating | 311 |
| e3df2680 | Received block <*> of size <*> from <*> | 292 |
| 09a53393 | Receiving block <*> src: <*> dest: <*> | 292 |
+ `*_structured.csv` (例: [HDFS_2k.log_structured.csv](https://github.com/logpai/logparser/blob/main/logparser/Drain/demo_result/HDFS_2k.log_structured.csv) を参照)
| ... | Level | Content | EventId | EventTemplate | ParameterList |
|-----|-------|-----------------------------------------------------------------------------------------------|----------|---------------------------------------------------------------------|--------------------------------------------|
| ... | INFO | PacketResponder 1 for block blk_38865049064139660 terminating | dc2c74b7 | PacketResponder <*> for block <*> terminating | ['1', 'blk_38865049064139660'] |
| ... | INFO | Received block blk_3587508140051953248 of size 67108864 from /10.251.42.84 | e3df2680 | Received block <*> of size <*> from <*> | ['blk_3587508140051953248', '67108864', '/10.251.42.84'] |
| ... | INFO | Verification succeeded for blk_-4980916519894289629 | 32777b38 | Verification succeeded for <*> | ['blk_-4980916519894289629'] |
### 本番環境での使用
logparserの主な目的は、研究およびベンチマーク用途です。研究者はlogparserをコードベースとして新しいログパーサーを開発できます。一方、実務者は当社のベンチマークを通じて現在のログ解析手法の性能とスケーラビリティを評価できます。実務者には、本番環境でlogparserを試すことを強くお勧めします。ただし、現在のlogparserの実装は本番環境での使用にはほど遠いことに注意してください。現時点でその予定はありませんが、インテリジェントな本番レベルのログパーサーを構築したい開発者向けにいくつかの提案があります。
+ logparserで使用されている[サードパーティライブラリのライセンス](https://github.com/logpai/logparser/blob/main/LICENSE.md)に注意してください。1つのパーサーだけを残して他を削除し、パッケージのwheelを再ビルドすることをお勧めします。これによってlogparserの使用が壊れることはありません。
+ マルチプロセッシングによる効率性とスケーラビリティの向上、障害回復の追加、ディスクまたはメッセージキューKafkaへの永続化の追加により、logparserを強化してください。
+ [Drain3](https://github.com/logpai/Drain3) は、本番シナリオ向けの[実用的な拡張機能](https://github.com/logpai/Drain3#new-features)を備えて構築された、参考にできる良い例です。
### 🔥 引用
出版物でlogparserツールまたはベンチマーク結果を使用する場合は、以下の論文を引用してください。
+ [**ICSE'19**] Jieming Zhu, Shilin He, Jinyang Liu, Pinjia He, Qi Xie, Zibin Zheng, Michael R. Lyu. [Tools and Benchmarks for Automated Log Parsing](https://arxiv.org/pdf/1811.03509.pdf). *International Conference on Software Engineering (ICSE)*, 2019.
+ [**DSN'16**] Pinjia He, Jieming Zhu, Shilin He, Jian Li, Michael R. Lyu. [An Evaluation Study on Log Parsing and Its Use in Log Mining](https://jiemingzhu.github.io/pub/pjhe_dsn2016.pdf). *IEEE/IFIP International Conference on Dependable Systems and Networks (DSN)*, 2016.
### 🤗 コントリビューター
<!-- readme: zhujiem,contributors -start -->
<table>
<tbody>
<tr>
<td align="center">
<a href="https://github.com/zhujiem">
<img src="https://assets.kitploit.com/production/public/readmes/51023/471767126e4450e42b40b8e3f5437c2d9d0616f468675dde6feccac1976b18d0/ee334336551226b1483445bee71089fdf5e61115652a2a99375e54566f34c9bf-display-v1.webp" width="80;" alt="zhujiem"/>
<br />
<sub><b>Zhujiem</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/PinjiaHe">
<img src="https://assets.kitploit.com/production/public/readmes/51023/e9f83f96ab3d84e92152317c8d85d54a12fb0b0baea267d29e7d317a5caff94b/5b4a6af1bda6245edbb5c40ea1467625828536aeb88e984716753945b6235da2-display-v1.webp" width="80;" alt="PinjiaHe"/>
<br />
<sub><b>Pinjia He</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/JinYang88">
<img src="https://assets.kitploit.com/production/public/readmes/51023/7785c7974d5753fa21792097907be1e20efb5fc5bbf3aba61b0b4d2f4fe26fec/19a47a39c4db07a8a052ed05304e166cca4cf18683d89a1400688c576ae48b52-display-v1.webp" width="80;" alt="JinYang88"/>
<br />
<sub><b>LIU, Jinyang</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/Siyuexi">
<img src="https://assets.kitploit.com/production/public/readmes/51023/fe7de7203a407b36e2f44a57603594e01266d124ef558b53cb95ba28afc6127c/f7a7173a142ced37b910b650e3ad957b27fcf2f13f4c828ff6a72fb87111435f-display-v1.webp" width="80;" alt="Siyuexi"/>
<br />
<sub><b>Junjielong Xu</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/ShilinHe">
<img src="https://assets.kitploit.com/production/public/readmes/51023/c8b37cadfeb622c955b807776ab0fa19f058c8ad512ebb22eb98c79ad5e90c17/fc476296c1b1aa6b1dd7c3220a81a1b70838d5c113a65e6b2f98196d0615b8a3-display-v1.webp" width="80;" alt="ShilinHe"/>
<br />
<sub><b>Shilin HE</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/JosephMeghanathD">
<img src="https://assets.kitploit.com/production/public/readmes/51023/c2036c74a3116c7de955cae32687ffae61d8be46868cbcc61f771a7e9be4fa33/011ea30ec30f0db362d75632b310850b2783bd2c2428dfee7dc0fff182dc1bf8-display-v1.webp" width="80;" alt="JosephMeghanathD"/>
<br />
<sub><b>Joseph</b></sub>
</a>
</td>
</tr>
<tr>
<td align="center">
<a href="https://github.com/jcordon5">
<img src="https://assets.kitploit.com/production/public/readmes/51023/a4f67dd9f820a1dc763ae05e6d66ec6418d7e70abad8a9b5906413ab909f709e/4c8dc9fc08525d6d3c2334983160c0c9a48077fcc22b3498fe658aa133a2da02-display-v1.webp" width="80;" alt="jcordon5"/>
<br />
<sub><b>José A. Cordón </b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/rustamtemirov">
<img src="https://assets.kitploit.com/production/public/readmes/51023/3690f9e2cd318e8555a586fb32e221080e59e5de8917d82584da1f69e00be8cc/95300504879ab023f96e1cd73ca726c6720367b23e0d476e9a0b6cc23b89ff4d-display-v1.webp" width="80;" alt="rustamtemirov"/>
<br />
<sub><b>Rustam Temirov</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/gaiusyu">
<img src="https://assets.kitploit.com/production/public/readmes/51023/68c5eeea49f8a2ee2cd39b633ed1fb9765cde38399b12636dea0a3dd0920c86d/8faa00619c5b17d96e80dff1b124695997ece681c0931519346fa0e62407c578-display-v1.webp" width="80;" alt="gaiusyu"/>
<br />
<sub><b>Siyu Yu (Youth Yu)</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/thomasryck">
<img src="https://assets.kitploit.com/production/public/readmes/51023/ad3710fbbe7106ffe560fe918f87e77a95a6bf7a21dbf65827f93138c96aca5a/ed736bf9ffd9aa54686cc7a3d404f7c0072ecaced2403ff467d112482255c2b3-display-v1.webp" width="80;" alt="thomasryck"/>
<br />
<sub><b>Thomas Ryckeboer</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/IsuruBoyagane15">
<img src="https://assets.kitploit.com/production/public/readmes/51023/dca9ea34301dd9441404246eb535a39d034518fd1311bebd68f1725bc38ba6b3/57b77cdaafca63553a32d53d83f1859d971c1628ef640c36ab1125939bb43a00-display-v1.webp" width="80;" alt="IsuruBoyagane15"/>
<br />
<sub><b>Isuru Boyagane</b></sub>
</a>
</td>
</tr>
<tbody>
</table>
<!-- readme: zhujiem,contributors -end -->
### ディスカッション
質問や議論のために、ぜひWeChatグループに参加してください。または、[こちらからissueを開く](https://github.com/logpai/logparser/issues/new)こともできます。

| 発表 | Parser | 論文タイトル | Benchmark |
|---|
| IPOM'03 | SLCT | イベントログからパターンをマイニングするためのデータクラスタリングアルゴリズム、Risto Vaarandi 著。 | ↗️ |
| QSIC'08 | AEL | エンタープライズアプリケーションの実行ログを実行イベントへ抽象化する、Zhen Ming Jiang、Ahmed E. Hassan、Parminder Flora、Gilbert Hamann 著。 | ↗️ |
| KDD'09 | IPLoM | 反復分割を用いたイベントログのクラスタリング、Adetokunbo Makanju、A. Nur Zincir-Heywood、Evangelos E. Milios 著。 | ↗️ |
| ICDM'09 | LKE | 非構造化ログ分析による分散システムの実行異常検出、Qiang Fu、Jian-Guang Lou、Yi Wang、Jiang Li 著。 [Microsoft] | ↗️ |
| MSR'10 | LFA | ソフトウェアシステムログのマイニングのためにログ行をログイベントタイプへ抽象化する、Meiyappan Nagappan、Mladen A. Vouk 著。 | ↗️ |
| CIKM'11 | LogSig | LogSig: 生のテキストログからシステムイベントを生成する、Liang Tang、Tao Li、Chang-Shing Perng 著。 | ↗️ |
| SCC'13 | SHISO | システムログ形式のインクリメンタルマイニング、Masayoshi Mizutani 著。 | ↗️ |
| CNSM'15 | LogCluster | LogCluster - イベントログのためのデータクラスタリングおよびパターンマイニングアルゴリズム、Risto Vaarandi、Mauno Pihelgas 著。 | ↗️ |
| CNSM'15 | LenMa | 長さが重要: 単語の長さを用いたシステムログメッセージのクラスタリング、Keiichi Shima 著。 | ↗️ |
| CIKM'16 | LogMine | LogMine: ログ分析のための高速パターン認識、Hossein Hamooni、Biplob Debnath、Jianwu Xu、Hui Zhang、Geoff Jiang、Adbullah Mueen 著。 [NEC] | ↗️ |
| ICDM'16 | Spell | Spell: システムイベントログのストリーミング解析、Min Du、Feifei Li 著。 | ↗️ |
| ICWS'17 | Drain | Drain: 固定深度ツリーを用いたオンラインログ解析アプローチ、Pinjia He、Jieming Zhu、Zibin Zheng、Michael R. Lyu 著。 | ↗️ |
| ICPC'18 | MoLFI | ログメッセージ形式を正確に識別するための探索ベースのアプローチ、Salma Messaoudi、Annibale Panichella、Domenico Bianculli、Lionel Briand、Raimondas Sasnauskas 著。 | ↗️ |
| TSE'20 | Logram | Logram: n-gram 辞書を用いた効率的なログ解析、Hetong Dai、Heng Li、Che-Shao Chen、Weiyi Shang、Tse-Hsun (Peter) Chen 著。 | ↗️ |
| ECML-PKDD'20 | NuLog | 自己教師ありログ解析、Sasho Nedelkoski、Jasmin Bogatinovski、Alexander Acker、Jorge Cardoso、Odej Kao 著。 | ↗️ |
| ICSME'22 | ULP | 大規模ログファイルの解析のための効果的なアプローチ、Issam Sedki、Abdelwahab Hamou-Lhadj、Otmane Ait-Mohamed、Mohammed A. Shehab 著。 | ↗️ |
| TSC'23 | Brain | Brain: 双方向並列ツリーによるログ解析、Siyu Yu、Pinjia He、Ningjiang Chen、Yifan Wu 著。 | ↗️ |
| ICSE'24 | DivLog | DivLog: プロンプト拡張インコンテキスト学習によるログ解析、Junjielong Xu、Ruichun Yang、Yintong Huo、Chengyu Zhang、Pinjia He 著。 | ↗️ |