使用 Amazon Managed Grafana 監控 Amazon EKS基礎設施的解決方案 - Amazon Managed Grafana

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon Managed Grafana 監控 Amazon EKS基礎設施的解決方案

監控 Amazon Elastic Kubernetes Service 基礎設施是使用 Amazon Managed Grafana 的最常見案例之一。此頁面說明範本,提供您此案例的解決方案。解決方案可以使用 AWS Cloud Development Kit (AWS CDK)或 搭配 Terraform 安裝。

此解決方案會設定:

  • 您的 Amazon Managed Service for Prometheus 工作區可存放來自 Amazon EKS叢集的指標,並建立受管收集器來抓取指標並將其推送至該工作區。如需詳細資訊,請參閱使用 AWS 受管收集器擷取指標

  • 使用 CloudWatch 代理程式從您的 Amazon EKS叢集收集日誌。日誌存放在 中 CloudWatch,並由 Amazon Managed Grafana 查詢。如需詳細資訊,請參閱記錄 Amazon EKS

  • 您的 Amazon Managed Grafana 工作區可提取這些日誌和指標,並建立儀表板和提醒,以協助您監控叢集。

套用此解決方案將建立儀表板和提醒,以:

  • 評估整體 Amazon EKS叢集運作狀態。

  • 顯示 Amazon EKS控制平面的運作狀態和效能。

  • 顯示 Amazon EKS資料平面的運作狀態和效能。

  • 顯示跨 Kubernetes 命名空間的 Amazon EKS工作負載洞察。

  • 顯示跨命名空間的資源用量,包括 CPU、記憶體、磁碟和網路用量。

關於此解決方案

此解決方案會設定 Amazon Managed Grafana 工作區,為您的 Amazon EKS叢集提供指標。這些指標用於產生儀表板和提醒。

這些指標可讓您深入了解 Kubernetes 控制和資料平面的運作狀態和效能,進而更有效地操作 Amazon EKS叢集。您可以從節點層級到 Pod 到 Kubernetes 層級了解 Amazon EKS叢集,包括詳細監控資源用量。

此解決方案同時提供預期和修正功能:

  • 預期功能包括:

  • 更正功能包括:

    • 減少在基礎設施和 Kubernetes 工作負載層級上偵測問題的平均時間 (MTTD)。例如,透過查看故障診斷儀表板,您可以快速測試有關錯誤問題的假設並消除它們。

    • 判斷問題在堆疊中發生的位置。例如,Amazon EKS控制平面由 完全管理,如果API伺服器超載或連線受到影響,更新 Kubernetes 部署等 AWS 特定操作可能會失敗。

下圖顯示解決方案的儀表板資料夾範例。

此影像顯示使用此解決方案建置的 Grafana 儀表板資料夾範例。

您可以選擇儀表板來查看更多詳細資訊,例如,選擇檢視工作負載的運算資源將顯示儀表板,如下圖所示。

顯示 Grafana 儀表板範例的影像,其中顯示使用此解決方案建置的CPU用量。

指標會以 1 分鐘的抓取間隔進行抓取。儀表板會根據特定指標,顯示彙總至 1 分鐘、5 分鐘或更多的指標。

日誌也會顯示於儀表板中,以便您可以查詢和分析日誌,以尋找問題的根本原因。下圖顯示日誌儀表板。

此影像顯示 Grafana 儀表板的範例,其中包含使用此解決方案建置的日誌。

如需此解決方案追蹤的指標清單,請參閱 追蹤的指標清單

如需解決方案建立的提醒清單,請參閱 建立的提醒清單

成本

此解決方案會在您的工作區中建立和使用資源。您將需要支付所建立資源的標準用量費用,包括:

  • 使用者存取 Amazon Managed Grafana 工作區。如需定價的詳細資訊,請參閱 Amazon Managed Grafana 定價

  • Amazon Managed Service for Prometheus 指標擷取和儲存,包括使用 Amazon Managed Service for Prometheus 無代理程式收集器,以及指標分析 (查詢範例處理)。此解決方案使用的指標數量取決於 Amazon EKS叢集組態和用量。

    您可以使用 Amazon Managed Service for Prometheus 檢視擷取和儲存指標 CloudWatch 。如需詳細資訊,請參閱《Amazon Managed Service for Prometheus 使用者指南》中的CloudWatch指標

    您可以使用 Amazon Managed Service for Prometheus 定價頁面上的定價計算器預估成本。指標數量取決於叢集中的節點數量,以及應用程式產生的指標。

  • CloudWatch 記錄擷取、儲存和分析。根據預設,日誌保留會設定為永不過期。您可以在 中調整。 CloudWatch如需定價的詳細資訊,請參閱 Amazon CloudWatch 定價

  • 網路成本。跨可用區域、區域或其他流量可能會產生標準 AWS 網路費用。

每個產品的定價頁面提供定價計算器,可協助您了解解決方案的潛在成本。下列資訊可協助取得在與 Amazon EKS叢集相同可用區域中執行之解決方案的基本成本。

產品 計算器指標 Value

Amazon Managed Service for Prometheus

作用中系列

