1. logstash安裝java
1) 安裝javanode
2) 下載logstash安裝包linux
3) rpm –i logstash-6.2.3.rpmredis
4) 裝成功後, centos7默認會裝到/usr/share/logstashcentos
5) 配置文件默認位於/etc/logstash緩存
2. 管道配置ruby
以輸入stdin, syslog, 輸出redis,stdout爲例, 性能優化
eg: rsyslog.conf 服務器
1 input { 2 3 stdin {} 4 5 syslog { 6 7 host => "0.0.0.0" 8 9 port => 514 10 11 } 12 13 14 15 } 16 17 filter {} 18 19 output { 20 21 redis { 22 23 batch => true 24 25 batch_events => 1000 26 27 batch_timeout => 20 28 29 data_type => list 30 31 key => "syslog-%{+yyyy-MM-dd}" 32 33 host => ["127.0.0.1"] 34 35 port => 6379 36 37 db => 0 38 39 } 40 41 stdout{ 42 43 codec => rubycode 44 45 } 46 47 }
能夠有多個input, filter, output多線程
3. logstash配置
logstash主要配置文件logstash.yml
java 堆棧配置文件 jvm.options
管道配置文件 pipeline.yml
主要配置:
1) logstash.yml
node.name 節點名稱
path.data 緩衝數據本地存放的路徑
pipeline.workers 並行執行filter+output的進程數,默認cpu核數
pipeline.batch.size 每次批量從input獲取的數據量, 這塊會涉及到一個問題, 分配給logstash的堆棧空間須要大於等於pipeline.workers * pipeline.batch.size, 由於logstash會將數據緩存到堆棧裏。
path.config 管道配置文件的路徑
config.reload.automatic 是否自動reload
queue.type 默認memory, 使用persisted會持久化到磁盤, 使用隊列能夠保證在宕機多出現其餘可修復的問題時,來不及進行filter和output處理時, 將數據保存到磁盤,避免數據丟失,logstash重啓後,會同時從input和磁盤上讀取隊列的數據,進行filter+output處理, 還有一種狀況是若是filter+output的速度慢於input, 未來不及處理的數據緩存到磁盤, 有效渡過峯值, 避免性能問題或緩存被打爆丟失數據。
queue.max_bytes 永久隊列容許持久化的最多字節數, mb或gb爲單位。
2) jvm.options
+xms, +xmx調優
4. 啓動
1) 用pv命令啓動logstash 監控性能
a) /usr/share/logstash/bin/logstash –f rsyslog.conf 啓動單個管道
b) /usr/share/logstash/bin/logstash –path.settings=/etc/logstash 會啓動全部的管道, 讀取配置文件, 事實上是將多個管道配置文件合爲一個
c) 性能監控, 使用linux自帶pv命令: /usr/share/logstash/bin/logstash –f rsyslog.conf|pv –abt > /dev/null
2) 向syslog端口發送數據
數據示例採用沙箱日誌:
<12> Mar 26 16:30:35 localhost skyeye-sandbox: access_time:2017-08-15 7:24:10|!attacker:10.19.1.245:52868|!file_md5:0f51a34a9a1ce4d2026c772400f07910|!file_name:virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!file_size:320541|!file_type:exe32|!proto_type:http|!subject:|!method:GET|!url:http://sample/test/virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!victim:10.19.1.106:80|!malscore:7.0|!vir:win7-sp1;office2010;adobe11;java8;flash16;ie10,winxp-sp3;office2007;adobe10;java6;flash16;ie8|!static_report:Trojan.Lethic.Gen.11|!cloud_info: Win32/Worm.d2e.cloud |!sign_info: 北京科技有限責任公司; 79800E0C5BC7ABEFC387B56D0E89306A3926EC25|!link:10.95.24.3
3)測試工具採用yes
yes ‘字符串’|nc ip port
示例:
yes '<12> Mar 26 16:30:35 localhost skyeye-sandbox: access_time:2017-08-15 7:24:10|!attacker:10.19.1.245:52868|!file_md5:0f51a34a9a1ce4d2026c772400f07910|!file_name:virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!file_size:320541|!file_type:exe32|!proto_type:http|!subject:|!method:GET|!url:http://sample/test/virussign.com_0f51a34a9a1ce4d2026c772400f07910.vir|!victim:10.19.1.106:80|!malscore:7.0|!vir:win7-sp1;office2010;adobe11;java8;flash16;ie10,winxp-sp3;office2007;adobe10;java6;flash16;ie8|!static_report:Trojan.Lethic.Gen.11|!cloud_info: Win32/Worm.d2e.cloud |!sign_info: 北京科技有限責任公司; 79800E0C5BC7ABEFC387B56D0E89306A3926EC25|!link:10.95.24.3' | nc 10.95.134.20 514
以上命令會不斷的像10.95.134.20 514端口發送日誌.
注意nc ip port 默認使用tcp, nc –u ip port使用udp
經測試udp的每秒處理條數要比tcp快一個數量級, 可是udp的接收和入庫不成比例,待探究
4) 測試工具loggen
略
5. 知識點
1) 通過測試經過rsyslog接收syslog並轉發給logstash的性能只有7k/s, 未必有logstash性能好。
2)logstash不支持集羣, 只能橫向擴展, 啓動多個實例, 或增長機器。
6. 性能優化
1) 運行時內存堆棧, 修改jvm.options
+xms +xmx 16gb差很少
2) workers數量, 修改logstash.yml
pipeline.workers 默認cpu核數, 能夠根據實際狀況調整大於或小於cpu核數, 主要影響filters和output, filters和output使用多線程。
3) pipeline.batch.size 單進程批次從input獲取的event數量, logstash按流程分爲input, filter, output三個流程, 這塊主要影響filter以前, 從input取數據的效率, heap_size>=workers * batch_size ,因此設置workers和batch_size的時候要根據分配給logstash的堆內存來分配,並非越大越好。
4) queue.type 默認memory, 表示不啓用持久隊列, persisted表明啓用持久隊列, 並持久到磁盤, 記得必定要啓用, 避免數據丟失, 當output已滿或者處理速度跟不上input的速度的時候, logstash會阻塞,並將input的數據先緩存到磁盤文件, 待output性能轉好, 再同時從input和磁盤隊列取數據,輸送到filter進行處理。好比redis oom的狀況,能夠保證數據不丟失。
5)以下圖:
在分配給logstash 16GB內存, 16核cpu的狀況下(服務器32cpu, 256gb內存),input速度在1.5w/s-2w/s之間,redis入庫速度與input差很少,能夠看出heap和cpu的佔比消耗很低。通過測試, 即便增長cpu核數, heap內存, input和output的速度並無增加, 也多是壓力測試的力度不夠。建議不必分配特別高的內存和cpu給logstash。
實際的input和output速度應該以生產環境壓測爲主。
6) 修改logstash自帶的syslog.rb腳本可提升input速度。
Logstah處理syslog實際是經過syslog.rb腳本, 在我機器上,該腳本位於:
/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-syslog-3.4.0/lib/logstash/inputs
雖然咱們在pipeline的配置中設置filter爲空,
可是logasth在處理syslog數據的時候,調用該腳本, 會註冊grok_filter和date_filter並, 調用它們處理每一條告警, 若是註釋掉這兩個filter的調用, 能夠稍微提升input的速度。經測試input的速度約爲2w/s-2.5w/s。
7. elk監控
1) elk環境搭建
a) 安裝java, 下載logstash, elasticsearch, kibana, 版本必須一致, 個人機器採用6.2.3版。
b) 安裝logstash, elasticsearch, kibana
c) 分別安裝x-pack, bin/logstash-plugin install x-pack, bin/elasticsearch-plugin install x-pack 等等。
d) 設置內置用戶密碼, x-pack內置logstash-system, kibana, elastic三個用戶, elastic是權限最高的, 運行bin/x-pack/setup-passwords 修改默認密碼, 並重啓elaticsearch等
e) 配置kibana, 設置es地址, 必配:
elasticsearch.username: "elastic"
elasticsearch.password: "xxxx"
elasticsearch.url: 「http://localhost:9200」
重啓kibana
f) 配置logstash監控, 至少配置如下三項:
xpack.monitoring.elasticsearch.url: "http://localhost:9200/"
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "situation"
重啓logstash
g) 配置elasticsearch, elasticsearch其實能夠不用配置的, 可是個人環境logstash向es寫入數據的時候一直報403, 添加:
xpack.security.enabled: false, 重啓elasticseach, 就ok
h) 經過http訪問5601端口, 就能夠看到kibana界面
2) logstash監控
Elk也能夠監控logstash output非elasticsearch的數據流,好比redis, 配置x-pack便可。