spring項目logback日誌與logstash和Elasticsearch整合
- 2019 年 10 月 3 日
- 筆記
1 input { stdin { } }#該行可有可無,寫來列印測試而已 2 input { 3 #開啟tcp插件的監聽 4 tcp { 5 #這個需要配置成本機IP,不然logstash無法啟動 6 host => "127.0.0.1" 7 #埠號 8 port => 9600 9 #將日誌以json格式輸入 10 codec => json_lines 11 } 12 } 13 14 output { 15 #輸出列印 16 stdout { codec => rubydebug } 17 }
配置好,就可以先啟動進行監聽了,啟動命令:先cd進到存放logstash.conf的目錄下,我的目錄在bin里,所以進入的是bin目錄,執行:logstash -f logstash.conf。
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>net.logstash.log4j</groupId> <artifactId>jsonevent-layout</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.0</version> </dependency>
如果引用到的ch.qos.logback依賴版本太低的話,可能會出現以下錯誤:java.lang.NoSuchMethodError: ch.qos.logback.core.util.Loader.getResourceOccurrenceCount(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/util/Set;可以根據項目需求來選擇合適的版本,經過測試,以上的1.2.3版本是可以符合要求的。配置完成依賴後,就可以開始進行下一步配置。
1 <!--開啟tcp格式的logstash傳輸,通過TCP協議連接Logstash--> 2 <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> 3 <destination>127.0.0.1:9600</destination> 4 5 <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> 6 <jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator"> 7 <escape> 8 <targetCharacterCode>10</targetCharacterCode> 9 <escapeSequence>u2028</escapeSequence> 10 </escape> 11 </jsonFactoryDecorator> 12 <providers> 13 <pattern> 14 <pattern> 15 { 16 "timestamp":"%date{ISO8601}", 17 "user":"test", 18 "message":"[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%t][%l{80}|%L]%m"}%n 19 } 20 </pattern> 21 </pattern> 22 </providers> 23 </encoder> 24 <keepAliveDuration>5 minutes</keepAliveDuration> 25 </appender> 26 27 <root level="INFO"> 28 <appender-ref ref="STASH"/> 29 </root>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter>
在日誌級別修改為以下即可:
1 <root level="INFO"> 2 <appender-ref ref="STASH"/> 3 <appender-ref ref="ERROR"/> 4 </root>
7.到這一步,就完成了通過logstash收集spring的logback日誌的功能,在這個基礎上,可以再進一步擴展,擴展將logstash採集到的數據輸出到Elasticsearch。
1 input { stdin { } }#該行可有可無 2 input { 3 #開啟tcp模式的監聽 4 tcp { 5 #這個需要配置成本機IP,不然logstash無法啟動 6 host => "127.0.0.1" 7 #埠號 8 port => 9600 9 #將日誌以json格式輸入 10 codec => json_lines 11 } 12 } 13 14 output { 15 #輸出列印 16 stdout { codec => rubydebug } 17 elasticsearch { hosts => ["127.0.0.1:9200"] } 18 }
打開已經本地安裝的Elasticsearch:http://127.0.0.1:9100/,可以看到,ES可以接受到logstash接收到的數據了: