HAProxy

本文件說明如何設定 Google Kubernetes Engine 部署作業,以便使用 Google Cloud Managed Service for Prometheus 收集 HAProxy 的指標。本文件說明如何執行下列操作:

  • 設定 HAProxy 回報指標。
  • 為 Managed Service for Prometheus 設定 PodMonitoring 資源,以便收集匯出的指標。
  • 在 Cloud Monitoring 中存取資訊主頁,查看指標。
  • 設定快訊規則來監控指標。

只有在您將 代管收集作業與 Managed Service for Prometheus 搭配使用時,才適用這些操作說明。如果您使用的是自行部署的收集,請參閱 HAProxy 說明文件,瞭解安裝資訊。

這些操作說明僅供參考,應可在大多數 Kubernetes 環境中運作。如果您因安全性限制或機構政策而無法順利安裝應用程式或匯出程式,建議您參閱開放原始碼文件尋求支援。

如要瞭解 HAProxy,請參閱 HAProxy

事前準備

如要使用 Managed Service for Prometheus 和代管收集作業,從 HAProxy 的 PROMETHEUS 服務收集指標,您的部署作業必須符合下列規定:

  • 您的叢集必須執行 Google Kubernetes Engine 1.21.4-gke.300 以上版本。
  • 您必須在啟用代管收集作業的情況下,執行 Managed Service for Prometheus。詳情請參閱「 開始使用代管集合」。

  • 如要使用 Cloud Monitoring 提供的資訊主頁,以便整合 HAProxy,您必須使用 haproxy_promex 2.4 以上版本。

    如要進一步瞭解可用的資訊主頁,請參閱「查看資訊主頁」。

只有在啟用服務建構並在設定中加入適當的 frontend 時,HAProxy 才會公開 Prometheus 格式指標。

大多數版本為 2.4 以上版本的官方 Docker 映像檔,都是在啟用這項服務的情況下建構而成。

下列設定範例是參考 HAProxy Enterprise 說明文件所建構。這項工具可搭配社群版使用,並可視特定需求進行修改:

修改 HAProxy 設定

修改 HAProxy 設定,如以下範例所示:

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: ConfigMap
metadata:
  name: haproxy
data:
  haproxy.cfg: |
    ...
+   frontend prometheus
+     mode http
+     bind *:8404
+     http-request use-service prometheus-exporter if { path /metrics }
    ...
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: haproxy
spec:
  selector:
    matchLabels:
+     app.kubernetes.io/name: haproxy
  template:
    metadata:
      labels:
+       app.kubernetes.io/name: haproxy
    spec:
      containers:
      - name: haproxy
        image: haproxy:2.8
        ports:
+       - containerPort: 8404
+         name: prometheus
        volumeMounts:
        - mountPath: /usr/local/etc/haproxy/haproxy.cfg
          subPath: haproxy.cfg
          name: haproxy
      volumes:
      - name: haproxy
        configMap:
          name: haproxy
          items:
          - key: haproxy.cfg
            path: haproxy.cfg

您必須在設定中加入任何前面有 + 符號的行。

如要套用本機檔案中的設定變更,請執行下列指令:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

您也可以使用 Terraform 管理設定。

如要驗證 HAProxy 的 PROMEX 服務是否會在預期的端點上發出指標,請執行下列操作:

  1. 使用下列指令設定通訊埠轉送:
    kubectl -n NAMESPACE_NAME port-forward POD_NAME 8404
    
  2. 在其他終端機工作階段中,使用瀏覽器或 curl 公用程式存取端點 localhost:8404/metrics

定義 PodMonitoring 資源

針對目標探索,Managed Service for Prometheus Operator 需要 PodMonitoring 資源,該資源必須對應至相同命名空間中 HAProxy 的 PROMETHEUS 服務。

您可以使用下列 PodMonitoring 設定:

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: haproxy
  labels:
    app.kubernetes.io/name: haproxy
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  endpoints:
  - port: prometheus
    scheme: http
    interval: 30s
    path: /metrics
  selector:
    matchLabels:
      app.kubernetes.io/name: haproxy
請確認 portmatchLabels 欄位的值與要監控的 HAProxy Pod 相符。

HAProxy 會公開 bind 設定選項中定義的目標指標。使用者必須定義要監聽的 IP 位址和通訊埠,才能使用這個選項來抓取指標。

如要套用本機檔案中的設定變更,請執行下列指令:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

您也可以使用 Terraform 管理設定。

定義規則和快訊

您可以使用下列 Rules 設定,針對 HAProxy 指標定義警示:

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  name: haproxy-rules
  labels:
    app.kubernetes.io/component: rules
    app.kubernetes.io/name: haproxy-rules
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  groups:
  - name: haproxy
    interval: 30s
    rules:
    - alert: HAProxyDown
      annotations:
        description: |-
          HAProxy instance is down
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: HAProxy down (instance {{ $labels.instance }})
      expr: haproxy_server_up{job="haproxy"} == 0
      for: 5m
      labels:
        severity: critical
    - alert: HAProxyTooManyConnections
      annotations:
        description: |-
          HAProxy instance has too many connections
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: HAProxy too many connections (instance {{ $labels.instance }})
      expr: haproxy_frontend_current_sessions{job="haproxy"} / haproxy_frontend_limit_sessions{job="haproxy"} * 100 > 90
      for: 5m
      labels:
        severity: warning

如要套用本機檔案中的設定變更,請執行下列指令:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

您也可以使用 Terraform 管理設定。

如要進一步瞭解如何將規則套用至叢集,請參閱「受管理的規則評估和快訊」。

驗證設定

您可以使用 Metrics Explorer 確認是否已正確設定 HAProxy 的 PROMEX 服務。Cloud Monitoring 可能需要一或兩分鐘的時間才能擷取指標。

如要確認已擷取指標,請執行下列操作:

  1. 前往 Google Cloud 控制台的 「Metrics Explorer」頁面:

    前往 Metrics Explorer

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 在查詢建構工具窗格的工具列中,選取名稱為  MQL PromQL 的按鈕。
  3. 確認「Language」切換鈕中已選取「PromQL」。語言切換鈕位於可讓您設定查詢格式的工具列中。
  4. 輸入並執行以下查詢:
    up{job="haproxy", cluster="CLUSTER_NAME", namespace="NAMESPACE_NAME"}

查看資訊主頁

Cloud Monitoring 整合功能包含 HAProxy Prometheus 總覽資訊主頁。設定整合後,系統會自動安裝資訊主頁。您也可以不必安裝整合功能,直接查看資訊主頁的靜態預覽畫面。

如要查看已安裝的資訊主頁,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Dashboards」(資訊主頁) 頁面:

    前往「Dashboards」(資訊主頁)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 選取「資訊主頁清單」分頁標籤。
  3. 選擇「整合」類別。
  4. 按一下資訊主頁名稱,例如「HAProxy Prometheus 總覽」

如要查看資訊主頁的靜態預覽畫面,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「Integrations」(整合) 頁面:

    前往「Integrations」

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 按一下「Kubernetes Engine」部署平台篩選器。
  3. 找出 HAProxy 整合,然後按一下「查看詳細資料」
  4. 選取「資訊主頁」分頁標籤。

疑難排解

如要瞭解如何排解指標攝入問題,請參閱「 排解攝入端問題」一文中的「 從匯出工具收集資料時發生的問題」。