【趙強老師】Kubernetes平臺中日誌收集方案

一、K8s整體日誌收集方案

整體的日誌收集方案,如下圖所示:

up-9f6e1d04c58a89dbd97e652c316890de580.png

  1. Filebeat是本地文件的日誌數據採集器,可監控日誌目錄或特定日誌文件(tail file),並將它們轉發給Elasticsearch或Logstatsh進行索引、kafka等。帶有內部模塊(auditd,Apache,Nginx,System和MySQL),可通過一個指定命令來簡化通用日誌格式的收集,解析和可視化。

  2. 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/ 兩個目錄下的日誌進行採集.

up-271b968dfce5cfd1e6d3f3c47f81c80dec3.png

  • Pod中附加專用日誌收集的容器:每個運行應用程序的Pod中增加一個日誌收集容器,使用emtyDir共享日誌目錄讓日誌收集程序讀取到。

up-b7e2400d3c56da30cc2bafd23a7d854dd25.png

  • 應用程序直接推送日誌:不屬於Kubernetes範圍。

up-a125ed414d931060880bbad90f988d43da4.png

三、安裝ELK

  • 安裝JDK:這裏我們使用的是jdk-8u181-linux-x64.tar.gz(安裝過程省去,非常簡單)

  • 安裝Elasticsearch:直接解壓啓動,即可,執行下面的語句測試ES。

up-fc20068336268e10ffc5766cfa27a46ffc3.png

  • 安裝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的生成的信息。

up-7bcbd90f6ce654cf95efe7e514ec56b670e.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章