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