Einführung in BigQuery-Monitoring

Monitoring und Logging sind für die Ausführung zuverlässiger Anwendungen in der Cloud entscheidend. BigQuery-Arbeitslasten sind keine Ausnahme, insbesondere wenn Ihre Arbeitslast ein hohes Volumen hat oder geschäftskritisch ist. Dieses Dokument bietet eine allgemeine Übersicht über die Monitoring-Daten, die für BigQuery verfügbar sind.

Monitoring- und Logging-Quellen können je nach Häufigkeit der Stichprobenerfassung oder Aggregation variieren. Beispielsweise können Informationsschemadaten mit einem höheren Detaillierungsgrad als die Messwertdaten zum Cloud-Monitoring verfügbar sein.

Daher besteht die Möglichkeit, dass Diagramme mit Messwerten von niedrigerem Detaillierungsgrad sich von vergleichbaren Informationsschemastatistiken unterscheiden. Die Aggregation glättet die Abweichungen in der Regel. Prüfen Sie beim Entwerfen einer Monitoring-Lösung die Antwortzeit für die Anfrage, die Präzision und die Genauigkeit der Messwerte im Hinblick auf Ihre Anforderungen.

Messwerte

Messwerte sind numerische Werte, die in regelmäßigen Abständen erfasst und für die Analyse verfügbar gemacht werden. Sie können Messwerte für Folgendes verwenden:

  • Diagramme und Dashboards erstellen
  • Benachrichtigungen über Bedingungen oder Situationen auslösen, die ein menschliches Eingreifen erfordern
  • Bisherige Leistung analysieren

Im Fall von BigQuery gehören zu den verfügbaren Messwerten die Anzahl der ausgeführten Jobs, die Anzahl der während einer Abfrage gescannten Byte sowie die Verteilung der Abfragezeiten. Die Messwerte für eine Abfrage sind erst verfügbar, wenn die Abfrage erfolgreich ausgeführt wurde. Es kann bis zu sieben Minuten dauern, bis die Werte angezeigt werden. Messwerte für fehlgeschlagene Abfragen werden nicht angezeigt. Eine vollständige Liste der verfügbaren Messwerte, einschließlich ihrer Samplingraten, Sichtbarkeit und Einschränkungen, finden Sie in bigquery unter Google Cloud-Messwerte.

Mit Cloud Monitoring können Sie BigQuery-Messwerte aufrufen und Diagramme und Benachrichtigungen erstellen. Jeder Messwert hat einen Ressourcentyp, entweder bigquery_dataset, bigquery_project oder global, sowie einen Satz von Labels. Verwenden Sie diese Informationen, um Abfragen in der Monitoring Query Language (MQL) zu erstellen. Mithilfe der Labels können Sie jeden Messwert gruppieren oder filtern.

Verwenden Sie beispielsweise die folgende MQL-Anweisung, die nach priority gleich interactive filtert, um die Anzahl der interaktiven Abfragen im laufenden Betrieb darzustellen:

fetch global
| metric 'bigquery.googleapis.com/query/count'
| filter metric.priority = 'interactive'

Das nächste Beispiel ruft die Anzahl der aktiven Ladejobs ab, gruppiert in 10-Minuten-Intervallen:

fetch bigquery_project
| metric 'bigquery.googleapis.com/job/num_in_flight'
| filter metric.job_type = 'load'
| group_by 10m

Weitere Informationen finden Sie unter Diagramme und Benachrichtigungen für BigQuery erstellen.

Logs

Logs sind Textdatensätze, die als Reaktion auf bestimmte Ereignisse oder Aktionen generiert werden. BigQuery erstellt Logeinträge für Aktionen wie das Erstellen oder Löschen einer Tabelle, das Erwerben von Slots oder das Ausführen eines Ladejobs. Weitere Informationen zum Logging in Google Cloud finden Sie unter Cloud Logging.

Ein Log ist eine Sammlung mit Logeinträgen, für die nur Anfügungen zulässig sind. Sie könnten beispielsweise eigene Logeinträge in ein Log namens projects/PROJECT_ID/logs/my-test-log schreiben. Viele Google Cloud-Dienste, einschließlich BigQuery, erstellen einen Logtyp namens Audit-Logs. In diesen Logs wird Folgendes aufgezeichnet:

  • Administratoraktivität, z. B. das Erstellen oder Ändern von Ressourcen
  • Datenzugriff, z. B. das Lesen der von Nutzern bereitgestellten Daten aus einer Ressource
  • Systemereignisse, die nicht durch Nutzeraktionen, sondern von Google-Systemen generiert werden

Audit-Logs werden in einem strukturierten JSON-Format geschrieben. Der Basisdatentyp für Google Cloud-Logeinträge ist die LogEntry-Struktur. Diese Struktur enthält den Namen des Logs, die Ressource, die den Logeintrag generiert hat, den Zeitstempel (UTC) und weitere grundlegende Informationen.

