基于docker 搭建elk日志分析系统

1、目的
因公司业务需求,现在架构采用spring cloud分布式,无论在开发、测试、生产环境上都需要根据日志来排查出现bug的原因,因此需要搭建elk日志分析系统,又因为才用docker更加方便,所以采用docker来搭建的elk。
2、镜像版本
kibana 6.8.2 docker pull kibana:6.8.2
elasticsearch 6.8.2 docker pull elasticsearch:6.8.2
logstash 6.8.2 docker pull logstash:6.8.2
elasticsearch-head:5 docker pull mobz/elasticsearch-head:5
filebeat 6.5.4
filebeat 在docker hub上没有进行维护,同时在es网站上docker 镜像下载缓慢,最终在aliyun docker 中下载的别人上传的 filebeatdocker pull registry.cn-hongkong.aliyuncs.com/hyn-beats/filebeat:6.5.4
3、es的搭建
es搭建包括两部分主要是es与es-head的搭建
es 搭建


docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" elasticsearch:6.8.2

基于docker 搭建elk日志分析系统_第1张图片
看到此页面es搭建成功
es-head搭建

docker run -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5 

基于docker 搭建elk日志分析系统_第2张图片
在es-head连接es可能是连不上的,是因为es没有开启跨域
进入es容器内部 找到config文件下的elasticsearch.yml
在此文件中增加

http.cors.enabled: true
http.cors.allow-origin: "*"

然后重启es后es-head就可以连接上es
4、kibana的搭建

docker run -d -p 5601:5601 --link elasticsearch -e ELASTICSEARCH_URL=http://elasticsearch:9200 kibana

使用link参数,会在kibana容器hosts文件中加入elasticsearch ip地址,这样我们就直接通过定义的name来访问es服务了。
通过访问端口号5601就可以进入到管理页面
基于docker 搭建elk日志分析系统_第3张图片
同时刷新es-head就就可以看到kibana连接到了es
基于docker 搭建elk日志分析系统_第4张图片
5、filebeat与logstash的搭建
在这两个搭建时需要注意配置文件,通过filebeat读取日志到logstash在经过处理后传输到es中
filebeat.yml

filebeat.prospectors:
- paths:
    - /home/work/elk/logs/user/a.log
  multiline:
      pattern: ^\d{4}
      negate: true
      match: after
  fields:
    doc_type: user
- paths:
    - /home/work/elk/logs/uaa/a.log
  multiline:
      pattern: ^\d{4}
      negate: true
      match: after
  fields:
    doc_type: uaa
output.logstash: # 输出地址
  hosts: ["logstash:5044"]

logstash.conf

input {
  beats {
    port => "5044"
  }
}
filter {
   if [fields][doc_type] == 'user' {
    grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:msg}" }
        }
   }

   if [fields][doc_type] == 'uaa' { # 这里写两个一样的grok,实际上可能出现多种不同的日志格式,这里做个提示而已,当然如果是相同的格式,这里可以不写的
    grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:msg}" }
        }
   }
}

output {
  stdout { codec => rubydebug }
  elasticsearch {
        hosts => [ "elasticsearch:9200" ]
        index => "%{[fields][doc_type]}-%{+YYYY.MM.dd}"
    }
}

启动logstash

docker run --rm -it --name logstash --link elasticsearch -d -p 5044:5044 -v ~/elk/yaml/logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash:6.8.2

启动 filebeat

docker run --name filebeat -d --link logstash -v /home/work/elk/yml/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /home/work/service/user-service/:/home/work/elk/logs/user/ -v /home/work/service/uaa-service/:/home/work/elk/logs/uaa/ filebeat:6.5.4

在启动filebeat时注意要把日志文件挂载到filebeat容器内这样filebeat才可以读取到日志文件
6、elk
在一切顺利后再es-head中就可以看到读取的日志文件
基于docker 搭建elk日志分析系统_第5张图片
在kibana管理界面中
基于docker 搭建elk日志分析系统_第6张图片
在这里就可以配置读取到的日志文件
基于docker 搭建elk日志分析系统_第7张图片
配置好之后在kibana中就可以看到日志
基于docker 搭建elk日志分析系统_第8张图片

你可能感兴趣的:(elk)