1. 程式人生 > 其它 >通過騰訊雲日誌服務收集TKE日誌

通過騰訊雲日誌服務收集TKE日誌

  在2年前的kubernetes1.12版本中,使用了EFK的方案來收集日誌,那時候不管是程式還是nginx日誌都沒有格式化,本次專案主要為遊戲的官網專案,分為前端和後端,主要使用LNMP架構,所以本次要收集的日誌就是nginx和php的日誌,在kubernetes1.12實戰中,nginx日誌沒有配置為json,導致寫了大量的日誌採集規則,在今天的TKE1.18中,nginx將格式化為json,這樣更容易維護以及採集。

1.操作場景

  日誌採集功能是容器服務 TKE 為使用者提供的叢集內日誌採集工具,可以將叢集內服務或叢集節點特定路徑檔案的日誌傳送至騰訊雲日誌服務(CLS)。日誌採集功能適用於需要對 Kubernetes 叢集內服務日誌進行儲存和分析的使用者。

  日誌採集功能需要為每個叢集手動開啟並配置採集規則。日誌採集功能開啟後,日誌採集 Agent 會在叢集內以 DaemonSet 的形式執行,並根據使用者通過日誌採集規則配置的採集源、CLS 日誌主題和日誌解析方式,從採集源進行日誌採集,將日誌內容傳送到 CLS 並存儲。可根據以下操作開啟日誌採集功能:

l 開啟日誌採集

l 採集容器標準輸出日誌

l 採集容器檔案日誌

l 採集節點檔案日誌

2. 前提條件

請在開啟前保證叢集節點上有足夠資源。開啟日誌採集功能會佔用您叢集的部分資源。

l 佔用 CPU 資源:0.11 - 1.1核,日誌量過大時可根據情況自行調大。

l 佔用記憶體資源:24 - 560MB,日誌量過大時可根據情況自行調大。

l 日誌長度限制:單條512K,如超過會截斷。

若使用日誌採集功能,請確認 Kubernetes 叢集內節點能夠訪問日誌服務 CLS。且以下日誌採集功能僅支援 Kubernetes 1.10 及以上版本叢集。

3. 概念

日誌採集 Agent:TKE 用於採集日誌資訊的 Agent,採用 Loglistener,在叢集內以 DaemonSet 的方式執行。

日誌規則:使用者可以使用日誌規則指定日誌的採集源、日誌主題、日誌解析方式和配置過濾器。

l 日誌採集 Agent 會監測日誌採集規則的變化,變化的規則會在最多10s內生效。

l 多條日誌採集規則不會建立多個 DaemonSet,但過多的日誌採集規則會使得日誌採集 Agent 佔用的資源增加。

日誌源:包含指定容器標準輸出、容器內檔案以及節點檔案。

l 在採集容器標準輸出日誌時,使用者可選擇所有容器、或指定工作負載和指定 Pod Labels 內的容器服務日誌作為日誌的採集源。

l 在採集容器檔案路徑日誌時,使用者可指定工作負載或 Pod Labels 內容器的檔案路徑日誌作為採集源。

l 在採集節點檔案路徑日誌時,使用者可設定日誌的採集源為節點檔案路徑日誌。

消費端:使用者選擇日誌服務 CLS 的日誌集和日誌主題作為消費端。

提取模式:日誌採集 Agent 支援將採集到的日誌以單行文字、JSON、分隔符、多行文字和完全正則的形式傳送至使用者指定的日誌主題。

過濾器:開啟過濾器後可以根據使用者指定的規則採集部分日誌,key 支援完全匹配,過濾規則支援正則匹配,如僅採集 ErrorCode = 404 的日誌。

4. 操作步驟

4.1 開啟日誌採集

1.登入容器服務控制檯,選擇左側導航欄中的叢集運維>功能管理

2.在“功能管理”頁面上方選擇地域,單擊需要開啟日誌採集的叢集右側的設定。如下圖所示:

3.在“設定功能”頁面,單擊日誌採集編輯,開啟日誌採集後確認。如下圖所示:

4.2 配置日誌規則

1.登入容器服務控制檯,選擇左側導航欄中的叢集運維>日誌規則

2.在“日誌採集”頁面上方選擇地域和需要配置日誌採集規則的叢集,單擊新建。如下圖所示:

3.在“新建日誌採集規則”頁面中,選擇採集型別,並配置日誌源。目前採集型別支援容器標準輸出容器檔案路徑節點檔案路徑

說明:

對於容器的標準輸出及容器內檔案(非 hostPath 掛載),除了原始的日誌內容, 還會帶上容器或 kubernetes 相關的元資料(例如:產生日誌的容器 ID)一起上報到 CLS,方便使用者檢視日誌時追溯來源或根據容器標識、特徵(例如:容器名、labels)進行檢索。
容器或 kubernetes 相關的元資料請參考下方表格

欄位名

含義

container_id

日誌所屬的容器 ID。

container_name

日誌所屬的容器名稱。

image_name

日誌所屬容器的映象名稱 IP。

namespace

日誌所屬 pod 的 namespace。

pod_uid

日誌所屬 pod 的 UID。

pod_name

日誌所屬 pod 的名字。

pod_lable_{label name}

日誌所屬 pod 的 label(例如一個 pod 帶有兩個 label:app=nginx,env=prod,則在上傳的日誌會附帶兩個 metedata:pod_label_app:nginx,pod_label_env:prod)。

4. 配置日誌服務 CLS 為消費端。選擇日誌集和相應的日誌主題,可以選擇新建和已有日誌主題。如下圖所示:

注意:

l 日誌服務 CLS 目前只能支援同地域的容器叢集進行日誌採集上報。

l 若日誌主題下已存在10個日誌主題,則不能新建日誌主題。

5.單擊下一步,選擇日誌提取模式。如下圖所示:

注意:一個日誌主題目前僅支援一個採集配置,請保證選用該日誌主題的所有容器的日誌都可以接受採用所選的日誌解析方式。若在同一日誌主題下新建了不同的採集配置,舊的採集配置會被覆蓋。

6.根據需求開啟過濾器並配置規則,並單擊完成,完成建立。如下圖所示:

參考文件:https://cloud.tencent.com/document/product/457/36771

作者:小家電維修

相見有時,後會無期。