日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes 日志查询分析实践

發布時間:2024/8/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes 日志查询分析实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備工作

為了完成后續的相關操作,我們需要準備一個 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-1namespace: nginx-stdout spec:template:metadata:name: nginx-stdout-log-demo-1spec:containers:- name: nginx-stdout-log-demo-1image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/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-2namespace: nginx-stdout spec:template:metadata:name: nginx-stdout-log-demo-2spec:containers:- name: nginx-stdout-log-demo-2image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/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-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"]

    操作步驟:

  • 打開 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)

    1.2. 采集標準輸出
    操作步驟:

  • 登陸日志服務控制臺,點擊進入集群 ID 對應的 project。
  • 創建一個 logstore 用于存儲標準輸出日志,比如 k8s-stdout。
  • 在 logstore 中新增 Logtail 配置,類型為【Docker 標準輸出】,選擇現有機器組中前綴為 k8s-group 的機器組。
  • 在【數據源設置】頁面,填寫【配置名稱】和【插件配置】。
    操作截圖如下:
  • 圖:創建 Logtail 采集配置

    圖:選擇 Docker 標準輸出配置

    圖:選擇現有機器組

    圖:選擇 k8s-group 開頭的機器組

    圖:填寫 Docker 標準輸出采集配置內容
    以下為兩個可選的采集配置(使用 IncludeLabel 分別采集兩個 namespace 下的數據,參考):
    配置:采集 namespace nginx-stdout

    {"inputs": [{"detail": {"IncludeLabel": {"io.kubernetes.pod.namespace": "nginx-stdout"},"ExcludeLabel": {}},"type": "service_docker_stdout"}] }

    配置:采集 namespace kube-system

    {"inputs": [{"detail": {"IncludeLabel": {"io.kubernetes.pod.namespace": "kube-system"},"ExcludeLabel": {}},"type": "service_docker_stdout"}] }

    1.3. 采集容器內文件

    操作步驟:

  • 登陸日志服務控制臺,點擊進入集群 ID 對應的 project。
  • 創建一個 logstore 用于存儲容器內文件日志,比如 nginx-file。
  • 在 logstore 中新增 Logtail 配置,類型為【Docker 文件】,選擇現有機器組中前綴為 k8s-group 的機器組。
  • 在【數據源設置】頁面,填寫【配置名稱】和具體的配置信息(采集文件的路徑、Label 等),示例為采集?/var/log/access.log。
  • 圖:選擇 Docker 文件配置

    圖:填寫 Docker 文件采集配置內容

    2. 日志查詢

    2.1. 設置字段索引 & 開啟日志聚類

    為了使用日志服務提供的查詢、日志聚類等功能,首先需要對索引進行配置。操作步驟如下:

  • 登陸日志服務控制臺,進入集群 ID 對應的 project,從左側導航欄的 logstore 中選擇先前創建的 k8s-stdout,展開點擊查詢分析進行查詢控制臺。
  • 點擊右上角的【查詢分析屬性 -> 設置索引】。
  • 在彈出窗口中勾選上【日志聚類】,然后點擊【自動生成索引】。
  • 點擊【確定】保存索引。
    操作截圖如下:
  • 圖:進入 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,我們可以借助這套方法來對它進行分析:
  • 查詢輸入框輸入 metrics-server,點擊查詢分析,可以看到所有范圍(默認為最近 15 分鐘)的全部日志,一般來說會很多。
  • 由于日志較多,為了發現日志模式,我們切換到【日志聚類】標簽頁,可以看到這段時間內的日志在模式上分為有限的幾類。我們可以拖動 pattern 進度條選擇粒度,對于特定 pattern,點擊【日志數量】來查看具體日志。
  • 懸停到日志時間左側的圖標,點擊彈出菜單中的【上下文瀏覽】,在彈出頁面中同樣可以進行篩選,并點擊【更早】、【更新】來查看指定日志的上文和下文。
  • 懸停到日志時間左側的圖標,點擊彈出菜單中的【LiveTail】。
  • 圖:日志聚類結果

    圖:上下文查詢入口

    圖:上下文查詢

    圖: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 日志查询分析实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。