MySQL

השילוב של MySQL אוסף מדדי ביצועים שקשורים ל-InnoDB, למאגר הנתונים הזמני ולפעולות שונות אחרות. הוא גם אוסף יומנים כלליים, יומני שגיאות ויומנים של שאילתות איטיות, ומנתח אותם למטען ייעודי (payload) בפורמט JSON. קובצי יומן השגיאות עוברים ניתוח כדי לחלץ מהם את קוד השגיאה ואת מערכת המשנה. יומני שאילתות איטיות מנותחים לצמדי מפתח/ערך שמתארים את הביצועים של שאילתה, כולל זמן השאילתה והשורות שנבדקו.

מידע נוסף על MySQL זמין במסמכי התיעוד של MySQL.

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

כדי לאסוף נתוני טלמטריה של MySQL, צריך להתקין את Ops Agent:

  • כדי להשתמש במדדים, צריך להתקין גרסה 2.32.0 ומעלה.
  • כדי לראות את היומנים, צריך להתקין גרסה 2.5.0 ומעלה.

השילוב הזה תומך ב-MySQL בגרסאות 5.7 ו-8.0.

הגדרת מכונת MySQL

מקלט mysql מתחבר כברירת מחדל לשרת MySQL מקומי באמצעות שקע Unix ואימות Unix בתור משתמש root.

הגדרת סוכן התפעול ל-MySQL

פועלים לפי המדריך בנושא הגדרת Ops Agent, מוסיפים את הרכיבים הנדרשים לאיסוף נתוני טלמטריה ממופעי MySQL ומפעילים מחדש את הסוכן.

הגדרה לדוגמה

הפקודות הבאות יוצרות את ההגדרה לאיסוף ולהעברה של נתוני טלמטריה עבור MySQL:

# Configures Ops Agent to collect telemetry from the app. You must restart the agent for the configuration to take effect.

set -e

# Check if the file exists
if [ ! -f /etc/google-cloud-ops-agent/config.yaml ]; then
  # Create the file if it doesn't exist.
  sudo mkdir -p /etc/google-cloud-ops-agent
  sudo touch /etc/google-cloud-ops-agent/config.yaml
fi

# Create a back up of the existing file so existing configurations are not lost.
sudo cp /etc/google-cloud-ops-agent/config.yaml /etc/google-cloud-ops-agent/config.yaml.bak

# Configure the Ops Agent.
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
metrics:
  receivers:
    mysql:
      type: mysql
      username: root
      password: Ss123%321
      # To use the googlesecretmanager provider to replace plaintext passwords, refer to the example below.
      # password: ${googlesecretmanager:projects/<project-id>/secrets/<secret-id>/versions/<version-id>}
  service:
    pipelines:
      mysql:
        receivers:
        - mysql
logging:
  receivers:
    mysql_error:
      type: mysql_error
    mysql_general:
      type: mysql_general
    mysql_slow:
      type: mysql_slow
  service:
    pipelines:
      mysql:
        receivers:
          - mysql_error
          - mysql_general
          - mysql_slow
EOF

כדי שהשינויים האלה ייכנסו לתוקף, צריך להפעיל מחדש את Ops Agent:

Linux

  1. כדי להפעיל מחדש את הסוכן, מריצים את הפקודה הבאה במופע:
    sudo systemctl restart google-cloud-ops-agent
    
  2. כדי לוודא שהסוכן הופעל מחדש, מריצים את הפקודה הבאה ומוודאים שהרכיבים Metrics Agent ו-Logging Agent הופעלו:
    sudo systemctl status "google-cloud-ops-agent*"
    

