拉取ELK集成鏡像
docker pull sebp/elk
啟動(dòng)ELK
[root@localhost /]# echo "vm.max_map_count=262144" > /etc/sysctl.conf
[root@localhost /]# sysctl -p
[root@localhost /]# docker run -dit --name elk \
-p 5601:5601 \
-p 9200:9200 \
-p 5044:5044 \
-v /opt/elk-data:/var/lib/elasticsearch \
-v /etc/localtime:/etc/localtime \
sebp/elk:740
注:-p 指定映射端口,5601kibana訪問,9200es端口,5044 logstash收集日志端口;-v 指定es數(shù)據(jù)目錄。
配置ELK(以下內(nèi)容全部在容器內(nèi)操作)
進(jìn)入docker容器
[root@localhost /]# docker exec -it elk /bin/bash
/etc/logstash/ ## logstash 配置文件路徑
/etc/elasticsearch/ ## es 配置文件路徑
/var/log/ ## 日志路徑
配置Logstash
[root@localhost /]# vim /etc/logstash/conf.d/02-beats-input.conf
# 數(shù)據(jù)輸入配置:port -> 端口號(hào);codec -> 輸入格式。這里以logback為例。
input {
tcp {
port => 5044
codec=>json_lines
}
}
# 數(shù)據(jù)輸出配置:hosts -> 主機(jī)集合;index -> 你將要?jiǎng)?chuàng)建的索引名稱。這里es為例。
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "%{[appName]}-%{+YYYY.MM.dd}"
}
}
注:這個(gè)配置文件可以在/etc/logstash/conf.d/目錄下創(chuàng)建,也可直接修改原有配置文件,看個(gè)人需求。
配置kibana中文
[root@localhost /]# vim /opt/kibana/config/kibana.yml
注:打開文件后,在文件內(nèi)追加 i18n.locale: "zh-CN" ,重啟服務(wù)即可。
常用服務(wù)操作命令
[root@localhost /]# service logstash start/restart/stop/status
[root@localhost /]# service elasticsearch start/restart/stop/status
[root@localhost /]# service kibana start/restart/stop/status
注:上面是各個(gè)服務(wù) 啟動(dòng) / 重啟 / 停止 / 狀態(tài),服務(wù)較大操作會(huì)比較緩慢,不要重復(fù)執(zhí)行命令。
集成到Spring Boot(LogBack)
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
logback-spring.xml
<springProperty name="appName" source="spring.application.name"/>
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>10.1.20.16:5044</destination>
<!-- 日志輸出編碼 -->
<!-- <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">-->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"appname":"${appName}"}</customFields>
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${springAppName:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>