企業級日誌分析平臺(八):ELKStack之極速入門(上)

image_1d4d64taf144h8fh18qkbrd18hi9.png-219.7kB

 

一,EKL介紹

 

1.1 需求背景

通常咱們須要進行日誌分析場景:直接在日誌文件中 grep、awk 就能夠得到本身想要的信息。但在規模較大的場景中,此方法效率低下,面臨問題包括日誌量太大如何歸檔、文本搜索太慢怎麼辦、如何多維度查詢。須要集中化的日誌管理,全部服務器上的日誌收集彙總。常看法決思路是創建集中式日誌收集系統,將全部節點上的日誌統一收集,管理,訪問。java

通常大型系統是一個分佈式部署的架構,不一樣的服務模塊部署在不一樣的服務器上,問題出現時,大部分狀況須要根據問題暴露的關鍵信息,定位到具體的服務器和服務模塊,構建一套集中式日誌系統,能夠提升定位問題的效率。linux

一個完整的集中式日誌系統,須要包含如下幾個主要特色: 
收集-可以採集多種來源的日誌數據 
傳輸-可以穩定的把日誌數據傳輸到中央系統 
存儲-如何存儲日誌數據 
分析-能夠支持 UI 分析 
警告-可以提供錯誤報告,監控機制
nginx

ELK提供了一整套解決方案,而且都是開源軟件,之間互相配合使用,完美銜接,高效的知足了不少場合的應用。目前主流的一種日誌系統。正則表達式

 

1.2 ELKStack介紹

image_1crs4cuu3179m1md01d3d1lp2d5d9.png-53.4kB

Logstash : 開源的服務器端數據處理管道,可以同時從多個來源採集數據,轉換數據,而後將數據存儲到數據庫中。redis

Elasticsearch:搜索,分析和存儲數據,分佈式數據庫。數據庫

Kibana:數據可視化。apache

Beats:輕量型採集器的平臺,從邊緣機器向Logstash和Elasticsearch發送數據。vim

Filebeat:輕量型日誌採集器。安全

https://www.elastic.co/cn/ruby

https://www.elastic.co/subscriptions

 

1.3 ELK Stack架構

image_1crs4d9pb10dp10e815sv2jknsem.png-96.2kB

Input:輸入,輸出數據能夠是Stdin,File,TCP,Redis,Syslog等

Filter:過濾,將日誌格式化。有豐富的過濾插件:Grok正則捕獲,Date時間處理,Json編碼解碼,Mutate數據修改等

Output:輸出,輸出目標能夠是Stdout,File,TCP,Redis,ES等

 

二,環境部署

主機名 IP 備註
elkstack 192.168.200.70 內存3G
 

ELK全部包

連接:https://pan.baidu.com/s/1PTUOKy5MNXYIhSUkkbb-DA 
提取碼:fa6n

 

2.1 環境要求

cat /etc/redhat-release

uname -r

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

image_1d0932aql180l12g0u09ti3gufo.png-14.9kB

 

2.2 安裝jdk環境

ls

tar xf jdk-8u60-linux-x64.tar.gz -C /usr/local/

mv /usr/local/jdk1.8.0_60 /usr/local/jdk

image_1d0952q9ojtd1n20vuo10ems901l.png-19.3kB

 

2.3 配置java環境變量

vim /etc/profile

tail -3 /etc/profile

 
  1. export JAVA_HOME=/usr/local/jdk/
  2. export PATH=$PATH:$JAVA_HOME/bin
  3. export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

source /etc/profile

java -version

image_1d0954oih13v4bb21eh01hhr1i7r22.png-39.4kB

 

三,kibana的安裝和啓動

 

3.1 kibana下載地址

kibana主要用來展示數據,它自己不存儲數據

https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-linux-x86_64.tar.gz

 

3.2 編譯部署kibana

useradd -s /sbin/nologin -M elk

ls

