NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Inception:LinkedIn 是如何利用异常日志实现服务监控的

  • 2017-01-16
  • 本文字数:1453 字

    阅读完需:约 5 分钟

来自 LinkedIn 性能工程团队的的工程师 Toon Sripatanaskul Zhengyu Cai 在官方网站上披露了他们是如何通过 Inception 处理内部系统的日志,从而实现服务监控的。

早在 2012 年初,LinkedIn 的性能工程团队就尝试构建一种工具,它可以对发生代码变更后的服务进行有效性验证。日志消息,特别是异常日志,可以很准确地反应服务的运行状况。对于新部署的服务,通过检查是否有新的异常日志出现就可以知道服务的健康状况。那个时候,他们使用脚本把日志文件拷贝到其它机器上,然后通过正则表达式生成最终的日志报告。这种方式在刚开始的时候运作良好,但 LinkedIn 发展迅速,脚本工具不具备伸缩性,无法跟上公司的发展速度。

2012 年底,他们构建了一个日志消息处理系统,叫作 Inception(Linked In Ex _ception_ 的合体)。他们把各个数据中心产生的日志消息聚集到 Kafka 上,然后 Inception 通过 Kafka 客户端处理这些消息,并把它们存放到如下几个数据库表中:

  • 唯一性异常(What):异常日志消息的堆栈信息被抽取出来,并通过散列生成 MD5 串,这个串就是这个消息的签名。这样,他们就可以通过比较这个散列值快速地识别出新的异常,同时可以对异常进行去重。在计算散列值时,消息里的动态数据会被过滤掉,比如时间戳和代码行数。这个表保存的是日志消息和它的散列值。
  • 实例(Where):这个表保存的是发生异常的服务实例,包括主机名、服务名和代码版本号。
  • 时间序列(When):他们以分钟时间为单位,并检查在一分钟内某种异常发生的次数。这个表同时还引用了上述两个表的数据。

把以上三个表的数据连接起来,他们就有足够的信息来生成日志报表,包括唯一性日志消息以及它们的发生次数和发生地点。

几年来,为了适应 LinkedIn 迅速的发展,Inception 的架构也在不断演进。在经历了几次伸缩性问题之后,他们决定使用在 Inception 里使用 Apache Samza 来处理日志。Samza 不仅处理速度快,而且高度可伸缩。Inception 现在每秒可以处理 110 万条日志消息。除此以外,Inception 还支持多种数据源。

  • 服务端异常: Inception 现在支持 Java、Python、Scala 和 C++ 的服务端异常。
  • JavaScript 异常:他们使用一种数据管道从用户的浏览器端收集 JavaScript 异常,这些客户端异常通过 REST API 发送到专门的服务器上,并被转成 Kafka 事件。
  • 移动设备异常:移动设备异常跟服务端异常一样,也包含了堆栈信息。不过收集这些信息会比较困难一些,目前他们还在不断解决这方面的问题。
  • 测试框架异常: Inception 集成了 Selenium 框架,对于每一个测试用例,他们都会有一个唯一的标识,它们会被传播到下游的后端服务上。Inception 因此可以知道下游服务是否运行正常。
  • JIRA 集成:当 Inception 检测到异常时,他们的另外一个系统就会创建一个 JIRA ticket。他们通过这种方式报告缺陷,不过这种方式会创建过多的 ticket,从而造成干扰,他们正在完善这个方案。

说到这里,不得不提一下,在日志分析技术领域,ELK(Elasticsearch、Logstash、Kibana)是另外一个值得一说的日志分析技术栈。ELK 可以保存完整的日志信息,包括时间戳、实际发生次数和具体的堆栈信息。不过 ELK 会占用大量的存储空间。对于 LinkedIn 来说,为了得到一个粗略的报表,可能因此需要耗费 50T 的存储空间,而 Inception 只需要 30G 的空间,并且处理速度更快。这么说来,Inception 似乎在这方面更胜一筹。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-01-16 18:002483
用户头像

发布了 322 篇内容, 共 134.4 次阅读, 收获喜欢 144 次。

关注

评论

发布
暂无评论
发现更多内容

2w字 + 40张图带你参透并发编程!

cxuan

Java 后端 并发

高效程序员的45个习惯:敏捷开发修炼之道(3)

石云升

读书笔记 敏捷开发 无限游戏

"工科生"的浪漫 百度大脑语言与知识技术峰会在七夕向你发出参会邀请

百度大脑

一个虚拟世界里栽树的公司及其启示

郭华

技术 商业模式 电影

浅谈技术管理之团队管理

大黄蜂

团队管理 技术管理

《精益创业》摘要

孙苏勇

书摘 精益创业

吃透Laravel的Ioc容器

书旅

laravel 容器 ioc

搭载十代酷睿i7处理器,这台ROG冰刃4新锐拥有媲美台式游戏电脑的性能

最新动态

56张图入门操作系统——内功心法,适合所有程序员

执鸢者

大前端 操作系统

SpreadJS 纯前端表格控件应用案例:集成 Odoo提升企业ERP表格功能

葡萄城技术团队

开源 SpreadJS Odoo

Spring 为啥默认把bean设计成单例的?这篇讲的明明白白的

程序员生活志

nginx报错worker_connections are not enough

Java联盟

nginx

云原生架构的基石

soolaugust

Docker 架构 Kubernetes 容器 云原生

为什么一旦自己创业了,很难再回到公司去坐班?

北柯

创业 互联网 创业心态 上班 上班族

大厂面试必读,JAVA进阶神书《深入理解Java虚拟机》第三版更新内容全曝光!

华章IT

JVM 虚拟机 周志明 Java虚拟机 jvm调优

系统不可用总结

不在调上

跟我一起基于Karma搭建一个测试环境(下)

Jack Q

大前端 测试框架 Karma

大数据技术发展(二):Hadoop 技术生态圈的发展

cristal

Java 大数据 hadoop hadoop3

丐帮,少林,明教,武当!看看你数据分析的技能属于哪一派?

程序员生活志

写代码爬取了某 Hub 资源,只为撸这个鉴黄平台!

程序员生活志

教程 Hub 资源

法定数字人民币将成中国金融新名片

CECBC

数字货币 人民币

Python3 for ... else ...陷阱

王坤祥

Python Python PEP

“庆俞年”大战,真正受损的不是李国庆

北柯

创业 合伙人 创业者 互联网人 当当网

错误的存储方案正吞噬你的成本

jinjin

草脸识别,AI泡沫还是皇冠明珠?

郭华

人工智能 AI 商业 解决方案

有一种自我欺骗,叫只为孩子

zhoo299

随笔杂谈 家庭

四种主要的 IO 模型

一盐难进

Netty

一文吃透PHP进程信号处理

书旅

php Linux 信号

Flink所需组件-1

小知识点

scala 大数据 flink 流计算

ST在keil下开发时候文件options配置的一些小技巧

良知犹存

嵌入式

学习的深度 & 深度的学习

北风

学习

Inception:LinkedIn是如何利用异常日志实现服务监控的_语言 & 开发_薛命灯_InfoQ精选文章