קבצי היומן הבאים נמצאים בספרייה /obs/diagnostic/:
postgresql.audit: קובץ היומן הזה אוסף יומני ביקורת של סשנים ושל גישה לאובייקטים. כדי לאסוף יומני ביקורת, צריך להפעיל את יומני הביקורת.
postgresql.log: בקובץ היומן הזה נאספים יומני שרת PostgreSQL. היומנים האלה תמיד נאספים ואין צורך להפעיל אותם.
כשמתבצעת רוטציה של קובץ יומן, קורה הדבר הבא:
קובץ היומן מועתק לספרייה
/obs/diagnostic/archive/. אם בספרייה הזו קיים קובץ יומן עם אותו שם, הוא יוחלף.התוכן של קובץ היומן המקורי שסובב נמחק, כך שהקובץ ריק.
המידע ביומן מתחיל להיכתב באופן מיידי לקובץ היומן הריק שהוחלף. המידע ביומן נכתב בקובץ היומן עד שהקובץ מגיע לגודל או לגיל מסוים, ואז הוא מתחלף שוב. היומנים מתחלפים כדי שלא יהיו גדולים מדי.
כברירת מחדל, הגדרת הרוטציה היא שכל קובץ יומן יסתובב כשהגודל שלו יגיע ל-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)).
יוצרים 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במרחב השמות של אשכול מסד הנתונים.יצירת
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/רושמים את ה-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.
המאמרים הבאים
- ניהול ומעקב אחרי AlloyDB Omni
- יצירה ואבחון של קובצי dump של AlloyDB Omni
- מידע על ניהול זיכרון אוטומטי