電商前端Nginx訪問日志收集分析實戰

使用FileBeat+Logstash+ES實現分布式日志收集

在大型項目中?,往往服務都是分布在非常多不同的機器上?,每個機器都會打印自己log日志

但是?,這樣分散的日志?,本來就無法進行整體分析。再加上微服務的負載均衡體系?,甚至連請求打到了哪個服務器?上都無法確定。給問題排查帶來了很多的困難。?因此就需要將分散的日志收集到一起?,這樣才能整體進行分析。

Java應用中?,后續我們會介紹使用skywalking?,基于微服務架構進行整體鏈路追蹤。但是這種方式會顯得比較??重。如果只是分析nginx這樣的中間件?skywalking顯然就無能為力了。?因此?,還需要一個比較簡單快捷?,對應用?無侵入的方式統一收集日志。通常?,業界常用的還是通過ELK中間件來收集日志。整體的流程是這樣的。

?le?beat,logstashes都是ELK組件中的標準處理組件。其中??ES是一個高度可擴展的全文搜索和分析引擎?,能夠????對大容量的數據進行接近實時的存儲、搜索和分析操作?,通常會Kibana部署在一起??Kibana提供圖形化的操????作功能。?LogStash是一個數據收集引擎?,他可以動態的從各種數據源搜集數?,并對數據進行過濾、分析和統一格?式等簡單操作?,并將輸出結果存儲到指定位置上。但是LogStash服務過重?,如果在每個應用上都部署一個

logStash?,會給應用服務器增加很大的負擔。?因此?,通常會在應用服務器上?,部署輕量級的?le?beat組件。?le?beat 可以持續穩定的收集簡單數據?,比如Log日志?,統一發給logstash進行收集后?,再經過處理存到ES

這一套流程是企業中最為基礎的分布式日志收集方案。這一章節就帶大家實際搭建一個?le?beatlogstash服務,?用來收集前端項目的nginx日志?,然后將nginx日志經過logstash保存到es中。

搭建LogStash

去官網下載與ES配套的LogStash?7.17.3版本發布包logstash-7.17.3-linux-x86_64.tar.gz。 下載地址:

Past Releases of Elastic Stack Software | Elastic?

使用tar?-zxvf?logstash-7.17.3-linux-?x86_64.tar.gz?將壓縮包解壓到es用戶根目錄。

解壓完成后需要配置Logstash需要的JDK。這個JDK不需要額外下載?,在logstash的安裝目錄下有一個jdk目錄?,里?面有內置的配套JDK。這時?,需要配置一個環境變量LS_JAVA_HOME指向這個內置的JDK即可。

接下來可以簡單啟動一下logstash進行測試。進入logstash的安裝目錄?,啟動一個簡單的logstash任務。

bin/logstash -e 'input { stdin { } } output { stdout {} }'

?? 這個任務啟動需要一定的時間。

? 啟動完成后,就可以從logstash的控制臺輸入信息,然后又重新輸出到控制臺中。使用ctrl_+D退出控制臺。

#控制臺輸入hello
hello    
# 控制臺輸出logstash處理結果
{"message" => "hello","@version" => "1","host" => "es-node3","@timestamp" => 2022-09-14T02:14:05.709Z
}

?這樣一個簡單的logstash就安裝完成了。

? 接下來需要對logstash的輸入和輸出目錄進行配置。進入config目錄,在目錄下直接修改logstash-sample.conf文件即可。

