Apache Cassandra

Die Apache Cassandra-Integration erfasst Anfrage-, Aufgaben- und Speichermesswerte, die die Auslastung einer Instanz hervorheben. Optional kann die Integration auch allgemeine JVM-Messwerte in Bezug auf Speicher und automatischer Speicherbereinigung erfassen. Durch die Integration werden auch System-, Debug- und automatische Speicherlogs erfasst. Diese Logs werden in eine JSON-Nutzlast geparst, die Felder für die Nachricht, die Java-Klasse und die Zeilennummer enthält.

Weitere Informationen zu Cassandra finden Sie unter http://cassandra.apache.org/.

Vorbereitung

Zum Erfassen und Aufnehmen von Cassandra-Logs und -Messwerten müssen Sie Ops-Agent Version 2.6.0 oder höher installieren.

Dieser Empfänger unterstützt die Apache Cassandra-Versionen 3.11 und 4.0.

Cassandra-Instanz konfigurieren

Wenn Sie einen JMX-Endpunkt verfügbar machen möchten, müssen Sie beim Starten der JVM das Systemattribut com.sun.management.jmxremote.port festlegen. Außerdem empfehlen wir, das Systemattribut com.sun.management.jmxremote.rmi.port auf denselben Port festzulegen. Wenn Sie einen JMX-Endpunkt remote verfügbar machen möchten, müssen Sie auch das Systemattribut java.rmi.server.hostname festlegen.

Standardmäßig werden diese Attribute in der Datei cassandra-env.sh einer Cassandra-Bereitstellung festgelegt.

Wenn Sie Systemattribute mithilfe von Befehlszeilenargumenten festlegen möchten, stellen Sie beim Starten der JVM dem Attributnamen -D voran. Wenn Sie beispielsweise com.sun.management.jmxremote.port auf den Port 7199 festlegen möchten, geben Sie beim Starten der JVM Folgendes an:

-Dcom.sun.management.jmxremote.port=7199

Ops Agent für Cassandra konfigurieren

Fügen Sie die erforderlichen Elemente zum Erfassen von Logs und Messwerten aus den Cassandra-Instanzen gemäß der Anleitung unter Ops-Agent konfigurieren hinzu und starten Sie den Agent neu.

Konfigurationsbeispiel

Folgender Befehl erstellt eine Konfigurationsdatei zum Erfassen und Aufnehmen von Logs und Messwerten für Cassandra, die den Ops-Agent unter Linux neu startet.

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
logging:
  receivers:
    cassandra_system:
      type: cassandra_system
    cassandra_debug:
      type: cassandra_debug
    cassandra_gc:
      type: cassandra_gc
  service:
    pipelines:
      apache:
        receivers:
          - cassandra_system
          - cassandra_debug
          - cassandra_gc
metrics:
  receivers:
    cassandra:
      type: cassandra
      endpoint: localhost:7199
  service:
    pipelines:
      cassandra:
        receivers:
          - cassandra
EOF
sudo service google-cloud-ops-agent restart

In diesem Beispiel wurden die Systemattribute com.sun.management.jmxremote.port und com.sun.management.jmxremote.rmi.port auf 7199 und das Systemattribut java.rmi.server.hostname auf 127.0.0.1 festgelegt. Weitere Informationen finden Sie unter Messwerterfassung konfigurieren.

Logerfassung konfigurieren

Um Logs von Cassandra aufzunehmen, müssen Sie Empfänger für die von Cassandra erzeugten Logs erstellen und dann eine Pipeline für die neuen Empfänger erstellen.

Geben Sie die folgenden Felder an, um einen Empfänger für Ihre cassandra_system-Logs zu konfigurieren:

Feld Standard Beschreibung
type Der Wert muss cassandra_system betragen.
include_paths [/var/log/cassandra/system*.log] Eine Liste mit Dateisystempfaden, die durch Tailing jeder Datei gelesen werden sollen. In den Pfaden kann ein Platzhalter (*) verwendet werden. Beispiel: /var/log/cassandra/system*.log.
exclude_paths [] Eine Liste von Dateisystempfadmustern, die aus dem mit include_paths übereinstimmenden Satz ausgeschlossen werden sollen.
record_log_file_path false Wenn true festgelegt ist, wird der Pfad zu der spezifischen Datei, aus der der Logdatensatz abgerufen wurde, im Ausgabelogeintrag als Wert des Labels agent.googleapis.com/log_file_path angezeigt. Bei Verwendung eines Platzhalters wird nur der Pfad der Datei aufgezeichnet, aus der der Eintrag abgerufen wurde.
wildcard_refresh_interval 60s Das Intervall, in dem Platzhalterdateipfade in include_paths aktualisiert werden. Wird als Zeitdauer angegeben, z. B. 30s oder 2m. Dieses Attribut kann bei hohen Logging-Durchsätzen nützlich sein, wenn Logdateien schneller als das Standardintervall rotiert werden.