8000 (基礎)

15,000 (每個節點)

平均收集間隔

60 (秒)

Amazon Managed Service for Prometheus (受管收集器)

收集器數量

1

範例數量

15 (基礎)

150 (每個節點)

規則數目

161

平均規則擷取間隔

60 (秒)

Amazon Managed Grafana

作用中編輯器/管理員的數量

1 (或多個,根據您的使用者而定)

CloudWatch (日誌)

標準日誌:擷取的資料

24.5 GB (基本)

0.5 GB (每個節點)

日誌儲存/存檔 (標準和已取代日誌)

是 儲存日誌:假設保留 1 個月

掃描的預期日誌資料

來自 Grafana 的每個日誌洞見查詢都會在指定的期間內掃描群組中的所有日誌內容。

這些數字是EKS不使用其他軟體執行之解決方案的基本號碼。這將為您提供基本成本的預估。它也會免除網路使用成本,這取決於 Amazon Managed Grafana 工作區、Amazon Managed Service for Prometheus 工作區和 Amazon EKS叢集是否位於相同的可用區域 AWS 區域,以及 VPN。

注意

當此表格中的項目包含每個資源(base)的值和值 (例如,(per node)) 時,您應該將基本值新增至每個資源值乘以您擁有該資源的數量。例如,針對平均作用中時間序列,輸入 的數字8000 + the number of nodes in your cluster * 15,000。如果您有 2 個節點,請輸入 38,000,也就是 8000 + ( 2 * 15,000 )

必要條件

此解決方案需要您在使用解決方案之前完成以下操作。

  1. 您必須擁有或建立您要監控的 Amazon Elastic Kubernetes Service 叢集,且叢集必須至少有一個節點。叢集必須設定API伺服器端點存取,以包含私有存取 (也可以允許公有存取)。

    身分驗證模式必須包含API存取權 (可以設定為 APIAPI_AND_CONFIG_MAP)。這可讓解決方案部署使用存取項目。

    應該在叢集中安裝下列項目 (透過主控台建立叢集時預設為true,但如果您使用 AWS API或 建立叢集,則必須新增) AWS CLI: AWS CNI、CoreDNS 和 Kube-proxy AddOns。

    儲存叢集名稱以稍後指定。這可在 Amazon EKS主控台的叢集詳細資訊中找到。

    注意

    如需如何建立 Amazon EKS叢集的詳細資訊,請參閱 Amazon 入門EKS

  2. 您必須在 AWS 帳戶 與 Amazon 叢集相同的 中建立 Amazon Managed Service for Prometheus 工作區。 EKS如需詳細資訊,請參閱《Amazon Managed Service for Prometheus 使用者指南》中的建立工作區

    儲存 Amazon Managed Service for Prometheus 工作區ARN以供稍後指定。

  3. 您必須在與 Amazon 叢集相同的 中,使用 Grafana 第 9 版或更新版本建立 Amazon Managed Grafana 工作區。 AWS 區域 EKS如需建立新工作區的詳細資訊,請參閱 建立 Amazon Managed Grafana 工作區

    工作區角色必須具有存取 Amazon Managed Service for Prometheus 和 Amazon CloudWatch 的許可APIs。最簡單的方法是使用服務受管許可,然後選取 Amazon Managed Service for Prometheus 和 CloudWatch。您也可以手動將 AmazonPrometheusQueryAccessAmazonGrafanaCloudWatchAccess政策新增至工作區IAM角色。

    儲存 Amazon Managed Grafana 工作區 ID 和端點以供稍後指定。ID 的格式為 g-123example。您可以在 Amazon Managed Grafana 主控台中找到 ID 和端點。端點是工作區URL的 ,並包含 ID。例如:https://g-123example.grafana-workspace.<region>.amazonaws.com/

  4. 如果您使用 Terraform 部署解決方案,則必須建立可從您的帳戶存取的 Amazon S3 儲存貯體。這將用於存放部署的 Terraform 狀態檔案。

    儲存 Amazon S3 儲存貯體 ID 以供稍後指定。

  5. 若要檢視 Amazon Managed Service for Prometheus 警示規則,您必須啟用 Amazon Managed Grafana 工作區的 Grafana 警示

    此外,Amazon Managed Grafana 必須具有 Prometheus 資源的下列許可。您必須將這些政策新增至中 適 AWS 用於資料來源的 Amazon 受管 Grafana 許可和政策 所述的服務管理或客戶管理政策。

    • aps:ListRules

    • aps:ListAlertManagerSilences

    • aps:ListAlertManagerAlerts

    • aps:GetAlertManagerStatus

    • aps:ListAlertManagerAlertGroups

    • aps:PutAlertManagerSilences

    • aps:DeleteAlertManagerSilence

注意

雖然設定解決方案並非嚴格要求,但您必須在 Amazon Managed Grafana 工作區中設定使用者身分驗證,使用者才能存取建立的儀表板。如需詳細資訊,請參閱在 Amazon 受管的 Grafana 工作區中驗證使用者

使用此解決方案

