阿里雲Ingress組件除了提供外部可訪問的URL、負載平衡、SSL、基於名稱的虛擬機器主機外,還支援將所有您的HTTP請求日誌記錄到標準輸出中。您可以在建立叢集時啟用Log Service,在阿里雲Log ServiceSLS查看Nginx Ingress的訪問日誌分析報表和監控Nginx Ingress即時狀態。本文介紹Nginx Ingress訪問日誌的部署及查看。
索引
前提條件
安裝日誌組件。
叢集建立時,預設會安裝日誌組件,如未安裝請參見通過DaemonSet採集Kubernetes容器文本日誌進行手動安裝。
升級Log Controller。
通過執行
kubectl edit deployment alibaba-log-controller -n kube-system
命令修改鏡像版本進行升級。
開啟Nginx Ingress日誌採集配置
方式一:通過ACK控制台開啟
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁面,單擊網路頁簽,找到Nginx Ingress Controller組件,然後在組件所在卡片的右下角單擊,選擇開啟日誌,最後根據頁面提示完成日誌開啟。
方式二:通過命令列開啟
日誌採集配置針對ACK進行了CRD擴充,您可以直接部署AliyunLogConfig的CRD配置,Log Controller會自動建立Log Service相關採集配置和報表資源。
部署AliyunLogConfig的CRD時需要注意以下事項:
對於已經正在啟動並執行nginx-ingress-controller, 建立AliyunLogConfig之後,需要重建nginx-ingress-controller Pod,使其採集日誌生效。
請確保日誌組件alibaba-log-controller版本不低於
0.2.0.0-76648ee-aliyun
。更新版本後,若已經應用了該CRD配置,請刪除該配置並重新應用。部署AliyunLogConfig的CRD只針對ACK預設Ingress Controller中的日誌格式生效。若您修改過Ingress Controller的訪問日誌格式,請修改CRD配置中的Regex提取
processor_regex
部分。具體操作,請參見通過DaemonSet-CRD方式採集容器日誌。IncludeLabel
為Docker inspect中的Label資訊。Kubernetes中的命名空間和容器名會映射到Docker的Label中,分別為
io.kubernetes.pod.namespace
和io.kubernetes.container.name
。例如,您建立的Pod所屬命名空間為backend-prod,容器名為worker-server。如果配置Label白名單為
io.kubernetes.pod.namespace : backend-prod
,則收集對應Pod中所有容器的日誌。如果配置Label白名單為
io.kubernetes.container.name : worker-server
,則收集對應容器的日誌。
Kubernetes不建議使用除
io.kubernetes.pod.namespace
和io.kubernetes.container.name
之外的其他Label。其他情況請使用IncludeEnv或ExcludeEnv,具體操作,請參見通過DaemonSet-控制台方式採集容器標準輸出。
如果不需要Ingress日誌採集,刪除AliyunLogConfig配置即可。
建立設定檔k8s-nginx-ingress.yaml,YAML檔案完整範例如下。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 配置名稱,不能夠重名。 name: k8s-nginx-ingress # 命名空間,放置於ingress controller所在命名空間,請按需修改。 namespace: kube-system spec: # logstore名稱。 logstore: nginx-ingress # 產品Code,請勿更改。 productCode: k8s-nginx-ingress # 詳細配置。 logtailConfig: inputType: plugin # logtail配置名稱,需要和metadata.name保持一致。 configName: k8s-nginx-ingress inputDetail: plugin: inputs: - type: service_docker_stdout detail: IncludeLabel: # docker容器中的標籤資訊。 # 容器名稱為nginx-ingress-controller。 # 如果配置多個ingress controller請注意預防日誌重複採集,詳細請閱讀注意事項中IncludeLabel釋義。 io.kubernetes.container.name: nginx-ingress-controller Stderr: true Stdout: true processors: - type: processor_regex # 使用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 - proxy_alternative_upstream_name NoKeyError: true NoMatchError: true # 提取欄位使用的Regex。符合該格式的日誌,會將每個擷取的群組中內容映射到對應的欄位上。 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+?)*)\s(\S+?(?:,\s\S+?)*)\s(\S+)\s*(\S*)\s*\[*([^]]*)\]*.* SourceKey: content
執行以下命令,部署AliyunLogConfig的CRD配置。
kubectl apply -f k8s-nginx-ingress.yaml
查看Nginx Ingress日誌與報表
在Project列表地區,選擇建立叢集時設定的日誌Project,單擊名稱進入日誌Project頁面(預設建立的project名稱為k8s-log-{cluster-id})。
在左側導覽列單擊儀錶盤表徵圖,然後在儀錶盤列表中選擇儀錶盤名稱,查看對應的分析報表。
Ingress概覽
Ingress概覽報表主要展示當前Nginx Ingress的整體狀態,主要包括以下幾類資訊:
整體架構狀態(1天),包括PV、UV、流量、響應延遲、移動端佔比和錯誤比例等。
網站即時狀態(1分鐘),包括訪問PV、訪問UV、訪問成功率、平均延遲、P95延遲和P99延遲等。
使用者請求類資訊(1天),包括1天訪問PV對比、7天訪問PV對比、地區分布、TOP訪問省份、TOP訪問城市、移動端佔比和Android/iOS佔比等。
TOP URL統計(1小時),包括訪問TOP10、延遲TOP10、5XX錯誤TOP10和404錯誤TOP10。
Ingress訪問中心
Ingress訪問中心主要側重於用於訪問請求相關的統計資訊,一般用於營運分析,包括今日UV、今日PV、UV分布、PV分布、TOP訪問省份、TOP訪問城市、TOP訪問瀏覽器、TOP訪問IP、移動端佔比和Android/iOS佔比等。
Ingress監控中心
Ingress監控中心主要側重於網站即時監控資料,一般用於完整即時監控與警示,包括請求成功率、錯誤比例、5XX比例、請求未轉寄比例、平均延遲、P95延遲、P99延遲、P999延遲、狀態代碼分布、Ingress壓力分布、Service訪問TOP10、Service錯誤TOP10、Service延遲TOP10和Service流量TOP10等。
Ingress藍綠髮布監控中心
Ingress藍綠髮布監控中心主要用於版本發布時的即時監控與對比(版本前後對比以及藍綠版本當前對比),以便您在服務發布時快速檢測異常並進行復原。在該報表中您需要選擇進行對比的藍綠版本(ServiceA和ServiceB),報表將根據您的選擇動態顯示藍綠版本相關指標,包括PV、5XX比例、成功率、平均延遲、P95延遲、P99延遲、P999延遲和流量等。
Ingress異常檢測中心
Ingress異常檢測中心基於Log Service提供的機器學習演算法,通過多種時序分析演算法從Nginx Ingress的指標中自動檢測異常點,提高問題發現的效率。
配置警示
Log Service除提供互動式分析、可視化報表之外,您可直接基於上述報錶快速配置警示,警示支援通知DingTalkWebHook、簡訊、郵件和自訂WebHook等。
警示詳細配置方法請參見設定警示。
下述樣本為Nginx Ingress配置5XX比例的警示,警示每5分鐘執行一次,當5XX比例超過1%時觸發。
進入Ingress監控中心報表,滑鼠滑動到圖表5XX比例右上方的表徵圖,在彈出的提示框中單擊另存新檔警示(舊版)。
在建立警示面板中,填入警示名稱、關聯圖表、頻率、觸發條件,查詢語句中的
total
為5XX的百分比,因此觸發條件輸入total > 1。在下一步的通知中,根據您的需求選擇對應的通知方式,並填入對應參數,然後單擊提交,即可完成警示建立。
訂閱定時報告
Log Service除支援通過警示方式通知外,還支援報告訂閱功能,您可使用該功能將報表定期渲染成圖片並通過郵件、DingTalk群等方式發送。
訂閱功能詳細使用方法請參見訂閱儀錶盤。
下述樣本為Ingress概覽配置訂閱功能,每天上午10點將報表發送到指定DingTalk群。
進入Ingress概覽V1.2報表,選擇報表右上方的 。
在建立訂閱面板中,頻率選擇每天、10:00,關閉添加浮水印選項,單擊下一步。
通知類型中選擇WebHookDingTalk機器人,填入DingTalk機器人的WebHook地址,然後單擊提交,即可完成訂閱。
使用Ingress Dashboard與ARMS進行聯動排查
在Project列表地區,選擇建立叢集時設定的日誌Project,單擊名稱進入日誌Project頁面(預設建立的project名稱為k8s-log-{cluster-id})。
單擊左側列表的,在儀錶盤列表查看Ingress概覽V1.2儀錶盤,擷取您所需要的資訊。
例如,定位Top10延遲URL地區,查看TOP10延遲URL的URL(ARMS排查)欄位。您可以單擊URL連結跳轉到對應服務的ARMS監控鏈路查詢頁面並在ARMS控制台查詢對應服務的查詢調用鏈路詳細情況。
相關文檔
如果您需要對日誌採集進行過濾,請參見過濾日誌。