携程ELK日志分析平台深耕之路

来源:互联网 发布:知父莫若子by谦心诀 编辑:程序博客网 时间:2024/05/01 16:13


源起

日志,看似简单简单的文本,在网站运维人员眼里却似一座蕴含丰富的宝藏。通常以下运维任务都或多或少需要运维人员和日志打交道:

  • 系统健康状况监控

  • 查找故障根源

  • 系统瓶颈诊断和调优

  • 追踪安全相关问题

技能熟练的Linux SA们能够很快的组合诸如grep, awk这样的命令,奇幻般的从日志中挖掘出有用的信息;亦或是研发人员往往会基于MySQL,MongoDB,HBase开发自己的日志存储和分析工具。

然而互联网大规模、分布式的特性决定了日志的源头越来越分散,产生的速度越来越快,传统的手段和工具显得日益力不从心。市场对新工具的需求已然催生出Splunk这样近百亿美元市值的专业日志分析解决方案供应商。

从2013年携程网站运营中心成立伊始,集中化的运维日志分析平台就被提上议事日程。作为中国最大的OTA网站,携程基础设施每日产生的各类日志有好几十种,量级在数个TB级别,如果采用Splunk这样的商业软件,每年的授权费用就要近千万。昂贵的授权费用驱使我们深入研究这个领域,寻求商业软件以外的替代方案。

小试牛刀

一线运维部门对于日志分析工具有如下几个重要的期盼点:

  1. 日志要支持多种数据源

  2. 日志解析方式灵活但简单

  3. 支持关键词搜索和浏览,能支持组合条件搜索

  4. 能够按照时间窗对特定字段做数值统计,并且时间窗最好可以随意缩放,比如计算某个时间段的平均响应时间,或者出现某种错误类型最多的URL等等。

当时公司已有基于MySQL和HBase的日志分析工具,然而功能与用户期望相差甚远。我们对这些工具的感觉是:可以很好的存,却无法很好的用。具体说就是日志写到数据库问题不大,但一旦要用的时候,只能做类似tail的翻看,或者简单的过滤;一旦有复杂的查询和统计会非常非常慢,或者根本无法支持,用户体验比较差。

脑子里不停翻滚着用户需求,持续探寻了几天后,ELK进入了我们的视野。ELK是三个开源工具ElasticSearch,Logstash,Kibana组合而成的软件栈,其中的核心是开源的分布式搜索引擎Elasticsearch,辅以Logstash灵活多样的日志收集,过滤,传送功能以及Kibana炫酷的前端展示面板,组合成一套可以媲美商业应用的解决方案。

下面是个典型的ELK架构方案;

看起来很简单,logstash像一把瑞士军刀,可以通过plugin的方式从多种渠道输入日志、内部深加工(filter),再输出到多种类型的目的地,这里我们送到Elasticsearch做索引和存储。 中间的Redis用作消息队列,使得架构的容错性更高,当ES故障或者下线维护的时候,日志可以缓存一段时间而不至于丢失。

我们团队经过短暂的测试环境POC以后,在线上部署了一个5台服务器规模的小集群。 无线日志和云计算部门的VDI日志成了我们一批小白鼠,数据在Kibana里的可视化直观易读。

如下是一个Openstack日志的分析示例面板 : 

Elasticsearch 是基于Lucene的,对于日志的所有字段都可以索引,并且其倒排索引的数据结构非常紧凑,搜索效率非常的高。Elasticsearch的Facet (aggregation)模块可以对数据做分布式的聚合计算,速度惊人的快。反映到前端Kibana上,用户可以随意组合条件过滤日志,随意伸统计时间窗,秒级获取聚合计算结果。再也不需要在Hadoop上长久的等待,也不用为更改Storm/Spark定好的计算维度而犯愁,非凡的用户体验一下抓住了用户的心,更多的日志接入需求随之而来。

持续学习、实践与优化

开源软件并非没有成本,如果无法理解其核心原理,无法将其驾驭往往会导致项目的失败。随着接入的日志量级增加,集群规模扩大,我们开始遇到各种诡异的稳定性和性能问题。一个系统再好,不稳定、慢,用户就会慢慢丧失信心和兴趣。这促使我们投入大量的精力,深入去研究ELK并持续的优化生产集群:

