Nginx Ingress訪問日志分析與監(jiān)控
阿里云Ingress組件除了提供外部可訪問的URL、負(fù)載均衡、SSL、基于名稱的虛擬主機(jī)外,還支持將所有您的HTTP請求日志記錄到標(biāo)準(zhǔn)輸出中。您可以在創(chuàng)建集群時啟用日志服務(wù),在阿里云日志服務(wù)SLS查看Nginx Ingress的訪問日志分析報表和監(jiān)控Nginx Ingress實時狀態(tài)。本文介紹Nginx Ingress訪問日志的部署及查看。
索引
前提條件
安裝日志組件。
集群創(chuàng)建時,默認(rèn)會安裝日志組件,如未安裝請參見通過DaemonSet采集Kubernetes容器文本日志進(jìn)行手動安裝。
升級Log Controller。
通過執(zhí)行
kubectl edit deployment alibaba-log-controller -n kube-system
命令修改鏡像版本進(jìn)行升級。
開啟Nginx Ingress日志采集配置
方式一:通過ACK控制臺開啟
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在組件管理頁面,單擊網(wǎng)絡(luò)頁簽,找到Nginx Ingress Controller組件,然后在組件所在卡片的右下角單擊,選擇開啟日志,最后根據(jù)頁面提示完成日志開啟。
方式二:通過命令行開啟
日志采集配置針對ACK進(jìn)行了CRD擴(kuò)展,您可以直接部署AliyunLogConfig的CRD配置,Log Controller會自動創(chuàng)建日志服務(wù)相關(guān)采集配置和報表資源。
部署AliyunLogConfig的CRD時需要注意以下事項:
對于已經(jīng)正在運行的nginx-ingress-controller, 創(chuàng)建AliyunLogConfig之后,需要重建nginx-ingress-controller Pod,使其采集日志生效。
請確保日志組件alibaba-log-controller版本不低于
0.2.0.0-76648ee-aliyun
。更新版本后,若已經(jīng)應(yīng)用了該CRD配置,請刪除該配置并重新應(yīng)用。部署AliyunLogConfig的CRD只針對ACK默認(rèn)Ingress Controller中的日志格式生效。若您修改過Ingress Controller的訪問日志格式,請修改CRD配置中的正則表達(dá)式提取
processor_regex
部分。具體操作,請參見通過DaemonSet-CRD方式采集容器日志。IncludeLabel
為Docker inspect中的Label信息。Kubernetes中的命名空間和容器名會映射到Docker的Label中,分別為
io.kubernetes.pod.namespace
和io.kubernetes.container.name
。例如,您創(chuàng)建的Pod所屬命名空間為backend-prod,容器名為worker-server。如果配置Label白名單為
io.kubernetes.pod.namespace : backend-prod
,則收集對應(yīng)Pod中所有容器的日志。如果配置Label白名單為
io.kubernetes.container.name : worker-server
,則收集對應(yīng)容器的日志。
Kubernetes不建議使用除
io.kubernetes.pod.namespace
和io.kubernetes.container.name
之外的其他Label。其他情況請使用IncludeEnv或ExcludeEnv,具體操作,請參見通過DaemonSet-控制臺方式采集容器標(biāo)準(zhǔn)輸出。
如果不需要Ingress日志采集,刪除AliyunLogConfig配置即可。
創(chuàng)建配置文件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 # 產(chǎn)品Code,請勿更改。 productCode: k8s-nginx-ingress # 詳細(xì)配置。 logtailConfig: inputType: plugin # logtail配置名稱,需要和metadata.name保持一致。 configName: k8s-nginx-ingress inputDetail: plugin: inputs: - type: service_docker_stdout detail: IncludeLabel: # docker容器中的標(biāo)簽信息。 # 容器名稱為nginx-ingress-controller。 # 如果配置多個ingress controller請注意預(yù)防日志重復(fù)采集,詳細(xì)請閱讀注意事項中IncludeLabel釋義。 io.kubernetes.container.name: nginx-ingress-controller Stderr: true Stdout: true processors: - type: processor_regex # 使用正則表達(dá)式提取字段。 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 # 提取字段使用的正則表達(dá)式。符合該格式的日志,會將每個捕獲組中內(nèi)容映射到對應(yīng)的字段上。 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
執(zhí)行以下命令,部署AliyunLogConfig的CRD配置。
kubectl apply -f k8s-nginx-ingress.yaml
查看Nginx Ingress日志與報表
登錄日志服務(wù)控制臺。
在Project列表區(qū)域,選擇創(chuàng)建集群時設(shè)置的日志Project,單擊名稱進(jìn)入日志Project頁面(默認(rèn)創(chuàng)建的project名稱為k8s-log-{cluster-id})。
在左側(cè)導(dǎo)航欄單擊儀表盤圖標(biāo),然后在儀表盤列表中選擇儀表盤名稱,查看對應(yīng)的分析報表。
Ingress概覽
Ingress概覽報表主要展示當(dāng)前Nginx Ingress的整體狀態(tài),主要包括以下幾類信息:
整體架構(gòu)狀態(tài)(1天),包括PV、UV、流量、響應(yīng)延遲、移動端占比和錯誤比例等。
網(wǎng)站實時狀態(tài)(1分鐘),包括訪問PV、訪問UV、訪問成功率、平均延遲、P95延遲和P99延遲等。
用戶請求類信息(1天),包括1天訪問PV對比、7天訪問PV對比、地域分布、TOP訪問省份、TOP訪問城市、移動端占比和Android/iOS占比等。
TOP URL統(tǒng)計(1小時),包括訪問TOP10、延遲TOP10、5XX錯誤TOP10和404錯誤TOP10。
Ingress訪問中心
Ingress訪問中心主要側(cè)重于用于訪問請求相關(guān)的統(tǒng)計信息,一般用于運營分析,包括今日UV、今日PV、UV分布、PV分布、TOP訪問省份、TOP訪問城市、TOP訪問瀏覽器、TOP訪問IP、移動端占比和Android/iOS占比等。
Ingress監(jiān)控中心
Ingress監(jiān)控中心主要側(cè)重于網(wǎng)站實時監(jiān)控數(shù)據(jù),一般用于完整實時監(jiān)控與告警,包括請求成功率、錯誤比例、5XX比例、請求未轉(zhuǎn)發(fā)比例、平均延遲、P95延遲、P99延遲、P999延遲、狀態(tài)碼分布、Ingress壓力分布、Service訪問TOP10、Service錯誤TOP10、Service延遲TOP10和Service流量TOP10等。
Ingress藍(lán)綠發(fā)布監(jiān)控中心
Ingress藍(lán)綠發(fā)布監(jiān)控中心主要用于版本發(fā)布時的實時監(jiān)控與對比(版本前后對比以及藍(lán)綠版本當(dāng)前對比),以便您在服務(wù)發(fā)布時快速檢測異常并進(jìn)行回滾。在該報表中您需要選擇進(jìn)行對比的藍(lán)綠版本(ServiceA和ServiceB),報表將根據(jù)您的選擇動態(tài)顯示藍(lán)綠版本相關(guān)指標(biāo),包括PV、5XX比例、成功率、平均延遲、P95延遲、P99延遲、P999延遲和流量等。
Ingress異常檢測中心
Ingress異常檢測中心基于日志服務(wù)提供的機(jī)器學(xué)習(xí)算法,通過多種時序分析算法從Nginx Ingress的指標(biāo)中自動檢測異常點,提高問題發(fā)現(xiàn)的效率。
配置告警
日志服務(wù)除提供交互式分析、可視化報表之外,您可直接基于上述報表快速配置告警,告警支持通知釘釘WebHook、短信、郵件和自定義WebHook等。
告警詳細(xì)配置方法請參見設(shè)置告警。
下述示例為Nginx Ingress配置5XX比例的告警,告警每5分鐘執(zhí)行一次,當(dāng)5XX比例超過1%時觸發(fā)。
進(jìn)入Ingress監(jiān)控中心報表,鼠標(biāo)滑動到圖表5XX比例右上角的圖標(biāo),在彈出的提示框中單擊另存為告警(舊版)。
在創(chuàng)建告警面板中,填入告警名稱、關(guān)聯(lián)圖表、頻率、觸發(fā)條件,查詢語句中的
total
為5XX的百分比,因此觸發(fā)條件輸入total > 1。在下一步的通知中,根據(jù)您的需求選擇對應(yīng)的通知方式,并填入對應(yīng)參數(shù),然后單擊提交,即可完成告警創(chuàng)建。
訂閱定時報告
日志服務(wù)除支持通過告警方式通知外,還支持報表訂閱功能,您可使用該功能將報表定期渲染成圖片并通過郵件、釘釘群等方式發(fā)送。
訂閱功能詳細(xì)使用方法請參見訂閱儀表盤。
下述示例為Ingress概覽配置訂閱功能,每天上午10點將報表發(fā)送到指定釘釘群。
進(jìn)入Ingress概覽V1.2報表,選擇報表右上角的 。
在創(chuàng)建訂閱面板中,頻率選擇每天、10:00,關(guān)閉添加水印選項,單擊下一步。
通知類型中選擇WebHook釘釘機(jī)器人,填入釘釘機(jī)器人的WebHook地址(WebHook地址請參見獲取Webhook地址),然后單擊提交,即可完成訂閱。
使用Ingress Dashboard與ARMS進(jìn)行聯(lián)動排查
登錄日志服務(wù)控制臺。
在Project列表區(qū)域,選擇創(chuàng)建集群時設(shè)置的日志Project,單擊名稱進(jìn)入日志Project頁面(默認(rèn)創(chuàng)建的project名稱為k8s-log-{cluster-id})。
單擊左側(cè)列表的,在儀表盤列表查看Ingress概覽V1.2儀表盤,獲取您所需要的信息。
例如,定位Top10延遲URL區(qū)域,查看TOP10延遲URL的URL(ARMS排查)字段。您可以單擊URL鏈接跳轉(zhuǎn)到對應(yīng)服務(wù)的ARMS監(jiān)控鏈路查詢頁面并在ARMS控制臺查詢對應(yīng)服務(wù)的查詢調(diào)用鏈路詳細(xì)情況。
相關(guān)文檔
如果您需要對日志采集進(jìn)行過濾,請參見過濾日志。