目前,服务端的反向代理服务Nginx,针对每一次服务端的访问请求,都会进行日志记录。这些日志信息包括,“请求时间”,“请求来源IP”, “User-Agent”,“请求URL” “Http Status Code”, “请求响应时长”等参数。
于是,通过分析这些Nginx访问日志,我们就可以了解到全站的访问请求状况。
但是,我们有多台Nginx服务器,所有的访问日志被分散存储到不同的机器上。在过去,服务端的做法是,如果我们需要分析某一天的请求访问状况,我们是通过人工去汇总那一天的所有Nginx日志文件,然后通过 grep、awk 和 wc 等Linux命令实现检索和统计。然而,这种方法非常地低效,因为这种分析方法非常地滞后,一般是我们已经发现某一天的流量访问出问题了,才会去分析那一天的日志。这些日志不能帮助我们提前发现问题,而且随着服务端Nginx服务器的增加,日志越来越多,越来越分散,过去这种分析日志的办法,越来越显得力不从心了。
于是,我们引入了开源实时的日志分析平台ELK。ELK由 ElasticSearch、Logstash和Kibana三个开源工具组成。
ElasticSearch 是个开源分布式搜索引擎,它的特点有:分布式、零配置、索引自动分片、索引副本机制、restful接口、自动搜索负载等
Logstash 是一个开源的日志收集工具,它可以对日志进行收集、分析和转换
Kibana 是一个开源的数据可视化平台,它可以让你通过强大的图表功能,来展现你的数据
这就是ELK的架构
至于为什么ELK可以如此完美地结合在一起?可不是吗,这都是一家公司开发的。
那么,在服务端实际使用的过程中,我们发现,由于很多请求调用,都附带了“SessionKey”这个信息。目前,鉴别该请求是由那个UserId发起的,这个“UserId”信息就隐藏在这个“SessionKey”字段中。服务端团队发现,如果我们能够从“SessionKey”中解析出“UserID”信息,那将给我们带来极大的方