log-Pilot是一個智能容器日志采集工具,它不僅能夠高效便捷地將容器日志采集輸出到多種存儲日志后端,同時還能夠動態地發現和采集容器內部的日志文件,更多咨詢可以移步這里。
log-Pilot目前支持兩種工具對日志進行收集,Fluentd Plugin 和 Filebeat Plugin。
Log-Pilot支持容器事件管理,它能夠動態地監聽容器的事件變化,然后依據容器的標簽來進行解析,生成日志采集配置文件,然后交由采集插件來進行日志采集。
在Kubernetes下,Log-Pilot可以依據環境變量 aliyun_logs_$name = $path
動態地生成日志采集配置文件,其中包含兩個變量:
- $name是我們自定義的一個字符串,它在不同的場景下指代不同的含義,在本場景中,將日志采集到ElasticSearch的時候,這個$name表示的是Index。
- 另一個是$path,支持兩種輸入形式,stdout和容器內部日志文件的路徑,對應日志標准輸出和容器內的日志文件。
- 第一種約定關鍵字stdout表示的是采集容器的標准輸出日志,如本例中我們要采集tomcat容器日志,那么我們通過配置標簽
aliyun.logs.catalina=stdout
來采集tomcat標准輸出日志。 - 第二種是容器內部日志文件的路徑,也支持通配符的方式,通過配置環境變量
aliyun_logs_access=/usr/local/tomcat/logs/*.log
來采集tomcat容器內部的日志。當然如果你不想使用aliyun這個關鍵字,Log-Pilot也提供了環境變量PILOT_LOG_PREFIX可以指定自己的聲明式日志配置前綴,比如PILOT_LOG_PREFIX: "aliyun,custom"
。
- 第一種約定關鍵字stdout表示的是采集容器的標准輸出日志,如本例中我們要采集tomcat容器日志,那么我們通過配置標簽
部署實例:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: log-pilot
labels:
app: log-pilot
namespace: kube-ops
spec:
selector:
matchLabels:
app: log-pilot
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: log-pilot
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: log-pilot
image: registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.7-filebeat
resources:
limits:
memory: 500Mi
requests:
cpu: 200m
memory: 200Mi
env:
- name: "NODE_NAME"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# 日志收集前綴
- name: PILOT_LOG_PREFIX
value: aliyun
- name: "LOGGING_OUTPUT"
value: "elasticsearch"
# 請確保集群到ES網絡可達
- name: "ELASTICSEARCH_HOSTS"
value: "elasticsearch:9200"
# 配置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/localtim
創建pod測試
apiVersion: v1
kind: Pod
metadata:
name: tomcat
spec:
containers:
- name: tomcat
image: "tomcat:8.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: {}
然后我們查看索引會看到access-和catalina-的索引
# curl -XGET 'localhost:9200/_cat/indices?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open access-2020.06.23 0LS6STfpQ4yHt7makuSI1g 5 1 40 0 205.5kb 102.5kb
green open logstash-2020.06.23 HR62innTQi6HjObIzf6DHw 5 1 99 0 296kb 148kb
green open catalina-2020.06.23 dSFGcZlPS6-wieFKrOWV-g 5 1 40 0 227.1kb 133.3kb
green open .kibana H-TAto8QTxmi-jI_4mIUrg 1 1 2 0 20.4kb 10.2kb
green open logstash-2020.06.22 8-IFAOj_SqiipqOXN6Soxw 5 1 43784 0 30.6mb 15.3mb
然后到頁面添加索引即可。
當然日志的輸出除了直接輸出到es外還可以輸出到其他地方,如果是使用filebeat則可以點擊這里進行查看。如果是fluentd,則點擊這里。