協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
為您的叢集啟動 AWS Fargate 記錄
Amazon EKS on Fargate 提供了基於 Fluent Bit 的內建日誌路由器。這表示您沒有明確地執行 Fluent Bit 容器以作為附屬,但 Amazon 會為您執行。您只需設定日誌路由器即可。組態會透過必須符合以下條件的專用 ConfigMap 生效:
-
名稱
aws-logging -
在名為
aws-observability的專用命名空間中建立 -
不可超過 5300 個字元。
一旦建立了 ConfigMap,Amazon EKS on Fargate 會使用其自動偵測並設定日誌路由器。Fargate 使用 Fluent Bit 的 AWS 版本,是由 AWS 管理的 Fluent Bit 上游合規發行版本。如需詳細資訊,請參閱 GitHub 上的適用於 Fluent Bit 的 AWS
日誌路由器可讓您使用 AWS 服務廣度進行日誌分析和儲存。您可以直接將日誌從 Fargate 串流至 Amazon CloudWatch 和 Amazon OpenSearch Service。您也可以透過 Amazon Data Firehose
-
指定您部署 Fargate Pod 的現有 Kubernetes 命名空間的現有 Fargate 設定檔。如需詳細資訊,請參閱 步驟 3:為您的叢集建立 Fargate 設定檔。
-
現有 Fargate Pod 執行角色。如需詳細資訊,請參閱 步驟 2:建立 Fargate Pod 執行角色。
日誌路由器組態
重要
若要成功發布日誌,您叢集所在的 VPC 必須具有對日誌目的地的網路存取權。這主要涉及使用者為其 VPC 自訂輸出規則。如需使用 CloudWatch 的範例,請參閱《Amazon CloudWatch Logs 使用者指南》中的搭配介面 VPC 端點使用 CloudWatch Logs。
在下列步驟中,使用您自己的值取代每一個範例值。
-
建立名為
aws-observability的專用 Kubernetes 命名空間。-
將下列內容儲存到電腦上名為
aws-observability-namespace.yaml的檔案中。name的值必須為aws-observability,且需要aws-observability: enabled標籤。kind: Namespace apiVersion: v1 metadata: name: aws-observability labels: aws-observability: enabled -
建立命名空間。
kubectl apply -f aws-observability-namespace.yaml
-
-
建立具有
Fluent Conf資料值的ConfigMap,將容器日誌寄送至目的地。Fluent Conf 就是 Fluent Bit,這是一種快速且輕量的日誌處理器組態語言,可用於將容器日誌路由至您選擇的日誌目的地。如需詳細資訊,請參閱 Fluent Bit 文件中的組態檔案。 重要
一般
Fluent Conf中包含的主要區段是Service、Input、Filter和Output。然而,Fargate 日誌路由器僅接受:-
Filter和Output區段。 -
Parser區段。
如果您提供任何其他區段,則這些區段將被拒絕。
Fargate 日誌路由器管理
Service和Input區段。其具有下列Input區段,無法修改,也不需要在您的ConfigMap中。但是,您可以從中取得洞察,例如記憶體緩衝區限制和套用於日誌的標籤。[INPUT] Name tail Buffer_Max_Size 66KB DB /var/log/flb_kube.db Mem_Buf_Limit 45MB Path /var/log/containers/*.log Read_From_Head On Refresh_Interval 10 Rotate_Wait 30 Skip_Long_Lines On Tag kube.*建立
ConfigMap時,請考慮下列 Fargate 用來驗證欄位的規則:-
應該在每個相應的索引鍵下指定
[FILTER]、[OUTPUT]和[PARSER]。例如,[FILTER]必須位於filters.conf之下。您可以在filters.conf下有一或多個[FILTER]。[OUTPUT]和[PARSER]區段也應該位於其相應的索引鍵之下。透過指定多個[OUTPUT]區段中,您可以同時將日誌路由到不同的目的地。 -
Fargate 驗證每個區段所需的索引鍵。
Name和match對於每個[FILTER]和[OUTPUT]都是必要項目。Name和format對於每個[PARSER]都是必要項目。索引鍵不區分大小寫。 -
ConfigMap中不允許環境變數 (例如${ENV_VAR})。 -
在每個
filters.conf、output.conf和parsers.conf中每個指令或鍵值對的縮排必須是相同的。鍵值對必須比指令縮排更多。 -
Fargate 會根據以下支援的篩選條件進行驗證:
grep、parser、record_modifier、rewrite_tag、throttle、nest、modify和kubernetes。 -
Fargate 會根據以下支援的輸出進行驗證:
es、firehose、kinesis_firehose、cloudwatch、cloudwatch_logs和kinesis。 -
必須在
ConfigMap中提供至少一個支援的Output外掛程式來啟用記錄。啟用記錄時不需要Filter和Parser。您也可以使用所需的組態在 Amazon EC2 上執行 Fluent Bit,以對因驗證而產生的任何問題進行故障診斷。使用下列範例之一建立您的
ConfigMap。重要
Amazon EKS Fargate 記錄不支援
ConfigMap的動態組態。ConfigMap的任何變更僅適用於新的 Pod。變更不會套用至現有 Pod。使用您所需的日誌目的地範例建立
ConfigMap。注意
您也可以將 Amazon Kinesis Data Streams 用於您的日誌目的地。如果您使用 Kinesis Data Streams,請確定 Pod 執行角色已獲
kinesis:PutRecords許可。如需詳細資訊,請參閱《Fluent Bit:官方手冊》中的 Amazon Kinesis Data Streams 許可。
-
-
為 Fargate Pod 執行角色設定許可,以將日誌傳送至目的地。
-
將您目的地的 IAM 政策下載到您的電腦。
-
從您下載的政策檔案建立 IAM 政策。
aws iam create-policy --policy-name eks-fargate-logging-policy --policy-document file://permissions.json -
使用下列命令,將 IAM 政策連接至為 Fargate 設定檔指定的 Pod 執行角色。使用您的帳戶 ID 取代
111122223333。使用您的 Pod 執行角色取代AmazonEKSFargatePodExecutionRole(如需詳細資訊,請參閱 步驟 2:建立 Fargate Pod 執行角色)。aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/eks-fargate-logging-policy \ --role-nameAmazonEKSFargatePodExecutionRole
-
Kubernetes 篩選條件支援
Fluent Bit Kubernetes 篩選條件可讓您將 Kubernetes 中繼資料新增至您的日誌檔案。如需有關篩選條件的相關資訊,請參閱 Fluent Bit 說明文件中的 Kubernetes
filters.conf: | [FILTER] Name kubernetes Match kube.* Merge_Log On Buffer_Size 0 Kube_Meta_Cache_TTL300s
重要
-
Kube_URL、Kube_CA_File、Kube_Token_Command和Kube_Token_File是服務擁有的組態參數,您無法指定這些參數。Amazon EKS Fargate 會將這些值填入。 -
Kube_Meta_Cache_TTL是 Fluent Bit 等待直到其可以與 API 伺服器通訊,以取得最新中繼資料所需的時間。若並未指定Kube_Meta_Cache_TTL,則 Amazon EKS Fargate 會附加預設值 30 分鐘,以減少 API 伺服器上的負載。
將 Fluent Bit 程序日誌傳送至帳戶
您可以選擇性地使用以下 ConfigMap 將 Fluent Bit 程序日誌傳送至 Amazon CloudWatch。將 Fluent Bit 處理日誌傳送至 CloudWatch 需要額外的記錄擷取和儲存費用。使用叢集所在的 AWS 區域取代 region-code。
kind: ConfigMap apiVersion: v1 metadata: name: aws-logging namespace: aws-observability labels: data: # Configuration files: server, input, filters and output # ====================================================== flb_log_cw: "true" # Ships Fluent Bit process logs to CloudWatch. output.conf: | [OUTPUT] Name cloudwatch Match kube.* regionregion-codelog_group_name fluent-bit-cloudwatch log_stream_prefix from-fluent-bit- auto_create_group true
日誌位於與叢集相同的 AWS 區域的 CloudWatch 中。日誌群組的名稱是
,而 Fluent Bit logstream 的名稱是 my-cluster-fluent-bit-logsfluent-bit-。podname-pod-namespace
注意
-
只有當 Fluent Bit 程序成功啟動時,才會傳送程序日誌。若在啟動 Fluent Bit 時失敗,程序日誌就會遺失。您只能將程序日誌傳送至 CloudWatch。
-
若要對傳送程序日誌至您的帳戶除錯,您可以套用先前的
ConfigMap來取得程序日誌。Fluent Bit 無法啟動通常是由於您的ConfigMap開始時無法被 Fluent Bit 剖析或接受。
若要停止傳送 Fluent Bit 程序日誌
將 Fluent Bit 處理日誌傳送至 CloudWatch 需要額外的記錄擷取和儲存費用。若要排除現有 ConfigMap 設定中的處理日誌,請執行下列步驟。
-
在啟用 Fargate 記錄後,找出為 Amazon EKS 叢集的 Fluent Bit 程序日誌自動建立的 CloudWatch 日誌群組。它遵循格式
。my-cluster-fluent-bit-logs -
刪除針對 CloudWatch 日誌群組中每個 Pod 程序日誌所建立的現有 CloudWatch 日誌串流。
-
編輯
ConfigMap和設定flb_log_cw: "false"。 -
重新啟動叢集中的任何現有 Pod。
測試應用程式
-
部署範例 Pod。
-
將下列內容儲存到電腦上名為
sample-app.yaml的檔案中。apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace:same-namespace-as-your-fargate-profilespec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - name: http containerPort: 80 -
將清單檔案套用至叢集。
kubectl apply -f sample-app.yaml
-
-
使用您在
ConfigMap中設定的目的地檢視 NGINX 日誌。
大小考量因素
建議您為日誌路由器規劃最多 50 MB 的記憶體。如果您希望應用程式以非常高的輸送量產生日誌,則應該規劃最多 100 MB。
故障診斷
若要確認記錄功能是因某些原因 (例如無效的 ConfigMap 以及無效的原因) 啟用或停用,請使用 kubectl describe pod 檢查您的 Pod 事件。輸出可能包含可釐清是否已啟用記錄的 Pod 事件,例如下列範例輸出。pod-name
[...] Annotations: CapacityProvisioned: 0.25vCPU 0.5GB Logging: LoggingDisabled: LOGGING_CONFIGMAP_NOT_FOUND [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning LoggingDisabled <unknown> fargate-scheduler Disabled logging because aws-logging configmap was not found. configmap "aws-logging" not found
Pod 事件是暫時性的,具體取決於設定的時段。您也可以使用 kubectl describe pod 來檢視 Pod 註釋。在 Pod 註釋中,可參閱是否已啟用或停用記錄功能及其原因的相關資訊。pod-name