tar xf kibana-6.2.3-linux-x86_64.tar.gz -C /usr/local/

mv /usr/local/kibana-6.2.3-linux-x86_64 /usr/local/kibana

image_1d09596bm17taqeef6ufnebo22v.png-30.8kB

 

3.3 kibana配置文件修改

 

修改如下配置文件

cat -n /usr/local/kibana/config/kibana.yml | sed -n '2p;7p;21p;39p;40p'

 
  1. 2 #server.port: 5601
  2. 7 #server.host: "localhost"
  3. 21 #elasticsearch.url: "http://localhost:9200"
  4. 39 #elasticsearch.username: "user"
  5. 40 #elasticsearch.password: "pass"

image_1d0959mnr4r9bsdfd1bnaqs13c.png-24.5kB

 

修改爲以下配置文件

vim /usr/local/kibana/config/kibana.yml

cat -n /usr/local/kibana/config/kibana.yml | sed -n '2p;7p;21p;39p;40p'

 
  1. 2 server.port: 5601 #暫時就先修改這兩行
  2. 7 server.host: "0.0.0.0" #暫時就先修改這兩行
  3. 21 #elasticsearch.url: "http://localhost:9200"
  4. 39 #elasticsearch.username: "user"
  5. 40 #elasticsearch.password: "pass"

image_1d095bo623g61i58sjpv9i15np4p.png-27.7kB

 

3.4 把kibana目錄改成elk用戶

chown -R elk:elk /usr/local/kibana/

image_1d095cjld12mn16s31ijr50gdkl56.png-16.2kB

 

3.5 新增啓動腳本vim /usr/local/kibana/bin/start.sh

vim /usr/local/kibana/bin/start.sh

cat /usr/local/kibana/bin/start.sh

 
  1. nohup /usr/local/kibana/bin/kibana >> /tmp/kibana.log 2>> /tmp/kibana.log &

chmod a+x /usr/local/kibana/bin/start.sh

image_1d095elp81akp1710iotnra41m66.png-28.4kB

 

3.6 用普通用戶啓動kibana

su -s /bin/bash elk '/usr/local/kibana/bin/start.sh'

ps -ef | grep elk | grep -v grep

若是有防火牆須要開放tcp5601端口

image_1d095fh1s74118m3140fb9pb0v6j.png-19.7kB

 

3.7 查看錯誤日誌

cat /tmp/kibana.log | grep warning | head -5

