הגדרת החלפת יומנים ב-AlloyDB Omni

בוחרים גרסה של מאמר העזרה:

במסמך הזה מוסבר איך להגדיר רוטציה של יומני אבחון של AlloyDB Omni כשמשתמשים באופרטור AlloyDB Omni Kubernetes.

קבצי היומן הבאים נמצאים בספרייה /obs/diagnostic/:

  1. postgresql.audit: קובץ היומן הזה אוסף יומני ביקורת של סשנים ושל גישה לאובייקטים. כדי לאסוף יומני ביקורת, צריך להפעיל את יומני הביקורת.

  2. postgresql.log: בקובץ היומן הזה נאספים יומני שרת PostgreSQL. היומנים האלה תמיד נאספים ואין צורך להפעיל אותם.

כשמתבצעת רוטציה של קובץ יומן, קורה הדבר הבא:

  1. קובץ היומן מועתק לספרייה /obs/diagnostic/archive/. אם בספרייה הזו קיים קובץ יומן עם אותו שם, הוא יוחלף.

  2. התוכן של קובץ היומן המקורי שסובב נמחק, כך שהקובץ ריק.

  3. המידע ביומן מתחיל להיכתב באופן מיידי לקובץ היומן הריק שהוחלף. המידע ביומן נכתב בקובץ היומן עד שהקובץ מגיע לגודל או לגיל מסוים, ואז הוא מתחלף שוב. היומנים מתחלפים כדי שלא יהיו גדולים מדי.

כברירת מחדל, הגדרת הרוטציה היא שכל קובץ יומן יסתובב כשהגודל שלו יגיע ל-200 MB. הרוטציה שמוגדרת כברירת מחדל לא כוללת הגדרת גיל.

קבצים בארכיון נשמרים למשך 7 ימים. קבצים בארכיון שגילם יותר מ-7 ימים מוסרים אוטומטית, למעט הקובץ שהועבר לארכיון במהלך הרוטציה האחרונה. לדוגמה, אם log_rotation_age ישן יותר מ-7 ימים, הקובץ שנארך יגיע לסף של 7 ימים לפני הרוטציה של הקובץ הנוכחי. במקרה כזה, הקובץ הזה בארכיון לא יוסר עד שהרוטציה הבאה תיצור קובץ חדש בארכיון.

כל שם של קובץ יומן מסובב הוא בפורמט הבא: postgresql-%Y-%m-%d_%H%M%S.log. חותמת הזמן נקבעת בזמן רוטציית היומן והיא מוצגת לפי זמן אוניברסלי מתואם (UTC). לדוגמה, אם מתבצעת רוטציה של היומן בשעה 13:01:02 ב-20.12.2024 (שעון UTC), שם הקובץ בארכיון הוא postgresql-2024-12-20_130102.log.

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

הפעלה של יומני ביקורת

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

שלב 1: הגדרת pgAudit בפרמטרים של DBCluster

כדי שיומני הגישה של סשנים ואובייקטים ייאספו בקובץ postgresql.audit, צריך להפעיל את pgAudit ולהגדיר אילו הצהרות יתועדו באמצעות pgaudit.log.

מוסיפים את השורות הבאות לקטע parameters בקובץ v1_dbcluster_parameters.yaml:

alloydb.enable_pgaudit: "on"
pgaudit.log: "all"

דוגמה לאופן שבו זה נראה במניפסט DBCluster:

apiVersion: v1
kind: Secret
...
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
   name: DB_CLUSTER_NAME
spec:
  databaseVersion: "17.7.0"
  primarySpec:
    ...
    parameters:
      ...
      alloydb.enable_pgaudit: "on"
      pgaudit.log: "all"

מידע נוסף זמין במאמר תוספי מסד נתונים נתמכים.pgaudit

שלב 2: יוצרים את התוסף pgAudit במסד הנתונים

אחרי שמגדירים את הפרמטרים ומוודאים שהמסד הנתונים הופעל מחדש, צריך להתחבר למסד הנתונים ולהתקין את התוסף pgAudit:

