wuliuwang 发表于 2018-11-9 06:03:24

Elk+filebeat收集docker集群swarm中的nginx和tomcat容器的日志信息

  前言: 之前有说过elk收集nginx日志,
  现在来说一下收集容器集群的日志收集Elk的安装这里不在说了,上来直接怼,
  这里是elk的服务器:的服务状态:以及端口

  Logstash是主要的配置内容这里:
  如下


  input {
  beats {
  port => 5044
  }
  }
  filter {
  if "nginx-accesslog" in {
  grok {
  match => { "message" => "%{HTTPDATE:timestamp}\|%{IP:remote_addr}\|%{IPORHOST:http_host}\|(?:%{DATA:http_x_forwarded_for}|-)\|%{DATA:request_method}\|%{DATA:request_uri}\|%{DATA:server_protocol}\|%{NUMBER:status}\|(?:%{NUMBER:body_bytes_sent}|-)\|(?:%{DATA:http_referer}|-)\|%{DATA:http_user_agent}\|(?:%{DATA:request_time}|-)\|"}
  }
  mutate {
  convert => ["status","integer"]
  convert => ["body_bytes_sent","integer"]
  convert => ["request_time","float"]
  }
  geoip {
  source=>"remote_addr"
  }
  date {
  match => [ "timestamp","dd/MMM/YYYY:HH:mm:ss Z"]
  }
  useragent {
  source=>"http_user_agent"
  }
  }
  if "tomcat-catalina" in {
  grok {
  match => { "message" => "%{HTTPDATE:timestamp}\|%{IP:remote_addr}\|%{IPORHOST:http_host}\|(?:%{DATA:http_x_forwarded_for}|-)\|%{DATA:request_method}\|%{DATA:request_uri}\|%{DATA:server_protocol}\|%{NUMBER:status}\|(?:%{NUMBER:body_bytes_sent}|-)\|(?:%{DATA:http_referer}|-)\|%{DATA:http_user_agent}\|(?:%{DATA:request_time}|-)\|"}
  }
  mutate {
  convert => ["status","integer"]
  convert => ["body_bytes_sent","integer"]
  convert => ["request_time","float"]
  }
  date {
  match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS Z", "MMM dd, yyyy HH:mm:ss a" ]
  }
  }
  }
  output {
  elasticsearch {
  hosts => ["192.168.9.35:9200"]
  index => "logstash-%{type}-%{+YYYY.MM.dd}"
  document_type => "%{type}"
  }
  #    stdout { codec => rubydebug }
  }
  然后可以启动:
  nohuplogstash -f /etc/logstash/conf.d/logstrash-test.conf>/dev/null

  接下来开始配置docker集群中的filbeate:
  先说一下我们这里的docker启动的是集群模式,我将容器的日志目录映射到了本地宿主机上的目录了,

  可以在本地上看一下:


  容器的状态:

  Filebeat是轻量级的工具省很多的资源开销:
  这里安装的时候直接使用
  rpm -ivh filebeat-5.5.1-x86_64.rpm


  filebeat.prospectors:
  - input_type: log
  paths:
  - /var/log/docker-nginx/access_json.log
  tags: ["nginx-accesslog"]
  document_type: nginxaccess
  - input_type: log
  paths:
  - /var/log/docker-tomcat/catalina.out
  tags: ["tomcat-catalinaout"]
  document_type: tomcatcatalina
  tags: ["nginx-test-194"]
  output.logstash:
  hosts: ["192.168.9.35:5044"]
  完成之后启动filebeat即可:
  Systemctlrestartfilebeat
  然后通过curl 或者http:


  进行对容器的访问可以查看到日志已经呗输入到了es存储中

  可以看一下里面的数据:

  比如查看一下nginx的日志:

  接下来在kibana当中去创建一个一索引开头的日志格式


  然后就可以看到了访问到的内容了


  其他容器的也就这样的道理,可以收集,如果日志多了可以上redis和kafka
  如果要是出现字符集的问题可以在filebeat收集的时候配置,另外还有就是如果es中的数据会出现和服务器数据有8小时时差需要在es中配置,这些网上都有需要自己去查询,这里不在体现

页: [1]
查看完整版本: Elk+filebeat收集docker集群swarm中的nginx和tomcat容器的日志信息