在一个大型的分布式架构的项目里,不同的服务模块部署在不同的服务器上,如果想要定位问题,可能需要去不同的服务器上查看不同服务的日志。
那么,ELK可以很方便的把日志集成到一起,无须再去各个服务器上的日志中定位问题。
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称(但是后期出现的filebeat(beats中的一种)可以用来替代logstash的数据收集功能,比较轻量级)。市面上也被称为 Elastic Stack。
是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。
Logstash是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。Logstash能够动态地采集、转换和传输数据,不受格式或复杂度的影响。
Logstash架构
Logstash由Input、Filter、Output三部分组成
Input: 数据采集,可以是kafka、http、文件等
Filter: 对数据进行过滤、处理
Output:数据存储,可以是ElasticSearch、MongoDB等
logstash.conf pipeline文件
跟其架构一致,分为Input、Filter、Output三个部分,用于处理数据
input {
}
filter {
}
output {
}
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。
日志---> Logstash 采集日志数据 ---> ES存储 ---> Kibana集中查看
ELK是Elastic公司的三个组件,他们三个配合实现日志收集.
关于ElasticSearch、Kibana的安装请参看重学ElasticSearch (ES) 系列(一):核心概念及安装
这里我是用docker进行安装
拉取镜像
docker pull logstash:7.16.2
创建目录文件
mkdir -p /usr/local/logstash/config /usr/local/logstash/pipeline/
cd /usr/local
chmod -R 777 logstash
编写配置文件
在logstash/config目录下编写配置文件
logstash/config/logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://10.100.21.17:9200" ]
logstash/config/pipelines.yml
- pipeline.id: logstash_test
path.config: "/usr/share/logstash/pipeline/logstash_test.conf"
:这里pipeline.id前面的 - ,前后都有空格,不然启动会报错的
编写pipeline
在logstash/pipeline目录下,编写处理数据的规则
logstash/pipeline/logstash.conf
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
filter {
mutate {
lowercase => [ "logger", "level" ]
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => "192.168.132.1:9200"
index => "logstash-test-%{+YYYY.MM.dd}"
}
}
运行
docker run -d -it --restart=always --privileged=true --name=logstash -p 4560:4560 -p 9600:9600 -v /usr/local/logstash/pipeline/:/usr/share/logstash/pipeline/ -v /usr/local/logstash/config/:/usr/share/logstash/config/ logstash:7.16.2
Log4j2生产日志---> Logstash 采集日志数据 ---> ES存储 ---> Kibana查看
引入依赖
net.logstash.logback
logstash-logback-encoder
5.3
spring配置文件
logging:
# 指定日志配置文件的位置
config: classpath:config/logback-spring-test.xml
日志配置文件
这里的配置会让springboot与Logstash建立链接,将日志发送给Logstash
192.168.1.111:4560
UTF-8
%d [%thread] %-5level %logger{36} %line - %msg%n
Over,启动项目,即可!
配置基本可以完全参考安装Logstash这一步
编写处理日志的pipeline
这里配置接收springboot项目发来的日志、处理日志、将日志存入ElasticSearch
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
filter {
mutate {
lowercase => [ "logger", "level" ]
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => "192.168.1.111:9200"
index => "logstash-test-%{+YYYY.MM.dd}"
}
}
:这里index设置为logstash-test-%{+YYYY.MM.dd},可以每天生成一个index,这样可以根据Index删除ES中旧的没用的日志
Over 启动Logstash,即可!
创建索引模式(Index Patterns)
Ip:5601/app/management/kibana/indexPatterns
因为我们生成的index是logstash-test-%{+YYYY.MM.dd},每日生成的日志存在不同的Index里面,所以需要配置通配符的Index,如下
进入日志展示页面discover
进入到discover就能看到你的日志啦