ELK系統分析Nginx日誌並對數據進行可視化展示

一、寫在前面

   默認使用rpm包安裝好了E、L、K、3個軟件即可。當然了,還有必需的java環境JDK,本文基於elk5.20單獨監控nginx 日誌分析再進行可視化圖形展示,並在用戶前端使用nginx 來代理kibana的請求響應,訪問權限方面暫時使用HTTP 基本認證加密用戶登錄(elk5.2中的x-path可以試用等有時間在去測試)

先插入一張線上的測試圖:

wKioL1iv6-WAHYQaAAZmiq6H6N8327.png-wh_50

nginx日誌文件其中一行:

119.122.96.163 - - [03/Apr/2015:15:14:46 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0"


nginx 服務器日誌的log_format格式:

log_format  main  '"$http_x_forwarded_for" - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent"';


線上前端使用的中nginx代理

$http_x_forwarded_for 地址纔是客戶真正地址

二、配置logstash

1.修改配置文件,/etc/logstash/conf.d下。創建nginx.conf配置文件,內容如下:

[root@www conf.d]# cat nginx.conf
input {
    file {
        path => "/usr/local/nginx/logs/access.log"
        start_position => "beginning"
        ignore_older => 0
    }
}
filter {
    grok {
        match => { "message" => "%{NGINXACCESS}" }
        patterns_dir => ["/etc/logstash/patterns"]
    }
    geoip {
      source => "http_x_forwarded_for"
#      source => "clientip"
      target => "geoip"
      database => "/etc/logstash/GeoLiteCity.dat"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
    }
    mutate {
      convert => [ "[geoip][coordinates]", "float" ]
      convert => [ "response","integer" ]
      convert => [ "bytes","integer" ]
      replace => { "type" => "nginx_access" }
      remove_field => "message"
    }

    date {
      match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]

    }
    mutate {
      remove_field => "timestamp"

    }
}
output {
    
    

elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "logstash-nginx-access-%{+YYYY.MM.dd}" #要以logstash開頭
    }
    stdout {codec => rubydebug}

}


input段:
  file:使用file 作爲輸入源
     path: 日誌的路徑,支持/var/log*.log,及[ "/var/log/messages", "/var/log/*.log" ] 格式
     start_position: 從文件的開始讀取事件。另外還有end參數
     ignore_older: 忽略早於24小時(默認值86400)的日誌,設爲0,即關閉該功能,以防止文件中的事件由於是早期的被logstash所忽略。

filter段:
  grok:數據結構化轉換工具
     match:匹配條件格式,將nginx日誌作爲message變量,並應用grok條件NGINXACCESS進行轉換
  geoip:該過濾器從geoip中匹配ip字段,顯示該ip的地理位置
     source:ip來源字段,這裏我們選擇的是日誌文件中的最後一個字段,如果你的是默認的nginx日誌,選擇第一個字段即可(注:這裏寫的字段是/opt/logstash/patterns/nginx 裏面定義轉換後的)
     target:指定插入的logstash字斷目標存儲爲geoip
     database:geoip數據庫的存放路徑
     add_field:  增加的字段,座標經度
     add_field:  增加的字段,座標緯度
  mutate: 數據的修改、刪除、類型轉換
     convert:  將座標轉爲float類型
     convert:  http的響應代碼字段轉換成 int
     convert:  http的傳輸字節轉換成int
     replace:  替換一個字段
     remove_field: 移除message 的內容,因爲數據已經過濾了一份,這裏不必在用到該字段了。不然會相當於存兩份
  date: 時間處理,該插件很實用,主要是用你日誌文件中事件的事件來對timestamp進行轉換,導入老的數據必備!
     match:匹配到timestamp字段後,修改格式爲dd/MMM/yyyy:HH:mm:ss Z
  mutate:數據修改
     remove_field: 移除timestamp字段。

output段:
  elasticsearch:輸出到elasticsearch中
     



2.創建logstash配置文件之後,我們還要去建立grok使用的表達式,因爲logstash 的配置文件裏定義的使用轉換格式語法,先去logstash的安裝目錄,默認安裝位置:/etc/logstash/patterns下,在該位置創建一個目錄patterns:

[root@www conf.d]#mkdir /etc/logstash/patterns

在該目錄下創建格式文件,內容如下:

[root@www conf.d]# cat /etc/logstash/patterns/nginx


NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS \"%{IPV4:http_x_forwarded_for}\" - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent}

注意格式和空格

3.然後就是logstash中配置的GeoIP的數據庫解析ip了,這裏是用了開源的ip數據源,用來分析客戶端的ip歸屬地。官網在這裏:MAXMIND

先把庫下載到本地

[root@www conf.d]# wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz

然後解壓到當前路徑,並移到配置的路徑下並改成配置中的名字

[root@www conf.d]# gzip -d GeoLite2-City.mmdb.gz

[root@www conf.d]# mv GeoLite2-City.mmdb GeoLiteCity.dat

啓動logstash

[root@www ~]#/etc/init.d/logstash start

三、配置Elasticsearch

主要修改數據存放路徑的權限

[root@www ~]#chown elasticsearch. /var/lib/elasticsearch -R

啓動elasticsearch

[root@www ~]#/etc/init.d/elasticsearch start

我們在去看下es裏的索引,應該已經在倒入數據了

[root@www ~]# curl 'localhost:9200/_cat/indices?v'

health status index                            pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana                            1   1          1            0      3.1kb          3.1kb
yellow open   logstash-nginx-access-2017.02.24      5   1      1170            0     1.9mb         1.9mb





四、安裝nginx 配置kibana代理

略過


訪問一下網站輸入之前之前建立的用戶和密碼,正常的訪問kibana界面即可,如下圖:

wKiom1iv-WeBPVRxAAFu_78f03s278.png-wh_50

添加一個索引,這個索引名字就是我們之前在logstash配置文件中導入es中的那個,本文中是logstash-nginx-access-*,如下圖:

wKioL1iv-bmQpMlhAAENPonTU0I797.png-wh_50

查看索引,目前自由一個,設置爲加星,即是discover默認突出顯示的。

wKiom1iv-hLBrOjmAAFThSkWBZQ922.png-wh_50

然後我們點擊Discover,即可看到我們倒入的數據了。如下圖:

wKiom1iv-mSR4F2RAAFU7RL_Nl8849.png-wh_50

最後就是之前上傳dashboard圖

五、小結

ELK優勢:

  • 針對網絡***事件時,方便運維人員查找溯源。

  • 日誌集中收集存儲,方便後續分析

  • 優化業務、系統時,做到有據可依


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章