来自LinkedIn性能工程团队的的工程师Toon Sripatanaskul和Zhengyu Cai在官方网站上披露了他们是如何通过Inception处理内部系统的日志,从而实现服务监控的。
唯一性异常(What):异常日志消息的堆栈信息被抽取出来,并通过散列生成MD5串,这个串就是这个消息的签名。这样,他们就可以通过比较这个散列值快速地识别出新的异常,同时可以对异常进行去重。在计算散列值时,消息里的动态数据会被过滤掉,比如时间戳和代码行数。这个表保存的是日志消息和它的散列值。
实例(Where):这个表保存的是发生异常的服务实例,包括主机名、服务名和代码版本号。
时间序列(When):他们以分钟时间为单位,并检查在一分钟内某种异常发生的次数。这个表同时还引用了上述两个表的数据。
服务端异常: Inception现在支持Java、Python、Scala和C++的服务端异常。
JavaScript异常:他们使用一种数据管道从用户的浏览器端收集JavaScript异常,这些客户端异常通过REST API发送到专门的服务器上,并被转成Kafka事件。
移动设备异常:移动设备异常跟服务端异常一样,也包含了堆栈信息。不过收集这些信息会比较困难一些,目前他们还在不断解决这方面的问题。
测试框架异常: Inception集成了Selenium框架,对于每一个测试用例,他们都会有一个唯一的标识,它们会被传播到下游的后端服务上。Inception因此可以知道下游服务是否运行正常。
JIRA集成:当Inception检测到异常时,他们的另外一个系统就会创建一个JIRA ticket。他们通过这种方式报告缺陷,不过这种方式会创建过多的ticket,从而造成干扰,他们正在完善这个方案。
本文为 @ 21CTO 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。