◆阮曉龍 董凱倫
基于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]。此時代理服務器對外就充當一個“Web服務器”,但是這個“Web服務器”沒有Web文件,所有的動態文件、靜態網頁,都保存在內部的Web服務器上。其具體的工作流程如圖1所示。

圖1 反向代理工作原理圖
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所示。
為了規范管理代理的多個站點,每個站點的配置設置一個專屬配置文件,且每個站點對應一個專屬的日志文件,如其中一個站點的配置如下所示。
通過Filebeat(輕量級開源日志文件數據搜集器)進行日志的采集并推送至Logstash(數據收集引擎),Logstash將獲取日志數據進行切割格式化發送至Elasticsearch(分布式搜索和分析引擎),Elasticsearch將格式化的日志數據進行存儲、搜索和分析操作,最終通過Kibana(數據分析和可視化平臺)建立數據進行搜索、分析和建立統計圖表模型[3],如圖3所示。

圖3 日志采集框架
通過自定義配置日志格式后,取其中一條日志內容如下所示。
- # 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。
# 設置監視的日志目錄
Logstash通過filter插件過濾解析input讀取的數據,可以用grok插件正則解析數據,date插件格式化日期,geoip插件獲取IP地理位置信息等等。
數據切割、格式化、清洗的配置內容如下所示。
# 將其切割轉換成key-value格式
Kibana是一個開源的分析與可視化平臺,其與Elasticsearch一起使用。通過Kibana的搜索、查看存放在Elasticsearch中的數據,繪制各種不同的圖表、表格、地圖等,直觀的展示數據,從而達到數據分析與可視化目的。
經處理的日志被推送至Kibana,Kibana上有一個“Discover”功能,可實時檢測采集的日志量變化趨勢,以及處理后的日志詳細內容,如圖4所示。

圖4 Kibana日志展示
基于采集的Nginx日志數據并結合其對應的信息含義創建Nginx日志的分析模型,可分為日志統計、用戶行為分析、服務質量分析三類,如表3所示。

表3 Nginx日志分析模型
以“網站響應狀態”模型為例繪制一個餅狀圖,其步驟如下。
(1)在左側導航欄中選擇“可視化”,點擊【創建新的可視化】;
(2)選擇可視化類型為“餅圖”;
(3)創建數據索引,選擇前面配置的索引名,即“nginx”;
(4)左側的“存儲桶”中點擊【拆分切片】,聚合選擇“次”,字段選擇“status.keyword”,并設置一個時間范圍設置為“今日”,點擊運行圖標進行繪制,如圖5所示。

圖5 繪制餅狀圖
通過對分析模型的建立以及集中可視化呈現,可有效掌握服務器的運行狀況和服務質量等相關信息,發現和排除錯誤原因、了解客戶的訪問分布以及全域業務態勢感知[4]。
基于“整體統計”類模型的可視化展示,通過“業務請求總量”、“發送字節總量”、“響應網站狀態”等指標信息,感知業務的整體服務壓力與服務質量。
基于“用戶行為”類模型的可視化展示,從操作系統、瀏覽器、物理設備等工具分析用戶的使用偏好度,通過用戶對各網站的訪問量,可分析用戶對業務偏好度;通過“用戶來源區域”可分析用戶的來源地理區域。
通過“各網站響應狀態”、“各網站處理請求的時間”等分析模型,可分析業務的穩定性,進一步反應業務的服務質量。
通過從多運維角度建立分析模型,多圖標類型繪制方式,最終將其集中匯總,可實現對全域業務的運行情況的感知以及服務質量的評價,實現全域的態勢感知。
基于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.