使用机器学习查找哪种类型的日志?

数据挖掘 机器学习 k-nn
2022-02-24 07:41:18

我是机器学习的初学者。 过程是:
我有不同的日志文件(系统日志、MSSQL Server 日志、Linux 日志、MySQL 日志、FTP 日志、IIS 日志)。如果给出任何输入,我将使用机器学习技术找出哪种类型的日志。每个日志都有不同的格式。有些日志没有结构格式(Linux、MySQL 日志、FTP 日志)。在我的分析中,这些都是使用 KNN 算法(机器学习)实现的。但我不知道如何实现这个?请对此提出任何建议。

日志类型格式:

Linux系统日志:

Jan  5 08:39:01 iei-Virtual-Machine CRON[48622]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime))

MySQL错误日志:

2018-01-05 10:55:20 18856 [Warning] Unsafe statement is written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ between master and the slave. Statement: CALL SubmitGetChangeDetectionInfo(@_SubmitGetChangeDetectionInfo_0

事件簿:

IE038,System log,Error,20/11/2017 12:47:51 PM,TerminalServices-Printers,1111,None,Driver HP Deskjet 3520 series required for printer IEC057(Mahendran) Printer is unknown. Contact the administrator to install the driver before you log in again.

FTP日志:

2018-01-04 00:00:01 162.254.209.219 INFOEVOL\EC 192.168.0.13 63346 
DataChannelOpened - - 0 0 c1df3130-60e6-4678-9dcd-39177cc60d06 -IISAppslog:
2017-11-06 03:25:16 192.168.0.13 GET /IEIAppsLogin.aspx 
param=OwjgKJLT+ikfpFnxYbvZS/QWXTFP4GEXmT+qM7TeXTMqi5D7DKexzYjZc3aJNB0x 90 - 
182.73.50.19 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+
(KHTML,+like+Gecko)+Chrome/61.0.3163.100+Safari/537.36 
http://182.73.50.19/AppsLogin.aspx 302 0 0 234

MSSQL 服务器:

01/10/2018 07:07:07,Logon,Unknown,Login failed for user 'ms SQL'. Reason: Could not find a login matching the name provided. [CLIENT: 49.65.2.226]
2个回答

您首先需要对文本进行预处理,以将其转换为机器学习算法可以使用的特征。然后,您可以使用已知示例尝试此算法(在本例中为分类器)。然后,您可以使用该经过训练的模型来识别它以前从未见过的日志。

如果您没有想要使用的语言偏好,那么带有 scikit-learn 库的 python 将是一个好的开始。

对于您的问题,请完成本教程,这与您要实现的目标非常相似:http: //scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html

正如Elias Strehle在评论中提到的,这听起来不像是机器学习的问题。

通过识别一些指示您正在查看的日志类型的简单模式,您将能够更快地解决这个问题。

我已经可以看到这些行以日期字符串开头,后跟一些在每个日志中看起来不同的标记。您可以定义仅匹配特定类型日志的正则表达式模式,例如:

^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2}将匹配您的 Linux 系统日志

^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\s+\d+\s将匹配您的 MySQL 错误日志

^[A-Z]+\d+,将匹配您的事件日志

^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}将匹配您的 FTP 日志

并将^\d{2}/\d{2}/\d{4}匹配您的 MSSQL Server 日志。