此解決方案會設定 AWS 基礎設施,以支援來自 Amazon EKS叢集的報告和監控指標。您可以使用 AWS Cloud Development Kit (AWS CDK)或 搭配 Terraform 安裝。

Using AWS CDK

為您提供此解決方案的一種方式是做為 AWS CDK 應用程式。您將提供您要使用的資源相關資訊,而解決方案將為您建立抓取器、日誌和儀表板。

注意

此處的步驟假設您有一個環境,同時安裝 AWS CLI、 和 AWS CDK以及 Node.jsNPM 。您將使用 makebrew來簡化建置和其他常見動作。

使用此解決方案來使用 監控 Amazon EKS叢集 AWS CDK
  1. 請確定您已完成所有先決條件步驟。

  2. 從 Amazon S3 下載解決方案的所有檔案。這些檔案位於 s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac,您可以使用下列 Amazon S3 命令下載。從命令列環境中的資料夾執行此命令。

    aws s3 sync s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac/ .

    您不需要修改這些檔案。

  3. 在命令列環境中 (從下載解決方案檔案的資料夾),執行下列命令。

    設定所需的環境變數。將 REGIONAMG_ENDPOINTEKS_CLUSTER和 取代AMP_ARN為您的 AWS 區域、Amazon Managed Grafana 工作區端點 (n 格式 http://g-123example.grafana-workspace.us-east-1.amazonaws.com)、Amazon EKS叢集名稱和 Amazon Managed Service for Prometheus 工作區 ARN。

    export AWS_REGION=REGION export AMG_ENDPOINT=AMG_ENDPOINT export EKS_CLUSTER_NAME=EKS_CLUSTER export AMP_WS_ARN=AMP_ARN
  4. 您必須建立具有呼叫 Grafana HTTP ADMIN存取權的服務帳戶字符APIs。如需詳細資訊,請參閱 使用服務帳戶與 Grafana 進行身分驗證 HTTP APIs。您可以使用 AWS CLI 搭配下列命令來建立字符。您需要將 取代GRAFANA_ID為 Grafana 工作區的 ID (其格式為 g-123example)。此金鑰將在 7,200 秒或 2 小時後過期。您可以視需要變更時間 (seconds-to-live)。部署時間不到一小時。

    GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \ --workspace-id GRAFANA_ID \ --grafana-role ADMIN \ --name grafana-operator-key \ --query 'id' \ --output text) # creates a new token for calling APIs export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \ --workspace-id $managed_grafana_workspace_id \ --name "grafana-operator-key-$(date +%s)" \ --seconds-to-live 7200 \ --service-account-id $GRAFANA_SA_ID \ --query 'serviceAccountToken.key' \ --output text)

    AWS Systems Manager 使用下列命令將API金鑰 AWS CDK 新增至 ,讓 可以使用金鑰。AWS_REGION 將 取代為您的解決方案將在其中執行的區域 (格式為 us-east-1)。

    aws ssm put-parameter --name "/observability-aws-solution-eks-infra/grafana-api-key" \ --type "SecureString" \ --value $AMG_API_KEY \ --region AWS_REGION \ --overwrite
  5. 執行下列make命令,這會為專案安裝任何其他相依性。

    make deps
  6. 最後,執行 AWS CDK 專案:

    make build && make pattern aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME deploy
  7. 【選用】 堆疊建立完成後,您可以使用相同的環境為相同區域中的其他 Amazon EKS叢集建立更多堆疊執行個體,只要您完成每個叢集的其他先決條件 (包括單獨的 Amazon Managed Grafana 和 Amazon Managed Service for Prometheus 工作區)。您需要使用新參數重新定義export命令。

堆疊建立完成後,Amazon Managed Grafana 工作區將填入顯示 Amazon EKS叢集指標的儀表板。隨著抓取器開始收集指標,顯示指標需要幾分鐘的時間。

Using Terraform

為您提供此解決方案的其中一種方式是 Terraform 解決方案。您將提供您要使用的資源相關資訊,而解決方案將為您建立抓取器、日誌和儀表板。

