elk docker 部署實戰

elk(Elasticsearch + Logstash + Kibana) 是業界目前搭建日誌統計監控系統的一套成熟的解決方案。
我爲了後續前端的監控告警系統的搭建,最近對其進行了一下了解和嘗試。html

部署搭建

搭建 elk 整套系統,我選擇了 docker 進行相關的部署。前端

部署涉及到兩個鏡像 sebp/elkprima/filebeatnginx

elk 是對日誌進行處理和展現,filebeat 是對日誌進行採集。git

鏡像的網站有詳細的文檔說明。我在此將個人安裝步驟簡要說明一下。github

  1. docker pull sebp/elk 獲取 elk 鏡像
  2. docker pull prima/filebeat 獲取 filebeat 鏡像
  3. 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
  4. sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -d --name elk sebp/elk 啓動 elk 容器。若啓動失敗,能夠去掉 -d 參數,根據日誌進行調試
  5. 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 容器
  6. 建立 /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"
                    }
                }
            }
        }
    }
  7. 執行 curl -XPUT 'http://elk:9200/_template/filebeat?pretty' -d@/etc/filebeat/filebeat.template.jsonjson

經過以上步驟應該就能在瀏覽器經過 ip:5601 訪問到 Kibana,簡單設置一下就能夠看到日誌的記錄了。bootstrap

日誌處理

默認的配置,日誌裏面的有些字段並無被展開,不便於咱們進行搜索過濾。因此還須要咱們進行一下相應的配置。針對 Logstash 的配置和相關知識,能夠參看官方的文檔 https://www.elastic.co/guide/en/logstash/current/index.html瀏覽器

經過文檔我知道 grok、kv、useragent、urldecode 等幾個 filter 插件是我須要的。bash

  1. 執行 docker exec -it elk bash 進入 elk 容器
  2. 執行 vi /etc/logstash/conf.d/11-nginx.conf 進行相應的插件的配置
  3. 退出容器,執行 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

相關文章
相關標籤/搜索