Elk+filebeat收集docker集群swarm中的nginx和tomcat容器的日誌信息
現在來說一下收集容器集群的日誌收集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
Elk+filebeat收集docker集群swarm中的nginx和tomcat容器的日誌信息