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>
<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>
<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中看到數據了