elk搜集日志,实现logstash根据message中结构不同动态创建索引并扩展功能,区分message中json和非json数据简单方式
搜集日志,但是框架本身也会打印很多日志是字符串的。我们自己希望的日志用json,但是又需要json字段可以扩展,logstash收集日志后都放在了message字段中,我们自定义打印的是json串,spring打印的是string,为此我们要分别处理日志,把框架日志和一般信息日志和我们的有用数据日志分开,并且有用数据记录的日志可以按照不同索引分类
为此我们的搜集日志时需要动态处理
logstash.conf如下:
input { tcp { ##host:port就是上面appender中的 destination,这里其实把logstash作为服务,开启9601端口接收logback发出的消息 host => "写你的logstash-ip" port => 端口 #模式选择为server mode => "server" tags => ["tags"] ##格式json codec=>"json" } } filter { #可以是你自定义的一个特殊标识如indexName(自定义日志中必然存在,其他不存在的一个字段key), 以此来区分message的内容是json的可以转成json,并将json的key值及嵌套key值放在elasticsearch的一级别下 if "indexName" in [message]{ json { source => "message" } mutate { add_field => { "exttmp" => "%{ext}" } } json { source => "exttmp" remove_field => ["exttmp"] } } } output { if "indexName" in [message]{#####收集特殊关注的自定义日志 elasticsearch { #ES地址 hosts => "你的kibana-ip:端口" #自定义索引搜集我们重点关注的日志数据 index => "%{[indexName]}" } stdout { codec => rubydebug} }else {#####收集不特殊关注的自定义日志或框架日志 elasticsearch { #kibana hosts => "你的kibana-ip:端口" #项目名做索引搜集一般的日志 index => "%{[project]}" } stdout { codec => rubydebug} } }
loggerback.xml
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>配置你logstash ip:端口</destination> <!-- encoder必须配置,有多种可选 --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <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> <customFields>{"project":"elasticsearch-test"}</customFields> </encoder> </appender> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="stash" /> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root>
本博主支持并坚持原创,本博客文章将以原创为主。