共計 2987 個字符,預計需要花費 8 分鐘才能閱讀完成。
這期內容當中丸趣 TV 小編將會給大家帶來有關怎樣進行 Kubernetes 日志查詢分析實踐,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
簡介:下面將介紹如何基于日志服務實現對 Kubernetes(以下簡稱 K8s)日志的采集以及查詢分析,此外,還附帶了對 Ingress、Audit 方案的簡要介紹。為了方便大家通過操作來加深理解,提供了詳細的操作步驟以及對應截圖和配置代碼。
準備工作
為了完成后續的相關操作,我們需要準備一個 K8s 集群,操作步驟如下:
登陸容器服務控制臺。
創建一個標準托管集群(杭州區域),在向導中勾選上 **【使用 EIP 暴露 API Server】和【使用日志服務】**。
集群創建完畢后,回到集群列表頁面,點擊 **【更多 - 通過 CloudShell 管理集群】**。
在 CloudShell 中輸入 kubectl get ds -n kube-system,結果中顯示的 logtail-ds 即為了實現數據采集所安裝的日志服務組件。
打開日志服務控制臺,可以看到和 K8s 集群 ID 所對應的 project 也已經創建完畢。
操作截圖如下:
圖:創建托管集群(步驟 2)
圖:打開 CloudShell(步驟 3)
圖:在 CloudShell 中查看日志服務組件(步驟 4)
圖:打開日志服務控制臺,查看 project(步驟 5)
1. 數據采集
在 K8s 環境下,容器日志數據從大體上分為兩類:容器標準輸出和容器內文本文件,前者是容器特有的一種日志存在形式,后者和傳統的文本文件日志類似,只是文件存放在各個容器內部,相互之間隔離。下面我們將介紹如何對這兩種類型的日志進行采集。
1.1. Mock 數據
我們將使用如下兩個 YAML 文件分別生成標準輸出和容器內文件兩種形式的 mock 數據。
容器標準輸出
# 創建兩個 pod 來生成 mock 數據
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-stdout-log-demo-1
namespace: nginx-stdout
spec:
template:
metadata:
name: nginx-stdout-log-demo-1
spec:
containers:
- name: nginx-stdout-log-demo-1
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: [/bin/mock_log]
args: [--stderr=false , --stdout=true , --log-type=nginx , --total-count=100000000 , --logs-per-sec=5]
restartPolicy: Never
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-stdout-log-demo-2
namespace: nginx-stdout
spec:
template:
metadata:
name: nginx-stdout-log-demo-2
spec:
containers:
- name: nginx-stdout-log-demo-2
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: [/bin/mock_log]
args: [--stderr=false , --stdout=true , --log-type=nginx , --total-count=100000000 , --logs-per-sec=5]
restartPolicy: Never
容器內文本文件(/var/log/access.log)
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-file-log-demo
namespace: nginx-file
spec:
template:
metadata:
name: nginx-file-log-demo
spec:
restartPolicy: Never
containers:
- name: nginx-file-log-demo
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: [/bin/mock_log]
args: [--log-type=nginx , --stdout=false , --stderr=false , --path=/var/log/access.log , --total-count=100000000 , --logs-per-sec=5]
操作步驟:
打開 CloudShell,參考準備工作中的步驟 3。
在集群中應用上面提及的兩個 YAML(Github)。
執行 kubectl get pods 查看負責生成日志的幾個 Pod。
查看兩個 Pod 生成日志的情況(根據實際情況替換命令中的 pod 名)
標準輸出:執行 kubectl logs -n nginx-stdout –tail=10 nginx-stdout-log-demo-1-7kvwx。
容器內文件:執行 kubectl exec -n nginx-file nginx-file-log-demo-7frsp — bash -c tail /var/log/access.log。
$ kubectl create namespace nginx-stdout
$ kubectl create -f https://raw.githubusercontent.com/goclis/kubernetes-mock-log/master/pod_nginx_stdout.yaml
$ kubectl create namespace nginx-file
$ kubectl create -f https://raw.githubusercontent.com/goclis/kubernetes-mock-log/master/pod_nginx_file.yaml
命令:生成 mock 數據(步驟 2)
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
nginx-file nginx-file-log-demo-7frsp 1/1 Running 0 2m9s
nginx-stdout nginx-stdout-log-demo-1-7kvwx 1/1 Running 0 2m12s
nginx-stdout nginx-stdout-log-demo-2-4x7vw 1/1 Running 0 2m12s
命令:查看日志服務組件(步驟 3)
上述就是丸趣 TV 小編為大家分享的怎樣進行 Kubernetes 日志查詢分析實踐了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。