Kubernetes Ingress日誌分析入門

本文主要介紹如何基於日誌服務構建Kubernetes Ingress日誌分析平臺,並提供一些簡單的動手實驗方便你們快速瞭解日誌服務相關功能。html

 

部署Ingress日誌方案

  1. 登陸容器服務管理控制檯
  2. 將上述CRD配置保存成編排模板。編排模板文檔請參見建立編排模板
  3. 基於該模板建立應用,選擇您所在集羣的default命名空間
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  # your config name, must be unique in you k8s cluster
  name: k8s-nginx-ingress
spec:
  # logstore name to upload log
  logstore: nginx-ingress
  # product code, only for k8s nginx ingress
  productCode: k8s-nginx-ingress
  # logtail config detail
  logtailConfig:
    inputType: plugin
    # logtail config name, should be same with [metadata.name]
    configName: k8s-nginx-ingress
    inputDetail:
      plugin:
        inputs:
        - type: service_docker_stdout
          detail:
            IncludeLabel:
              io.kubernetes.container.name: nginx-ingress-controller
            Stderr: false
            Stdout: true
        processors:
        - type: processor_regex
          detail:
            KeepSource: false
            Keys:
            - 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
            - host
            NoKeyError: true
            NoMatchError: true
            Regex: ^(\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

image.png

image.png

 

驗證Ingress日誌方案

  1. 登陸容器服務控制檯
  2. 進入路由頁面,點擊【Ingress概覽】,若跳轉出Ingress概覽頁則表示Ingress日誌方案建立成功。

image.png
image.png

 

部署Ingress日誌腳本

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mock-ingress
  namespace: default
  labels:
    app: mock-ingress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mock-ingress
  template:
    metadata:
      labels:
        app: mock-ingress
    spec:
      containers:
      - name: mock-ingress
        image: registry.cn-shanghai.aliyuncs.com/log-service/mock-ingress:latest
        command: ["/data/replay_log"]
        args:
          - '-ecs=true'
          - '-project=k8s-log-{cluster-id}'
          - '-endpoint=cn-shanghai.log.aliyuncs.com'
          - '-source=/data/data.txt'
          - '-dist=/data/distribute.csv'
  1. 登陸容器服務控制檯,複製集羣列表中的集羣ID並保存到記事本。
  2. 替換上述配置模板中的{cluster-id}爲您實際的集羣ID。
  3. 使用上述配置模板建立無狀態應用。

image.png

 

查看Ingress詳細報表

  1. 登陸日誌服務控制檯
  2. 單擊左側導航欄中的Project管理,選擇建立集羣時設置的日誌Project,單擊名稱進入日誌Project頁面(默認建立的project名稱爲 k8s-log-{cluster-id})。
  3. 在Project詳情頁面,默認進入日誌庫頁面。名稱爲nginx-ingress的日誌庫(logstore)存放着全部的Ingress訪問日誌。單擊左側導航欄中的儀表盤進入儀表盤列表,可查看到全部Ingress的分析報表。

設置告警

image.png

  1. 打開Ingress監控中心,在【請求成功率】圖表右上角的菜單欄中點擊【建立告警】
  2. 在彈出的告警框中輸入告警名稱,選擇查詢區間、執行區間
  3. 觸發條件設置爲: total < 100 ,即非100%就觸發告警(實際場景中可設置的小一些)
  4. 點擊【下一步】
  5. 在【通知類型】中選擇【釘釘機器人】,填入釘釘機器人的WebHook地址 https://oapi.dingtalk.com/robot/send?access_token=a2c6d68cdb67dbe6ad38361b91f24bf669a551ccb6c4ceef9d6a0f8ced044676(WebHook地址請參見自定義機器人獲取)便可完成告警設置。

訂閱定時報告

日誌服務除支持經過告警方式通知外,還支持報表訂閱功能,您可以使用該功能將報表按期渲染成圖片並經過郵件、釘釘羣等方式發送。
下述示例爲Ingress概覽配置訂閱功能,每分鐘將報表發送到指定釘釘羣:nginx

  1. 進入Ingress概覽報表,單擊報表右上角的訂閱按鈕。
  2. 在彈出的配置頁面中,頻率選擇CronJob,輸入 0/5 * * * *  (每5分鐘發送一次報告,實際場景可設爲天天固定時間),打開添加水印選項。
  3. 通知類型中選擇釘釘機器人,填入釘釘機器人的WebHook地址 https://oapi.dingtalk.com/robot/send?access_token=a2c6d68cdb67dbe6ad38361b91f24bf669a551ccb6c4ceef9d6a0f8ced044676(WebHook地址請參見自定義機器人獲取)便可完成訂閱。

高級功能

自定義分析Ingress日誌

  1. 登陸日誌服務控制檯
  2. 單擊左側導航欄中的Project管理,選擇建立集羣時設置的日誌Project,單擊名稱進入日誌Project頁面(默認建立的project名稱爲 k8s-log-{cluster-id})。
  3. 在Project詳情頁面,默認進入日誌庫頁面。點擊名稱爲nginx-ingress的日誌庫(logstore)右側的【查詢】連接進入查詢頁面。

日誌服務支持豐富的查詢與分析功能,詳情參考日誌查詢與分析。在查詢頁面支持自定義的查詢與分析,例如:docker

  1. 查詢狀態碼大於200的請求: status > 200 
  2. 查詢host(域名)爲 inner.njkj.com 且響應延遲高於30ms的請求:host :  inner.njkj.com and request_time > 0.03
  3. 統計狀態碼非200的Top10服務: not status : 200 | SELECT proxy_upstream_name, count(1) as total group by proxy_upstream_name order by total desc limit 10 
  4. 統計各省份UV分佈: * | select ip_to_province(x_forward_for) as province, approx_distinct(x_forward_for) as total group by province order by total desc limit 1000
  5. 統計host(域名)爲 inner.njkj.com最近1天的訪問平均延遲,並和昨天以及上週同一天的對比:host :  inner.njkj.com  |  select d[1] as "Today", d[2] as "Yesterday", d[1] - d[2] / d[2] as "Yesterday Delta",  d[3] as "Last Week", d[1] - d[3] / d[3] as "Last Week Delta"  from( select compare(val, 86400, 604800 ) as d from(select avg(request_time) as val from log ) )

Ingress報表均基於日誌服務的分析功能實現,您能夠從系統默認提供的Ingress報表中查找對應功能實現的SQL:點擊對應圖表的右上角菜單選項,選擇【查看分析詳情】,則會跳到對應的查詢頁面。api

image.png
image.png

 

從審計日誌中查詢部署操做

  1. 登陸日誌服務控制檯
  2. 單擊左側導航欄中的Project管理,選擇建立集羣時設置的日誌Project,單擊名稱進入日誌Project頁面(默認建立的project名稱爲 k8s-log-{cluster-id})。
  3. 進入左側導航欄中的儀表盤列表,選擇【Kubernetes資源操做詳細列表】進入。
  4. 在左上角【資源類型】篩選框中輸入Deployments,便可查詢到以前部署的Deployment。
  5. 可點擊左下角【資源建立列表】中的事件ID查詢詳細的事件信息。

image.png
image.png
image.png

接入其餘日誌(會後做業)

您能夠使用日誌服務Logtail接入業務應用的日誌來實現自定義的查詢、分析、可視化、告警等功能,您能夠使用如下任意一種方式接入日誌:app

1. 基於日誌服務控制檯建立採集配置:url

2. 使用環境變量建立採集配置:spa

3. 使用CRD方式建立採集配置:日誌

 

本文做者:元乙code

原文連接htm

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索