shawnmei 发表于 2017-12-30 09:59:14

搭建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.225es,logstash,redis,kibana(服务器端)
  172.16.1.224filebeat(每个客户端必装收集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: '^{4}-{2}-{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:
'^{4}-{2}-{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: '^{4}-{2}-{2}'
  multiline.negate: true
  multiline.match: after
  

  

  
output.redis:
  hosts: ["10.45.40.112"]
  password: "timecash2016"
  #key: "api3_json"
  keys:
  - key: "%{}"
  

  安装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# mkdirconf#创建配置文件存放目录
  

  配置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

页: [1]
查看完整版本: 搭建ELK收集PHP的日志