使用此解決方案來監控具有 Terraform 的 Amazon EKS叢集
  1. 請確定您已完成所有先決條件步驟。

  2. 從 Amazon S3 下載解決方案的所有檔案。這些檔案位於 s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/,您可以使用下列 Amazon S3 命令下載。從命令列環境中的資料夾執行此命令,然後將目錄變更為您要部署的資料夾。

    aws s3 sync s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/ . cd eks-monitoring

    您不需要修改這些檔案。

  3. 在命令列環境中 (從下載解決方案檔案的資料夾),執行下列命令。

    設定所需的環境變數。S3_IDREGIONAMG_ENDPOINTEKS_CLUSTERAMP_ARN和 取代為您想要部署新資源 AWS 區域 的 (例如 us-east-1)、Amazon Managed Grafana 工作區端點 (格式為 http://g-123example.grafana-workspace.us-east-1.amazonaws.com)、Amazon EKS叢集名稱ARN、Amazon Managed Service for Prometheus 工作區 和 Amazon S3 儲存貯體 ID。

    export TF_VAR_aws_region=REGION export TF_VAR_amg_endpoint=AMG_ENDPOINT export TF_VAR_eks_cluster_name=EKS_CLUSTER export TF_VAR_amp_ws_arn=AMP_ARN export TF_VAR_s3_bucket_id=S3_ID
  4. 您必須建立具有呼叫 Grafana HTTP ADMIN存取權的服務帳戶字符APIs。如需詳細資訊,請參閱 使用服務帳戶與 Grafana 進行身分驗證 HTTP APIs。您可以使用 AWS CLI 搭配下列命令來建立字符。您需要將 取代GRAFANA_ID為 Grafana 工作區的 ID (其格式為 g-123example)。此金鑰將在 7,200 秒或 2 小時後過期。您可以視需要變更時間 (seconds-to-live)。部署時間不到一小時。

    GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \ --workspace-id GRAFANA_ID \ --grafana-role ADMIN \ --name grafana-operator-key \ --query 'id' \ --output text) # creates a new token for running Terraform export TF_VAR_grafana_api_key=$(aws grafana create-workspace-service-account-token \ --workspace-id $managed_grafana_workspace_id \ --name "grafana-operator-key-$(date +%s)" \ --seconds-to-live 7200 \ --service-account-id $GRAFANA_SA_ID \ --query 'serviceAccountToken.key' \ --output text)
    注意

    如果您已經擁有服務帳戶,則不需要為工作區建立服務帳戶。在此情況下,請將 取代$GRAFANA_SA_ID為您服務帳戶的 ID。

  5. 執行下列terraform命令,使用 解決方案初始化 Terraform。

    terraform init -reconfigure \ -backend-config="bucket=${TF_VAR_s3_bucket_id}" \ -backend-config="region=${TF_VAR_aws_region}" \ -backend-config="key=state/${TF_VAR_eks_cluster_name}/terraform.tfstate"
  6. 最後,部署 Terraform 專案:

    terraform apply

建立解決方案時,您的 Amazon Managed Grafana 工作區會填入顯示 Amazon EKS叢集指標的儀表板。隨著抓取器開始收集指標,顯示指標需要幾分鐘的時間。

追蹤的指標清單

此解決方案會建立從 Amazon EKS叢集收集指標的抓取器。這些指標會儲存在 Amazon Managed Service for Prometheus 中,然後顯示在 Amazon Managed Grafana 儀表板中。根據預設, 抓取器會收集叢集公開的所有 Prometheus 相容指標。在叢集中安裝產生更多指標的軟體,將增加收集的指標。如果需要,您可以使用篩選指標的組態來更新抓取器,以減少指標數量。

下列指標會使用此解決方案,在未安裝其他軟體的基本 Amazon EKS叢集組態中進行追蹤。

指標 描述/目的

aggregator_unavailable_apiservice

APIServices 標示為無法使用的量規,依APIService名稱細分。

apiserver_admission_webhook_admission_duration_seconds_bucket

以秒為單位的許可 Webhook 延遲長條圖,依每個操作API和資源類型 (驗證或許可) 的名稱識別和細分。

apiserver_current_inflight_requests

目前使用的進行中請求限制數量上限,此 apiserver 在最後一秒內每個請求類型。

apiserver_envelope_encryption_dek_cache_fill_percent

快取 目前佔用的快取插槽百分比DEKs。

apiserver_flowcontrol_current_executing_requests

在 API Priority and Fairness 子系統中初始 (適用於 WATCH) 或任何 (適用於非 WATCH) 執行階段的請求數量。

apiserver_flowcontrol_rejected_requests_total

在 API Priority and Fairness 子系統中初始 (適用於 WATCH) 或任何 (適用於非 WATCH) 執行階段中被拒絕的請求數量。

apiserver_flowcontrol_request_concurrency_limit

為每個優先順序層級設定的執行座位的標稱數量。

apiserver_flowcontrol_request_execution_seconds_bucket

在API優先順序和公平性子系統中,初始階段 (適用於 WATCH) 或任何 (適用於非 WATCH) 請求執行階段持續時間的儲存貯體長條圖。

apiserver_flowcontrol_request_queue_length_after_enqueue_count

API 優先順序和公平性子系統中請求執行的初始階段 (適用於 WATCH) 或任何階段 (適用於非 WATCH) 計數。

apiserver_request

表示API伺服器請求。

apiserver_requested_deprecated_apis

已請求、依API群組、版本、資源、子資源和 removed_release 細分APIs的已棄用量。

apiserver_request_duration_seconds

每個動詞的回應延遲分佈,以秒為單位、乾執行值、群組、版本、資源、子資源、範圍和元件。

apiserver_request_duration_seconds_bucket

每個動詞、乾執行值、群組、版本、資源、子資源、範圍和元件的回應延遲分佈儲存貯體長條圖,以秒為單位。

apiserver_request_slo_duration_seconds

每個動詞、乾執行值、群組、版本、資源、子資源、範圍和元件的服務層級目標 (SLO) 回應延遲分佈,以秒為單位。

apiserver_request_terminations_total

apiserver 在自我防禦中終止的請求數量。

apiserver_request_total

