elk(Elasticsearch + Logstash + Kibana) 是業界目前搭建日誌統計監控系統的一套成熟的解決方案。
我爲了後續前端的監控告警系統的搭建,最近對其進行了一下了解和嘗試。html
搭建 elk 整套系統,我選擇了 docker 進行相關的部署。前端
部署涉及到兩個鏡像 sebp/elk 和 prima/filebeat。nginx
elk 是對日誌進行處理和展現,filebeat 是對日誌進行採集。git
鏡像的網站有詳細的文檔說明。我在此將個人安裝步驟簡要說明一下。github
docker pull sebp/elk
獲取 elk 鏡像docker pull prima/filebeat
獲取 filebeat 鏡像https://github.com/spujadas/elk-docker/tree/master/nginx-filebeat
,logstash-beats.crt
放到 /etc/pki/tls/certs/logstash-beats.crt
filebeat.yml
放到 /etc/filebeat/filebeat.yml
sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -d --name elk sebp/elk
啓動 elk 容器。若啓動失敗,能夠去掉 -d 參數,根據日誌進行調試sudo docker run -v /etc/pki/tls/certs/logstash-beats.crt:/etc/pki/tls/certs/logstash-beats.crt -v /etc/filebeat/filebeat.yml:/filebeat.yml -v /var/log:/var/log -d --name filebeat --link elk:elk prima/filebeat
啓動 filebeat 容器建立 /etc/filebeat/filebeat.template.json
內容爲docker
{ "order": 0, "template": "filebeat-*", "settings": { "index": { "number_of_shards": "1" } }, "mappings": { "nginx-monitor": { "properties": { "@timestamp": { "type": "date" }, "geoip.location": { "type": "geo_point" }, "clientip": { "type": "ip" }, "params.t": { "type": "date" } } } } }
執行 curl -XPUT 'http://elk:9200/_template/filebeat?pretty' -d@/etc/filebeat/filebeat.template.json
json
經過以上步驟應該就能在瀏覽器經過 ip:5601 訪問到 Kibana,簡單設置一下就能夠看到日誌的記錄了。bootstrap
默認的配置,日誌裏面的有些字段並無被展開,不便於咱們進行搜索過濾。因此還須要咱們進行一下相應的配置。針對 Logstash 的配置和相關知識,能夠參看官方的文檔 https://www.elastic.co/guide/en/logstash/current/index.html瀏覽器
經過文檔我知道 grok、kv、useragent、urldecode 等幾個 filter 插件是我須要的。bash
docker exec -it elk bash
進入 elk 容器vi /etc/logstash/conf.d/11-nginx.conf
進行相應的插件的配置docker restart elk
重啓容器就能夠了eg:
filter { grok { break_on_match => false match => { "message" => "%{NGINXACCESS}" } match => { "request" => "%{URIPATH:pathname}%{URIPARAM:params}" } } useragent { source => "agent" target => "agentinfo" } geoip { source => "clientip" } date { match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ] } kv { field_split => "&?" source => "params" target => "params" } urldecode { all_fields => true } if [type] == "nginx-monitor" { json { source => "[params][data]" target => "datainfo" } } }
elk 相關的東西還有不少是我要了解的,我也僅僅是才瞭解了一些皮毛,歡迎對這方面感興趣的小夥伴和我一塊兒探討。
報錯:
ERROR: bootstrap checks failed system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
http://www.jianshu.com/p/89f8099a6d09