CREATE EXTENSION IF NOT EXISTS pgaudit;

צריך להריץ את הפקודה הזו בכל מסד נתונים שבו רוצים להפעיל את רישום הביקורת. השלב הזה נדרש כדי להתקין את טריגרי האירועים שדרושים לביקורת של DDL.

פרמטרים של pgAudit‏ (GUC)

בטבלה הבאה מפורטים פרמטרים חשובים של pgAudit Grand Unified Configuration ‏ (GUC) שאפשר להגדיר בקטע parameters במפרט DBCluster. מידע נוסף זמין במסמכי pgAudit.

פרמטר תיאור ערך ברירת המחדל
pgaudit.log המדיניות הזו מציינת אילו סוגים של הצהרות נרשמים ביומן על ידי רישום ביומן של ביקורת על הפעילות. הערכים האפשריים הם: none, ‏ all, ‏ read, ‏ write, function, ‏ role, ‏ ddl, ‏ misc, misc_set. none
pgaudit.log_catalog ההגדרה קובעת שרישום הפעילות מופעל אם כל היחסים בהצהרה הם ב-pg_catalog. השבתה של האפשרות הזו מצמצמת את הרעש ביומן מלקוחות של מסדי נתונים. on
pgaudit.log_parameter מציין שרישום ביומן הביקורת כולל את הפרמטרים שהועברו עם ההצהרה. off
pgaudit.log_relation מציין אם ביקורת על סשן יוצרת רשומה נפרדת ביומן לכל קשר (טבלה, תצוגה וכו') שמוזכר בהצהרת SELECT או DML. off
pgaudit.log_rows מציינת שרישום ביומן ביקורת כולל את מספר השורות שאוחזרו או שהושפעו על ידי הצהרה. off
pgaudit.log_statement המדיניות הזו קובעת אם הרישום ביומן כולל את הטקסט והפרמטרים של ההצהרה. on
pgaudit.role מציין את התפקיד הראשי שמשמש לרישום ביומן הביקורת של אובייקטים. ללא

יומני השרת של PostgreSQL נאספים תמיד בקובץ postgresql.log ולא צריך להפעיל את pgAudit.

הצגת הנתיב של קובץ יומן הביקורת

משתמשים בפונקציית ה-SQL‏ alloydb_audit_current_logfile כדי להציג את הנתיב של קובץ יומן הביקורת. אם הביקורת מושבתת, התוצאה היא NULL.

SELECT alloydb_audit_current_logfile();

 alloydb_audit_current_logfile
----------------------------------
 /obs/diagnostic/postgresql.audit

הגדרת החלפת יומנים

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

כדי להגדיר את החלפת היומנים, מגדירים פרמטר אחד או את שני הפרמטרים הבאים בקטע parameters של מניפסט DBCluster:

  • log_rotation_size: "SIZE_IN_KB"
  • log_rotation_age: "AGE_IN_MINUTES"

כדי להשבית אחת מההגדרות של החלפת יומנים, מגדירים אותה לאפס, "0". כדי לשמור על הגדרת ברירת המחדל של סיבוב יומנים כשגודל הקובץ שלהם מגיע ל-200 MB, אל תגדירו אף אחד מהפרמטרים.

דוגמה לגודל יומן ומשך זמן מקסימליים להחלפת יומנים

בדוגמה הבאה מוגדר שקובצי היומן יוחלפו כשהגודל שלהם יגיע ל-400 MB או כשהזמן בין החלפות היומן יגיע ליום אחד, לפי מה שיקרה קודם:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
spec:
...
  primarySpec:
  ...
    parameters:
      log_rotation_size: "400000" # 400 MB
      log_rotation_age: "1440" # 24 hours * 60 minutes = 1 day

דוגמה לגודל יומן מקסימלי להחלפת יומנים

בדוגמה הבאה מוגדרת רוטציה של יומנים כשהגודל שלהם מגיע ל-400 MB:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
spec:
...
  primarySpec:
  ...
    parameters:
      log_rotation_size: "400000" # 400 MB
      log_rotation_age: "0" # Set to 0 to disable

דוגמה למשך הזמן של החלפת יומנים

בדוגמה הבאה, היומנים מוגדרים להתחלף כל 24 שעות:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
spec:
...
  primarySpec:
  ...
    parameters:
      log_rotation_size: "0" # Set to 0 to disable
      log_rotation_age: "1440" # 24 hours * 60 minutes = 1 day

העברה של יומני ביקורת ל-sink מרכזי

‫AlloyDB Omni כותב יומני ביקורת לקובץ /obs/diagnostic/postgresql.audit בתוך מאגר מסדי הנתונים. אם רוצים להעביר את היומנים האלה ליעד מרכזי לרישום ביומן (כמו Cloud Logging,‏ Datadog,‏ Splunk או Elasticsearch), אפשר לפרוס קונטיינר sidecar באמצעות Sidecar Custom Resource (CR).

קונטיינר ה-sidecar פועל באותו Pod כמו מסד הנתונים, הוא מטמיע את נפח היומן (obsdisk) ומעביר את קובץ היומן ליעד שלכם לרישום ביומן.

דוגמה: העברת יומנים באמצעות fluent bit sidecar

בדוגמה הבאה מוצג איך להשתמש ב-Fluent Bit sidecar כדי לעקוב אחרי יומני pgAudit ולהוציא אותם לפלט רגיל, שאפשר לאסוף אותו באמצעות כלי איסוף יומנים רגילים של אשכול Kubernetes (כמוGoogle Cloud סוכן Logging ב-Google Kubernetes Engine ‏ (GKE)).

  1. יוצרים ConfigMap להגדרת Fluent Bit:

    יוצרים ConfigMap שמכיל את ההגדרה של Fluent Bit למעקב אחרי יומן הביקורת.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: fluentbit-config
      namespace: NAMESPACE
    data:
      fluent-bit.conf: |
        [SERVICE]
            Flush        1
            Daemon       Off
            Log_Level    info
    
        [INPUT]
            Name         tail
            Path         /obs/diagnostic/postgresql.audit
            Tag          pgaudit
            DB           /tmp/fluent-bit-pgaudit.db
    
        [OUTPUT]
            Name         stdout
            Match        *
    

    מחליפים את NAMESPACE במרחב השמות של אשכול מסד הנתונים.

  2. יצירת Sidecar משאב בהתאמה אישית:

    יוצרים מניפסט Sidecar שמגדיר את מאגר Fluent Bit ומעלה את obsdisk הנפח (שמכיל יומנים של AlloyDB Omni) ואת נפח ConfigMap.

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Sidecar
    metadata:
      name: pgaudit-forwarder
      namespace: NAMESPACE
    spec:
      additionalVolumes:
      - name: fluentbit-config-volume
        configMap:
          name: fluentbit-config
      sidecars:
      - name: fluent-bit
        image: fluent/fluent-bit:3.0
        command: ["/fluent-bit/bin/fluent-bit"]
        args: ["-c", "/fluent-bit/etc/fluent-bit.conf"]
        volumeMounts:
        - name: obsdisk
          mountPath: /obs
        - name: fluentbit-config-volume
          mountPath: /fluent-bit/etc/
    
  3. רושמים את ה-sidecar באשכול מסד הנתונים:

    מעדכנים את המניפסט DBCluster כדי להפנות אל ה-sidecar, או מתקנים את האשכול באמצעות הפקודה הבאה:

    kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"sidecarRef":{"name":"pgaudit-forwarder"}}}}' --type=merge

    מחליפים את DB_CLUSTER_NAME בשם של אשכול מסדי הנתונים.

    מידע נוסף על ניהול קונטיינרים מסוג sidecar זמין במאמר הגדרת קונטיינר מסוג sidecar.

המאמרים הבאים