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
看到此页面es搭建成功
es-head搭建
docker run -d -p 9100:9100 docker.io/mobz/elasticsearch-head:5
在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就可以进入到管理页面
同时刷新es-head就就可以看到kibana连接到了es
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中就可以看到读取的日志文件
在kibana管理界面中
在这里就可以配置读取到的日志文件
配置好之后在kibana中就可以看到日志