Geben Sie die folgenden Felder an, um einen Empfänger für Ihre cassandra_debug-Logs zu konfigurieren:

Feld Standard Beschreibung
type Der Wert muss cassandra_debug betragen.
include_paths [/var/log/cassandra/debug*.log] Eine Liste mit Dateisystempfaden, die durch Tailing jeder Datei gelesen werden sollen. In den Pfaden kann ein Platzhalter (*) verwendet werden. Beispiel: /var/log/cassandra/system*.log.
exclude_paths [] Eine Liste von Dateisystempfadmustern, die aus dem mit include_paths übereinstimmenden Satz ausgeschlossen werden sollen.
record_log_file_path false Wenn true festgelegt ist, wird der Pfad zu der spezifischen Datei, aus der der Logdatensatz abgerufen wurde, im Ausgabelogeintrag als Wert des Labels agent.googleapis.com/log_file_path angezeigt. Bei Verwendung eines Platzhalters wird nur der Pfad der Datei aufgezeichnet, aus der der Eintrag abgerufen wurde.
wildcard_refresh_interval 60s Das Intervall, in dem Platzhalterdateipfade in include_paths aktualisiert werden. Wird als Zeitdauer angegeben, z. B. 30s oder 2m. Dieses Attribut kann bei hohen Logging-Durchsätzen nützlich sein, wenn Logdateien schneller als das Standardintervall rotiert werden.


Geben Sie die folgenden Felder an, um einen Empfänger für Ihre cassandra_gc-Logs zu konfigurieren:

Feld Standard Beschreibung
type Der Wert muss cassandra_gc betragen.
include_paths [/var/log/cassandra/gc.log.*.current] Eine Liste mit Dateisystempfaden, die durch Tailing jeder Datei gelesen werden sollen. In den Pfaden kann ein Platzhalter (*) verwendet werden. Beispiel: /var/log/cassandra/system*.log.
exclude_paths [] Eine Liste von Dateisystempfadmustern, die aus dem mit include_paths übereinstimmenden Satz ausgeschlossen werden sollen.
record_log_file_path false Wenn true festgelegt ist, wird der Pfad zu der spezifischen Datei, aus der der Logdatensatz abgerufen wurde, im Ausgabelogeintrag als Wert des Labels agent.googleapis.com/log_file_path angezeigt. Bei Verwendung eines Platzhalters wird nur der Pfad der Datei aufgezeichnet, aus der der Eintrag abgerufen wurde.
wildcard_refresh_interval 60s Das Intervall, in dem Platzhalterdateipfade in include_paths aktualisiert werden. Wird als Zeitdauer angegeben, z. B. 30s oder 2m. Dieses Attribut kann bei hohen Logging-Durchsätzen nützlich sein, wenn Logdateien schneller als das Standardintervall rotiert werden.

Was wird protokolliert?

Der logName der Logs cassandra_system, cassandra_debug und cassandra_gc werden von den Empfänger-IDs abgeleitet, die in der Konfiguration angegeben sind. Detaillierte Felder im LogEntry sind:

cassandra_system, cassandra_debug
Diese Logs enthalten die folgenden Felder im LogEntry:

Feld Typ Beschreibung
jsonPayload.level String Logeintragsebene
jsonPayload.module String Modul von Cassandra, von dem das Log stammt
jsonPayload.javaClass String Java-Klasse, von der das Log stammt
jsonPayload.lineNumber Zahl Zeilennummer der Quelldatei, von der das Log stammt
jsonPayload.message String Lognachricht, einschließlich eines detaillierten Stacktrace, sofern angegeben
severity String (LogSeverity) Ebene des Logeintrags (übersetzt)
timestamp String (Timestamp) Zeitpunkt des Eingangs der Anfrage

Logeinträge enthalten keine leeren oder fehlenden Felder.

cassandra_gc
Diese Logs enthalten die folgenden Felder im LogEntry:

