架構:
filebeat --> redis -->logstash --> es --> kibana
- 每個客戶端需要安裝filebeat收集PHP日志
- filebeat把收集到的日志傳到redis
- logstash從redis讀取日志,讀取一條日志就從redis里刪除一條日志
- logstash把日志發送到es
- 最后kibana可視化查詢日志
es數據安全建議
- es設置為三個節點為一個集群,集群中的一個節點會被選為主節點,它將臨時管理集群級別的一些變更,例如新建和刪除索引,增加或移除節點.主節點不參與文檔級別的變更或搜索,這意味着流量增長的時候,該節點不會成為集群的瓶頸.
作為用戶,我們能與集群中的任何一個節點通信,包括主節點.每一個節點都知道文檔存在哪個節點上(因為做了分片,所以一個文檔是分散到集群中所有節點上的),他們可以轉發請求到相應的節點上.我們訪問的節點負責收集各節點返回的數據,最后一起返回給客戶端
- es配置文件里設置分片數量和副本數量,分片數量就是把一個文檔拆分開來存到集群的機器上,副本就是把數據備份一份
- es配置文件開始恢復備份設置為2,意思是只要有兩個節點啟動就開始恢復數據,
ELK stack搭建
環境說明
172.16.1.225 es,logstash,redis,kibana(服務器端)
172.16.1.224 filebeat(每個客戶端必裝收集php)
安裝filebeat
172.16.1.224# rpm -ivh filebeat-5.2.1-x86_64.rpm
配置filebeat收集日志
filebeat.prospectors: - input_type: log paths: - /alidata1/www/timecash22/api3/application/logs/api3/2017/*/*.php document_type: api3_json multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after - input_type: log paths: - /alidata1/www/timecash22/api3/application/logs/2017/*/*.php document_type: api3_error_log multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after - input_type: log paths: - /alidata1/www/timecash22/wx/application/logs/2017/*/*.php document_type: wx_error_log #這是的key是什么,到redis里就是什么 multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after output.redis: hosts: ["10.45.40.112"] password: "timecash2016" #key: "api3_json" keys: - key: "%{[type]}"
安裝elasticsearch
172.16.1.225# rpm -ivh elasticsearch-2.4.3.rpm
配置elasticsearch
cluster.name: ELK node.name: node-1 path.data: /data/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0
安裝logstash
172.16.1.225# tar -zxvf logstash-2.4.0.tar.gz 172.16.1.225# cd logstash-2.4.0 172.16.1.225# mkdir conf #創建配置文件存放目錄
配置logstash從redis讀取數據,然后輸出到es
input { redis { host => "redis的iP" password => "redis的密碼" port => 6379 key => "api3_json" type => "api3_json" data_type => "list" } } filter { date { match => [ "timestamp" , "YYYY-MM-dd HH:mm:ss" ] #時間,從kibana上顯示每條日志的時間 } } output { elasticsearch { hosts => "elasticsearch的IP" #protocol =>"http" index=>"api3_json_%{+YYYY.MM.dd}" #存到es里索引的名稱 document_type=>"api3_json" } stdout{ codec => rubydebug } }
安裝kibana
172.16.1.225# tar -zxvf kibana-4.6.0-linux-x86_64.tar.gz
配置kibana
172.16.1.225# grep -Ev "^$|#" kibana-4.6.0-linux-x86_64/config/kibana.yml server.host: "0.0.0.0" elasticsearch.url: "http://localhost:9200"#elasticsearch的地址
啟動kibana
172.16.1.225# ./bin/kibana -c config/kibana.yml
測試es是否有數據
打開X.X.X.X:9200/_plugin/head
測試kibana是否能查看數據
打開x.x.x.x:5601