您好,登錄后才能下訂單哦!
這篇文章給大家介紹K8S中如何使用sidecar模式統一收集應用日志(適用所有技術語言體系),內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Filebeat可以以sidecar模式來進行容器日志的收集,也就是filebeat和具體的服務容器部署在同一個pod內,指定收集日志的路徑或文件,即可將日志發送到指定位置或Elasticsearch這類的搜索引擎。
每個pod內部署filebeat的模式,好處是和具體的應用服務低耦合,可擴展性強,不過需要在yaml進行額外配置。
理論的可以支持所有技術語言體系,只要能輸出文件日志就好。
app服務
---
apiVersion: v1
kind: Service
metadata:
name: test-app
labels:
app: test-app
spec:
selector:
app: test-app
ports:
- protocol: TCP
port: 8080
targetPort: 8080
name: test-port
#定義日志收集相關配置的一個configmap
---
apiVersion: v1
kind: ConfigMap
metadata:
name: test-filebeat-config
labels:
k8s-app: filebeat
data:
filebeat.yml: |-
filebeat.prospectors:
- type: log
paths:
- /logdata/*.log
tail_files: true
fields:
pod_name: '${pod_name}'
POD_IP: '${POD_IP}'
setup.template.name: "app-logs"
setup.template.pattern: "app-logs-*"
output.elasticsearch: # 日志輸出到ES
hosts: ["192.168.1.xx:9200","192.168.1.xxx:9200"]
index: "app-logs-%{+yyyy.MM}"
# deployment, 也可通過daemonset方式
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-app
spec:
replicas: 1
minReadySeconds: 15 #滾動升級15s后標志pod準備就緒
strategy:
rollingUpdate: #replicas為2, 升級過程中pod個數在1-3個之間
maxSurge: 1 #滾動升級時會先啟動1個pod
maxUnavailable: 1 #滾動升級時允許pod處于Unavailable的最大個數
selector:
matchLabels:
app: test-app
template:
metadata:
labels:
app: test-app
spec:
terminationGracePeriodSeconds: 30 #30秒內優雅關閉程序
containers:
- image: hub.exmaple.com/publib/filebeat:6.1.3 #提前下載下來到私有鏡像庫的鏡像(官方的可能會被墻)
name: filebeat
args: [
"-c", "/opt/filebeat/filebeat.yml",
"-e",
]
env:
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: pod_name
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
securityContext:
runAsUser: 0
resources:
limits:
memory: 200Mi
requests:
cpu: 200m
memory: 200Mi
volumeMounts:
- name: config #將configmap的內容放到容器本地目錄
mountPath: /opt/filebeat/
- name: data
mountPath: /usr/share/filebeat/data
- name: logdata #同一個pod內的兩個應用共享目錄logdata, 一個寫一個讀
mountPath: /logdata
- name: test-app
image: hub.example.com/service/test-service:latest #提供具體服務的app鏡像
ports:
- containerPort: 8080
volumeMounts:
- name: logdata #指定掛在目錄到logdata
mountPath: /usr/local/tomcat/logs
volumes:
- name: data
emptyDir: {}
- name: logdata #定義logdata為EmptyDir類型掛載目錄
emptyDir: {}
- name: config
configMap:
name: test-filebeat-config #使用前面定義的configmap
items:
- key: filebeat.yml
path: filebeat.yml
查看filebeat和app的運行日志
kubectl logs -f <pod名> filebeatkubectl logs -f <pod名> test-app
這時可看到詳細的運行日志情況,同時elasticsearch上也會新建一個app-logs-xxxx.xx的索引。
關于K8S中如何使用sidecar模式統一收集應用日志(適用所有技術語言體系)就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。