配置文件名字可以隨便取,后續啟動時需要指定配置文件。

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.input {beats {port => 5044}
}filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}"}}
}output {elasticsearch {hosts => ["http://localhost:9200"]#index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"index => nginxloguser => "elastic"password => "123456"}
}

這個配置中:

input表示輸入,這里表示從filebeat輸入消息,接收的端口是5044。

output表示數據的輸出,這里表示將結果輸出到本機的elasticsearch中,索引是nginxlog。

filer表示對輸入的內容進行格式化處理。這里指定的grok是logstash內置提供的一個處理非結構化數據的過濾器。他可以以一種類似于正則表達式的方式來解析文本。簡單的配置規則比如:%{NUMBER:duration} %{IP:client} 就是從文本中按空格,解析出一個數字型內容,轉化成duration字段。然后解析出一個IP格式的文本,轉換成client字段。而示例中使用的COMBINEDAPACHELOG則是針對APACHE服務器提供的一種通用的解析格式,對于解析Nginx日志同樣適用。

一條nginx的日志大概是這樣:

83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png
HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

解析出來的是一個json格式的數據,包含以下字段

InformationField Name
IP Addressclientip
User IDident
User Authenticationauth
timestamptimestamp
HTTP Verbverb
Request bodyrequest
HTTP Versionhttpversion
HTTP Status Coderesponse
Bytes servedbytes
Referrer URLreferrer
User agentagent

? 配置好這個文件后,就可以直接啟動了。

nohup bin/logstash -f config/logstash-sample.conf --config.reload.automatic &

config.reload.automatic表示配置自動更新,也就是說以后只要改動了配置文件,就會及時生效,不需要重啟logstash

nohup指令只是表示不要占據當前控制臺,將控制臺日志打印到nohup.out文件中。

logstash更詳細的配置說明參見官方文檔:Logstash Reference [7.17] | Elastic

??然后,搭建filebeat

? 之前已經啟動了logstash服務,通過5044端口監聽filebeat服務。接下來就需要在各個應用服務器上部署filebeat,往logstash發送日志消息即可。

? filebeat的下載地址:?Past Releases of Elastic Stack Software | Elastic?。同樣選擇配套的7.17.3版本filebeat-7.17.3-linux-x86_64.tar.gz。并使用tar -zxvf filebeat-7.17.3-linux-x86_64.tar.gz指令解壓。

? 在解壓目錄下已經提供了一個模版配置文件filebeat.yml,我們只需要修改這個文件即可。 這個模板文件里面的示例非常清楚,從文件讀取日志,輸出到logstash的配置,文件當中都有。這里只列出修改的部分。

? 先修改文件輸入的部分配置

# ============================== Filebeat inputs ===============================
filebeat.inputs:
-?type:?filestream# Change to true to enable this input configuration.enabled:?true?# Paths that should be crawled and fetched. Glob based paths.paths:-?/www/wwwlogs/access.log#- c:\programdata\elasticsearch\logs\*

? 然后修改輸出到logstash的部分配置

# ------------------------------ Logstash Output -------------------------------
output.logstash:# The Logstash hostshosts:?["192.168.65.114:5044"]

默認打開的是output.elasticsearch,輸入到es,這部分配置要注釋掉。

? 這樣就完成了最簡單的filebeat配置。接下來啟動filebeat即可

nohup ./filebeat -e -c filebeat.yml -d "publish" &

? filebeat任務啟動后,就會讀取nginx的日志,一旦有新的日志記錄,就會將日志轉發到logstash,然后經由logstash再轉發到ES中。并且filebeat對于讀取過的文件,都是有記錄的,即便文件改了名字也不會影響讀取的進度。比如對log日志,當前記錄的log文件,即便經過日志輪換改成了其他的名字,讀取進度也不會有變化。而新生成的log日志也可以繼續從頭讀取內容。如果需要清空filebeat的文件記錄,只需要刪除安裝目錄下的data/registry目錄即可。

更詳細的配置參見官方文檔:?Configure the Logstash output | Filebeat Reference [7.17] | Elastic

??接下來,進入ES查看數據是否生效

? 進入Kibana的前端頁面,即可查詢到nginxlog索引下的日志記錄

?后續就可以針對這些nginx的日志信息,進行分析。nginx的日志基本上是所有大型項目進行日志收集必不可少的一個重要數據來源,從nginx的日志中可以分析出大量有用的結果。比如最常見的PV,UV,還有熱點功能等。

? 例如,在Kibana中,可以通過統計Nginx的日志條數,計算出每天的PV

GET nginxlog/_count
{"query": {"range": {"timestamp": {"gte": "2022-10-21"}}}
}

? 用clientip來區分不同訪客,就可以統計出每天的UV

GET nginxlog/_search
{"query": {"range": {"timestamp": {"gte": "2022-10-21"}}},"size": 0,"aggs": {"visitOrder": {"terms": {"field": "clientip.keyword","size": 10}}}
}

? 課上就只帶大家搭建最簡單的一組服務了。在搭建過程中可以看到,filebeat和logstash對于常見的輸入輸出源都已經提供了實現,大部分情況下,只需要簡單配置即可。在實際項目中,往往會以此為基礎構建更復雜的分布式日志處理方案。 比如在logstash后增加一個Kafka,將LogStash收集的日志消息存入到kafka ,再經過基于Kafka的流式計算,將PV,UV這類的統計結果存入ES。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93865.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TwinCAT3示例項目1

目錄一、需求分析二、程序編寫1.實現1盞燈的自控(IF、TOF)2. 添加模式控制(Case、枚舉)3. 添加多盞燈(FOR、數組)4. 添加多組燈(二維數組)END項目結合了,FB,I…

如何在 VMware Workstation 虛擬機中利用 Nvidia 顯卡的硬件加速功能

這篇文章詳細介紹了如何在 VMware Workstation 虛擬機中利用 Nvidia 顯卡的硬件加速功能,通過 PCI 設備直通(Pass-Through)技術將顯卡分配給虛擬機使用: 在 VMware Workstation 虛擬機中利用 Nvidia 顯卡的硬件加速功能 1. 檢查…

設計模式(二十二)行為型:策略模式詳解

設計模式(二十二)行為型:策略模式詳解策略模式(Strategy Pattern)是 GoF 23 種設計模式中最具實用性和廣泛影響力的行為型模式之一,其核心價值在于定義一系列算法或行為,并將每個算法封裝到獨立…

AI+向量化

要理解 Java 如何結合 AI 與向量化,我們需要從向量化的核心概念、AI 中向量化的作用、Java 生態中的實現工具以及具體實踐案例四個維度展開。以下是詳細解析:一、核心概念:向量化與 AI 的關系向量化(Vectorization)是將…

Bootstap Vue 之b-form-radio-group 不顯示選中狀態問題

代碼類似&#xff1a;<b-form-radio-groupclass"mt-2"required:disabled"dfrmDisabled"v-model"childDikeForm.SafetyAppraisalRank":options"[一, 二, 三, 四]"name"rankradioopt"></b-form-radio-group>經過測…

Shell 腳本實戰:基于 for 循環的批量操作三例(賬戶創建、網絡檢測與密碼管理)

一、編寫腳本for1.sh,使用for循環創建20賬戶&#xff0c;賬戶名前綴由用戶從鍵盤輸入&#xff0c;賬戶初始密碼由用戶輸入&#xff0c;例如:test1、test2、test3、......、test10實現思路通過read命令獲取用戶輸入的賬戶前綴和初始密碼&#xff1b;加入非空校驗&#xff1a;若前…

PBR技術

一 、PBR的概述1.定義策略路由&#xff1a; PBR 是一種覆蓋路由器默認路由決策機制的技術。它允許管理員根據策略&#xff08;而不僅僅是目標地址&#xff09;來設置數據包的下一跳 IP 地址、出站接口、IP 優先級/DSCP 值等。路由策略&#xff1a;是指在路由器或三層設備上&…

STM32-ESP8266Wi-Fi模塊使用USART實現通信/創建AP和STA模式配置教程(寄存器版)

本章思維導圖&#xff1a;ESP8266WIFI模塊簡介ESP8266 是一款由樂鑫科技推出的低成本、高性能 Wi-Fi 模塊&#xff0c;廣泛應用于物聯網和嵌入式開發領域。WIFI的頻段5G和2.4G2.4G Wi-Fi與5G Wi-Fi最本質的區別即工作頻段&#xff08;無線電波的頻率&#xff09;不一樣&#xf…

算法26. 刪除有序數組中的重復項

給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使每個元素 只出現一次 &#xff0c;返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。 考慮 nums 的唯一元素的數量為 k &#xff0c;你…

ROS2中傳輸樣條曲線

在ROS2中傳輸樣條曲線需要解決兩個核心問題&#xff1a;**如何結構化表示曲線數據**和**如何高效傳輸**。以下是一套完整方案&#xff0c;結合自定義消息設計、序列化優化和QoS配置實現可靠傳輸&#xff1a;---### &#x1f4d0; 一、定義樣條曲線的自定義消息 樣條曲線通常由控…

Win11怎樣安裝DirectX 9

通過微軟官方下載安裝&#xff1a;確認系統兼容性并準備&#xff1a;確保顯卡驅動為最新版本&#xff0c;因為 DirectX 與顯卡驅動程序緊密相關。同時&#xff0c;可暫時關閉防病毒軟件和防火墻&#xff0c;防止其干擾安裝過程。下載安裝程序&#xff1a;訪問微軟官方網站下載 …

RAGFLOW~Enable RAPTOR

Enable RAPTOR 一種遞歸抽象方法&#xff0c;用于長上下文知識檢索和摘要&#xff0c;在廣泛語義理解和細微細節之間取得平衡。 RAPTOR&#xff08;遞歸抽象處理用于樹狀組織檢索&#xff09;是一種在2024年論文中引入的增強文檔預處理技術。它旨在解決多跳問答問題&#xff0c…

【機器人+相機通訊】宇樹科技相機通信

https://github.com/unitreerobotics/xr_teleoperate/blob/main/README_zh-CN.md 相機驅動與服務端 https://github.com/unitreerobotics/xr_teleoperate/blob/main/teleop/image_server/image_server.py 其中相機如果是realsense, 安裝好驅動后&#xff0c;可以使用命令查看…

機械學習中的一些優化算法(以邏輯回歸實現案例來講解)

一、混淆矩陣混淆矩陣是機器學習中評估分類模型性能的重要工具&#xff0c;尤其適用于二分類或多分類任務。它通過展示模型預測結果與實際標簽的匹配情況&#xff0c;幫助理解模型的錯誤類型&#xff08;如假陽性、假陰性等&#xff09;。以下通過二分類場景為例&#xff0c;結…

龍蜥受邀參加2025開放計算技術大會,解碼基礎模型驅動下的系統創新與生態共建

開放計算技術大會由全球最大的開放計算社區 OCP 發起&#xff0c;是開放計算領域生態覆蓋最廣且最具影響力的亞洲年度技術盛會。本屆大會由 OCP 與 OCTC&#xff08;中國電子工業標準化技術協會開放計算標準工作委員會&#xff09;兩大開放組織聯合主辦&#xff0c;將于 8 月 7…

第三階段—8天Python從入門到精通【itheima】-140節(pysqark實戰——基礎準備)

目錄 140節——pysqark實戰——基礎準備 1.學習目標 2.pysqark庫的安裝 3.pyspark的路徑安裝問題 一、為什么不需要指定路徑&#xff1f; 二、如何找到 pyspark 的具體安裝路徑&#xff1f; 三、驗證一下&#xff1a;直接定位 pyspark 的安裝路徑 四、總結&#xff1a;記…

數據庫中使用SQL作分組處理01(簡單分組)

1.簡單分組GroupBy什么就Select什么SELECT Name,Score From StudentScore GROUP BY Name,Score2.聚合函數(MAX SUM AVG COUNT)&#xff08;1&#xff09;計算1.表的全部字段都可以用聚合函數&#xff0c;但是篩選聚合函數的結果要用Having關鍵字2.聚合函數默認排除Null值IDName…

Linux基本服務——web服務解析

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 目錄 Web服務解析 虛擬Web主機 Web目錄訪問控制 Web服務解析 用途&#xff1a;基于 B/S 架構提供網頁的服務端程序 應用層協議&#xff1a;HTTP&#xff08;TCP 80…

深入理解緩存淘汰策略:LRU vs LFU 完全解析

深入理解緩存淘汰策略&#xff1a;LRU vs LFU 完全解析 文章目錄深入理解緩存淘汰策略&#xff1a;LRU vs LFU 完全解析前言一、基礎概念解析1.1 LRU&#xff08;Least Recently Used&#xff09;- 最近最少使用1.2 LFU&#xff08;Least Frequently Used&#xff09;- 最少使用…

【C語言】字符函數與字符串函數詳解

文章目錄一、字符分類函數二、字符轉換函數三、strlen函數&#xff1a;計算字符串長度功能說明使用示例模擬實現四、strcpy函數&#xff1a;字符串拷貝功能說明模擬實現五、strcat函數&#xff1a;字符串追加功能說明模擬實現六、strcmp函數&#xff1a;字符串比較比較規則模擬…