基于Docker搭建ELK日志系统,并在Spring Boot中集成Logstash实现微服务的日志收集。
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件实现日志采集、分析、展示,但并非全部。Elasticsearch官网地址 。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
下面我们是分别在3台服务器上搭建的。
安装elasticsearch
拉取镜像
docker pull elasticsearch:7.6.0
Elasticsearch默认是集群模式,集群模式下对机器配置较高;因此我们这里使用单机版的部署作为示例。下面是启动命令:
docker run -d --restart=always --name es7 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.0
之后通过9200端口在浏览器上访问http://192.168.56.102:9200(需要开启外网访问权限),有信息返回则成功;像下面的信息:
{
"name" : "node-1",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "7jUr1QFPQcSbDGG4A4c5Og",
"version" : {
"number" : "7.6.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
"build_date" : "2020-02-06T00:09:00.449973Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
注意:如果需要添加插件时,需要将容器的插件目录映射到实际的路径中或者通过命令(如安装ik分词器:
docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/
)将其拷贝到容器中
如果机器内存过小会导致启动失败,在集群模式下容易遇到
安装kibana
kibana主要用于对elasticsearch的数据进行分析查看。注意选择的版本必须和elasticsearch的版本相同或者低,建议和elasticsearch的版本相同,否则会无法将无法使用kibana。
拉取kibana的docker镜像
docker pull kibana:7.6.0
创建kibana的配置:
mkdir -p /home/elk/config
vi /home/elk/config/kibana.yml
在里面添加如下配置
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
# elasticsearch的地址,多个使用逗号分割
elasticsearch.hosts: [ "http://192.168.56.102:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
# 语言选择为中文
i18n.locale: "zh-CN"
启动kibana:
docker run -d --restart=always --name kibana -v /home/elk/config/kibana.yml:/usr/share/kibana/config/kibana.yml -p 5601:5601 kibana:7.6.0
启动成功后访问5601端口即可进入kibana管理界面http://192.168.56.104:5601 。(进入后要求选择配置,直接选择自己浏览即可)
操作说明
刚进入系统时会有如下提示,任意选择即可:
创建索引模式,以便我们可以查看日志信息;
安装Logstash
logstash会将收到的日志信息推送到elasticsearch中。
拉取Logstash的镜像
docker pull logstash:7.6.0
创建logstash的日志处理配置文件logstash.conf
mkdir -p /home/elk/config
vi /home/elk/config/logstash.conf
添加如下配置:
input {
tcp{
port => 5044
codec => json_lines
}
}
filter {
mutate {
remove_field => ["logLevel", "stdoutOpen", "useLogStash", "logStashDestination"]
}
}
output {
#stdout {
# codec => rubydebug
#}
elasticsearch {
hosts => ["192.168.56.105:9200"]
index => "logstash-%{[env]}-%{[server_name]}-%{+YYYY.MM.dd}"
}
}
创建logstash的的es配置文件logstash.yml
vi /home/elk/config/logstash.yml
添加如下配置:<