ELK部署和配置:
1.elasticsearch:
解压缩
配置config/elasticsearch.yml:
配置network.host地址为0.0.0.0
启动:
执行elasticsearch.bat;
2.kibana:
解压缩,修改绑定server.host为0.0.0.0,以方便配置通用,主机IP地址修改过后,无需修改该配置文件都可以访问,同时也可以通过127.0.0.1访问。
配置config/ kibana.yml:
配置elasticsearch信息
启动:
kibana.bat
对于elasticsearch中自定义的索引,需要通过kibana中的management--->Kibana index patterns,创建index pattern,在创建时,系统会自动提示能匹配到的elasticserch的索引。创建完之后,就可以在Kibana的Discover中根据该索引匹配查询elasticsearch的索引项了(Logs页面无法查询自定义索引内容)
3.filebeat
启用filebeat支持的模块:
filebeat.exe modules enable mysql, elasticsearch
配置模块的日志路径:
如 elasticsearch的audit日志,则在module\elasticsearch\audit目录下的manifest.yml中配置
重建索引:
重建索引时, 需要filebeat直连elasticsearch,kibana才行,所以需要如下启动参数`-E output.logstash.enabled=false` `-E output.elasticsearch.hosts=['192.168.1.131:9200']` -E setup.kibana.host=192.168.1.131:5601
如:
filebeat.exe setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['192.168.1.131:9200'] -E setup.kibana.host=192.168.1.131:5601
如yml中已经配置了elasticsearch,kibana,则直接filebeat.exe setup -e即可
启动:
filebeat.exe -c config/filebeat.yml -e
安装为服务:
通过powershell,执行install-service-*-server.ps1即可,如果报安全策略的错误时,执行set-ExecutionPolicy RemoteSigned即可。
4.springboot应用程序通过logstash存储日志到elasticsearch
logback-spring.xml中配置logstash的appender,如下:
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.1.131:8888</destination>
<!-- 日志输出编码 -->
<!--<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">-->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
</providers>
<!--<customFields>{"appname":"${applicationName}"}</customFields>-->
</encoder>
</appender>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
<appender-ref ref="logstash" />
</root>
logstash配置,支持tcp的日志收集,输出到elasticsearch,并根据日志的applicationName值,创建applicationName值的自定义索引,便于检索
input {
beats {
port => 5044 #通过5044端口接收filebeat等beats应用转发的日志信息
type => "beats_log" #自定义type,以方便output时根据该type做区分输出,以不同的索引名模板创建索引
}
tcp {
port => 8888 #通过8888端口接收logback发送过来的日志信息
codec => json_lines
mode => "server"
type => "application_direct_log" #自定义type,以方便output时根据该type做区分输出,以不同的索引名模板创建索引
}
}
output {
if [type] == "application_direct_log" { #写入application_direct_log日志到 es
elasticsearch {
hosts => ["192.168.1.131:9200"]
index => "%{[applicationName]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
if [type] == "beats_log" { #写入beats_log日志到 es
elasticsearch {
hosts => ["192.168.1.131:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
stdout { codec => rubydebug } #若不需要在控制台中输出,此行可以删除
}
logstash控制台输出、elasticsearch存储时间,在logstash和elasticsearch后台会统一使用UTC时区,所以会造成时间需要+8的现象,通过kibana显示时,kibana会根据本地时区自动调整时间的值。
elasticsearch中索引状态为yellow时,一般是由于只有一台elasticsearch机器,但是number_of_replicas为1所致
number_of_replicas 是数据备份数,如果只有一台机器,设置为0,索引创建时,默认值为1.通过如下命令修改:
curl -X PUT "192.168.1.131:9200/filebeat*/_settings" -H 'Content-Type: application/json' -d'{"index" : {"number_of_replicas" : 0}}'