简介:
ELK是一个基于浏览器页面的ElasticSearch 的前段展示工具,也是一个开源和免费的工具,Kibana 可以为Logstash 和ElasticSearch 提供的日志分析友好的web 界面,可以汇总、分析、搜索重要的数据日志。
1)ElasticSearch
(弹性搜索)一个分布式搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,自动发现,索引自动分片,索引副本机制,多数据源,自动搜索负责等功能。
2)Logstash
(日志存储)部署在产生日志的应用服务器上,用于收集日志。是一个开源工具,可以对日子进行收集,过滤,分析,并将其存储以后使用(比如搜索)。
3)Kibana
(日志信息web 展示)是一个基于浏览器的ElasticSearch 的前段展示工具,也是一个开源和免费的工具,可以为ElasticSearch 和Logstash 提供的日志分析进行友好的Web 界面,可以汇总,分析,搜索重要的数据日志。
部署:
1)镜像拉取
# docker pull elasticsearch:7.14.0
# docker pull kibana:7.14.0 (kibana必须和elasticsearch版本一致)
# docker pull logstash:7.14.0
2)启动容器
① 先启动 es:
# docker run --name es -d -p 19200:9200 -p 19300:9300 -e "discovery.type=single-node" elasticsearch:7.14.0
② 启动 kibana:
# docker run -it -d --name kibana --restart=always --link es:es -p 15601:5601 kibana:7.14.0
进入容器 # docker exec-it kibana bash , 修改配置文件 # vi /config/kibana.yml 修改elasticsearch.hosts中的 ip + port ,重启容器 # docker restart kibana
③ 启动 logstash:
# docker run -it -p 14560:4560 --name logstash -d logstash:7.14.0
进入容器 # docker exec-it logstash bash ,进行两次修改。
1、修改配置文件 # vi /usr/share/logstash/config/logstash.yml 修改elasticsearch.hosts中的 ip + port
2、修改配置文件 # vi /usr/share/logstash/pipeline/logstash.conf ,替换里面内容
input {
tcp {
mode => "server"
port => 4560
codec => json_lines
}
}
filter{
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] #匹配timestamp字段
target => "@timestamp" #将匹配到的数据写到@timestamp字段中
}
}
output {
elasticsearch {
action => "index"
hosts => "192.168.000.000:19200"
index => "lcbd_log_%{+YYYY.MM.dd}"
}
}
3、 重启容器 # docker restart kibana
3)cloud 项目 logback.xml 编辑
<appender name="log_stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.0.000:14560</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"module_name":"lcbd-modules-pos",
"timestamp": "%date{\"yyyy-MM-dd'T'HH:mm:ss,SSSZ\"}",
"log_level":"%level",
"service": "%contextName",
"pid": "${PID:-}",
"thread": "%thread",
"class_name": "%class",
"line_number": "%line",
"message": "%message",
"stack_trace": "%exception{5}",
"elapsed_time": "#asLong{%X{elapsedTime}}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<root level="info">
<appender-ref ref="log_stash" />
</root>