Feld Typ Beschreibung
jsonPayload.uptime Zahl Anzahl der Sekunden, für die die JVM aktiv war
jsonPayload.timeStopped Zahl Anzahl der Sekunden, für die die JVM für die automatische Speicherbereinigung angehalten wurde
jsonPayload.timeStopping Zahl Anzahl der Sekunden, die die JVM brauchte, um Threads vor der automatischen Speicherbereinigung anzuhalten
jsonPayload.message String Log-Nachricht
timestamp String (Timestamp) Zeitpunkt, zu dem der Eintrag protokolliert wurde

Messwerterfassung konfigurieren

Um Messwerte von einem Cassandra-Knoten zu erfassen, müssen Sie einen Empfänger für Cassandra-Messwerte erstellen und dann eine Pipeline für ihn einrichten. Um einen Empfänger für Ihre Cassandra-Messwerte zu konfigurieren, geben Sie die folgenden Felder an:

Feld Standard Beschreibung
type Der Wert muss cassandra betragen.
endpoint localhost:7199 Die JMX-Dienst-URL oder der Host und Port, die zum Erstellen der Dienst-URL verwendet werden. Dieser Wert muss das Format service:jmx:<protocol>:<sap> oder host:port haben. Werte im Format host:port werden für das Erstellen der Dienst-URL service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi verwendet.
collect_jvm_metrics true Konfiguriert den Empfänger so, dass auch die unterstützten JVM-Messwerte erfasst werden.
username Der konfigurierte Nutzername, wenn JMX für eine erforderliche Authentifizierung konfiguriert ist.
password Das konfigurierte Passwort, wenn JMX für eine erforderliche Authentifizierung konfiguriert ist.
collection_interval 60s Ein Wert für time.Duration, wie z. B. 30s oder 5m.

Was wird überwacht?

Die folgende Tabelle enthält die Liste der Messwerte, die der Ops-Agent aus der Cassandra-Instanz erfasst.

Messwerttyp
Art, Typ
Überwachte Ressourcen
Label
workload.googleapis.com/cassandra.client.request.count
CUMULATIVEINT64
gce_instance
operation
workload.googleapis.com/cassandra.client.request.error.count
CUMULATIVEINT64
gce_instance
operation
status
workload.googleapis.com/cassandra.client.request.range_slice.latency.50p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.range_slice.latency.99p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.range_slice.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.latency.50p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.latency.99p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.latency.50p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.latency.99p
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.compaction.tasks.completed
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.compaction.tasks.pending
GAUGEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.load.count
GAUGEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.total_hints.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.total_hints.in_progress.count
GAUGEINT64
gce_instance
 

Beispieldashboard

Sie können die Messwerte dieser Integration mithilfe eines Cloud Monitoring-Beispiel-Dashboards ansehen. Führen Sie die Schritte unter Beispiel-Dashboards installieren aus, um das Cassandra GCE-Übersichts-Dashboard aus der Beispielbibliothek zu importieren und Diagramme aufzurufen, die Ihre Cassandra-Messwerte anzeigen.

Konfiguration prüfen

Prüfen Sie mit dem Log-Explorer und dem Metrics Explorer, ob Sie den Cassandra-Empfänger richtig konfiguriert haben. Es kann ein bis zwei Minuten dauern, bis der Ops-Agent beginnt, Logs und Messwerte zu erfassen.

Um zu prüfen, ob die Logs aufgenommen wurden, rufen Sie den Log-Explorer auf. Führen Sie dann die folgende Abfrage aus, um die Cassandra-Logs aufzurufen:

resource.type="gce_instance"
logName=("projects/PROJECT_ID/logs/cassandra_system" OR "projects/PROJECT_ID/logs/cassandra_debug" OR "projects/PROJECT_ID/logs/cassandra_gc")


Um zu prüfen, ob die Messwerte aufgenommen wurden, rufen Sie den Metrics Explorer auf und führen Sie die folgende Abfrage auf dem Tab MQL aus.

fetch gce_instance
| metric 'workload.googleapis.com/cassandra.client.request.count'
| align rate(1m)
| every 1m

Nächste Schritte

Eine Anleitung zur Installation von Ops-Agent mit Ansible zum Konfigurieren einer Drittanbieteranwendung und zum Installieren eines Beispieldashboards finden Sie im Video Ops-Agent installieren, um Fehler in Drittanbieteranwendungen zu beheben.