Die Details des protokollierten Ereignisses befinden sich in einem Unterfeld, dem sogenannten Nutzlastfeld. Bei Audit-Logs hat das Nutzlastfeld den Namen protoPayload. Der Wert dieses Felds ist eine AuditLog-Struktur, angegeben durch den Wert des protoPayload.@type-Felds, das auf type.googleapis.com/google.cloud.audit.AuditLog gesetzt ist.

Bei Vorgängen für Datasets, Tabellen und Jobs schreibt BigQuery derzeit Audit-Logs in zwei verschiedenen Formaten, obwohl beide den Basistyp AuditLog haben.

Im älteren Format gilt:

  • Das Feld resource.type ist bigquery_resource.
  • Details zum Vorgang werden in das Feld protoPayload.serviceData geschrieben. Der Wert dieses Felds ist eine AuditData-Struktur.

Im neueren Format gilt:

  • Das Feld resource.type ist entweder bigquery_project oder bigquery_dataset. Die Ressource bigquery_project enthält Logeinträge zu Jobs, während die Ressource bigquery_dataset Logeinträge zum Speicher enthält.
  • Details zum Vorgang werden in das Feld protoPayload.metadata geschrieben. Der Wert dieses Felds ist eine BigQueryAuditMetadata-Struktur.

Wir empfehlen die Nutzung von Logs im neueren Format. Weitere Informationen finden Sie in der Migrationsanleitung für Audit-Logs.

Hier ist ein abgekürztes Beispiel für einen Logeintrag, der einen fehlgeschlagenen Vorgang anzeigt:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset my-project:my-dataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

Bei Vorgängen für BigQuery Reservations ist protoPayload eine AuditLog-Struktur und die Felder protoPayload.request und protoPayload.response enthalten weitere Informationen. Die Felddefinitionen finden Sie unter BigQuery Reservation API. Weitere Informationen finden Sie unter BigQuery Reservations überwachen.

INFORMATION_SCHEMA Ansichten

INFORMATION_SCHEMA-Ansichten sind eine weitere Informationsquelle in BigQuery, die Sie in Verbindung mit Messwerten und Logs verwenden können.

Diese Ansichten enthalten Metadaten zu Jobs, Datasets, Tabellen und anderen BigQuery-Entitäten. So können Sie beispielsweise Echtzeitmetadaten darüber abrufen, welche BigQuery-Jobs über einen bestimmten Zeitraum ausgeführt wurden, und dann die Ergebnisse nach Projekt, Nutzer, referenzierten Tabellen und anderen Dimensionen gruppieren oder filtern.

Sie können diese Informationen nutzen, um eine detailliertere Analyse Ihrer BigQuery-Arbeitslasten durchzuführen, und erhalten Antworten auf Fragen wie:

  • Wie hoch war die durchschnittliche Slot-Auslastung für alle Abfragen in den letzten sieben Tagen für ein bestimmtes Projekt?
  • Welche Nutzer haben einen Batch-Ladejob für ein bestimmtes Projekt gesendet?
  • Welche Streamingfehler sind in den letzten 30 Minuten aufgetreten, gruppiert nach Fehlercode?

Insbesondere unter Jobmetadaten, Streamingmetadaten und Reservierungsmetadaten finden Sie Informationen zur Leistung Ihrer BigQuery-Arbeitslasten.

Sie finden Beispiel-INFORMATION_SCHEMA-Abfragen auf GitHub, die die Slot- und Reservierungsnutzung einer Organisation, die Jobausführung und die Jobfehler zeigen. Die folgende Abfrage enthält beispielsweise eine Liste von Abfragen, die entweder ausstehend oder aktuell ausgeführt werden. Diese Abfragen sind nach dem Zeitraum sortiert, seit sie in der Region us erstellt wurden:

SELECT
    creation_time,
    project_id,
    user_email,
    job_id,
    job_type,
    priority,
    state,
    TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), start_time,second) as running_time_sec
 FROM
   `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
 WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    AND state != "DONE"
ORDER BY
    running_time_sec DESC

Weitere Informationen finden Sie unter Dashboards zur Behebung von Leistungsproblemen in BigQuery.

Wenn Sie Slot-Reservierungen haben, können Sie nicht nur Ihre eigene Abfrage erstellen, sondern auch BigQuery-Administratorressourcendiagramme verwenden, um Diagramme anzuzeigen, die die Slot-Nutzung, die Gleichzeitigkeit von Jobs und die Ausführungszeit von Jobs anzeigen. Weitere Informationen finden Sie unter Einführung in BigQuery-Administrator-Ressourcendiagramme (Vorschau).

Nächste Schritte