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来更新,修改后的配置文件也一直都没有生效。所以一定要记得重启项目!