天天看點

log-pilot日志收集到es7.x

使用log-pilot采集自建Kubernetes叢集服務日志,供業務排查問題。

簡介

Log-pilot是一個智能容器日志采集工具,它不僅能夠高效便捷地将容器日志采集輸出到多種存儲日志後端,同時還能夠動态地發現和采集容器内部的日志檔案。

針對前面提出的日志采集難題,Log-pilot通過聲明式配置實作強大的容器事件管理,可同時擷取容器标準輸出和内部檔案日志,解決了動态伸縮問題,此外,Log-pilot具有自動發現機制、CheckPoint及句柄保持的機制、自動日志資料打标、有效應對動态配置、日志重複和丢失以及日志源标記等問題。

本質

通過變量和模版檔案生産日志收集配置檔案,對日志進行采集。

容器内檔案日志路徑需要配置emptyDir

部署

log-pilot服務部署

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: log-pilot
  labels:
    app: log-pilot
  # 設定期望部署的namespace。
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: log-pilot
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: log-pilot
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      # 是否允許部署到Master節點上tolerations。
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: log-pilot
        # 版本請參考https://github.com/AliyunContainerService/log-pilot/releases。
        image: harbor.soulapp-inc.cn/soul-ops/log-pilot:7.x-filebeatv2
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 200m
            memory: 200Mi
        env:
          - name: "NODE_NAME"
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
          - name: "LOGGING_OUTPUT"
            value: "elasticsearch"
          # 請確定叢集到ES網絡可達。
          - name: "ELASTICSEARCH_HOSTS"
            value: "{es_endpoint}:{es_port}"
          # 配置ES通路權限。
          - name: "ELASTICSEARCH_USER"
            value: "{es_username}"
          - name: "ELASTICSEARCH_PASSWORD"
            value: "{es_password}"
        volumeMounts:
        - name: sock
          mountPath: /var/run/docker.sock
        - name: root
          mountPath: /host
          readOnly: true
        - name: varlib
          mountPath: /var/lib/filebeat
        - name: varlog
          mountPath: /var/log/filebeat
        - name: localtime
          mountPath: /etc/localtime
          readOnly: true
        livenessProbe:
          failureThreshold: 3
          exec:
            command:
            - /pilot/healthz
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 2
        securityContext:
          capabilities:
            add:
            - SYS_ADMIN
      terminationGracePeriodSeconds: 30
      volumes:
      - name: sock
        hostPath:
          path: /var/run/docker.sock
      - name: root
        hostPath:
          path: /
      - name: varlib
        hostPath:
          path: /var/lib/filebeat
          type: DirectoryOrCreate
      - name: varlog
        hostPath:
          path: /var/log/filebeat
          type: DirectoryOrCreate
      - name: localtime
        hostPath:
          path: /etc/localtime
           

服務日志采集

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: "tomcat:7.0"
    env:
    # 1、stdout為約定關鍵字,表示采集标準輸出日志。
    # 2、配置标準輸出日志采集到ES的catalina索引下。
    - name: aliyun_logs_catalina
      value: "stdout"
    # 1、配置采集容器内檔案日志,支援通配符。
    # 2、配置該日志采集到ES的access索引下。
    - name: aliyun_logs_access
      value: "/usr/local/tomcat/logs/catalina.*.log"
    # 容器内檔案日志路徑需要配置emptyDir。
    volumeMounts:
      - name: tomcat-log
        mountPath: /usr/local/tomcat/logs
  volumes:
    - name: tomcat-log
      emptyDir: {}
           

疑難雜症

預設阿裡雲倉庫隻支援7.x以下版本es的資料寫入,使用如下插件可以實作。

git位址:https://github.com/40kuai/log-pilot/tree/filebeat7.x

dockerhub:heleicool/log-pilot:7.x-filebeat

參考文檔:

log-pilot官方使用方式:https://help.aliyun.com/document_detail/86552.html