圈子里关于大数据、云计算相关文章和讨论是越来越多,愈演愈烈。行业内企业也争前恐后,群雄逐鹿。而在大数据时代的运维挑站问题也就日渐突出,任重而道远了。众所周知,大数据平台组件是很复杂的。而这庞大的系统整合问题,对于运维来说是很头疼的。所以,在大数据时代下的运维问题是日渐尖锐。
有人把运维比作医生给病人看病,那么日志则是病人对自己的陈述。所以只有在海量分布式日志系统中有效的提取关键信息,才能对症下药。如果能把这些日志集中管理,并提供全文检索功能,不仅可以提高诊断的效率,同时可以起到实时系统监测、网络安全、事件管理和发现bug等功能。基于此,本文向大家推荐一款开源利器——ELK组件,提供分布式的实时日志(数据)搜集和分析的监控系统。
ELK简介
Logstash 早期曾经自带了一个特别简单的 logstash-web 用来查看 ES 中的数据。其功能太过简单,于是 Rashid Khan 用 PHP 写了一个更好用的 web,取名叫 Kibana。这个 PHP 版本的 Kibana 发布时间是 2011 年 12 月 11 日。
Kibana 迅速流行起来,不久的 2012年8月19日,Rashid Khan 用 Ruby 重写了 Kibana,也被叫做 Kibana2。因为 Logstash 也是用 Ruby 写的,这样 Kibana 就可以替代原先那个简陋的 logstash-web 页面了。
目前我们看到的 angularjs 版本 kibana 其实原名叫 elasticsearch-dashboard,但跟 Kibana2 作者是同一个人,换句话说,kibana 比 logstash 还早就进了 elasticsearch 名下。这个项目改名 Kibana 是在 2014 年 2 月,也被叫做 Kibana3。全新的设计一下子风靡 DevOps 界。随后其他社区纷纷借鉴,Graphite 目前最流行的 Grafana 界面就是由此而来,至今代码中还留存有十余处 kbn 字样。
2014年4月,Kibana3 停止开发,ES公司集中人力开始Kibana4的重构,在 2015 年初发布了使用 JRuby 做后端的 beta 版后,于 3 月正式推出使用 node.js 做后端的正式版。由于设计思路上的差别,一些 K3 适宜的场景并不在 K4 考虑范围内,所以,至今 K3 和 K4 并存使用。
2016-10-27 发布了 Elastic Stack 5.0 版
ELK架构原理
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部
ELK优点
Elastic Stack 在最近两年迅速崛起,成为机器数据分析,或者说实时日志处理领域,开源界的第一选择。和传统的日志处理方案相比,Elastic Stack 具有如下几个优点:
ELK用途
日志, 对于不同团队来说会有不同的使用目的:
在服务结点不多的情况下, 各个团队怎么使用这些日志或许可以百花齐放,但在中大规模服务部署的情况下, 日志类别 * 技术方案 * 对接的系统等等这些因素的组合将极大加重系统研发和维护的负担,所以, 我们需要一套分布式环境下集中采集,分析和管理日志的技术体系。
ELK日志采集和分析体系的建立
一套日志的管理体系通常需要处理以下几个阶段的工作:
1 日志的采集
灵活性是我们选择日志采集方案更看重的因素,所以logstash属于首先方案, 它可以兼顾多种不同系统和应用类型等因素的差异,从源头上进行一些初步的日志预处理。
logstash唯一的小缺憾是它的不轻便, 因为它是使用jruby开发并跑在java虚拟机上的agent, 当然啦,同时也是优点,即各种平台上都可以用。
2日志的汇总与过滤
kafka在我们挖财已经属于核心的中间件服务, 所以, 日志的汇总自然而然会倾向于使用kafka。
日志的过滤和处理因为需求的多样性,可以直接对接订阅kafka, 然后根据各自的需求进行日志的定制处理, 比如过滤和监控应用日志的异常,即使通过zabbix进行预警; 或者数据仓库方面在原始日志的基础上进行清洗和转换,然后加载到新的数据源中;
3日志的存储
原始的日志存储我们采用ElasticSearch, 即ELK技术栈中E的原本用途,遵循ELK技术栈中各个方案之间的通用规范, 比如日志如索引采用logstash与kibana之间约定的index pattern。
4日志的分析与查询
ELK技术栈中的Kibana已经可以很好的满足这一需求,通过在web页面对日志进行搜索查询、图表关联.
5日志报警功能与zabbix的集成
我们的监控平台选择了使用zabbix, 所以各个系统如果有监控需求,最好都对接zabbix, 避免维护多套不必要的运维系统。
在应用日志处理过程中, 我们希望可以识别错误或者异常信号, 然后通过zabbix报警和通知相应devops人员, 为了达到这一目的,我们可以复用zabbix中的action/user/usergroup等实体配置, 并且配置相应的虚拟host/item/trigger等实体,然后由日志处理系统在需要的时候,直接通过active的方式上报数据, 具体操作方式为:
① 在日志处理系统中, 通过zabbix_sender或者根据zabbix_sender的通信协议,在合适的时机发送状态数据;
② 在zabbix中, 配置相应的host/item/trigger, item为zabbix trapper类型,key与zabbix_sender发送的key相对应;
日志系统亦可通过微信公众号进行规则报警,我们可以通过关注微信公众号,对匹配到并触发报警规则的日志进行查看,进行业务、服务的分析和日志定位。可以很方便的对监控字段建立起预警机制,在错误大规模爆发前进行预警。
原文:http://www.cnblogs.com/zhaishaomin/p/7417060.html