前言: 之前有说过elk收集nginx日志,

现在来说一下收集容器集群的日志收集Elk的安装这里不在说了,上来直接怼,

这里是elk的服务器:的服务状态:以及端口

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

 

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

如下

 

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

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

input {

    beats {

            port => 5044

    }

}

 

filter {

    if "nginx-accesslog" in [tags] {

        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 [tags] {

       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 }

}

 

 

 

 

 

 

然后可以启动:

 

 

nohup  logstash -f /etc/logstash/conf.d/logstrash-test.conf  >/dev/null  

 

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

接下来开始配置docker集群中的filbeate

 

 

先说一下我们这里的docker启动的是集群模式,我将容器的日志目录映射到了本地宿主机上的目录了,

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

可以在本地上看一下:

 

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

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

容器的状态:

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

 

Filebeat是轻量级的工具省很多的资源开销:

 

 

这里安装的时候直接使用

 

rpm -ivh filebeat-5.5.1-x86_64.rpm

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

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

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即可:

 

 

Systemctl  restart  filebeat

 

 

然后通过curl 或者http

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

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

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

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

 

可以看一下里面的数据:

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

比如查看一下nginx的日志:

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

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

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

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

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

 

 

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

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

 

 

其他容器的也就这样的道理,可以收集,如果日志多了可以上rediskafka

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