您的位置:首页 > 运维架构 > Docker

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

2019-08-15 16:08 423 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_38895698/article/details/99637643

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 中下载的别人上传的 filebeat
docker 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中就可以看到日志

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: