簡介:
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>