下載elasticsearch,logstash,kibana三個軟件,我用的windows版本演示
下載地址,推薦使用華爲鏡像庫,下載速度快:
華爲開源軟件下載
注意點: 最好這三者的版本一致,防止版本不同的差異
1.下載完成後
啓動elasticsearch,可以不用配置ik分詞
啓動完成後,訪問http://localhost:9200,啓動成功
2.配置/啓動kibana
進入kibana的config目錄,修改kibana.yml配置文件,
設置如下配置:
server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"] #修改成自己集羣的端口號
kibana.index: ".kibana"
i18n.locale: "en" #設置爲英文
啓動kibana,
啓動後,訪問:http://localhost:5601
3.先分析下需要監聽的日誌文件
我需要監聽的日誌,是spring boot項目中使用logback配置的日誌模板:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑 -->
<property name="LOG_HOME" value="./logs"/>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%thread|%logger:%line|%mdc{client} %.-2048msg%n</pattern>
</layout>
</appender>
<appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<!--日誌內容格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
<!--<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern>-->
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS}|%-5level|%thread|%logger:%line|%mdc{client} %.-2048msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!--滾動策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路徑-->
<fileNamePattern>${LOG_HOME}/%d-%i.log</fileNamePattern>
<!-- 配置日誌文件不能超過2M,若超過2M,日誌文件會以索引0開始,命名日誌文件,例如info.2018-12-21-0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>500MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日誌文件保留天數-->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="infoLog" />
</root>
</configuration>
生成的日誌格式如下:
2020-06-04 17:11:04.774|INFO |main|org.springframework.data.repository.config.RepositoryConfigurationDelegate:126| Bootstrapping Spring Data repositories in DEFAULT mode.
日誌是以|爲分割下的,分爲5個部分,
下面配置logstash的grok正則解析日誌: 推薦在線調試正則的網站: grok debugger
網站地址: grok debugger
這裏的正則全部是使用自定義的正則,沒有使用官方的模板,符合標準正則:
文檔信息: 文檔連接
注意在正則中單純匹配|需要轉義: |
關於grok解析日誌的正則寫法(規範):
(?<field_name>the pattern here)
調試好的正則如下:
(?<request_time>[0-9\-]+\s[0-9\:]+(.)[0-9]{3})\|(?<info_level>[A-Z|]{4}.)\|(?<thread_id>(.)+?)\|(?<log_line>(.)+?)\|(?<message>(.)+)
匹配實例數據:
2020-06-04 17:11:05.046|INFO |main|org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:330| Bean 'threadConfig' of type [com.hfepay.ai.store.changan.config.ThreadConfig$$EnhancerBySpringCGLIB$$1041ddd7] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)|
調試結果:
好了,正則已經處理Ok,下面配置logstash:
進入logstahs的bin目錄,新建logstash.config文件:
編寫配置文件:
input {
file {
path => 'E:/worksoft/2020-06-04-0.log'
type => "blog_log"
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => "(?<request_time>[0-9\-]+\s[0-9\:]+(.)[0-9]{3})\|(?<info_level>[A-Z|]{4}.)\|(?<thread_id>(.)+?)\|(?<log_line>(.)+?)\|(?<message>(.)+)"
}
}
}
output{
stdout {
codec => rubydebug
}
elasticsearch{
hosts => ["127.0.0.1:9200"]
index => "logstash-test1-%{+YYYY.MM.dd}"
}
}
指定了es路徑,需要監聽的日誌文件,以及解析的正則表達式:
下面啓動logstash: 使用cmd命令,指定config方式啓動:
>logstash -f logstash.conf
啓動將文件的日誌寫入了es
訪問kibana:
可以看到索引以及創建:
下面創建index pattern
搜索出創建的索引點擊下一步,就能創建了,創建完成之後,查看:
可以看到數據都在es中,並且按照我們的正則進行了切分,通過修改監聽的日誌,數據es數據也得到了了更新
如果要監聽一個目錄下的日誌文件: 如 \logs目錄下的所有日誌文件,可以使用通配符:
\logs*.log來實現監聽