一、寫在前面
默認使用rpm包安裝好了E、L、K、3個軟件即可。當然了,還有必需的java環境JDK,本文基於elk5.20單獨監控nginx 日誌分析再進行可視化圖形展示,並在用戶前端使用nginx 來代理kibana的請求響應,訪問權限方面暫時使用HTTP 基本認證加密用戶登錄(elk5.2中的x-path可以試用等有時間在去測試)
先插入一張線上的測試圖:
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界面即可,如下圖:
添加一個索引,這個索引名字就是我們之前在logstash配置文件中導入es中的那個,本文中是logstash-nginx-access-*,如下圖:
查看索引,目前自由一個,設置爲加星,即是discover默認突出顯示的。
然後我們點擊Discover,即可看到我們倒入的數據了。如下圖:
最後就是之前上傳dashboard圖
五、小結
ELK優勢:
針對網絡***事件時,方便運維人員查找溯源。
日誌集中收集存儲,方便後續分析
優化業務、系統時,做到有據可依