我正在编写一个蜜罐软件,它会广泛记录与它的交互,我打算登录明文.log
文件。
我有两个问题,来自对服务器日志记录不太熟悉的人。
首先我应该如何分解我的日志文件,我假设在运行一个月后我不想要一个大的.log
文件,我是按日,月,年来做的?它有一些标准吗?
每一行的格式,我有一个标准分隔符,无论是*, - ,+,还有什么?在任何地方都有标准(我的谷歌搜索没有带来多少)?
答案 0 :(得分:25)
我喜欢这种日志文件格式:
$ python simple_logging_module.py
2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message
2005-03-19 15:10:26,697 - simple_example - ERROR - error message
2005-03-19 15:10:26,773 - simple_example - CRITICAL - critical message
这是来自python的logging module。 我通常每天都有一个文件,每个月有一个文件夹,每年有一个文件夹。您将获得无法正确编辑的大型日志文件。
logs/
2009/
January/
01012009.log
02012009.log
...
February/
...
2008/
...
答案 1 :(得分:16)
此类日志记录没有标准。滚动,文件布局,这一切都取决于你需要什么。总的来说,我面临三个主要情况:
log4anything
包中都有一个包装盒支持。YYYYMMDD
格式命名的自己的目录。如果您不登录日志,请考虑目录布局,如YYYY \ MM \ YYYYMMDD,如其他答案所示。logfile_yyyymmdd_ccc.log
,其中ccc
的数量正在增加。添加文件名的时间也是一个好主意(例如,轻松判断您每分钟生成多少个日志)UNIX
文字工具快速访问。这个自定义的看起来像这样
logs/ 20090101/ logfile_20090101_001.zip logfile_20090101_002.zip ... 20090102/ logfile_20090102_001.zip logfile_20090102_002.zip logfile_20090101_001.log logfile_20090101_002.log logfile_20090102_001.log logfile_20090102_002.log
还有一些很好的做法可用于良好的日志记录:
Excel
。如果花费的时间超过30秒,则表示您的日志记录错误。这包括:
Unix
文本工具和Excel
。答案 2 :(得分:2)
要分解日志文件,您可以使用logrotate之类的外部应用程序,并让它处理肮脏的工作。
至于每一行的格式,没有标准,所以你应该使用最适合你的。如果您稍后要自动解析日志文件,那么您可能希望在格式化日志输出时记住这一点。
答案 3 :(得分:2)
我建议您使用一个众所周知的日志库。大多数日志库都支持翻转。 Log4Net(.net)/ Log4J(java)是一个特别好用的日志库,它有很多你可能会觉得有用的选项。使用任何翻转间隔最适合您。对于蜜罐应用程序,我认为您会发现每小时或每日营业额最佳。您还可以使用固定限制(如256mb)来确保您的日志工作不会超出可用的可用磁盘空间。 Log4Net / Log4J也支持这一点。
Log4J @ Apache.Org
Log4Net @ Apache.Org
应根据需要设置日志文件的格式。非常希望使用不太可能出现在日志输入中的分隔符。对于您的应用,这可能是不可能的。在典型情况下,某些方使用空格(NCSA日志),某些方使用逗号(制作CSV文件),某些方使用制表符(制作制表符分隔文件)。这些都有各自的优点和缺点。
答案 4 :(得分:1)
建议:
它适用于蜜罐系统(除非坏人真的打击了应用程序/网站),您可以考虑花费额外的时间来登录数据库。
这将使日志的分析和使用更容易,更实时(即,您无需在分析/浏览日志之前完成ETL过程。
这表示存在于数据库表或文件中,这并不排除定义格式的必要性。暂时,您可以使用“多态”格式,其中包含一些常见属性(ID,IP地址,时间戳,Cookie / ID,“级别”[重要性/紧迫性]),然后是短暂的助记符定义特定事件类型的代码(例如“LIA”=登录尝试,“GURL”=猜测网址,“SQLI”SQL注入尝试等...)后跟几个数字字段,以及一些字符串字段,语义将随之变化每个助记符。总结一下:
- Id - TimeStamp (maybe split in date and time) - IP_Address - UserID_of_sorts - // other generic/common fields that you may think of - EventCode (LIA, GURL, SQLI...) - Message Text message (varies with particular event instance) - Int1 // Numbers... - Int2 - Str1 // ...and text which meaning varies with the EventCode - Str2 - //... ?
现在......无论是平面文件还是SQL数据库(尤其是转到数据库),您都可以使用标准日志库。也许 log4j 正如其他回复中所建议的那样(虽然我不确定它是否容易在Python中绑定,无论如何,Python的标准日志记录模块是+/-相同的......)甚至是Python's standard library's logging module可能可以根据您的需求量身定制。
答案 5 :(得分:1)
在我看来,最重要的是: