注:请在上一篇文章基础上,在server端安装redis,其他软件包安装方式不变。
上一篇文章:http://linuxg.blog.51cto.com/4410110/1760376
一、在Server端配置
1、说明
上一篇博客中介绍的是单个logstash进程(就是在每个客户端配置安装logstash,直接将日志output到ElasticSearch上),实现对数据的读取、解析和输出处理
但是在生产环境中,在每台应用服务器运行logstash进程并将数据直接发送到Elasticsearch里,显然是不科学的,原因:
第一,过多的客户端连接对Elasticsearch是一种额外的压力;
第二,网络抖动会影响到 logstash 进程,进而影响生产应用;
第三,运维人员未必愿意在每台生产服务器上部署 Java,或者让logstash跟业务代码争夺Java资源。
所以,在实际运用中,logstash 进程会被分为两个不同的角色。运行在应用服务器上的,尽量减轻运行压力,只做读取和转发,这个角色叫做shipper;
运行在独立服务器上,完成数据解析处理,负责写入Elasticsearch 的角色,叫indexer。
Logstash 社区通常习惯用 shipper,broker 和 indexer 来描述数据流中不同进程各自的角色。
如下图:本次实验将broker(redis)和Indexer、Search&Storage、kibana都安装在10.0.90.24这台server 端上
2、安装redis,通过redis来传输,充当Broker角色
Redis服务器是logstash官方推荐的broker选择,Broker角色也就意味着会同时存在输入和输出两个插件,做为缓存队列。
Redis服务器通常都是用作NoSQL数据库,不过logstash只是用来做消息队列,所以不要担心logstash里的Redis会撑爆你的内存和磁盘。
开始安装配置:
#wget http://download.redis.io/releases/redis-3.0.7.tar.gz
#tar xf redis-3.0.7.tar.gz -C /usr/local/
#cd /usr/local/redis-3.0.7
#make
注:如果想运行make test 需要升级tcl软件包(版本在8.0以上)
复制程序变量
#cp src/redis-cli /usr/bin
#cp src/redis-server /usr/bin
创建目录
#mkdir conf log db data
修改redis配置文件
#cp sentinel.conf conf/redis-6379.conf
修改为如下:
# cat redis-6379.conf | egrep -v "^#|^$"
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
tcp-backlog 511
bind 10.0.90.24
timeout 0
tcp-keepalive 0
loglevel notice
logfile /var/log/redis/redis_6379.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis_6379.rdb
dir /usr/local/redis-3.0.7/db/
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
启动redis
#redis-server /usr/local/redis-3.0.7/conf/redis-6379.conf
3、修改shipper的配置
#cd /usr/local/logstash/config
修改logstash-indexer.conf为如下内容:
#cat logstash-indexer.conf
input {
redis {
host => "10.0.90.24"
port => "6379"
type => "redis-input"
data_type => "list"
key => "logstash:redis"
}
}
output {
stdout {}
elasticsearch {
hosts => "10.0.90.24"
codec => "json"
}
}
测试:
#/usr/local/logstash/bin/logstash --configtest -f logstash-indexer.conf
Configuration OK
启动
#nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-indexer.conf &
通过kibana查看刷新界面,就可以看到日志已经传送过来,如下图:
1、首先配置logstash
注:我已经在客户端安装了httpd,本次以httpd日志为例
#cd /usr/local/logstash/config
修改配置,如下:
# cat logstash-http.conf
input {
file {
type => "http_access"
path => ["/var/log/httpd/access_log"]
}
}
output {
redis {
host => ["10.0.90.24:6379"]
data_type => "list"
key => "logstash:redis"
}
}
测试:
#/usr/local/logstash/bin/logstash --configtest -f logstash-http.conf
Configuration OK
启动
#nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash-http.conf &
2、测试日志收集情况
先通过浏览器访问http://10.0.90.25,出现http的测试页面即可
再通过echo一条测试命令到http的access_log日志,如下
#echo "this is a test for http log file" >> access_log
3、在kibana界面刷新页面,查看情况,如下:
可以看到已经通过redis将日志收集到了elasticsearch中。
以上是简单的log收集,还在进一步研究,不足之处请多多指出,谢谢。