使用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