1、日志直接写入Redis
log4j是可以将日志直接写入到Redis中的,这样我们导入ELK就会方便很多,网上存在大神开发的appender,亲测可用
下载是源码地址,大神很是给力!
向大神致敬,接下来我们这在巨人的肩膀上进行开发。
1.1 pom.xml配置
大神的帖子上面的pom只需要写
<dependency>
<groupId>com.ryantenney.log4j</groupId>
<artifactId>redis-appender</artifactId>
<version>1.0.1</version>
</dependency>
但是我只写这些会报异常---classNotFoundException
然后我就去源码里面找了一下
又加了一段配置就没事了
<dependency>
<groupId>net.logstash.log4j</groupId>
<artifactId>jsonevent-layout</artifactId>
<version>1.0</version>
</dependency>
1.2 log4j.properties的配置
### 设置### sample log4j.rootLogger = [ level ] , appenderName, appenderName, …
#### [ level ] 高->低 ERROR、WARN、INFO、DEBUG
#### appenderName : 日志信息被输出到哪些地方
log4j.rootLogger=INFO, redis,stdout,D,I,E
###写入redis
log4j.appender.redis=com.ryantenney.log4j.RedisAppender
log4j.appender.redis.host=目标服务器IP地址(例如:127.0.0.1)
log4j.appender.redis.port=端口号,如果没有修改,默认端口号为6379
log4j.appender.redis.key= 生成的Redis的Key的值
log4j.appender.redis.Threshold=INFO
log4j.appender.redis.period=2
(不知道是我服务器的问题还是因为什么,这个数值太大将会写不进去)
log4j.appender.redis.batchSize=4
log4j.appender.redis.purgeOnFailure=true
log4j.appender.redis.alwaysBatch=true
log4j.appender.redis.layout=net.logstash.log4j.JSONEventLayout
(大神开发好了json样式,你也可以根据自己的需要进行扩展)
我的redis没有密码,这里面没有配置,如果需要密码,就在上面加一个log4j.appender.redis.password=****就行了
### 输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss} %m at %l%n
具体的配置方式不进行介绍,网上有好多帖子
1.3 写日志
和之前写日志的方式一致,没有什么区别,添加了上面的配置后,数据可以直接写入到Redis里面
2 redis中数据导入到ES
2.1查看数据是否写入
连接linux的命令 redis-cli 连接本机的redis -p 添加端口,-h 添加别的服务器
连接成功后的查看命令是 lrange key startindex endindex
例如:lrange testlist 0 50
2.2 在es中新建索引
在*.*.*.*:9200/_plugin/head/ 下面有一个索引项 (*.*.*.*,为你es的ip地址),
新建索引(注意不能有大写字母,不能有大写字母,不能有大写字母 重要的事情说三遍)
2.3 编写config
第一步、 cd /usr/local/logstash
第二步、sudo touch test.conf
第三步,给文件分配权限 sudo chomd 777 test.conf
input{
redis{
host=>'localhost'
port=>'6379'
key=>""
data_type=>"list"
type=>'redis-input'
}
}
output{
elasticsearch{
host=>'localhost'
port=>9200
protocol=>"http"
index=>""
}
}
port 为redis的端口号,如果没有修改过,就为6379。
key 为刚才在log4j.properties里面配置的key
index 为刚才我不让你大写的那个es index
别的字段最好别修改了
第四步、保存文件退出
2.4 执行conf
sudo ./bin/logstash -f test.conf &
如果需要修改文件再次执行,先结束之前执行的进程
sudo kill 进程号
3.不出意外的话现在你已经可以在ES中看到数据了