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

相关文章
相关标签/搜索