2017.7.31 ELK+logback+redis的使用

参考来自:spring mvc+ELK从头开始搭建日志平台

0 前提

1 ELK安装成功
2 redis安装成功
3 使用logback的项目运行成功

1 配置文件

1.1 pom.xml

为了使用logback,项目原本就有的依赖是:slf4j-api和logback-classic。为了将日志传递给redis,需要配置一个logback-redis-appender。

 1         <!-- 日志 -->
 2         <dependency>
 3             <groupId>org.slf4j</groupId>
 4             <artifactId>slf4j-api</artifactId>
 5             <version>1.7.12</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>ch.qos.logback</groupId>
 9             <artifactId>logback-classic</artifactId>
10             <version>1.1.3</version>
11         </dependency>
12         <!--logstash begin -->
13         <dependency>
14             <groupId>com.cwbase</groupId>
15             <artifactId>logback-redis-appender</artifactId>
16             <version>1.1.3</version>
17             <exclusions>
18                 <exclusion>
19                     <groupId>redis.clients</groupId>
20                     <artifactId>jedis</artifactId>
21                 </exclusion>
22             </exclusions>
23         </dependency>

1.2 logback.xml

增加一个appender,用以配置与redis相关的参数。并且将其添加到root内。其他都是原本logback.xml需要配置的东西。

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <configuration>
  3     <!--logback集成logstash-->
  4     <appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
  5         <source>aas</source>
  6         <type>dev</type>
  7         <host>168.2.237.207</host>
  8         <password>your redis password</password>
  9         <!-- 这个Key是Redis List的Key,需要和Logstash读取Redis的Key匹配 -->
 10         <key>aas-logback-logstash</key>
 11         <tags>dev</tags>
 12         <mdc>true</mdc>
 13         <location>true</location>
 14         <callerStackIndex>0</callerStackIndex>
 15     </appender>
 16     
 17     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
 18         <!-- 典型的日志pattern -->
 19         <encoder>
 20             <pattern>[AAS] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} - %msg%n</pattern>
 21         </encoder>
 22     </appender>
 23 
 57 
 58     <!-- 综合时间与大小的滚动策略,先按小时滚动,小时内的文件大于10mb时再按大小滚动 -->
 59     <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
 60         <file>/var/log/local/xinsight/aas/aas.log</file>
 61 
 62         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 63             <fileNamePattern>/var/log/local/xinsight/aas/aas-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern>
 64             <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
 65                 <maxFileSize>10MB</maxFileSize>
 66             </timeBasedFileNamingAndTriggeringPolicy>
 67         </rollingPolicy>
 68 
 69         <encoder>
 70             <pattern>[AAS] [%date{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36} - %msg%n</pattern>
 71         </encoder>
 72     </appender>
 73 
 97 
 98     <logger name="com.mchange" level="WARN"/>
 99     <logger name="com.baosight" level="DEBUG"/>
100     <logger name="dao" level="DEBUG"/>
101 
102     <!-- root -->
103     <root level="WARN">
104         <appender-ref ref="console"/>
106         <appender-ref ref="logFile" />
107         <appender-ref ref="LOGSTASH" />
108     </root>
109 </configuration>

1.3 logstash.conf

注意和logback.xml中的key匹配。

 1 input{
 8      redis{
10            data_type => "list"
11            key => "aas-logback-logstash"
12            host => "168.2.237.207"
13            port => "6379"
14            password => "your redis password"
15            threads => 5
16        }
19 }
20 
21 output{
22     elasticsearch{
23         hosts  => "168.2.8.88:9200"
24         index  => "aas-%{type}"
25     }
33 }

2 运行测试

2.1 启动redis,设置密码,并测试连接是否成功

启动成功后,在本机上另开一个窗口,设置redis的密码。这里设置密码为“admin”,注意和前面logback.xml和logstash.xml中的password匹配。

在另一个环境连接redis,使用密码admin连接,出现如下画面则表示redis连接正常。

2.2 启动ELK

这里使用supervisord进行统一管理。

访问localhost:9200等,来验证启动成功。

2.3 运行项目,产生日志

运行项目后,执行一些操作,产生一些日志。查看es,已经多了索引 0731-aas-dev。

3 存在的问题

3.1 supervisord的问题(未解决)

在使用supervisord来启动ELK的服务时,因为是修改的logstash配置文件,supervisord似乎没有重新加载,导致没有读取到数据。

执行了reload,update,stop和start好几回,还是没有读取到最新的配置文件。

最后直接手动执行的bin下的配置文件,才读取到的数据。

 

3.2 多行数据识别(待解决)

可以看到一条数据因为处于不同行,被拆分了。而且是乱序的。

参看随笔: 《2017.8.15 多行数据合并》

3.3 Timestamp的处理(待解决)

这里没有处理Timestamp。

3.4 启动顺序

启动顺序:redis -> logstash -> 项目。

修改logstash的配置文件后,没有重启项目,哪怕一直重启logstash来更新,修改后的配置文件也一直都没有生效。所以一定要记得重启项目!

原文地址:https://www.cnblogs.com/lyh421/p/7263454.html