一、K8s整體日誌收集方案
整體的日誌收集方案,如下圖所示:
Filebeat是本地文件的日誌數據採集器,可監控日誌目錄或特定日誌文件(tail file),並將它們轉發給Elasticsearch或Logstatsh進行索引、kafka等。帶有內部模塊(auditd,Apache,Nginx,System和MySQL),可通過一個指定命令來簡化通用日誌格式的收集,解析和可視化。
ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但並非全部。
Elasticsearch是實時全文搜索和分析引擎,提供蒐集、分析、存儲數據三大功能;是一套開放REST和JAVA API等結構提供高效搜索功能,可擴展的分佈式系統。它構建於Apache Lucene搜索引擎庫之上。
Logstash是一個用來蒐集、分析、過濾日誌的工具。它支持幾乎任何類型的日誌,包括系統日誌、錯誤日誌和自定義應用程序日誌。它可以從許多來源接收日誌,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它能夠以多種方式輸出數據,包括電子郵件、websockets和Elasticsearch。
Kibana是一個基於Web的圖形界面,用於搜索、分析和可視化存儲在 Elasticsearch指標中的日誌數據。它利用Elasticsearch的REST接口來檢索數據,不僅允許用戶創建他們自己的數據的定製儀表板視圖,還允許他們以特殊的方式查詢和過濾數據
二、針對不同組件的日誌收集
Node上部署一個日誌收集程序:DaemonSet方式部署日誌收集程序。對本節點/var/log和/var/lib/docker/containers/ 兩個目錄下的日誌進行採集.
Pod中附加專用日誌收集的容器:每個運行應用程序的Pod中增加一個日誌收集容器,使用emtyDir共享日誌目錄讓日誌收集程序讀取到。
應用程序直接推送日誌:不屬於Kubernetes範圍。
三、安裝ELK
安裝JDK:這裏我們使用的是jdk-8u181-linux-x64.tar.gz(安裝過程省去,非常簡單)
安裝Elasticsearch:直接解壓啓動,即可,執行下面的語句測試ES。
安裝Kibana:核心配置文件config/kibana.yml
server.port: 5601server.host: "192.168.79.110"elasticsearch.hosts: ["http://localhost:9200"]啓動:bin/kibana,訪問Web Console:http://192.168.79.110:5601
安裝logstash:核心配置文件config/logstash.conf
input { beats { port => 5044 }}output { elasticsearch { hosts => ["http://localhost:9200"] index => "k8s-log-%{+YYYY-MM-dd}" }}啓動:bin/logstash -f config/logstash.conf
四、收集k8s組件日誌
filebeat的配置文件filebeat.yml使用ConfigMap管理,k8s組件日誌記錄在node節點本機/var/log/mesages目錄下,所以將node節點/var/log/mesages目錄掛載到pod中。創建收集k8s 組件日誌/var/log/mesages資源。創建yaml文件如下:k8s-logs.yaml,並執行kubectl create -f k8s-logs.yaml
apiVersion: v1kind: ConfigMapmetadata: name: k8s-logs-filebeat-config namespace: kube-systemdata: filebeat.yml: |- filebeat.prospectors: - type: log paths: - /mesages fields: app: k8s type: module fields_under_root: true output.logstash: hosts: ['192.168.79.110:5044'] ---apiVersion: apps/v1kind: DaemonSetmetadata: name: k8s-logs namespace: kube-systemspec: selector: matchLabels: project: k8s app: filebeat template: metadata: labels: project: k8s app: filebeat spec: containers: - name: filebeat image: collenzhao/filebeat:6.5.4 args: [ "-c", "/etc/filebeat.yml", "-e", ] resources: requests: cpu: 100m memory: 100Mi limits: cpu: 500m memory: 500Mi securityContext: runAsUser: 0 volumeMounts: - name: filebeat-config mountPath: /etc/filebeat.yml subPath: filebeat.yml - name: k8s-logs mountPath: /mesages volumes: - name: k8s-logs hostPath: path: /var/log/mesages type: File - name: filebeat-config configMap: name: k8s-logs-filebeat-config
下圖是Kibana的生成的信息。