下载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" #设置为英文
启动后,访问: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" => "(?[0-9\-]+\s[0-9\:]+(.)[0-9]{3})\|(?[A-Z|]{4}.)\|(?(.)+?)\|(?(.)+?)\|(?(.)+)"
}
}
}
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
访问kibana:
搜索出创建的索引点击下一步,就能创建了,创建完成之后,查看:
可以看到数据都在es中,并且按照我们的正则进行了切分,通过修改监听的日志,数据es数据也得到了了更新
如果要监听一个目录下的日志文件: 如 \logs目录下的所有日志文件,可以使用通配符:
\logs*.log来实现监听