每個動詞、乾執行值、群組、版本、資源、範圍、元件和HTTP回應程式碼的 apiserver 請求計數器。

container_cpu_usage_seconds_total

使用的累積 cpu 時間。

container_fs_reads_bytes_total

位元組讀取的累積計數。

container_fs_reads_total

已完成讀取的累積計數。

container_fs_writes_bytes_total

寫入位元組的累積計數。

container_fs_writes_total

已完成寫入的累積計數。

container_memory_cache

頁面快取記憶體總計。

container_memory_rss

的大小RSS。

container_memory_swap

容器交換用量。

container_memory_working_set_bytes

目前的工作集。

container_network_receive_bytes_total

收到的位元組累積計數。

container_network_receive_packets_dropped_total

接收時捨棄的封包累積計數。

container_network_receive_packets_total

收到的封包累積計數。

container_network_transmit_bytes_total

傳輸的位元組累積計數。

container_network_transmit_packets_dropped_total

傳輸時捨棄的封包累積計數。

container_network_transmit_packets_total

傳輸的封包累積計數。

etcd_request_duration_seconds_bucket

每個操作和物件類型的 等化請求延遲的儲存貯體長條圖,以秒為單位。

go_goroutines

目前存在的 goroutine 數目。

go_threads

建立的作業系統執行緒數目。

kubelet_cgroup_manager_duration_seconds_bucket

cgroup Manager 操作的儲存貯體持續時間長條圖,以秒為單位。依方法分解。

kubelet_cgroup_manager_duration_seconds_count

cgroup Manager 操作的持續時間,以秒為單位。依方法分解。

kubelet_node_config_error

如果節點發生組態相關錯誤,則為 true (1),否則為 false (0)。

kubelet_node_name

節點的名稱。計數一律為 1。

kubelet_pleg_relist_duration_seconds_bucket

在 中重新列出 Pod 的儲存貯體持續時間長條圖,以秒為單位PLEG。

kubelet_pleg_relist_duration_seconds_count

在 中重新列出 Pod 的持續時間計數,以秒為單位PLEG。

kubelet_pleg_relist_interval_seconds_bucket

在 中重新列出間隔的儲存貯體長條圖,以秒為單位PLEG。

kubelet_pod_start_duration_seconds_count

從 kubelet 第一次看到 Pod 到 Pod 開始執行的持續時間,以秒為單位。

kubelet_pod_worker_duration_seconds_bucket

以秒為單位的儲存貯體持續時間長條圖,以同步單一 Pod。依操作類型分解:建立、更新或同步。

kubelet_pod_worker_duration_seconds_count

同步單一 Pod 的持續時間計數,以秒為單位。依操作類型分解:建立、更新或同步。

kubelet_running_containers

目前正在執行的容器數量。

kubelet_running_pods

具有執行中 Pod 沙盒的 Pod 數量。

kubelet_runtime_operations_duration_seconds_bucket

以執行時間操作秒為單位的持續時間儲存貯體長條圖。依操作類型分解。

kubelet_runtime_operations_errors_total

依操作類型列出的累計執行時間操作錯誤數目。

kubelet_runtime_operations_total

依操作類型計算的執行時間操作數量。

kube_node_status_allocatable

可配置給 Pod 的資源數量 (在為系統協助程式保留部分 之後)。

kube_node_status_capacity

節點可用的資源總量。

kube_pod_container_resource_limits (CPU)

容器請求的限制資源數量。

kube_pod_container_resource_limits (Memory)

容器請求的限制資源數量。

kube_pod_container_resource_requests (CPU)

容器請求資源的數量。

kube_pod_container_resource_requests (Memory)

容器請求資源的數量。

kube_pod_owner

Pod 擁有者的相關資訊。

kube_resourcequota

Kubernetes 中的資源配額會對命名空間內的資源強制執行用量限制CPU,例如 、記憶體和儲存體。

node_cpu

節點的CPU用量指標,包括每個核心的用量和總用量。

node_cpu_seconds_total

每個模式中CPUs花費的秒數。

node_disk_io_time_seconds

節點在磁碟上執行 I/O 操作所花費的累積時間。

node_disk_io_time_seconds_total

節點在磁碟上執行 I/O 操作所花費的總時間。

node_disk_read_bytes_total

節點從磁碟讀取的位元組總數。

node_disk_written_bytes_total

節點寫入磁碟的位元組總數。

node_filesystem_avail_bytes

Kubernetes 叢集中節點之檔案系統上可用空間的位元組數。

node_filesystem_size_bytes

節點上檔案系統的總大小。

node_load1

節點CPU用量的 1 分鐘負載平均值。

node_load15

節點CPU用量的 15 分鐘負載平均值。

node_load5

節點CPU用量的 5 分鐘負載平均值。

node_memory_Buffers_bytes

節點作業系統用於緩衝區快取的記憶體量。

node_memory_Cached_bytes,

節點作業系統用於磁碟快取的記憶體量。

node_memory_MemAvailable_bytes

可供應用程式和快取使用的記憶體數量。

node_memory_MemFree_bytes

節點上可用的可用記憶體數量。

node_memory_MemTotal_bytes

