
Инструментарий машинного обучения для парсинга логов [ICSE'19, DSN'16]
Logparser предоставляет набор инструментов машинного обучения и бенчмарки для автоматического разбора логов, что является важнейшим шагом для структурированного анализа логов. С помощью logparser пользователи могут автоматически извлекать шаблоны событий из неструктурированных логов и преобразовывать исходные лог-сообщения в последовательность структурированных событий. Процесс разбора логов также известен в литературе как извлечение шаблонов сообщений, извлечение ключей логов или кластеризация лог-сообщений.

Пример разбора логов
pip install logparser3.💡 Приглашаем отправлять PR, чтобы добавить ваш парсер в logparser и включить вашу статью в таблицу.
Рекомендуем устанавливать пакет logparser и зависимости с помощью pip install.``` pip install logparser3
В частности, пакет зависит от следующих требований. Обратите внимание, что сопоставление с регулярными выражениями в Python нестабильно, поэтому мы рекомендуем зафиксировать версию библиотеки regex на 2022.3.2.
Примечание: Если вы столкнулись с ``"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 далека от готовности к промышленному использованию. Хотя сейчас у нас нет планов по этому поводу, у нас есть несколько предложений для разработчиков, которые хотят создать интеллектуальный парсер логов производственного уровня.
+ Обратите внимание на [лицензии сторонних библиотек](https://github.com/logpai/logparser/blob/main/LICENSE.md), используемых в logparser. Мы предлагаем оставить один парсер, удалить остальные и затем пересобрать wheel-пакет. Это не нарушит работу logparser.
+ Улучшите logparser с точки зрения эффективности и масштабируемости с помощью многопроцессорности, добавьте восстановление после сбоев, добавьте сохранение на диск или в очередь сообщений Kafka.
+ [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).

| Публикация | Парсер | Название статьи | Бенчмарк |
|---|