首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建机器可读的日志文件

创建机器可读的日志文件
EN

Software Engineering用户
提问于 2018-01-05 10:18:14
回答 1查看 680关注 0票数 5

我目前正在开发一个新设备,它生成(文本)日志文件。将会有许多这种类型的设备,我想分析日志文件(用于错误检测和统计)。

直到现在,日志分析还只是一种副产品,其他设备的日志文件是试图调试的人的主要工具,因此这些信息是人类可读的(“全文”)。使用我的自动日志分析工具,我通过搜索多个关键字来分析这些日志文件,这些关键字显示了日志文件中有趣的行。所以分析非常激烈,因为我必须检查一行中的多个关键字,而且有可能,在最后,一条线与我的分析无关。如果这行与我相关,我有时需要通过在行中的不同位置删除信息来解析这条线路。总的来说,对这些日志文件的分析非常缓慢。

使用新设备,我喜欢实现更多的机器可读的日志文件(但仍然是人类可读的),这使得分析更快、更容易,在日志分析工具的实现/扩展过程中也是如此。我只是在想,最好的做法是什么?我的第一个想法是,在日志消息中使用“触发器字符”。我们在德国,所以我选择了美元标志,因为我们不定期使用它。当我找到这个触发字符时,我知道我必须分析这一行(而且我避免扫描多个关键字)。此外,我认为最常见的情况是键值对,它可以包含日志消息中最重要的信息。以防万一,我有多个值(例如,一个列表),我还需要一个机器可读的版本。所以我的下一个想法是,将触发器-char与JSON-对象组合起来。在标准情况下,这只包含一个键-值对,而标记分析工具将分析它的性能原因--使用简单的字符串操作,而不使用JSON解析器库。但是对于有一个列表的情况,我将使用json创建一个日志消息,并使用json(在我的例子中是)解析这个消息。对于事件,我将插入一个布尔值( "true“不是必需的,只是为了保持JSON-一致性)。

现在,有一条线看起来是这样的:

代码语言:javascript
复制
05.01.2018 11:11:23: No new APN needed. ${"currentAPN":"m2m-net.sa.t-mobile"}
05.01.2018 11:11:51: can't open gpio 969. ${"openGPIO969failed":true}

我能以任何方式改进我的概念吗?

附带注意:我正在使用一个自写Java解析器来分析旧设备的日志文件,我将对新项目进行扩展。由于非常特殊的日志消息-“格式”(随着时间的增长),类似Logstash的东西不起作用。然而,对于ElasticSearch和Kibana,我使用ELK堆栈的其余部分来进行日志分析和-visualization。

备注2:新设备是一个带有Android的kiosk设备,所以只有一个应用程序在运行。我们完全控制着系统(设备所有者)以及硬件的大部分部分.

/edit:按事件扩展消息,如第一个注释/edit 2中提到的:新的侧边注意事项

EN

回答 1

Software Engineering用户

发布于 2018-01-05 11:49:13

我已经成功地使用了“JSON - line”格式,其中日志文件中的每一行都是一个JSON对象。

代码语言:javascript
复制
{"timestamp": "2018-01-05T11:11:23.000Z","Message": "No new APN needed.","currentAPN": "m2m-net.sa.t-mobile"}
{"timestamp": "2018-01-05T11:11:51.000Z","Message": "can't open gpio 969.","openGPIO969failed": true}

这种格式可以很好地使用日志聚合工具(我们使用ELK)进行索引,但仍然是相对可读的。还有很多库编写这种格式(至少在.Net生态系统中是这样的)--我现在是塞里罗格的忠实粉丝。

票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/363493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档