搭建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

 

 

 

posted @ 2017-03-29 14:18  差点点温柔  阅读(6372)  评论(0编辑  收藏  举报