HAProxy

במאמר הזה מוסבר איך להגדיר את הפריסה של Google Kubernetes Engine כדי שתוכלו להשתמש בשירות המנוהל של Google Cloud ל-Prometheus כדי לאסוף מדדים מ-HAProxy. במאמר הזה מוסבר איך:

  • מגדירים את HAProxy לדיווח על מדדים.
  • אפשר לגשת למרכז בקרה מוגדר מראש ב-Cloud Monitoring כדי לראות את המדדים.
  • הגדרת כללי התראה למעקב אחר המדדים.

ההוראות האלה רלוונטיות רק אם אתם משתמשים ב אוסף מנוהל עם השירות המנוהל ל-Prometheus. אם אתם משתמשים באיסוף שמוטמע באופן עצמאי, תוכלו לעיין במסמכי HAProxy כדי לקבל מידע על ההתקנה.

ההוראות האלה הן דוגמה, והן אמורות לפעול ברוב סביבות Kubernetes. אם נתקלתם בבעיה בהתקנת אפליקציה או כלי לייצוא בגלל מדיניות אבטחה או מדיניות ארגונית מגבילה, מומלץ לעיין במסמכי קוד פתוח לקבלת תמיכה.

מידע על HAProxy זמין במאמר HAProxy.

דרישות מוקדמות

כדי לאסוף מדדים משירות PROMEX ל-HAProxy באמצעות שירות מנוהל ל-Prometheus ואיסוף מנוהל, הפריסה צריכה לעמוד בדרישות הבאות:

  • האשכול צריך להריץ את Google Kubernetes Engine בגרסה ‎1.28.15-gke.2475000 ואילך.
  • צריך להפעיל את השירות המנוהל ל-Prometheus עם איסוף מנוהל. מידע נוסף זמין במאמר תחילת השימוש באוסף מנוהל.

  • כדי להשתמש בלוחות הבקרה שזמינים ב-Cloud Monitoring לשילוב של HAProxy, צריך להשתמש בגרסה 2.4 ואילך של haproxy_promex.

    מידע נוסף על לוחות הבקרה הזמינים מופיע במאמר הצגת לוחות בקרה.

‫HAProxy חושף מדדים בפורמט Prometheus רק אם הוא נוצר עם השירות המופעל ועם frontend מתאים שכלול בהגדרה.

רוב קובצי האימג' הרשמיים של Docker בגרסה 2.4 ואילך נוצרים כשהשירות הזה מופעל.

דוגמת ההגדרה הבאה מבוססת על התיעוד של 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 כדי לנהל את ההגדרות.

כדי לוודא ששירות PROMEX עבור HAProxy פולט מדדים בנקודות הקצה הצפויות:

  1. מגדירים העברה ליציאה אחרת באמצעות הפקודה הבאה:
    kubectl -n NAMESPACE_NAME port-forward POD_NAME 8404
    
  2. ניגשים לנקודת הקצה localhost:8404/metrics באמצעות הדפדפן או כלי השירות curl בסשן טרמינל אחר.

הגדרה של משאב PodMonitoring

לצורך גילוי יעדים, ל-Managed Service for Prometheus Operator נדרש משאב PodMonitoring שתואם לשירות PROMEX עבור HAProxy באותו מרחב שמות.

אפשר להשתמש בהגדרה הבאה של 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
מוודאים שהערכים של השדות port ו-matchLabels תואמים לאלה של ה-pods של HAProxy שרוצים לעקוב אחריהם.

‫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 כדי לוודא שהגדרתם את שירות PROMEX בצורה נכונה עבור HAProxy. יכול להיות שיחלפו דקה או שתיים עד שמערכת Cloud Monitoring תעבד את המדדים.

כדי לוודא שהמדדים נאספים, מבצעים את הפעולות הבאות:

  1. במסוף Google Cloud , עוברים לדף  Metrics explorer:

    כניסה אל Metrics Explorer

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

  2. בסרגל הכלים של חלונית הכלי ליצירת שאילתות, לוחצים על הלחצן ששמו הוא  MQL או  PromQL.
  3. מוודאים שהאפשרות PromQL נבחרה במתג שפה. המתג לשפה נמצא באותו סרגל כלים שבו אפשר לעצב את השאילתה.
  4. מזינים ומריצים את השאילתה הבאה:
    up{job="haproxy", cluster="CLUSTER_NAME", namespace="NAMESPACE_NAME"}

הצגת מרכזי בקרה

השילוב עם Cloud Monitoring כולל את לוח הבקרה HAProxy Prometheus Overview. לוחות הבקרה מותקנים באופן אוטומטי כשמגדירים את השילוב. אפשר גם לראות תצוגות מקדימות סטטיות של מרכזי בקרה בלי להתקין את האינטגרציה.

כדי לראות מרכז בקרה שהותקן:

  1. במסוף Google Cloud , עוברים לדף  Dashboards:

    מעבר אל מרכזי בקרה

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

  2. לוחצים על הכרטיסייה רשימת מרכזי בקרה.
  3. בוחרים בקטגוריה שילובים.
  4. לוחצים על השם של מרכז הבקרה, לדוגמה, HAProxy Prometheus Overview.

כדי לראות תצוגה מקדימה סטטית של מרכז הבקרה:

  1. נכנסים לדף  Integrations במסוף Google Cloud :

    עוברים אל Integrations

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Monitoring.

  2. לוחצים על המסנן Kubernetes Engine של פלטפורמת הפריסה.
  3. מאתרים את השילוב של HAProxy ולוחצים על הצגת פרטים.
  4. לוחצים על הכרטיסייה מרכזי בקרה.

פתרון בעיות

מידע על פתרון בעיות בהוספת מדדים זמין במאמר פתרון בעיות שקשורות להוספה, בקטע בעיות באיסוף נתונים ממייצאים.