節點上可用的實體記憶體總量。

node_network_receive_bytes_total

節點透過網路收到的位元組總數。

node_network_transmit_bytes_total

節點透過網路傳輸的位元組總數。

process_cpu_seconds_total

使用者和系統花費的總CPU秒數。

process_resident_memory_bytes

以位元組為單位的駐留記憶體大小。

rest_client_requests_total

依狀態碼、方法和主機分割的HTTP請求數量。

rest_client_request_duration_seconds_bucket

請求延遲的儲存貯體長條圖,以秒為單位。被動詞和主機分解。

storage_operation_duration_seconds_bucket

儲存操作持續時間的儲存貯體長條圖。

storage_operation_duration_seconds_count

儲存操作持續時間的計數。

storage_operation_errors_total

儲存操作期間的累積錯誤數。

up

指出受監控目標 (例如節點) 是否已啟動並執行的指標。

volume_manager_total_volumes

磁碟區管理員管理的磁碟區總數。

workqueue_adds_total

工作佇列處理的新增總數。

workqueue_depth

工作佇列的目前深度。

workqueue_queue_duration_seconds_bucket

請求前項目在工作佇列中停留的儲存貯體長條圖,以秒為單位。

workqueue_work_duration_seconds_bucket

從工作佇列處理項目所需的儲存貯體長條圖,以秒為單位。

建立的提醒清單

下表列出此解決方案建立的提醒。警示會在 Amazon Managed Service for Prometheus 中建立為規則,並顯示在 Amazon Managed Grafana 工作區中。

您可以修改規則,包括透過編輯 Amazon Managed Service for Prometheus 工作區中的規則組態檔案來新增或刪除規則。

這兩個提醒是特殊提醒,處理方式與一般提醒略有不同。它們不會提醒您問題,而是為您提供用於監控系統的資訊。描述包含如何使用這些提醒的詳細資訊。

警示 描述和用量

Watchdog

這是提醒,旨在確保整個提醒管道都正常運作。此提醒一律會觸發,因此一律應該在 Alertmanager 中觸發,並一律對接收器觸發。您可以將此與通知機制整合,以便在觸發此提醒時傳送通知。例如,您可以在 中使用 DeadMansSnitch整合 PagerDuty。

InfoInhibitor

這是用來禁止資訊提醒的提醒。資訊層級警示本身可能非常吵雜,但在與其他警示結合時是相關的。每當有severity=info警示時,此警示就會觸發,當嚴重性為 warningcritical 的另一個警示開始在相同的命名空間上觸發時, 會停止觸發。此提醒應路由至 null 接收器,並設定為使用 禁止提醒severity=info

下列提醒會提供您系統的相關資訊或警告。

警示 嚴重性 描述

NodeNetworkInterfaceFlapping

warning

網路界面通常會變更其狀態

NodeFilesystemSpaceFillingUp

warning

檔案系統預計在接下來的 24 小時內會用盡空間。

NodeFilesystemSpaceFillingUp

critical

檔案系統預計在接下來的 4 小時內會用盡空間。

NodeFilesystemAlmostOutOfSpace

warning

檔案系統的剩餘空間少於 5%。

NodeFilesystemAlmostOutOfSpace

critical

檔案系統的剩餘空間少於 3%。

NodeFilesystemFilesFillingUp

warning

檔案系統預計在接下來的 24 小時內會用盡索引。

NodeFilesystemFilesFillingUp

critical

檔案系統預計在接下來的 4 小時內會用盡索引。

NodeFilesystemAlmostOutOfFiles

warning

檔案系統的剩餘索引少於 5%。

NodeFilesystemAlmostOutOfFiles

critical

檔案系統剩餘少於 3% 的索引。

NodeNetworkReceiveErrs

warning

網路介面報告許多接收錯誤。

NodeNetworkTransmitErrs

warning

網路介面正在報告許多傳輸錯誤。

NodeHighNumberConntrackEntriesUsed

warning

連線項目數量接近限制。

NodeTextFileCollectorScrapeError

warning

Node Exporter 文字檔案收集器無法抓取。

NodeClockSkewDetected

warning

偵測到時鐘偏移。

NodeClockNotSynchronizzing

warning

時鐘未同步。

NodeRAIDDegraded

critical

RAID 陣列已降級

NodeRAIDDiskFailure

warning

RAID 陣列中的失敗裝置

NodeFileDescriptorLimit

warning

預測核心很快就會耗盡檔案描述項限制。

NodeFileDescriptorLimit

critical

預測核心很快就會耗盡檔案描述項限制。

KubeNodeNotReady

warning

節點尚未就緒。

KubeNodeUnreachable

warning

無法連線節點。

KubeletTooManyPods

info

Kubelet 正在以容量執行。

KubeNodeReadinessFlapping

warning

節點就緒狀態正在切換。

KubeletPlegDurationHigh

warning

Kubelet Pod 生命週期事件產生器重新列出的時間太長。

KubeletPodStartUpLatencyHigh

warning

Kubelet Pod 啟動延遲太高。

KubeletClientCertificateExpiration

warning

