1. 程式人生 > >logback傳輸日誌到logstash根據自定義設定動態建立ElasticSearch索引

logback傳輸日誌到logstash根據自定義設定動態建立ElasticSearch索引

那麼問題來了 不能每個小應用都配置一個 logstash 服務來傳輸日誌吧,把所有的日誌都 輸送到一個logstash裡面  然後logstash會都輸送到一個索引下(之前不知道怎麼配),輸送到同一個所以下 那麼問題又來了,首先每個小服務程式日誌量不大希望持續監控,也不需要用時間來分割(因為日誌量不大),又希望查詢方便(不要告訴我查詢的時候多一個篩選條件就可以了,俺就是不想那樣嫌亂不好找)。所有有了下面的解決方案

首先本人用的日誌框架是logback,使用

     <dependency>
            <groupId>net.logstash.logback</
groupId> <artifactId>logstash-logback-encoder</artifactId> <version>4.11</version> </dependency>

這個包進行 socket向lostash進行日誌輸送

以下為重點

首先通讀上面pom檔案依賴的開源包文件net.logstash.logback,連線地址為:https://github.com/logstash/logstash-logback-encoder

看完之後馬上回來,就會明白我下面說的

首先配置logback.xml日誌

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <!-- <jmxConfigurator/> -->
    <contextName>logback</contextName>
<property name="log.path" value="E:\\123456\\logback.log" /> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID} --- [%15.15t] %-40.40logger{39} : %m%n" /> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}</file> <encoder> <pattern>${log.pattern}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>info-%d{yyyy-MM-dd}-%i.log </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>10</maxHistory> </rollingPolicy> </appender>
    <!-- 上傳到那個伺服器介面 -->
<appender name="api-logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>10.10.129.35:4569</destination>
  <!-- <destination>destination1.domain.com:4560</destination> 
        <destination>destination2.domain.com:4560</destination> 
        <destination>destination3.domain.com:4560</destination> -->
<!-- encoder必須配置,有多種可選 --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"appname":"myapp"}</customFields> </encoder>  <keepAliveDuration>5 minutes</keepAliveDuration>  </appender>
    <!-- 非同步寫入日誌 -->
    <appender name="api-async" class="ch.qos.logback.classic.AsyncAppender">        
        <appender-ref ref="api-logstash"/>        
        <queueSize>8192</queueSize>        
        <discardingThreshold>0</discardingThreshold>    
    </appender>
    <!-- 指定監控那個日誌類 -->
    <logger name="cn.com.pg.sso.monitor.MonitorInterceptor" level="INFO">       
        <appender-ref ref="api-async"/>    
    </logger>
</configuration>

哦忘了解釋一下

<keepAliveDuration>5 minutes</keepAliveDuration> 

這個配置是 向logstash輸出日誌如果有多個logstash IP或埠可以輪詢負載各埠