前面講了ELK的部署以及Logstash的插件的安裝方式,本篇就介紹一下如何使用Logstash讀取nginx的日誌,並寫入ES中,通過Kibana分析。
ELK系列(一)、安裝ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0
ELK系列(二)、在Kibana中使用RESTful操作ES庫
-----------------------------使用Logstash讀取nginx日誌------------------------------------
日誌格式
上面講了如何給Logstash安裝插件以及離線安裝,安裝好的插件就在Logstash目錄下:
/opt/app/logstash-7.7.0/vendor/bundle/jruby/2.5.0/gems
nginx的日誌默認結構爲HTTPD_COMBINEDLOG,可以對比/usr/local/nginx/conf/nginx.conf和/opt/app/logstash-7.7.0/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/httpd 中的格式,然後我們就可以直接使用該格式的正則作爲filter內容。
輸出到控制檯
配置logstash配置文件:
vim $LS_HOME/config/logstash_nginxlog2print.conf
input {
# 從文件讀取日誌信息
file {
path => "/usr/local/nginx/logs/access.log"
type => "system"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
# 標準輸出
stdout {}
}
啓動驗證:
bin/logstash -f config/logstash_nginxlog2print.conf
刷新nginx頁面,或使用curl命令訪問nginx,然後查看logstash的打印信息:
其中setting {:sincedb_path=>"/opt/app/logstash-7.7.0/data/plugins/inputs/file/.sincedb_d2343edad78a7252d2ea9cba15bbff6d", :path=>["/usr/local/nginx/logs/access.log"]}表示此配置文件讀取該access.log文件,且讀取的位置信息記錄在sincedb文件內,下次再啓動對這個日誌文件的監控都會從記錄的offset開始讀,因此如果需要從頭讀取需要把這個文件先刪掉。
輸出到ES
配置logstash配置文件
vim $LS_HOME/config/logstash_nginxlog2es.conf
input {
# 從文件讀取日誌信息
file {
path => "/usr/local/nginx/logs/access.log"
type => "nginx_access"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
# 輸出es
elasticsearch {
hosts => ["wykd:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
啓動驗證
先刪掉剛纔的sincedb文件,然後啓動監控並寫入ES:
rm -rf /opt/app/logstash-7.7.0/data/plugins/inputs/file/.sincedb_d2343edad78a7252d2ea9cba15bbff6d
bin/logstash -f config/logstash_nginxlog2es.conf
Kibana中分析nginx日誌
可以在kibana中看到nginx日誌的索引已經自動創建了,此時我們使用curl命令訪問nginx,該索引內的數據量也會實時變化:
在kibana中創建index patten,並在discover中查看index數據:
如果對你有幫助,請點個贊鼓勵一下作者吧~ 謝謝!