APP下载

基于ELK的Nginx反向代理日志分析与业务服务质量评价体系研究与探索

2019-12-07阮晓龙董凯伦

网络安全技术与应用 2019年12期
关键词:分析模型配置文件日志

◆阮晓龙 董凯伦

基于ELK的Nginx反向代理日志分析与业务服务质量评价体系研究与探索

◆阮晓龙1董凯伦2

(1.河南中医药大学信息技术学院 河南 450046;2.郑州泰来信息科技有限公司 河南 450000)

为实现Nginx服务器生成的海量日志数据的分析,本文构建了一个基于ELK框架的日志实时分析平台。基于该平台实现对历史与实时的日志进行数据挖掘,从运维的多角度建立分析模型对海量日志进行可视化分析,实现对业务的可视化分析及服务质量的评价体系的建立。

ELK;数据挖掘;日志分析;Nginx;反向代理

目前,基于Web的信息传播方式成为主流,对Web服务器性能要求更高,在实际应用中,Web服务器的配置是有限的,不可避免会达到服务器性能瓶颈,从而造成服务响应时间增长、服务质量下降。与此同时,Web业务也是安全风险较高、易于受到网络威胁、易于受到网络攻击的业务之一。

反向代理技术可通过中间代理的方式转发客户端请求,能有效解决Web服务器的性能瓶颈问题,并且通过动静资源分离功能,可有效减轻Web服务器的负担。反向代理在客户端与真实Web服务器之间进行数据转发,隔离客户端与真实Web服务器的直接通信,防止真实Web服务器遭受攻击,保证真实Web服务器的资源安全。

在反向代理中,Nginx的使用最为广泛。Nginx自2004年发布以来,其市场占有率呈逐年上升趋势,甚至在2019年4月首度登上Web服务器市场占有率第一名的宝座。Nginx记录了整个反向代理的过程的详细日志信息,包括代理的Web服务器的响应状态、时长、报文长度、请求IP等信息,通过对代理日志的分析可以直观反映Web服务器的服务质量以及存在的安全风险。

本文提出基于ELK(Elasticsearch、Logstash、Kibana)框架,实现对Nginx代理的海量日志进行采集、清洗、存储以及建立分析模型并形成可视化图表。通过对日志信息进行统计分析,了解Web服务器的负荷、服务运行状态以及针对耗时请求进行优化等,实现实时服务诊断,了解服务器与网络的安全状态,为网络安全决策者提供方案依据。进而实现对Nginx代理的业务进行全域的态势感知,及时避免安全风险,并对业务服务质量进行宏观的实时评价。

1 反向代理

1.1 反向代理

反向代理服务是指一个代理服务器能够代理外部网络上的主机访问内部网络[1]。此时代理服务器对外就充当一个“Web服务器”,但是这个“Web服务器”没有Web文件,所有的动态文件、静态网页,都保存在内部的Web服务器上。其具体的工作流程如图1所示。

图1 反向代理工作原理图

1.2 Nginx配置

Nginx在运行过程中会记录每次服务的全流程的详细日志数据,包括请求客户端的地域来源、使用终端等信息,以及代理业务的每个站点的请求响应相关信息[2]。其日志格式分两种,分别为访问日志(access.log)、错误日志(error.log),本文主要针对访问日志进行配置与分析。

1.2.1配置文件结构

Nginx服务器的配置文件nginx.conf文件的结构主要由五个模块组成,分别为全局块、events块、http块、server块、location块。其关系结构如图2所示,其各块的作用如表1所示。

图2 配置文件结构

表1 配置文件的模块介绍

1.2.2 代理配置

本文主要进行配置http块中的“log_format”参数,以此来自定义Nginx日志的格式,其配置信息如下所示。

# 自定义日志格式

log_format main '$args # $binary_remote_addr # $body_bytes_sent # $content_length # $content_type # $document_root # $document_uri # $host # $hostname # $http_cookie # $http_host # $http_referer # $http_user_agent # $http_x_forwarder_for # $limit_rate # $nginx_version # $pid # $query_string # $realpath_root # $remote_addr # $remote_port # $remote_user #[$time_local] # "$request" # $request_body # $request_body_file # $request_completion # $request_method # $request_uri # $scheme # $sent_http_cache_control # $sent_http_connection # $sent_http_content_length # $sent_http_content_type # $sent_http_keep_alive # $sent_http_last_modified # $sent_http_location # $sent_http_transfer_encoding # $server_addr # $server_name # $server_port # $server_protocol # $uri' ' # $status ' ' # "$http_x_forwarded_for"';

表2 0000000000配置文件的字段介绍

为了方便Logstash对日志的切割清洗,这里使用特殊字符“#”将字段进行隔开,下面介绍部分字段代表的信息,如表2所示。

为了规范管理代理的多个站点,每个站点的配置设置一个专属配置文件,且每个站点对应一个专属的日志文件,如其中一个站点的配置如下所示。

2 日志数据处理

