注:請在上一篇文章基礎上,在server端安裝redis,其餘軟件包安裝方式不變。node
上一篇文章:http://linuxg.blog.51cto.com/4410110/1760376linux
1、在Server端配置redis
一、說明數據庫
上一篇博客中介紹的是單個logstash進程(就是在每一個客戶端配置安裝logstash,直接將日誌output到ElasticSearch上),實現對數據的讀取、解析和輸出處理json
可是在生產環境中,在每臺應用服務器運行logstash進程並將數據直接發送到Elasticsearch裏,顯然是不科學的,緣由:瀏覽器
第一,過多的客戶端鏈接對Elasticsearch是一種額外的壓力;緩存
第二,網絡抖動會影響到 logstash 進程,進而影響生產應用;服務器
第三,運維人員未必願意在每臺生產服務器上部署 Java,或者讓logstash跟業務代碼爭奪Java資源。網絡
因此,在實際運用中,logstash 進程會被分爲兩個不一樣的角色。運行在應用服務器上的,儘可能減輕運行壓力,只作讀取和轉發,這個角色叫作shipper;app
運行在獨立服務器上,完成數據解析處理,負責寫入Elasticsearch 的角色,叫indexer。
Logstash 社區一般習慣用 shipper,broker 和 indexer 來描述數據流中不一樣進程各自的角色。
以下圖:本次實驗將broker(redis)和Indexer、Search&Storage、kibana都安裝在10.0.90.24這臺server 端上
二、安裝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
三、修改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查看刷新界面,就能夠看到日誌已經傳送過來,以下圖:
一、首先配置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 &
二、測試日誌收集狀況
先經過瀏覽器訪問http://10.0.90.25,出現http的測試頁面便可
再經過echo一條測試命令到http的access_log日誌,以下
#echo "this is a test for http log file" >> access_log
三、在kibana界面刷新頁面,查看狀況,以下:
能夠看到已經經過redis將日誌收集到了elasticsearch中。
以上是簡單的log收集,還在進一步研究,不足之處請多多指出,謝謝。