日志系统要求: 1.因开发项目要求,一个pod 内有多个日志路径,需要收集 2.同时需要收集pod 容器的标准输出日志 环境: 本次环境es、kibana 均部署在k8s 集群外,在物理机部署,只需要log-pilot 指定es 地址 具体步骤: 创建 daemonset log-pilot kubectl get daemonsets.apps log-pilot -o yaml apiVersion: apps/v1 kind: DaemonSet metadata: labels: k8s-app: log-pilot name: log-pilot namespace: default spec: selector: matchLabels: k8s-app: log-es template: metadata: labels: k8s-app: log-es spec: containers: - env: - name: NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - name: PILOT_LOG_PREFIX value: mytest #收集容器日志前缀标识,容器日志必须指定同一标识 mytest - name: FILEBEAT_OUTPUT value: elasticsearch #日志指定输出位置为 es - name: ELASTICSEARCH_HOST value: 10.16.0.178 # es 地址 - name: ELASTICSEARCH_PORT value: "9200" # es 端口 image: yzsjhl-evdc-node03.opi.com/tj/log-pilot:0.9.5-filebeatv01 imagePullPolicy: IfNotPresent name: log-pilot resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi securityContext: capabilities: add: - SYS_ADMIN terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /var/run/docker.sock name: sock - mountPath: /host name: root readOnly: true - mountPath: /var/lib/filebeat name: varlib - mountPath: /var/log/filebeat name: varlog dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - hostPath: path: /var/run/docker.sock type: "" name: sock - hostPath: path: / type: "" name: root - hostPath: path: /var/lib/filebeat type: DirectoryOrCreate name: varlib - hostPath: path: /var/log/filebeat type: DirectoryOrCreate name: varlog updateStrategy: rollingUpdate: maxUnavailable: 1 type: RollingUpdate 创建应用容器deployments (java 项目),有三个日志路径需要收集 $ kubectl get deployments.apps gateway-deploy -o yaml apiVersion: apps/v1 kind: Deployment metadata: name: gateway-deploy namespace: default spec: replicas: 2 selector: matchLabels: app: gateway release: stabel strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: gateway env: test release: stabel spec: containers: - env: - name: TZ value: Asia/Shanghai - name: mytest_logs_gatewaystdout # 容器的标准输出日志 value: stdout - name: mytest_logs_gatewayaccesslogdir #第一个应用日志 value: /data/logs/service-gateway/access/*.log - name: mytest_logs_gatewayauthlogdir #第二个应用日志 value: /data/logs/service-gateway/auth/*.log - name: mytest_logs_gatewayrootlogdir #第三个应用日志 value: /data/logs/service-gateway/root/*.log image: yzsjhl-evdc-node03.opi.com/renren-backend/gateway:20200519161529 imagePullPolicy: IfNotPresent name: gateway ports: - containerPort: 8089 name: http1 protocol: TCP - containerPort: 20007 name: http2 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: # 每个日志 emptyDir都需要挂载在容器日志的指定位置 - mountPath: /data/logs/service-gateway/access name: gatewayaccess-logs - mountPath: /data/logs/service-gateway/auth name: gatewayauth-logs - mountPath: /data/logs/service-gateway/root name: gatewayroot-logs dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - emptyDir: {} # 每个日志路径都需要指定一个 emptyDir name: gatewayaccess-logs - emptyDir: {} name: gatewayauth-logs - emptyDir: {} name: gatewayroot-logs 查看kibana,看是否收集到日志: