搭建ELK收集PHP的日志


架構:

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM