问题 :logstash服务日志收集并按照服务创建es索引问题
背景:现在采集方式使用tcp方式请求logstash. 统一输出到同一索引。
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "**.**.**.**:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
user => ""
password => ""
}
}
外部服务使用springboot通过logback向服务发送日志。
我想通过配置logback 定义日志结构,在conf中按照不同服务的服务名创建不同的es索引,现在对于conf的配置参数,还不太清楚。
不建议不同的服务使用不同的索引,这样你不好管理,而且你从Kibana去看日志也不方便。我建议你还是用一个索引,在日志源中加一个appname字段来区分服务,这样你在kibana界面不用切换索引,可以根据appname字段来查找日志。这个logstash的配置也不用修改。
简单的解决方案已经找到了
配置logback-spring.xml
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集端口-->
<destination>****</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
<!--服务名称-->
"appName": "${APP_NAME}",
<!--打印时间-->
"time": "%date{yyyy-MM-dd HH:mm:ss.SSS}",
<!--日志级别-->
"level": "%level",
<!--进程ID-->
"pid": "${PID:-}",
<!--线程名-->
"thread": "%thread",
<!--全限定类名-->
"class": "%logger",
<!--类中的哪个方法-->
"method": "%method",
<!--类中的第几行-->
"line": "%line",
<!--日志打印的信息-->
"message": "%message",
<!--堆栈异常信息-->
"stack_trace":"%xEx"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
需要使用这个LoggingEventCompositeJsonEncoder
logstash.conf修改output
output {
elasticsearch {
hosts => "****"
index => "%{[appName]}-%{+YYYY.MM.dd}"
user => ""
password => ""
}
}
比较简单的配置方式,新建服务需要新建dataview。
不知道应该采用一个索引,通过添加筛选项去获取各个服务的日志合理,还是直接拆开比较好