用ELK工具收集rancher1.6上容器日誌
前言
rancher1.6部署的docker叢集,在rancher的介面上也能看到日誌:
但是rancher上看到的日誌容量有限,只要稍微早一點的日誌,就無法查看了,需要手動到伺服器上使用docker logs檢視日誌,不太方便,因此搭建一個elk來收集rancher上部署的docker容器日誌。
rancher上部署的docker容器,日誌位置在/var/lib/docker/containers/containerID/目錄下的*-json.log檔案裡,因此需要收集這個檔案的內容。
部署規劃
1、伺服器規劃
伺服器 | 角色 | 部署服務 |
---|---|---|
10.0.0.101 | elk工具 | jdk、elasticsearch、logstash、kibana |
10.0.0.102 | rancher-node | rancher-agent、filebeat |
10.0.0.103 | rancher-server | rancher-server |
2、相關版本
伺服器版本:centos7.3
docker版本:1.13.1
rancher-server版本:1.16.24
elk、filebeat版本:6.5.1
jdk版本:1.8
環境準備
2、在10.0.0.103上部署好rancher-server,並將10.0.0.102作為rancher-node加入到rancher上:
3、部署如下測試服務:
4、檢查上述服務的LogDriver,保證是json-file格式(這裡不配置,伺服器上的container目錄下可能不會生成json-log檔案):
5、檢視伺服器上是否已經生成json-log(rancher上部署的docker容器,日誌檔案在/var/lib/docker/containers下面),例如gateway服務:
日誌採集
在10.0.0.102上部署filebeat(用的版本包:filebeat-6.5.1-linux-x86_64.tar.gz)
1、建立專用使用者,解壓安裝包:
[[email protected] ~]# useradd elk;echo 12345678|passwd elk --stdin #建立elk使用者,密碼設定為12345678
[[email protected] ~]# tar xf filebeat-6.5.1-linux-x86_64.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/filebeat-6.5.1-linux-x86_64/
2、修改配置檔案,修改/usr/local/filebeat-6.5.1-linux-x86_64/filebeat.yml下面幾個地方:
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
# Change to true to enable this input configuration.
enabled: true #注意:這裡預設是false,要改成true,
paths: #配置要採集的日誌路徑
- /var/lib/docker/containers/*/*json.log
#============================== Kibana =====================================
setup.kibana:
host: "10.0.0.101:5601"
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
hosts: ["10.0.0.101:9200"]
username: "elk"
password: "12345678"
3、啟動服務:
[[email protected] filebeat-6.5.1-linux-x86_64]# ./filebeat -c filebeat.yml &
kibana檢視日誌
在kibana上面去檢視nginx的訪問日誌和gateway的服務日誌,兩個docker容器的IP不同,可以根據容器IP地址來過濾日誌,nginx、LB、gateway的容器IP分別是:
1、檢視gateway容器日誌
在kibana介面過濾gateway的容器IP地址10.42.243.216,可以看到日誌內容如下:
2、檢視nginx的訪問日誌
注意:nginx在部署的時候,沒有將埠暴露出來,而是通過LB單獨對映的埠,因此在檢視nginx日誌的時候,不能用nginx本身的容器IP10.42.221.23去檢視,而是要用LB的容器IP10.42.116.220去檢視日誌:
至此,ELK收集rancher的容器日誌,就做好了。