前言: 之前有说过elk收集nginx日志,
现在来说一下收集容器集群的日志收集Elk的安装这里不在说了,上来直接怼,
这里是elk的服务器:的服务状态:以及端口
Logstash是主要的配置内容这里:
如下
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
接下来开始配置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即可:
Systemctl restart filebeat
然后通过curl 或者http:
进行对容器的访问可以查看到日志已经呗输入到了es存储中
可以看一下里面的数据:
比如查看一下nginx的日志:
接下来在kibana当中去创建一个一索引开头的日志格式
然后就可以看到了访问到的内容了
其他容器的也就这样的道理,可以收集,如果日志多了可以上redis和kafka
如果要是出现字符集的问题可以在filebeat收集的时候配置,另外还有就是如果es中的数据会出现和服务器数据有8小时时差需要在es中配置,这些网上都有需要自己去查询,这里不在体现