Cassandra

Cassandra ist ein skalierbares und fehlertolerantes NoSQL-Datenbanksystem. Weitere Informationen finden Sie unter http://cassandra.apache.org/.

Sie können einen Empfänger für Ops Agent konfigurieren, um Telemetrie von der Java Virtual Machine (JVM) eines Cassandra-Knotens über Java Management Extensions (JMX) abzurufen.

Vorbereitung

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

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_metrics:
      type: cassandra
      endpoint: localhost:7199
      collection_interval: 60s
  service:
    pipelines:
      cassandra_pipeline:
        receivers:
          - cassandra_metrics
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.
wildcard_refresh_interval 60s Das Intervall, in dem Platzhalterdateipfade in include_paths aktualisiert werden. Wird als Zeitdauer angegeben, z. B. 30s, 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.
wildcard_refresh_interval 60s Das Intervall, in dem Platzhalterdateipfade in include_paths aktualisiert werden. Wird als Zeitdauer angegeben, z. B. 30s, 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.
wildcard_refresh_interval 60s Das Intervall, in dem Platzhalterdateipfade in include_paths aktualisiert werden. Wird als Zeitdauer angegeben, z. B. 30s, 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

Leere oder fehlende Felder werden nicht im Logeintrag angezeigt.

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
status
operation
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.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.client.request.range_slice.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.range_slice.timeout.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.client.request.range_slice.unavailable.count
CUMULATIVEINT64
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.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.timeout.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.client.request.read.unavailable.count
CUMULATIVEINT64
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.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.latency.max
GAUGEDOUBLE
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.timeout.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.client.request.write.unavailable.count
CUMULATIVEINT64
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
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.total_hints.count
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/cassandra.storage.total_hints.in_progress.count
CUMULATIVEINT64
gce_instance
 

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 Logs und Messwerte erfasst.

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.