通过Filebeat(轻量级开源日志文件数据搜集器)进行日志的采集并推送至Logstash(数据收集引擎),Logstash将获取日志数据进行切割格式化发送至Elasticsearch(分布式搜索和分析引擎),Elasticsearch将格式化的日志数据进行存储、搜索和分析操作,最终通过Kibana(数据分析和可视化平台)建立数据进行搜索、分析和建立统计图表模型[3],如图3所示。

图3 日志采集框架

2.1 Nginx日志采集

通过自定义配置日志格式后,取其中一条日志内容如下所示。

- # xD3E!x9E # 0 # - # - # /var/www/html # / # glxgl.xg.hactcm.edu.cn # qs-agw # - # - # - # curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2 # - # 0 # 1.4.2 # 2448 # - # /var/www/html # 211.69.33.158 # 55705 # - #[02/Aug/2019:10:35:05 +0800] # "HEAD / HTTP/1.1" # - # - # OK # HEAD # / # http # - # close # 9790 # text/html # - # Wed, 16 Jan 2019 10:46:04 GMT # - # - # 211.69.33.161 # glxgl.xg.hactcm.edu.cn # 80 # HTTP/1.1 # / # 200 # "-"

通过指定Filebeat监视日志文件,进行日志数据采集,并将采集日志信息转发至Logstash。

# 设置监视的日志目录

2.2 Nginx日志处理

Logstash通过filter插件过滤解析input读取的数据,可以用grok插件正则解析数据,date插件格式化日期,geoip插件获取IP地理位置信息等等。

数据切割、格式化、清洗的配置内容如下所示。

# 将其切割转换成key-value格式

3 分析模型研究

Kibana是一个开源的分析与可视化平台,其与Elasticsearch一起使用。通过Kibana的搜索、查看存放在Elasticsearch中的数据,绘制各种不同的图表、表格、地图等,直观的展示数据,从而达到数据分析与可视化目的。

3.1 日志展示

经处理的日志被推送至Kibana,Kibana上有一个“Discover”功能,可实时检测采集的日志量变化趋势,以及处理后的日志详细内容,如图4所示。

图4 Kibana日志展示

3.2 分析模型创建

基于采集的Nginx日志数据并结合其对应的信息含义创建Nginx日志的分析模型,可分为日志统计、用户行为分析、服务质量分析三类,如表3所示。

表3 Nginx日志分析模型

3.3 模型可视化展示

以“网站响应状态”模型为例绘制一个饼状图,其步骤如下。

(1)在左侧导航栏中选择“可视化”,点击【创建新的可视化】;

(2)选择可视化类型为“饼图”;

(3)创建数据索引,选择前面配置的索引名,即“nginx”;

(4)左侧的“存储桶”中点击【拆分切片】,聚合选择“次”,字段选择“status.keyword”,并设置一个时间范围设置为“今日”,点击运行图标进行绘制,如图5所示。

图5 绘制饼状图

4 服务质量评价

通过对分析模型的建立以及集中可视化呈现,可有效掌握服务器的运行状况和服务质量等相关信息,发现和排除错误原因、了解客户的访问分布以及全域业务态势感知[4]。

4.1 整体压力感知

基于“整体统计”类模型的可视化展示,通过“业务请求总量”、“发送字节总量”、“响应网站状态”等指标信息,感知业务的整体服务压力与服务质量。

4.2 用户行为分析

基于“用户行为”类模型的可视化展示,从操作系统、浏览器、物理设备等工具分析用户的使用偏好度,通过用户对各网站的访问量,可分析用户对业务偏好度;通过“用户来源区域”可分析用户的来源地理区域。

4.3 服务质量评价

通过“各网站响应状态”、“各网站处理请求的时间”等分析模型,可分析业务的稳定性,进一步反应业务的服务质量。

4.4 全域态势感知

通过从多运维角度建立分析模型,多图标类型绘制方式,最终将其集中汇总,可实现对全域业务的运行情况的感知以及服务质量的评价,实现全域的态势感知。

5 总结

基于ELK的Nginx反向代理日志分析平台的搭建,并对Nginx反向代理日志的分析方法的探索,以及对反向代理业务的服务质量评价体系的研究,实现了对Nginx反向代理全域业务态势感知。

[1]雷明彬.反向代理技术在数字化校园中的应用[J].电脑与电信,2009(8).

[2]苏翔宇,朱爱群. CentOS7下基于Nginx的反向代理及负载均衡研究与实现[J].现代计算机(专业版),2018,No.610(10):63-66.

[3]张彩云,牛永红,赵迦琪. ELK日志分析平台在系统运维中的应用[J].电子技术与软件工程,2017(6):182-183.

[4]田昌鹏.基于Web日志分析的Web QoS研究[J].计算机科学,2007,34(6):78-80.

猜你喜欢

分析模型配置文件日志
基于BERT-VGG16的多模态情感分析模型
基于Docker的实时数据处理系统配置文件管理软件的设计与实现
一名老党员的工作日志
纤维增强复合材料疲劳寿命预测及损伤分析模型研究进展
从Windows 10中删除所有网络配置文件
扶贫日志
用软件处理Windows沙盒配置文件
互不干涉混用Chromium Edge
雅皮的心情日志
雅皮的心情日志