在咱们的系统架构中,Nginx做为全部HTTP请求的入口,是很是重要的一层。天天产生大量的Nginx Access Log,闲置在硬盘上实在是太浪费资源了。因此,能不能把Nginx日志利用起来,实时监控每一个业务的访问趋势、用户行为、请求质量和后端异常呢,这就是本文要探讨的主题。前端
错误码告警(49九、500、502和504);git
upstream_response_time超时告警;github
request_time超时告警;后端
数据分析;架构
关于错误和超时监控有一点要考虑的是收到告警时,要可以快速知道是哪一个后端服务节点出现了问题。
在这以前,咱们都是经过随机进入一个Nginx节点tail log才能定位到,效率有些低。运维
废话很少说,先上架构图。总体架构没太复杂的地方,随便画了一张,莫笑话我~性能
这部分结合lua-resty-kafka使用Lua扩展将数据按照必定格式拼接后写入Kafka集群。Nginx+Lua的性能就不用多说了,这样一来彻底能够关掉Nginx自己的日志开关,减小磁盘消耗;大数据
咱们数据分析组的同事在这以前就已经创建Kafka集群,无需再搞一套消息队列服务。另一个很重要的点是,咱们不但愿日志数据取完就删掉了,运维组除了要作监控告警以外,数据组也要读取数据作分析。所以,如Redis此类的消息队列就直接被咱们pass掉了;优化
这部分使用Heka来作,Heka使用Go语言编写,内置丰富的插件能够知足大部分的需求。若不知足需求,可使用Go或者Lua自行开发扩展。以前使用过Logstash作业务日志收集,但它有时的CPU占用实在太吓人,不敢再在业务机上使用,而且感受扩展不方便。就咱们目前的应用来看,Heka的性能和资源占用仍是很不错的。lua
可使用Filter作计算,有错误时向Heka消息流中写入告警消息,SMTPOuter匹配到告警消息后经过自定义的Encoder定制好邮件内容后再发送。
Heka层一方面作异常监控,另外一方面使用Message Matcher Syntax匹配异常数据写入到Elasticsearch, 再架设一个Kibana。咱们在收到告警邮件后,就能够进入Kibana后台查看异常的Log。
邮件告警机制须要优化, 咱们目前的设置是每分钟检查一次,发现错误就会一直告警。以后能够优化为发现异常时告警一次,异常结束时再发一次汇总邮件;
Heka服务管理和进程监控须要优化,支持自动重启,否则进程挂了都不知道;
Heka配置接入配置中心并支持自动重启(目前的配置主要是各业务的告警阀值,须要进入机器修改);
整个开发过程仍是比较顺利的,惟一比较耗时的是熟悉Heka的整个消息处理的流程和机制,以及如何开发扩展。另外一个比较坑的是Heka的错误提示不全和调试不方便,有时彻底靠猜,不过好在它自己并无多复杂,有些问题看一看源代码就明白了。
关于消息队列的选择,前面已经提到咱们已有Kafka集群就直接拿来用了。若是仅仅作异常监控,不须要消息留存, 倒能够考虑使用Redis之类轻量些的消息队列, Kafka未免有些重了。
原文地址: http://mlongbo.com/2015/NginxLog%E5%AE%9...
扫描二维码,关注我。
内容大多会是后端技术、前端工程、DevOps,偶尔会有一些大数据相关,会推荐一些好玩的东西。但愿你会喜欢~