Windows

  1. מתחברים למופע באמצעות RDP או כלי דומה ומתחברים ל-Windows.
  2. פותחים טרמינל ב-PowerShell עם הרשאות אדמין על ידי לחיצה ימנית על סמל PowerShell ובחירה באפשרות הפעלה כמנהל מערכת.
  3. כדי להפעיל מחדש את הסוכן, מריצים את פקודת PowerShell הבאה:
    Restart-Service google-cloud-ops-agent -Force
    
  4. כדי לוודא שהסוכן הופעל מחדש, מריצים את הפקודה הבאה ומוודאים שהרכיבים Metrics Agent ו-Logging Agent הופעלו:
    Get-Service google-cloud-ops-agent*
    

הגדרת איסוף יומנים

כדי להטמיע יומנים מ-MySQL, צריך ליצור מקלט ליומנים ש-MySQL מייצר, ואז ליצור צינור למקלט החדש.

כדי להגדיר מקלט ליומני mysql_error, מציינים את השדות הבאים:

שדה ברירת מחדל תיאור
exclude_paths רשימה של תבניות של נתיבים במערכת הקבצים שצריך להחריג מהקבוצה שתואמת ל-include_paths.
include_paths [/var/log/mysqld.log, /var/log/mysql/mysqld.log, /var/log/mysql/error.log] רשימה של נתיבי מערכת קבצים לקריאה על ידי מעקב אחרי כל קובץ. אפשר להשתמש בתו כללי לחיפוש (*) בנתיבים. לדוגמה, /var/log/mysql/*.log.
record_log_file_path false אם הערך הוא true, הנתיב לקובץ הספציפי שממנו נרשם רשומת היומן מופיע ברשומת היומן של הפלט כערך של התווית agent.googleapis.com/log_file_path. כשמשתמשים בתו כללי, מתועד רק הנתיב של הקובץ שממנו התקבל הרשומה.
type הערך חייב להיות mysql_error.
wildcard_refresh_interval 60s המרווח שבו נתיבי קבצים עם תו כללי ב-include_paths מתרעננים. הערך הוא משך זמן, לדוגמה 30s או 2m. הנכס הזה יכול להיות שימושי כשקצב העברת הנתונים של הרישום ביומן גבוה, והקבצים ביומן מתחלפים מהר יותר מהמרווח שמוגדר כברירת מחדל.

כדי להגדיר מקלט ליומני mysql_general, מציינים את השדות הבאים:

שדה ברירת מחדל תיאור
exclude_paths רשימה של תבניות של נתיבים במערכת הקבצים שצריך להחריג מהקבוצה שתואמת ל-include_paths.
include_paths [/var/lib/mysql/${HOSTNAME}.log] רשימה של נתיבי מערכת קבצים לקריאה על ידי מעקב אחרי כל קובץ. אפשר להשתמש בתו כללי לחיפוש (*) בנתיבים.
record_log_file_path false אם הערך הוא true, הנתיב לקובץ הספציפי שממנו נרשם רשומת היומן מופיע ברשומת היומן של הפלט כערך של התווית agent.googleapis.com/log_file_path. כשמשתמשים בתו כללי, מתועד רק הנתיב של הקובץ שממנו התקבל הרשומה.
type הערך חייב להיות mysql_general.
wildcard_refresh_interval 60s המרווח שבו נתיבי קבצים עם תו כללי ב-include_paths מתרעננים. הערך הוא משך זמן, לדוגמה 30s או 2m. הנכס הזה יכול להיות שימושי כשקצב העברת הנתונים של הרישום ביומן גבוה, והקבצים ביומן מתחלפים מהר יותר מהמרווח שמוגדר כברירת מחדל.

כדי להגדיר מקלט ליומני mysql_slow, מציינים את השדות הבאים:

שדה ברירת מחדל תיאור
exclude_paths רשימה של תבניות של נתיבים במערכת הקבצים שצריך להחריג מהקבוצה שתואמת ל-include_paths.
include_paths [/var/lib/mysql/${HOSTNAME}-slow.log] רשימה של נתיבי מערכת קבצים לקריאה על ידי מעקב אחרי כל קובץ. אפשר להשתמש בתו כללי לחיפוש (*) בנתיבים.
record_log_file_path false אם הערך הוא true, הנתיב לקובץ הספציפי שממנו נרשם רשומת היומן מופיע ברשומת היומן של הפלט כערך של התווית agent.googleapis.com/log_file_path. כשמשתמשים בתו כללי, מתועד רק הנתיב של הקובץ שממנו התקבל הרשומה.
type הערך חייב להיות mysql_slow.
wildcard_refresh_interval 60s המרווח שבו נתיבי קבצים עם תו כללי ב-include_paths מתרעננים. הערך הוא משך זמן, לדוגמה 30s או 2m. הנכס הזה יכול להיות שימושי כשקצב העברת הנתונים של הרישום ביומן גבוה, והקבצים ביומן מתחלפים מהר יותר מהמרווח שמוגדר כברירת מחדל.

מה נרשם ביומן

הערך של logName נגזר ממזהי המקלט שצוינו בהגדרה. אלה השדות המפורטים בתוך LogEntry:

יומני mysql_error מכילים את השדות הבאים ב-LogEntry:

שדה סוג תיאור
jsonPayload.errorCode מחרוזת קוד השגיאה של MySQL שמשויך ליומן
jsonPayload.level מחרוזת רמת רשומת היומן
jsonPayload.message מחרוזת הודעה ביומן
jsonPayload.subsystem מחרוזת מערכת המשנה של MySQL שממנה נוצר היומן
jsonPayload.tid מספר מזהה השרשור שממנו נוצר היומן
severity מחרוזת (LogSeverity) רמת רשומת היומן (מתורגמת).

יומני mysql_general מכילים את השדות הבאים ב-LogEntry:

שדה סוג תיאור
jsonPayload.command מחרוזת סוג הפעולה במסד הנתונים שנרשמת ביומן
jsonPayload.message מחרוזת יומן של פעולת מסד הנתונים
jsonPayload.tid מספר מזהה השרשור שממנו נוצר היומן
severity מחרוזת (LogSeverity) רמת רשומת היומן (מתורגמת).

יומני mysql_slow מכילים את השדות הבאים ב-LogEntry:

שדה סוג תיאור
jsonPayload.bytesReceived  * מספר מספר הבייטים שהתקבלו מכל הלקוחות
jsonPayload.bytesSent  * מספר מספר הבייטים שנשלחו לכל הלקוחות
jsonPayload.createdTmpDiskTables  * מספר מספר הטבלאות הזמניות הפנימיות שנוצרו על ידי השרת בדיסק
jsonPayload.createdTmpTables  * מספר מספר הטבלאות הזמניות הפנימיות שנוצרו על ידי השרת
jsonPayload.database מחרוזת מסד הנתונים שבו בוצעה השאילתה
jsonPayload.endTime  * מחרוזת שעת הסיום של הרצת הדוח
jsonPayload.errorNumber  * מספר מספר השגיאה של ההצהרה, או 0 אם לא התרחשה שגיאה
jsonPayload.host מחרוזת המארח של מופע מסד הנתונים
jsonPayload.ipAddress מחרוזת הכתובת של מופע מסד הנתונים
jsonPayload.killed  * מספר אם ההצהרה הסתיימה, מספר השגיאה שמציין למה, או 0 אם ההצהרה הסתיימה כרגיל
jsonPayload.level מחרוזת רמת רשומת היומן
jsonPayload.lockTime מספר הזמן שנדרש לנעילת קבצים בשניות
jsonPayload.message מחרוזת הטקסט המלא של השאילתה
jsonPayload.queryTime מספר זמן הביצוע של ההצהרה בשניות
jsonPayload.readFirst  * מספר מספר הפעמים שהכניסה הראשונה באינדקס נקראה
jsonPayload.readKey  * מספר מספר הבקשות לקריאת שורה על סמך מפתח
jsonPayload.readLast  * מספר מספר הבקשות לקריאת המפתח האחרון באינדקס
jsonPayload.readNext  * מספר מספר הבקשות לקריאת השורה הבאה לפי סדר המפתחות
jsonPayload.readPrev  * מספר מספר הבקשות לקריאת השורה הקודמת לפי סדר המפתחות
jsonPayload.readRnd  * מספר מספר הבקשות לקריאת שורה על סמך מיקום קבוע
jsonPayload.readRndNext  * מספר מספר הבקשות לקריאת השורה הבאה בקובץ הנתונים
jsonPayload.rowsExamined מספר מספר השורות שנבדקו בשכבת השרת
jsonPayload.rowsSent מספר מספר השורות שנשלחו ללקוח
jsonPayload.sortMergePasses  * מספר מספר המעברים של המיזוג שאלגוריתם המיון נאלץ לבצע
jsonPayload.sortRangeCount  * מספר מספר המיון שבוצע באמצעות טווחים
jsonPayload.sortRows  * מספר מספר השורות הממוינות
jsonPayload.sortScanCount  * מספר מספר המיון שבוצע על ידי סריקת הטבלה
jsonPayload.startTime  * מחרוזת שעת ההתחלה של ביצוע ההצהרה
jsonPayload.tid מספר מזהה השרשור שבו השאילתה נרשמה ביומן
jsonPayload.user מחרוזת המשתמש שהריץ את השאילתה
severity מחרוזת (LogSeverity) רמת רשומת היומן (מתורגמת).

 השדות האלה מסופקים רק אם משתנה המערכת log_slow_extra מוגדר לערך 'ON'. המשתנה הזה זמין מגרסה MySQL 8.0.14.

מידע על השדות האלה מופיע במסמכי העזרה של MySQL.

הגדרת איסוף מדדים

כדי להטמיע מדדים מ-MySQL, צריך ליצור מקלט למדדים ש-MySQL מייצרת, ואז ליצור צינור למקלט החדש.

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

כדי להגדיר נמען למדדים של mysql, צריך לציין את השדות הבאים:

שדה ברירת מחדל תיאור
collection_interval 60s ערך של משך זמן, כמו 30s או 5m.
endpoint /var/run/mysqld/mysqld.sock הנתיב של hostname:port או של שקע Unix שמתחיל ב-/ ומשמש לחיבור לשרת MySQL.
password הסיסמה שמשמשת לחיבור לשרת.
type הערך חייב להיות mysql.
username root שם המשתמש שמשמש לחיבור לשרת.

מה נבדק

בטבלה הבאה מפורטים המדדים שסוכן התפעול אוסף ממופע MySQL.

סוג המדד 
סוג, סוג
משאבים במעקב
תוויות
workload.googleapis.com/mysql.buffer_pool_data_pages
GAUGEINT64
gce_instance
status
workload.googleapis.com/mysql.buffer_pool_limit
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.buffer_pool_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.buffer_pool_page_flushes
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/mysql.buffer_pool_pages
GAUGEDOUBLE
gce_instance
kind
workload.googleapis.com/mysql.buffer_pool_size
GAUGEDOUBLE
gce_instance
kind
workload.googleapis.com/mysql.commands
CUMULATIVEINT64
gce_instance
command
workload.googleapis.com/mysql.double_writes
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.handlers
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.locks
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.log_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.page_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.replica.sql_delay
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.replica.time_behind_source
GAUGEINT64
gce_instance
 
workload.googleapis.com/mysql.row_locks
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.row_operations
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/mysql.sorts
CUMULATIVEINT64
gce_instance
kind
workload.googleapis.com/mysql.threads
GAUGEDOUBLE
gce_instance
kind

אימות ההגדרה

בקטע הזה מוסבר איך לוודא שהגדרתם נכון את מקלט MySQL. יכול להיות שיעברו דקה או שתיים עד שהסוכן של Ops יתחיל לאסוף נתוני טלמטריה.

כדי לוודא שיומני MySQL נשלחים אל Cloud Logging, מבצעים את הפעולות הבאות:

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

    כניסה אל Logs Explorer

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

  2. מזינים את השאילתה הבאה בעורך ולוחצים על Run query:
    resource.type="gce_instance"
    (log_id("mysql_error") OR log_id("mysql_general") OR log_id("mysql_slow"))
    

כדי לוודא שמדדי MySQL נשלחים אל Cloud Monitoring, מבצעים את הפעולות הבאות:

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

    כניסה אל Metrics Explorer

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

  2. בסרגל הכלים של חלונית הכלי ליצירת שאילתות, לוחצים על הלחצן ששמו הוא  MQL או  PromQL.
  3. מוודאים שהאפשרות PromQL נבחרה במתג שפה. המתג לשפה נמצא באותו סרגל כלים שבו אפשר לעצב את השאילתה.
  4. מזינים את השאילתה הבאה בעורך ולוחצים על Run query:
    {"workload.googleapis.com/mysql.threads", monitored_resource="gce_instance"}
    

צפייה בלוח הבקרה

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

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

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

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

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

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

  2. לוחצים על הכרטיסייה רשימת לוחות בקרה ואז בוחרים בקטגוריה שילובים.
  3. לוחצים על השם של מרכז הבקרה שרוצים להציג.

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

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

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

    עוברים אל Integrations

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

  2. לוחצים על המסנן Compute Engine של פלטפורמת הפריסה.
  3. מאתרים את הערך של MySQL ולוחצים על הצגת פרטים.
  4. לוחצים על הכרטיסייה מרכזי בקרה כדי לראות תצוגה מקדימה סטטית. אם מרכז הבקרה מותקן, אפשר ללחוץ על View dashboard (הצגת מרכז הבקרה) כדי לעבור אליו.

מידע נוסף על מרכזי בקרה ב-Cloud Monitoring זמין במאמר בנושא מרכזי בקרה וטבלאות.

מידע נוסף על השימוש בדף Integrations (שילובים) זמין במאמר ניהול שילובים.

התקנה של כללי מדיניות התראות

מדיניות התראות מורה ל-Cloud Monitoring לשלוח לכם התראה כשמתרחשים תנאים מסוימים. השילוב של MySQL כולל מדיניות התראות אחת או יותר שתוכלו להשתמש בהן. אפשר לראות ולהתקין את מדיניות ההתראות הזו בדף שילובים ב-Monitoring.

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

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

    עוברים אל Integrations

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

  2. מאתרים את הרשומה של MySQL ולוחצים על הצגת פרטים.
  3. לוחצים על הכרטיסייה התראות. בכרטיסייה הזו מופיעים תיאורים של מדיניות ההתראות הזמינה וממשק להתקנתן.
  4. התקנה של כללי מדיניות התראות. כדי שמדיניות ההתראות תדע לאן לשלוח התראות על הפעלה של התראה, היא צריכה לקבל מכם מידע להתקנה. כדי להתקין מדיניות התראות:
    1. ברשימת מדיניות ההתראות הזמינה, בוחרים את אלה שרוצים להתקין.
    2. בקטע הגדרת התראות, בוחרים ערוץ התראות אחד או יותר. יש לכם אפשרות להשבית את השימוש בערוצי התראות, אבל אם תעשו את זה, מדיניות ההתראות שלכם תופעל ללא התראות. אפשר לבדוק את הסטטוס שלהם בדף 'מעקב', אבל לא תקבלו התראות.

      מידע נוסף על ערוצי התראות זמין במאמר בנושא ניהול ערוצי התראות.

    3. לוחצים על יצירת מדיניות.

למידע נוסף על מדיניות התראות ב-Cloud Monitoring, אפשר לעיין במאמר מבוא להתראות.

מידע נוסף על השימוש בדף Integrations (שילובים) זמין במאמר ניהול שילובים.

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

בסרטון Install the Ops Agent to troubleshoot third-party applications מוסבר איך להשתמש ב-Ansible כדי להתקין את סוכן התפעול, להגדיר אפליקציית צד שלישי ולהתקין לוח בקרה לדוגמה.