
مجموعة أدوات للتعلم الآلي لتحليل السجلات [ICSE'19, DSN'16]
يوفر Logparser مجموعة أدوات للتعلّم الآلي ومعايير تقييم للتحليل الآلي للسجلات، وهو خطوة حاسمة لتحليلات السجلات المهيكلة. من خلال تطبيق Logparser، يمكن للمستخدمين استخراج قوالب الأحداث تلقائيًا من السجلات غير المهيكلة وتحويل رسائل السجلات الخام إلى سلسلة من الأحداث المهيكلة. تُعرف عملية تحليل السجلات أيضًا في الأدبيات باسم استخراج قالب الرسالة، أو استخراج مفتاح السجل، أو تجميع رسائل السجلات.

مثال على تحليل السجلات
pip install logparser3.💡 نرحب بتقديم طلب سحب (PR) لإضافة كود المحلل الخاص بك إلى logparser وإضافة ورقتك إلى الجدول.
نوصي بتثبيت حزمة logparser والمتطلبات عبر pip install.``` pip install logparser3
بشكل خاص، تعتمد الحزمة على المتطلبات التالية. لاحظ أن مطابقة regex في بايثون هشّة، لذا نوصي بتثبيت مكتبة 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 بالكفاءة وقابلية التوسع من خلال المعالجة المتعددة (multi-processing)، وإضافة استعادة الفشل، وإضافة الثبات على القرص أو قائمة انتظار الرسائل 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 الخاصة بنا لأي سؤال أو مناقشة. بدلاً من ذلك، يمكنك [فتح مشكلة هنا](https://github.com/logpai/logparser/issues/new).

| المنشور | المحلل | عنوان الورقة | المعيار |
|---|
| 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. | ↗️ |