Kubelet 用戶端憑證即將過期。

KubeletClientCertificateExpiration

critical

Kubelet 用戶端憑證即將過期。

KubeletServerCertificateExpiration

warning

Kubelet 伺服器憑證即將過期。

KubeletServerCertificateExpiration

critical

Kubelet 伺服器憑證即將過期。

KubeletClientCertificateRenewalErrors

warning

Kubelet 無法續約其用戶端憑證。

KubeletServerCertificateRenewalErrors

warning

Kubelet 無法續約其伺服器憑證。

KubeletDown

critical

目標已從 Prometheus 目標探索中消失。

KubeVersionMismatch

warning

執行中 Kubernetes 元件的不同語意版本。

KubeClientErrors

warning

Kubernetes API 伺服器用戶端發生錯誤。

KubeClientCertificateExpiration

warning

用戶端憑證即將過期。

KubeClientCertificateExpiration

critical

用戶端憑證即將過期。

KubeAggregatedAPIErrors

warning

Kubernetes 彙總API已回報錯誤。

KubeAggregatedAPIDown

warning

Kubernetes 彙總API已關閉。

KubeAPIDown

critical

目標已從 Prometheus 目標探索中消失。

KubeAPITerminatedRequests

warning

kubernetes apiserver 已終止其傳入請求的 {{ $value | humanizePercentage }}。

KubePersistentVolumeFillingUp

critical

持久性磁碟區正在填滿。

KubePersistentVolumeFillingUp

warning

持久性磁碟區正在填滿。

KubePersistentVolumeInodesFillingUp

critical

持久性磁碟區節點正在填滿。

KubePersistentVolumeInodesFillingUp

warning

持久性磁碟區節點正在填滿。

KubePersistentVolumeErrors

critical

持久性磁碟區佈建發生問題。

KubeCPUOvercommit

warning

叢集有過度遞交CPU的資源請求。

KubeMemoryOvercommit

warning

叢集有過度遞交的記憶體資源請求。

KubeCPUQuotaOvercommit

warning

叢集有過度遞交CPU的資源請求。

KubeMemoryQuotaOvercommit

warning

叢集有過度遞交的記憶體資源請求。

KubeQuotaAlmostFull

info

命名空間配額即將滿載。

KubeQuotaFullyUsed

info

命名空間配額已完全使用。

KubeQuotaExceeded

warning

命名空間配額已超過限制。

CPUThrottlingHigh

info

程序會經歷高限CPU流。

KubePodCrashLooping

warning

Pod 正在當機迴圈。

KubePodNotReady

warning

Pod 已處於非就緒狀態超過 15 分鐘。

KubeDeploymentGenerationMismatch

warning

由於可能的復原,部署產生不相符

KubeDeploymentReplicasMismatch

warning

部署不符合預期的複本數量。

KubeStatefulSetReplicasMismatch

warning

StatefulSet 不符合預期的複本數量。

KubeStatefulSetGenerationMismatch

warning

StatefulSet 由於可能的復原,產生不相符

KubeStatefulSetUpdateNotRolledOut

warning

StatefulSet 更新尚未推出。

KubeDaemonSetRolloutStuck

warning

DaemonSet 推展停滯。

KubeContainerWaiting

warning

Pod 容器等待超過 1 小時

KubeDaemonSetNotScheduled

warning

DaemonSet 未排程 Pod。

KubeDaemonSetMisScheduled

warning

DaemonSet Pod 排程錯誤。

KubeJobNotCompleted

warning

任務未及時完成

KubeJobFailed

warning

任務無法完成。

KubeHpaReplicasMismatch

warning

HPA 不符合所需的複本數量。

KubeHpaMaxedOut

warning

HPA 正在以最大複本執行

KubeStateMetricsListErrors

critical

kube-state-metrics 清單操作中發生錯誤。

KubeStateMetricsWatchErrors

critical

kube-state-metrics 監看操作發生錯誤。

KubeStateMetricsShardingMismatch

critical

kube-state-metrics 碎片設定錯誤。

KubeStateMetricsShardsMissing

critical

kube-state-metrics 碎片遺失。

KubeAPIErrorBudgetBurn

critical

API 伺服器燒毀過多的錯誤預算。

KubeAPIErrorBudgetBurn

critical

API 伺服器燒毀過多的錯誤預算。

KubeAPIErrorBudgetBurn

warning

API 伺服器燒毀過多的錯誤預算。

KubeAPIErrorBudgetBurn

warning

API 伺服器燒毀過多的錯誤預算。

TargetDown

warning

一或多個目標已關閉。

etcdInsufficientMembers

critical

Etcd 叢集成員不足。

etcdHighNumberOfLeaderChanges

warning

Etcd 叢集大量領導者變更。

etcdNoLeader

critical

Etcd 叢集沒有領導者。

etcdHighNumberOfFailedGRPCRequests

warning

Etcd 叢集大量失敗的 gRPC 請求。

etcdGRPCRequestsSlow

critical

Etcd 叢集 gRPC 請求很慢。

etcdMemberCommunicationSlow

warning

Etcd 叢集成員通訊緩慢。

