Logback聯動ELK

1.添加依賴

  在Maven項目中添加如下依賴:

<dependency>
	<groupId>net.logstash.logback</groupId>
	<artifactId>logstash-logback-encoder</artifactId>
	<version>4.8</version>
	<scope>runtime</scope>
</dependency>

2.配置Logback+Logstash

  •  如果Logback形式爲logback.xml,則引入如下appender:

<configuration>
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
	<destination>10.8.120.37:4560</destination>
	<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashSocketAppender"/>
</appender>
<root level="INFO">
	<appender-ref ref="stash" />
</root>
</configuration>

  •   如果Logback形式爲logback-access.xml,則引入如下appender:
<configuration>
<appender name="stash" class="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
	<destination>10.8.120.37:4560</destination>
	<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashAccessEncoder"/>
</appender>
<root level="INFO">
	<appender-ref ref="stash" />
</root>
</configuration>

  • 在Logstash中添加如下配置文件:
input {
    tcp {
        port => 4560
        codec => json_lines
        mode => "server"
    }
}
output {
  stdout {
     codec => rubydebug
  }
 elasticsearch {
        hosts  => "10.8.120.37:9200"
        index => "logbt-%{+YYYY.MM.dd}"
  }
}
    此時,通過log.info()、log.error()等方式打印的日誌,將會通過TCP方式發送到10.8.120.37的4560端口,然後由logstash接收到,如下所示:

    如果logstash無法接收到,可將上述Logback配置中logback.xml和logback-access.xml對調配置(有時候logback配置抽風,不按GitHub上說得來)。
    目前爲止,簡單的Logback聯動ELK已經實現了。

3.Logback自定義設置
  筆者用的appender是LogstashTcpSocketAppender,但有時LogstashTcpSocketAppender默認的配置信息不能滿足我們的訴求,比如上述圖片沒有行號信息。這時候就需要自己設置需要的字段來讓appender提供(前提是appender支持)。

3.1自定義appender提供字段
    這裏不涉及開發,我們只需更改appender的格式即可,筆者的具體格式如下:
<appender name="stash"
	class="net.logstash.logback.appender.LogstashTcpSocketAppender">
	<destination>10.8.120.37:4560</destination>
	<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
		<providers>
			<timestamp/>
			<version/>
			<message/>
			<loggerName/>
			<threadName/>
			<logLevel/>
			<callerData/>
		</providers>
	</encoder>
</appender>
    在logstash中具體效果如下:



3.2自定義patterns
    自定義appender patterns格式如下:
<appender name="stash1" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
	<destination>10.8.120.37:4560</destination>
	<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
		<providers>
    			<pattern>
     			 <pattern>
        			{
        				"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", //時間戳格式
        				"thread": "%thread", //進程名
       					"level": "%level", //日誌等級
        				"logger_name": "%logger", //日誌記錄器名
        				"class_name": "%class", //類名
        				"method_name": "%method", //方法名
        				"line_number": "%line", //行號
        				"message": "%message" //日誌主題信息
        			}
      			 </pattern>
   			</pattern>
  		</providers>
	</encoder>
</appender>

<appender name="stashPrd"
		class="net.logstash.logback.appender.LogstashTcpSocketAppender">
		<destination>10.8.120.37:4560</destination>
		<encoder charset="UTF-8"
			class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
			<providers>
				<pattern>
					<pattern>
						{
						"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
						"thread": "%thread",
						"level": "%level",
						"position": "%class.%method Line:%-3L",
						"log": "%message",
						"type": "api-prd"
						}
					</pattern>
				</pattern>
			</providers>
		</encoder>
	</appender>



    logstash中得到日誌消息如下:
    



總結:
本文由筆者自行編寫,如有錯誤或補充的地方,還請諸位同仁指正。
祝大家學業進步,事業有成!

作者:Smile瀟灑Tel 

轉載請註明出處,謝謝合作!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章