這裏有個警告,意思是鏈接不上elasticsearch,忽略,由於咱們尚未裝它。

 
  1. {"type":"log","@timestamp":"2019-01-03T14:12:30Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"Unable to revive connection: http://localhost:9200/"}
  2. {"type":"log","@timestamp":"2019-01-03T14:12:30Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"No living connections"}
  3. {"type":"log","@timestamp":"2019-01-03T14:12:32Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"Unable to revive connection: http://localhost:9200/"}
  4. {"type":"log","@timestamp":"2019-01-03T14:12:32Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"No living connections"}
  5. {"type":"log","@timestamp":"2019-01-03T14:12:35Z","tags":["warning","elasticsearch","admin"],"pid":1451,"message":"Unable to revive connection: http://localhost:9200/"}

image_1d095gdm61lc7d531c9mfgt1jpm70.png-52.2kB

 

3.7 訪問kibana

http://192.168.200.70:5601

image_1d095hu9m19hj10flnv9qj163s7d.png-146.6kB

 

四,使用nginx來限制訪問kibana

 

4.1 使用nginx轉發kibana

因爲kibana沒有權限控制,能夠藉助nginx來部署認證和進行ip控制

 

修改kibana的配置文件,改成監聽127.0.0.1

vim /usr/local/kibana/config/kibana.yml

sed -n '7p' /usr/local/kibana/config/kibana.yml

image_1d095jmlpnkdpes1kb1rdv1aib7q.png-15.1kB

 

殺掉kibana,重啓動kibana

ps -ef | grep elk

kill -9 1451

ps -ef | grep elk

su -s /bin/bash elk '/usr/local/kibana/bin/start.sh'

ps -ef | grep elk | grep -v grep

image_1d095l4j93p21jk214jj161qr9l87.png-45.8kB

 

4.2 藉助nginx來限制訪問,控制源IP的訪問

 

編譯安裝nginx

yum -y install pcre-devel openssl-devel

tar xf nginx-1.10.2.tar.gz -C /usr/src/

cd /usr/src/nginx-1.10.2/

useradd -s /sbin/nologin -M nginx

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make && make install

ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

nginx -V

image_1d095pjni168rmdlcv5ok1m6u97.png-140.2kB


image_1d095stk7d0in57120lk4313tqbn.png-59.9kB


image_1d095urfe9ledm4ams18cpkc8c4.png-129.1kB

 

編輯nginx配置文件,進行訪問控制,並啓動nginx

cd /usr/local/nginx/

cp conf/nginx.conf{,.bak}

egrep -v "#|^$" conf/nginx.conf.bak > conf/nginx.conf

vim conf/nginx.conf

cat conf/nginx.conf

 
  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. log_format main '$remote_addr - $remote_user [$time_local] "$request"'
  9. '$status $body_bytes_sent "$http_referer"'
  10. '"$http_user_agent""$http_x_forwarded_for"';
  11. sendfile on;
  12. keepalive_timeout 65;
  13. server {
  14. listen 5609;
  15. access_log /usr/local/nginx/logs/kibana_access.log main;
  16. error_log /usr/local/nginx/logs/kibana_error.log error;
  17. location / {
  18. allow 192.168.200.1;
  19. deny all;
  20. proxy_pass http://127.0.0.1:5601;
  21. }
  22. }
  23. }

nginx -t

nginx

netstat -antup | grep nginx

image_1d096525me18f3c13er1plo1o43eh.png-91.8kB

 

4.3 訪問nginx監聽端口5609

http://192.168.200.70:5609

image_1d0968cj41g9s1s3i1u4igqg463fe.png-153.1kB

 

4.4 若是訪問IP常常改變,受權就會很麻煩。能夠利用nginx的訪問驗證功能來認證訪問

 
  1. location / {
  2. auth_basic "elk auth";
  3. auth_basic_user_file /usr/local/nginx/conf/htpasswd;
  4. proxy_pass http://127.0.0.1:5601;
  5. }
 

五,elasticsearch的安裝和啓動

elasticsearch未安裝以前,kibana網頁上報錯,提示找不到elasticsearch。

 

5.1 elasticsearch的下載地址

elastic search主要用來存儲數據,供kibana調取並進行展示

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz

 

5.2 解壓部署elasticsearch

ls

tar xf elasticsearch-6.2.3.tar.gz -C /usr/local/

mv /usr/local/elasticsearch-6.2.3 /usr/local/elasticsearch

image_1d09ccos0lg61qrf1oe910cg143bh8.png-23.6kB

 

5.3 elasticsearch配置

 

修改如下配置文件中的代碼

cp /usr/local/elasticsearch/config/elasticsearch.yml{,.bak}

cat -n /usr/local/elasticsearch/config/elasticsearch.yml | sed -n '33p;37p;55p;59p'

 
  1. 33 #path.data: /path/to/data
  2. 37 #path.logs: /path/to/logs
  3. 55 #network.host: 192.168.0.1
  4. 59 #http.port: 9200

image_1d09ce0081ejld4m1jtv1knnqa9hl.png-26.5kB

 

修改爲以下配置文件中的代碼

vim /usr/local/elasticsearch/config/elasticsearch.yml

cat -n /usr/local/elasticsearch/config/elasticsearch.yml | sed -n '33p;37p;55p;59p'

 
  1. 33 path.data: /usr/local/elasticsearch/data
  2. 37 path.logs: /usr/local/elasticsearch/logs
  3. 55 network.host: 127.0.0.1
  4. 59 http.port: 9200

image_1d09cigbp1642golb9osj1usck1.png-26.3kB

 

5.4 把elasticsearch目錄的用戶和屬主都更新爲elk

chown -R elk:elk /usr/local/elasticsearch

image_1d09cjdn01j9r1lje1dh7s1e1uf0ke.png-16.9kB

 

5.5 更改jvm的內存限制(看我的配置,這裏沒作修改)

由於咱們實驗環境是虛擬機,1g內存一下子就會被跑滿,就會很慢。因此,咱們要調整內存佔用的限制。

cat -n /usr/local/elasticsearch/config/jvm.options | sed -n '22p;23p'

 
  1. 22 -Xms1g
  2. 23 -Xmx1g

image_1d09ck67j1br8lig9l11vaq1idplb.png-13.1kB


vim /usr/local/elasticsearch/config/jvm.options --->這裏沒作修改

cat -n /usr/local/elasticsearch/config/jvm.options | sed -n '22p;23p'

 
  1. 22 -Xms100M
  2. 23 -Xmx100M
 

5.6 編輯elasticsearch啓動腳本,使用-d進行後臺啓動。

vim /usr/local/elasticsearch/bin/start.sh

cat /usr/local/elasticsearch/bin/start.sh

 
  1. /usr/local/elasticsearch/bin/elasticsearch -d >> /tmp/elasticsearch.log 2>> /tmp/elasticsearch.log

chmod a+x /usr/local/elasticsearch/bin/start.sh

image_1d09coq0d1q7m1faqvpgg9611ahlo.png-32.9kB

 

5.7 啓動elasticsearch

su -s /bin/bash elk '/usr/local/elasticsearch/bin/start.sh'

ps -ef | grep elk | grep -v grep

image_1d09cplna1uso2n1tv5qui1o9nm5.png-65.6kB

 

5.8 觀察日誌,看看kibana日誌還會不會報elasticsearch錯誤

> /tmp/kibana.log

tail -f /tmp/kibana.log

從新刷新url:http://192.168.200.70:5609

觀察日誌,看看還有沒有報錯。

image_1d09d3mm2mpe1mef143kj1i149p2m.png-326.7kB


image_1d09d2ctl16481i0q11sf1lncj9129.png-238.3kB

 

備註說明

假如elasticsearch若是監聽在非127.0.0.1,那麼須要修改內核參數等,在這裏就很少說了。

 

六,logstash的安裝和啓動

 

6.1 logstash的下載地址

用來讀取日誌,正則分析日誌,發送給elasticsearch數據庫

https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.tar.gz

 

6.2 解壓部署logstash

ls

tar xf logstash-6.2.3.tar.gz -C /usr/local/

mv /usr/local/logstash-6.2.3 /usr/local/logstash

image_1d09detsnshv1k5op7c7mkkmr33.png-24.6kB

 

6.3 更改logstash jvm配置,加入內存限制(看我的配置,這裏沒有修改)

 

修改以下配置

cat -n /usr/local/logstash/config/jvm.options | sed -n '6p;7p;'

 
  1. 6 -Xms1g
  2. 7 -Xmx1g

image_1d09dfuh5ml2ihp1meq14k413ok3g.png-12.7kB

 

修改爲以下配置(沒作修改)

cat -n /usr/local/logstash/config/jvm.options | sed -n '6p;7p;'

 
  1. 6 -Xms150M
  2. 7 -Xmx150M
 

6.4 修改logstash配置文件

 

配置文件沒有,須要新建

vim /usr/local/logstash/config/logstash.conf

cat /usr/local/logstash/config/logstash.conf

 
  1. input {
  2. file {
  3. path => "/usr/local/nginx/logs/kibana_access.log" #讀取日誌路徑
  4. }
  5. }
  6. output {
  7. elasticsearch {
  8. hosts => ["http://127.0.0.1:9200"] #保存日誌url
  9. }
  10. }

image_1d09dn9591lhjsbe31h25h9b94d.png-24.4kB

 

6.5 logstash的啓動腳本

vim /usr/local/logstash/bin/start.sh

cat /usr/local/logstash/bin/start.sh

 
  1. nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf >> /tmp/logstash.log 2>> /tmp/logstash.log &

chmod a+x /usr/local/logstash/bin/start.sh

image_1d09dot8j1he1g3mb8s6u414l04q.png-33kB

 

6.6 啓動logstash

logstash並無監聽端口,所以不須要用elk用戶來啓動

/usr/local/logstash/bin/start.sh

ps -ef | grep logstash

image_1d09dpmvlinr1n41o3r16fir4757.png-99.5kB

 

特別提示

logstash啓動的比較慢,須要多等一下子。 
若是在kibana的Discover裏能看到添加索引就說明logstash啓動好了

image_1d09e591718c1bkjdkdbks13o5k.png-147.7kB

 

6.7 在kibana上配置索引,展示獲取的kibana日誌數據

image_1d09e768k16kf1kki1lte1g8v1tol61.png-141kB


image_1d09e8r6n116vngvlie10r9h6s6u.png-143.2kB


image_1d09ebv42j5q1n2q19hk9b51n908b.png-196.3kB


圖片說明image_1crs4fqsb13sh1ojro67feh1k3d3h.png-304.7kB

image_1d09k2tbm1houcb81obn1fp62m99.png-226.8kB


進行數據展示字段的篩選

image_1d09k7k3j115u10s81m7lmrl11flm.png-222.8kB


image_1d09kuu4vjhadqu1mii147473m13.png-225.1kB


對nginx的kibana_access.log進行數據追蹤,對比分析

tail -f /usr/local/nginx/logs/kibana_access.log

image_1d09l3gsp6o847k228gsqaji1t.png-231.3kB


image_1d09l2blv5a1nn4p4k1r791p1n1g.png-235.1kB

 

七,logstash使用詳解

 

執行下邊的命令

ps -ef | grep logstash

kill -9 17120

/usr/local/logstash/bin/logstash -e ""

welcome --->輸入的內容

 
  1. {
  2. "@version" => "1",
  3. "@timestamp" => 2018-08-16T13:18:13.383Z,
  4. "message" => "welcome",
  5. "type" => "stdin",
  6. "host" => "elkstack"
  7. }

能夠看到logstash結尾自動添加了幾個字段,時間戳@timestamp,版本@version,輸入的類型type,以及主機名host

image_1d09grf7ja1v421jnfh6l2jk8r.png-189.9kB

 

7.1 logstash工做原理

Logstash使用管道方式進行日誌的蒐集處理和輸出。有點相似於管道命令xxx|ccc|ddd,xxx執行完了會執行ccc,而後執行ddd。

在logstash中,包括了三個階段:

輸入input ---> 處理filter(不是必須的) ---> 輸出output

image_1crs4hbac1uvi1n2f1jtf16hr1pna55.png-65.2kB

每一個階段都有不少的插件配合工做,好比file,elasticsearch,redis等

每一個階段也能夠指定多種方式,好比輸出既能夠輸出到elasticsearch中,也能夠指定到stdout在控制檯打印。

因爲這種插件式的組織方式,使得logstash變得易於擴展和定製

 

7.2 命令行中經常使用的命令

-f:經過這個命令能夠指定Logstash的配置文件,根據配置文件配置logstash

-e:後面跟着字符串,該字符串能夠被看成logstash的配置(若是是""則默認使用stdin做爲默認輸入,stdout做爲默認輸出)

-l:日誌輸出的地址(默認就是stdout直接在控制檯中輸出)

-t:測試配置文件是否正確,而後退出。

 

7.3 配置文件說明

前面介紹過logstash基本上由三部分組成,input,output以及用戶須要才添加的filter,所以標準的配置文件格式以下:

 
  1. input {...}
  2. filter {...}
  3. output {...}

image_1d099vcf213lajap1ebtfbb1m81gr.png-92.4kB


在每一個部分中,也能夠指定多個訪問方式,例如我想要指定兩個日誌來源文件,則能夠這樣寫:

 
  1. input {
  2. file { path => "/var/log/messages" type => "syslog" }
  3. file { path => "/var/log/apache/access.log" type => "apache" }
  4. }

相似的,若是在filter中添加了多種處理規則,則按照它的順序----處理,可是有一些插件並非線程安全的。

好比在filter中指定了兩個同樣的插件,這兩個任務並不能保證準確的按順序執行,所以官方也推薦避免在filter中重複使用插件。

 

八,利用logstash的正則進行日誌信息的抓取測試

咱們更改一下logstash的配置文件進行正則抓取數據的測試。

 

logstash提取數據段配置文件模板詳解

cd /usr/local/logstash/config/

vim logstash.conf

cat logstash.conf

 
  1. input {
  2. stdin{} #從標準輸入讀取數據
  3. }
  4. filter {
  5. grok {
  6. match => {
  7. "message" => '(?<字段名>正則表達式).*'
  8. }
  9. }
  10. }
  11. output {
  12. elasticsearch { #若是要輸入到elasticsearch裏,那麼須要註釋掉stdout{}
  13. hosts => ["http://127.0.0.1:9200"]
  14. }
  15. stdout { #只將信息輸出到屏幕上
  16. codec => rubydebug #用於正則提取測試,將正則抓取結果輸出到屏幕上
  17. }
  18. }
 

殺掉後臺的logstash進程

ps -ef | grep logstash --->查詢PID號

kill -9 PID號

image_1d09lj1b5h3kilrk9f1k6013q334.png-95.8kB

 

爲了測試方便,咱們暫時交互式啓動logstash

/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

 

8.1 測試性抓取日誌字段

 

用於進行測試輸入的日誌內容

Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.

 

修改logstash配置文件

vim /usr/local/logstash/config/logstash.conf

cat /usr/local/logstash/config/logstash.conf

 
  1. input {
  2. stdin{}
  3. }
  4. filter {
  5. grok {
  6. match => {
  7. "message" => '(?<mydate>[a-zA-Z]+ [0-9]+ [0-9:]+) (?<hostname>[a-zA-Z]+).*'
  8. }
  9. }
  10. }
  11. output {
  12. elasticsearch {
  13. hosts => ["http://127.0.0.1:9200"]
  14. }
  15. stdout {
  16. codec => rubydebug
  17. }
  18. }

image_1d09hisgb1qdn1papq7oad9ebv98.png-35.8kB

 

交互式啓動logstash

/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

image_1d09hjd2umi41f5b1r2eluoli19l.png-8kB

 

輸出結果以下

Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.

 
  1. {
  2. "hostname" => "ELK", #這就是抓取的字段
  3. "mydate" => "Aug 16 18:29:49", #這就是抓取的字段
  4. "@timestamp" => 2018-08-16T12:47:46.904Z,
  5. "message" => "Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.",
  6. "host" => "elkstack",
  7. "@version" => "1"
  8. }

image_1d09hopkn13infr872618fjlkuao.png-206kB

請經過配置文件進行反覆測試驗證,熟悉logstash正則表達的使用方法

 

8.2 將抓取的字段信息輸入到elasticsearch並顯示在kibana上

 

logstash配置文件以下

vim /usr/local/logstash/config/logstash.conf

cat /usr/local/logstash/config/logstash.conf

 
  1. input {
  2. stdin{}
  3. }
  4. filter {
  5. grok {
  6. match => {
  7. "message" => '(?<mydate>[a-zA-Z]+ [0-9]+ [0-9:]+) (?<hostname>[a-zA-Z]+).*'
  8. }
  9. }
  10. }
  11. output {
  12. elasticsearch {
  13. hosts => ["http://127.0.0.1:9200"]
  14. }
  15. # stdout {
  16. # codec => rubydebug
  17. # }
  18. }

image_1d09hv1uds3p1ect56lp4n124tbl.png-36.5kB

 

用於進行測試輸入的日誌內容

/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

Aug 16 18:29:49 ELK systemd: Startup finished in 789ms (kernel) + 1.465s (initrd) + 18.959s (userspace) = 21.214s.

image_1d09lhj3s1hvq1ed2138d18omfi22n.png-179.2kB


image_1d09lh8rb6sf62t1rca6jdqhg2a.png-172.5kB

 

九,elk技術全量分析nginx日誌

logstash若是直接把一整行日誌直接發送給elasticsearch,kibana顯示出來就沒有什麼意義,咱們須要提取本身想要的字段。假如說咱們想要提取響應碼,用戶訪問url,響應時間等,就得依靠正則來提取。

 

logstash提取數據段配置文件模板詳解

 
  1. input { #日誌輸入來源函數
  2. file {
  3. path => "/usr/local/nginx/logs/kibana_access.log"
  4. }
  5. }
  6. filter { #字段數據提取函數
  7. grok {
  8. match => {
  9. "message" => '(?<字段名>正則表達式).*'
  10. }
  11. }
  12. }
  13. output { #數據輸出目的地函數
  14. elasticsearch {
  15. hosts => ["http://127.0.0.1:9200"]
  16. }
  17. }
 

9.1 利用正則從message中提取kibana訪問日誌的IP地址

image_1crs4ihgn14a1d1l55snp51cq6c.png-48.6kB

vim /usr/local/logstash/config/logstash.conf

cat /usr/local/logstash/config/logstash.conf

 
  1. input {
  2. file {
  3. path => "/usr/local/nginx/logs/kibana_access.log"
  4. }
  5. }
  6. filter {
  7. grok {
  8. match => {
  9. "message" => '(?<IP>[0-9.]+) .*'
  10. }
  11. }
  12. }
  13. output {
  14. elasticsearch {
  15. hosts => ["http://127.0.0.1:9200"]
  16. }
  17. }

image_1d09lnnkr198ifqo1et718ssrom3h.png-32kB

 

交互式啓動logstash

/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

image_1d09m0p3k981isttd4ua46g33u.png-169kB

 

檢查測試結果

image_1d09m1ji8l4o1prl507ls1ujt4b.png-162.3kB


image_1d09m300e7uo11r1v0sgsv1jdd4o.png-223.3kB

 

9.2 從message中提取kibana訪問日誌的time,url,返回碼,字節大小

vim /usr/local/logstash/config/logstash.conf

cat /usr/local/logstash/config/logstash.conf

 
  1. input {
  2. file {
  3. path => "/usr/local/nginx/logs/kibana_access.log"
  4. }
  5. }
  6. filter {
  7. grok {
  8. match => {
  9. "message" => '(?<IP>[0-9.]+) .*HTTP/[0-9.]+"(?<mark>[0-9]+) (?<size>[0-9]+)[ "]+(?<url>[a-zA-Z]+://[0-9.]+:[0-9]+/[a-zA-Z/]+)".*'
  10. }
  11. }
  12. }
  13. output {
  14. elasticsearch {
  15. hosts => ["http://127.0.0.1:9200"]
  16. }
  17. }

image_1d09m56r81tnhrc51ts3146p1lql55.png-42.6kB

 

交互式啓動logstash

/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf

image_1d09m6srm15j4f3a6ncag73a5i.png-170.5kB

 

檢查測試結果

image_1d09m89gbo1flpr1duf1squ1fr25v.png-193.2kB

相關文章
相關標籤/搜索