etcdHighNumberOfFailedProposals

warning

Etcd 叢集大量失敗的提案。

etcdHighFsyncDurations

warning

Etcd 叢集高同步持續時間。

etcdHighCommitDurations

warning

Etcd 叢集的遞交持續時間高於預期。

etcdHighNumberOfFailedHTTPRequests

warning

Etcd 叢集的HTTP請求失敗。

etcdHighNumberOfFailedHTTPRequests

critical

Etcd 叢集有大量失敗的HTTP請求。

etcdHTTPRequestsSlow

warning

Etcd 叢集HTTP請求很慢。

HostClockNotSynchronizing

warning

主機時鐘未同步。

HostOomKillDetected

warning

偵測到主機OOM刪除。

故障診斷

有幾件事可能會導致專案設定失敗。請務必檢查下列項目。

  • 您必須先完成所有先決條件,才能安裝解決方案。

  • 叢集必須至少有一個節點,才能嘗試建立解決方案或存取指標。

  • 您的 Amazon EKS叢集必須安裝 AWS CNICoreDNSkube-proxy 附加元件。如果未安裝,解決方案將無法正常運作。透過主控台建立叢集時,預設會安裝它們。如果叢集是透過 建立,您可能需要安裝它們 AWS SDK。

  • Amazon EKS Pod 安裝逾時。如果節點容量不足,可能會發生這種情況。這些問題有多種原因,包括:

    • Amazon EKS叢集已使用 Fargate 而非 Amazon 初始化EC2。此專案需要 Amazon EC2。

    • 節點已染色,因此無法使用。

      您可以使用 kubectl describe node NODENAME | grep Taints檢查污點。然後kubectl taint node NODENAME TAINT_NAME-移除污點。請務必在污點名稱-後面包含 。

    • 節點已達到容量限制。在這種情況下,您可以建立新的節點或增加容量。

  • 您在 Grafana 中看不到任何儀表板:使用不正確的 Grafana 工作區 ID。

    執行下列命令以取得 Grafana 的相關資訊:

    kubectl describe grafanas external-grafana -n grafana-operator

    您可以檢查結果是否有正確的工作區 URL。如果不是您預期的工作空間,請使用正確的工作區 ID 重新部署。

    Spec: External: API Key: Key: GF_SECURITY_ADMIN_APIKEY Name: grafana-admin-credentials URL: https://g-123example.grafana-workspace.aws-region.amazonaws.com Status: Admin URL: https://g-123example.grafana-workspace.aws-region.amazonaws.com Dashboards: ...
  • 您在 Grafana 中看不到任何儀表板:您正在使用過期的API金鑰。

    若要尋找此案例,您需要取得 grafana 運算子並檢查日誌是否有錯誤。使用此命令取得 Grafana 運算子的名稱:

    kubectl get pods -n grafana-operator

    這將傳回運算子名稱,例如:

    NAME READY STATUS RESTARTS AGE grafana-operator-1234abcd5678ef90 1/1 Running 0 1h2m

    在下列命令中使用運算子名稱:

    kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator

    如下錯誤訊息表示API金鑰已過期:

    ERROR error reconciling datasource {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"} github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile

    在此情況下,請建立新的API金鑰,然後再次部署解決方案。如果問題仍然存在,您可以在重新部署之前使用下列命令強制同步:

    kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  • CDK 安裝 – 缺少SSM參數。如果您看到類似以下的錯誤,請執行 cdk bootstrap ,然後再試一次。

    Deployment failed: Error: aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME: SSM parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/ guide/bootstrapping.html)
  • 如果OIDC提供者已存在,部署可能會失敗。您會看到如下所示的錯誤 (在此情況下,適用於 CDK 安裝):

    | CREATE_FAILED | Custom::AWSCDKOpenIdConnectProvider | OIDCProvider/Resource/Default Received response status [FAILED] from custom resource. Message returned: EntityAlreadyExistsException: Provider with url https://oidc.eks.REGION.amazonaws.com/id/PROVIDER ID already exists.

    在此情況下,請前往 IAM 入口網站並刪除OIDC提供者,然後再試一次。

  • Terraform 安裝 – 您看到錯誤訊息,其中包含 cluster-secretstore-sm failed to create kubernetes rest client for update of resourcefailed to create kubernetes rest client for update of resource

    此錯誤通常表示未在您的 Kubernetes 叢集中安裝或啟用外部秘密運算子。這是做為解決方案部署的一部分而安裝,但有時在解決方案需要時尚未就緒。

    您可以驗證是否已使用下列命令安裝:

    kubectl get deployments -n external-secrets

    如果已安裝,可能需要一些時間才能讓運算子完全準備好可供使用。您可以執行下列命令,檢查所需的自訂資源定義 (CRDs) 的狀態:

    kubectl get crds|grep external-secrets

    此命令應列出與外部秘密運算子CRDs相關的 ,包括 clustersecretstores.external-secrets.ioexternalsecrets.external-secrets.io。如果未列出,請等待幾分鐘,然後再次檢查。

    CRDs 註冊後,您可以terraform apply再次執行 以部署解決方案。