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

1、K8s總體日誌收集方案

總體的日誌收集方案,以下圖所示:node

  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接口來檢索數據,不只容許用戶建立他們本身的數據的定製儀表板視圖,還容許他們以特殊的方式查詢和過濾數據

2、針對不一樣組件的日誌收集

  • Node上部署一個日誌收集程序:DaemonSet方式部署日誌收集程序。對本節點/var/log和/var/lib/docker/containers/ 兩個目錄下的日誌進行採集.

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

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

3、安裝ELK

  • 安裝JDK:這裏咱們使用的是jdk-8u181-linux-x64.tar.gz(安裝過程省去,很是簡單)
  • 安裝Elasticsearch:直接解壓啓動,便可,執行下面的語句測試ES。

  • 安裝Kibana:核心配置文件config/kibana.yml
server.port: 5601
server.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

4、收集k8s組件日誌

filebeat的配置文件filebeat.yml使用ConfigMap管理,k8s組件日誌記錄在node節點本機/var/log/messages目錄下,因此將node節點/var/log/messages目錄掛載到pod中。建立收集k8s 組件日誌/var/log/messages資源。建立yaml文件以下:k8s-logs.yaml,並執行kubectl create -f k8s-logs.yamllinux

apiVersion: v1
kind: ConfigMap
metadata:
  name: k8s-logs-filebeat-config
  namespace: kube-system
data:
  filebeat.yml: |-
    filebeat.prospectors:
      - type: log
        paths:
          - /messages
        fields:
          app: k8s
          type: module
        fields_under_root: true

    output.logstash:
      hosts: ['192.168.79.110:5044']

---

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: k8s-logs
  namespace: kube-system
spec:
  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: /messages
      volumes:
      - name: k8s-logs
        hostPath:
          path: /var/log/messages
          type: File
      - name: filebeat-config
        configMap:
          name: k8s-logs-filebeat-config

下圖是Kibana的生成的信息。web

相關文章
相關標籤/搜索