1. 为提高系统稳定性和容量管理能力,我们加强了监控,在Ganglia上开发了ES监控插件:

2. 为加强系统安全性,我们开发了开源的认证网关ESProxy( https://github.com/childe/esproxy),使得Kibana可以接入公司的SSO(单点登录系统),并在索引级别提供黑白名单的访问控制;

3. 为提高CPU利用率,节省硬件资源,我们开发了开源工具Hangout( https://github.com/childe/hangout ) 替代Logstash,吞吐量提升了5倍之多;

4. 基于开源的Logstash Forwarder开发的Agent,解决了Windows平台原有Log Agent的资源消耗高、不稳定的问题;

5. 为提高Kibana易用性,我们开发了导航Panel、数据同比排名Panel、时间偏移对比等等特性。

6. 为应对更大规模的日志流,我们研究Kafka并替换了Redis,使得运输管道更易于水平扩展,稳定性和容错性更高。

7. 为提升大范围数据聚合速度和防止内存溢出,我们很早发现了ES1.x版本对Doc Values特性的支持,率先采用后使得生产集群的聚合速度和稳定性大幅提高。

8. 为提升数据数据写入实时性,我们对集群做了冷热数据分离和自动迁移,保障数据写入实时性不会受到大范围查询的影响。

9. 为提高ES集群稳定性,我们还做了客户端节点和数据结点分离等架构上的优化。

以下架构是携程生产集群逐步演变成过程:

成果与未来展望

经过1年多的不懈努力,我们的ES集群扩展到40个数据结点,收集50多种类型的日志,日处理日志160亿条,大小近5TB。 运行稳定,响应快速,监控完备。目前已经成为携程网站运维核心应用之一,用户涵盖运维,系统研发,信息安全,应用研发。

ElasticSearch 成名于ELK,但绝非只擅长于做日志分析,作为分布式搜索引擎,很多公司将其用于全站搜索,相关性推荐等功能。ELK在携程的成功应用也吸引了部分业务研发部门的架构师对Elasticsearch这项技术的关注。部分应用的搜索功能正在引入ElasticSearch进行重构,以期提高搜索的准确性、速度和系统可靠性。

我们下一个基于Elasticsearch的应用将是正在研发中的新一代分布式监控平台HickWall。相较于主流监控平台采用的时间序列存储方案,例如RRDtool、MySQL、OpenTSDB、InfluxDB等,我们认为Elasticsearch可以提供更好的水平扩展性,更灵活快速的数值聚合计算功能。目前项目正在紧锣密鼓的开发过程中,有望在明年下半年在生产上部署,并助力携程网站流量10x的增长。

~~~~~~~~~~~~~~~~~END~~~~~~~~~~~~~~~~~

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在家被蜘蛛咬了怎么办 被蜘蛛咬了很痒怎么办 被蜘蛛咬了红肿怎么办 宝宝被蜘蛛咬了怎么办 红鹦鹉鱼产卵了怎么办 掉灰的墙面怎么办简单 辣椒上的白粉虱怎么办 巨门在父母宫怎么办 空腹吃柿子胃胀怎么办 吃了山药过敏痒怎么办 瓷砖活动了怎么办的下 家里进了大蛾子怎么办 沙漠玫瑰烂根了怎么办 打麻药的地方疼怎么办 做月子奶不够吃怎么办 坐月子手痛怎么办才好 产后胖了20斤怎么办 手动挡汽车闯动怎么办 孕妇风热感冒了怎么办 孕妇得风热感冒怎么办 小鸡站不起来了怎么办 感冒了流清鼻涕怎么办 哈士奇又吐又拉怎么办 怀孕乳房长妊娠纹怎么办 乳房长妊娠纹了怎么办 宝宝忌奶晚上哭怎么办 20岁胸下垂松软怎么办 断奶时乳房有肿块怎么办 孩子断奶后乳房变小怎么办 断奶了月经不来怎么办 钥匙在门上拔不出来怎么办 钥匙拔不下来了怎么办 养了几天鱼死了怎么办 乌龟的眼睛肿了怎么办 手被鱼刺扎了怎么办 被鱼刺扎手肿了怎么办 手被桂鱼扎了怎么办 三岁宝宝卡鱼刺怎么办 一岁宝宝卡鱼刺怎么办 鱼刺卡在胸口了怎么办 婴儿被鱼刺卡了怎么办