事件監控是Kubernetes中的一種監控方式,可以彌補資源監控在即時性、準確性和情境上的不足。您可以通過使用NPD(node-problem-detector)結合SLS的Kubernetes事件中心、配置NPD叢集檢查項以及例外狀況事件離線功能、使用DingTalk、使用SLS離線Kubernetes事件及使用EventBridge離線Kubernetes事件,即時監控叢集的異常與問題。
費用說明
ACK事件監控功能預設上報叢集事件至SLSLog Service,SLSLog Service提供事件數目據的儲存、分析能力,預設90天內的ACK叢集事件數目據免費。詳細資料,請參見建立並使用K8s事件中心。
背景資訊
Kubernetes的架構設計基於狀態機器,不同的狀態之間進行轉換會產生相應的事件,正常的狀態之間轉換會產生Normal等級的事件,正常狀態與異常狀態之間的轉換會產生Warning等級的事件。
ACK提供開箱即用的容器情境事件監控方案,通過ACK維護的NPD以及包含在NPD中的kube-eventer提供容器事件監控能力。
NPD(node-problem-detector)是Kubernetes節點診斷的工具,可以將節點的異常,例如Docker Engine Hang、Linux Kernel Hang、網路出網異常、檔案描述符異常轉換為Node的事件,結合kube-eventer可以實現節時間點事件警示的閉環。更多資訊,請參見NPD。
kube-eventer是ACK維護的開源Kubernetes事件離線工具,可以將叢集的事件離線到DingTalk、SLS、EventBridge等系統,並提供不同等級的過濾條件,實現事件的即時採集、定向警示、非同步歸檔。更多資訊,請參見kube-eventer。
本文通過以下五種情境為您介紹事件監控。
情境一:使用NPD結合SLS的Kubernetes事件中心監控叢集事件
NPD根據配置與第三方外掛程式檢測節點的問題或故障、產生相應的叢集事件。而Kubernetes叢集自身也會因為叢集狀態的切換產生各種事件,例如Pod驅逐、鏡像拉取失敗等異常情況。Log ServiceSLS(Log Service)的Kubernetes事件中心即時匯聚Kubernetes中的所有事件並提供儲存、查詢、分析、可視化、警示等能力。將叢集事件接入Log Service的Kubernetes事件中心操作步驟如下。
步驟一:安裝ack-node-problem-detector組件
如果您在建立叢集時,已選中安裝node-problem-detector並建立事件中心,可直接按照步驟二查看Kubernetes事件中心。關於如何通過建立叢集時安裝NPD組件,請參見建立ACK託管叢集。
若建立叢集時未選中安裝node-problem-detector並建立事件中心,則需手動安裝,具體的操作步驟如下。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在日誌與監控頁簽,尋找並安裝ack-node-problem-detector。
步驟二:查看事件中心
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
單擊右上方的事件中心管理,在K8s事件中心頁面的左側導覽列,單擊目的地組群名稱左邊的展開表徵圖,查看Kubernetes事件中心相關資訊。
您可以查看Kubernetes事件的總覽及詳情、Pod生命週期,還可以進行自訂查詢和警示配置。更多資訊,請參見採集Kubernetes事件。
情境二:配置NPD叢集檢查項以及例外狀況事件離線功能
NPD(node-problem-detector)是Kubernetes節點診斷的工具,可以將節點的異常,例如Docker Engine Hang、Linux Kernel Hang、網路出網異常、檔案描述符異常轉換為Node的事件,結合kube-eventer可以實現節時間點事件警示的閉環。
操作流程
安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件。
說明若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝。具體操作,請參見如何重新安裝ack-node-problem-detector組件。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在守護進程集頁面,選擇命名空間為kube-system,查看組件ack-node-problem-detector-daemonset運行正常。
當node-problem-detector與
eventer
都正常運行後,可以通過配置的eventer
的離線通道進行資料的離線處理或者警示。
NPD支援的問題檢查外掛程式
外掛程式名 | 功能 | 說明 |
fd_check | 檢查叢集節點系統的已開啟的檔案描述符是否超過最大上限的80%。 | 80%為預設值,可通過參數修改。該檢查項消耗資源較多,不建議開啟。 |
ram_role_check | 檢查叢集節點是否具有RAM Role以及相應的鑒權密鑰。 | 無 |
ntp_check | 檢查叢集節點上的NTP時間同步服務是否正常運行。 | 預設開啟項。 |
nvidia_gpu_check | 檢查叢集節點上的NVIDIA GPU計算卡是否具有有效 | 無 |
network_problem_check | 檢查叢集節點上的 | 預設開啟項。 |
inodes_usage_check | 檢查叢集節點系統硬碟的 | 80%為預設值,可通過參數修改。預設開啟項。 |
csi_hang_check | 檢查叢集節點上的CSI儲存外掛程式狀態是否正常。 | 無 |
ps_hang_check | 檢查叢集節點系統中是否有狀態為D(掛起且無法喚醒)的進程。 | 無 |
public_network_check | 檢查叢集節點是否可以訪問公網。 | 無 |
irqbalance_check | 檢查叢集節點系統中的 | 無 |
pid_pressure_check | 檢查叢集節點系統中的進程 | 預設開啟項。 |
docker_offline_check | 檢測叢集節點上的 | 預設開啟項。 |
情境三:使用DingTalk實現Kubernetes監控警示
使用DingTalk機器人監控並警示Kubernetes的事件是一個非常典型的ChatOps實現。具體的操作步驟如下。
單擊DingTalk群右上方的表徵圖,進入群設定頁面。
單擊機器人,然後單擊添加機器人,選擇需要添加的機器人。此處選擇自訂機器人。
在機器人詳情頁面,單擊添加,進入添加機器人頁面。
根據以下資訊配置群機器人後,閱讀並同意服務及免責條款,然後單擊完成。
參數
說明
編輯頭像
(可選)為群機器人設定頭像。
機器人名字
添加的機器人名稱。
添加到群組
添加機器人的群組。
安全設定
安全設定支援3種方式:自訂關鍵詞、加簽和IP地址(段)。
目前叢集的事件監控僅支援第一種方式,即自訂關鍵詞。
選中自訂關鍵詞,填入
Warning
可接收所有監控警示。如果發現機器人訊息發送過於頻繁,可增加關鍵詞進行過濾,最多支援設定10個關鍵詞。ACK發送訊息時也會同步此關鍵詞。單擊複製,複製webhook地址以備後續使用。
說明在群機器人頁面,選擇目標群機器人,單擊右側表徵圖可以進行以下操作:
修改群機器人的頭像及機器人名字。
開啟或關閉訊息推送。
重設webhook地址。
刪除群機器人。
安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件。
說明若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝,具體操作請參見如何重新安裝ack-node-problem-detector組件。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Helm頁面,找到ack-node-problem-detector組件,然後在組件對應的操作列單擊更新,修改以下內容,然後單擊確定。
將
npd
下方的enabled
設定為false
。將
eventer.sinks.dingtalk.enabled
設定為true
。通過步驟5建立webhook地址查看Token,填入Token欄位。
預期結果:
部署成功後30秒,eventer生效,當事件等級超過閾值等級時,即可在DingTalk群收到如下警示。
情境四:使用SLS離線Kubernetes事件
阿里雲Log ServiceSLS(Log Service)可以將Kubernetes的事件以更持久的方式進行儲存,從而提供更多的事件歸檔、審計的能力。詳情請參見建立並使用K8s事件中心。
建立Project與Logstore。
在Project列表地區,單擊建立Project,填寫Project的基本資料並單擊確認進行建立。
本樣本建立一個名為k8s-log4j的Project,與Kubernetes叢集位於同一地區(華東1)。
說明為降低成本並提高效率,通常建議將Log Service與Kubernetes叢集配置在同一地區。這樣可以使日誌資料通過內網進行傳輸,避免因地區不一致產生的外網資料轉送費用,並減少傳輸延遲,實現日誌的即時採集和快速查詢。
建立完成後,k8s-log4j出現在Project列表下,單擊該Project名稱,進入Project詳情頁面。
預設進入日誌庫頁面,在頁面左側,單擊加號+,彈出建立Logstore對話方塊。
填寫日誌庫配置資訊並單擊確定。
本樣本建立名為k8s-logstore的日誌庫。
建立完畢後,頁面會提示您使用資料接入嚮導。單擊資料接入嚮導,彈出接入資料對話方塊。
選擇Log4j 1/2,根據頁面引導進行配置。
本樣本使用了預設配置,您可根據日誌資料的具體使用情境,進行相應的配置。
在Kubernetes叢集中配置log4j。
安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件。
重要單擊安裝ack-node-problem-detector組件時,在配置項中將步驟1建立好的
Project
和Logstore
分別填入各欄位。若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝,具體操作請參見如何重新安裝ack-node-problem-detector組件。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Helm頁面,找到ack-node-problem-detector組件,然後在組件對應的操作列單擊更新,修改以下內容,然後單擊確定。
將
npd
下方的enabled
設定為false
。將
eventer.sinks.sls.enabled
設定為true
。
操作叢集(例如,刪除Pod或者建立應用等)產生事件後,登入Log Service控制台查看資料擷取。請參見通過API消費。
設定索引與歸檔。請參見建立索引。
在Log Service控制台Project列表地區,單擊Project名稱。
單擊日誌庫名稱後的表徵圖,選擇查詢分析。
單擊右上方的開啟索引。
在查詢分析對話方塊中配置索引,然後單擊確定。
此時會出現日誌查詢與分析頁面。
說明索引配置在1分鐘之內生效。
開啟或修改索引後,新的索引配置只對新寫入的資料生效。
(可選)在需要設定離線歸檔與計算的情境下,在Logstore上將資料投遞給MaxCompute或者OSS,請參見建立MaxCompute投遞任務(新版)、建立OSS投遞任務(新版)。
情境五:使用EventBridge離線Kubernetes事件
事件匯流排EventBridge是阿里雲提供的一款無伺服器事件匯流排服務,支援阿里雲服務、自訂應用及SaaS應用以標準化、中心化的方式接入,並能夠以標準化的CloudEvents 1.0協議在這些應用之間路由事件。Container Service事件可支援通過離線到EventBridge實現構建松耦合、分布式的事件驅動架構。關於EventBridge的詳情,請參見什麼是事件匯流排EventBridge。
開通事件匯流排EventBridge。具體操作,請參見開通事件匯流排EventBridge並授權。
安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件。
說明若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝,具體操作請參見如何重新安裝ack-node-problem-detector組件。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在Helm頁面,定位ack-node-problem-detector組件,然後在組件對應的操作列單擊更新,將
eventer.sinks.eventbridge.enable
修改為true
,以配置事件中心並開啟EventBridge事件離線資料鏈路,然後單擊確定。資料鏈路開啟成功後,在事件匯流排EventBridge控制台查看容器事件。
- 登入事件匯流排EventBridge控制台。
- 在左側導覽列,單擊事件匯流排。
- 在事件匯流排頁面,單擊目標匯流排名稱。
- 在左側導覽列,單擊事件追蹤。
選擇事件查詢方式,設定查詢條件,單擊查詢。
在事件列表操作列,單擊事件詳情,查看事件詳細內容。
更多資訊,請參見查詢事件。
如何重新安裝ack-node-problem-detector組件
登入Container Service管理主控台,在左側導覽列單擊叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。在任務頁面,單擊kube-eventer-init-v1.7-xxxx右側更多,單擊刪除。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。在Helm頁面,刪除原有的ack-node-problem-detector組件。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在日誌與監控頁簽,尋找並重新安裝ack-node-problem-detector。