Kubernetes 日志查询分析实践
準備工作
為了完成后續的相關操作,我們需要準備一個 K8s 集群,操作步驟如下:
操作截圖如下:
圖:創建托管集群(步驟 2)
圖:打開 CloudShell(步驟 3)
圖:在 CloudShell 中查看日志服務組件(步驟 4)
圖:打開日志服務控制臺,查看 project(步驟 5)
1. 數據采集
在 K8s 環境下,容器日志數據從大體上分為兩類:容器標準輸出和容器內文本文件,前者是容器特有的一種日志存在形式,后者和傳統的文本文件日志類似,只是文件存放在各個容器內部,相互之間隔離。下面我們將介紹如何對這兩種類型的日志進行采集。
1.1. Mock 數據
我們將使用如下兩個 YAML 文件分別生成標準輸出和容器內文件兩種形式的 mock 數據。
容器標準輸出
容器內文本文件(/var/log/access.log)
apiVersion: batch/v1 kind: Job metadata:name: nginx-file-log-demonamespace: nginx-file spec:template:metadata:name: nginx-file-log-demospec:restartPolicy: Nevercontainers:- name: nginx-file-log-demoimage: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--log-type=nginx", "--stdout=false", "--stderr=false", "--path=/var/log/access.log", "--total-count=100000000", "--logs-per-sec=5"]操作步驟:
- 標準輸出:執行?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"。
命令:生成 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)
1.2. 采集標準輸出
操作步驟:
操作截圖如下:
圖:創建 Logtail 采集配置
圖:選擇 Docker 標準輸出配置
圖:選擇現有機器組
圖:選擇 k8s-group 開頭的機器組
圖:填寫 Docker 標準輸出采集配置內容
以下為兩個可選的采集配置(使用 IncludeLabel 分別采集兩個 namespace 下的數據,參考):
配置:采集 namespace nginx-stdout
配置:采集 namespace kube-system
{"inputs": [{"detail": {"IncludeLabel": {"io.kubernetes.pod.namespace": "kube-system"},"ExcludeLabel": {}},"type": "service_docker_stdout"}] }1.3. 采集容器內文件
操作步驟:
圖:選擇 Docker 文件配置
圖:填寫 Docker 文件采集配置內容
2. 日志查詢
2.1. 設置字段索引 & 開啟日志聚類
為了使用日志服務提供的查詢、日志聚類等功能,首先需要對索引進行配置。操作步驟如下:
操作截圖如下:
圖:進入 logstore 查詢分析界面
圖:索引配置入口
圖:開啟日志聚類
圖:自動生成字段索引
2.2. 基本查詢
在配置完索引后,我們可以在查詢輸入框中使用查詢語句可以快速地篩選日志,以下是一些示例:
- 查看命名空間 nginx-stdout 下的日志:_namespace_:nginx-stdout
- 查看其他命名空間下的日志:not _namespace_: nginx-stdout
- 查看命名空間 kube-system 下指定 pod 的日志:_namespace_: kube-system and _pod_name_: xxxxxx
在實際查詢過程中,我們可以通過直接點擊查詢結果中的內容來快速填充查詢語句,截圖如下。
圖:點擊查詢結果中的內容
圖:查詢語句快速填充
2.3. 日志聚類 & 上下文查詢 & LiveTail
在排查問題時,我們一般會組合使用日志聚類、上下文查詢以及 LiveTail 這三個功能來輔助問題排查。
- 首先,利用日志聚類來快速地查看日志模式,發現其中懷疑的問題日志。
- 接著,利用上下文查詢,來跟蹤問題日志前后的日志,輔助我們定位問題。
- 最后,在根據問題做出調整后,使用 LiveTail 來查看最新日志的變化情況,確認是否達到修改預期。
以下假設應用 pod 是 metrics-server,我們可以借助這套方法來對它進行分析:
圖:日志聚類結果
圖:上下文查詢入口
圖:上下文查詢
圖:LiveTail
3. Ingress & Audit 方案
除了 K8s 環境下基本的日志采集、查詢分析功能以外,我們還針對 K8s 環境下的 Ingress、審計(Audit)日志提供了方案。
3.1. Ingress
為了在集群中部署 Ingress 方案,只需要在集群已安裝日志服務組件的基礎上,應用如下的 YAML 文件即可:
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata:# your config name, must be unique in you k8s clustername: k8s-nginx-ingress spec:# logstore name to upload loglogstore: nginx-ingress# product code, only for k8s nginx ingressproductCode: k8s-nginx-ingress# logtail config detaillogtailConfig:inputType: plugin# logtail config name, should be same with [metadata.name]configName: k8s-nginx-ingressinputDetail:plugin:inputs:- type: service_docker_stdoutdetail:IncludeLabel:io.kubernetes.container.name: nginx-ingress-controllerStderr: falseStdout: trueprocessors:- type: processor_regexdetail:KeepSource: falseKeys:- client_ip- x_forward_for- remote_user- time- method- url- version- status- body_bytes_sent- http_referer- http_user_agent- request_length- request_time- proxy_upstream_name- upstream_addr- upstream_response_length- upstream_response_time- upstream_status- req_id- hostNoKeyError: trueNoMatchError: trueRegex: ^(\S+)\s-\s\[([^]]+)]\s-\s(\S+)\s\[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]*)"\s"([^"]*)"\s(\S+)\s(\S+)+\s\[([^]]*)]\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s*(\S*).*SourceKey: content該 YAML 會在集群對應的日志服務 project 中創建一個名為 nginx-ingress 的 logstore,存儲相關的日志,并且會對應地創建一系列基于 Ingress 日志所構建的詳細報表,輔助我們分析 Ingress 日志。
圖:Ingress 概覽
更多信息可以閱讀《Kubernetes Ingress 日志分析入門》。
審計(Audit)
目前,審計方案會在集群創建時自動應用,相關的日志會存儲在日志服務 project 下以 audit- 為前綴的 logstore 中,其中包含針對集群操作的詳細日志,比如資源(Pod、Deploy)的創建與刪除、集群的擴容記錄等。類似地,審計方案同樣提供了一系列詳細報表。
雙12來襲!500元淘寶紅包、iPhone11等你拿。
https://www.aliyun.com/1212/2019/home?utm_content=g_1000092611
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的Kubernetes 日志查询分析实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AnalyticDB for MySQL
- 下一篇: QPS 提升60%,揭秘阿里巴巴轻量级开