因為一個機緣巧合下發現如何使用「Nginx」Log 傳送給「ELK」做分析,本篇文章並不會教各為如何搭建「ELK ( Elasticsearch )、( Logstash )、( Kibana )」和「Nginx」直接切入重點。
一. 配置「Nginx」日誌為「JSON」格式。
PS. 建議先將「內容」貼到「Notepad++」編碼為「UTF-8」。
vi /etc/nginx/nginx.conf (Default)
#==========Nginx Log Output=============
log_format main '{"@timestamp":"$time_iso8601",'
'"@source":"$server_addr",'
'"hostname":"$hostname",'
'"ip":"$http_x_forwarded_for",'
'"client":"$remote_addr",'
'"request_method":"$request_method",'
'"scheme":"$scheme",'
'"domain":"$server_name",'
'"referer":"$http_referer",'
'"request":"$request_uri",'
'"args":"$args",'
'"size":$body_bytes_sent,'
'"status": $status,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamaddr":"$upstream_addr",'
'"http_user_agent":"$http_user_agent",'
'"https":"$https"'
'}';
瀏覽「Nginx」網站「確認」Nginx Log 為「JSON」格式
二. 配置「Logstash」允許「input」為「JSON」搭配「Filter」插件功能。
PS. 建議先將「內容」貼到「Notepad++」編碼為「UTF-8」。
PS. 「filter」和「mutate」是「插件」功能,為了「字段」轉型。
PS. 「geoip」可以分析「國家、經緯度、省份....等」前提是「Internet」必須要通。
#==========Logstash Log Intput=============
input {
beats { #輸入「監聽」「TCP 5043」端口,接收来自 Filebeat 的 Log
port => "5043"
codec => "json"
}
}
filter {
mutate {
convert => [ "status","integer" ]
convert => [ "size","integer" ]
convert => [ "upstreatime","float" ]
remove_field => "message"
}
geoip {
source => "ip"
}
}
output {
elasticsearch { hosts => ["localhost:9200"] } #輸出「結果」到「elasticsearch」「TCP 9200」端口。
stdout { codec => rubydebug }
}
三. 配置「Filebeat」(ELK Agent) 傳送「Nginx Log」至「Logstash」
filebeat.prospectors:
- input_type: log #輸入 type「log」
paths:
- /var/log/nginx/access.log #指定推送日誌「Log」文件
fields:
host_ip: 192.168.8.24 #告知「來源」IP 位址
tags: ["nginx"] #設定「標籤」
output.logstash:
hosts: ["192.168.8.25:5043"] #指定接收Logstash
參考資料