Cassandra

Cassandra é um sistema de banco de dados NoSQL escalonável e tolerante a falhas. Para mais informações, acesse http://cassandra.apache.org/.

É possível configurar um receptor para que o agente de operações recupere a telemetria de uma máquina virtual Java (JVM) de um nó do Cassandra com Java Management Extensions (JMX).

Pré-requisitos

Para coletar e ingerir registros e métricas do Cassandra, é preciso instalar o agente de operações na versão 2.6.0 ou mais recente.

Configurar a instância do Cassandra

Para expor um endpoint JMX, você precisa definir a propriedade do sistema com.sun.management.jmxremote.port ao iniciar a JVM. Também recomendamos configurar a propriedade do sistema com.sun.management.jmxremote.rmi.port para a mesma porta. Para expor um endpoint JMX remotamente, você também precisa definir a propriedade do sistema java.rmi.server.hostname.

Por padrão, essas propriedades são definidas em um arquivo cassandra-env.sh da implantação do Cassandra.

Para definir as propriedades do sistema usando argumentos de linha de comando, adicione -D ao nome da propriedade ao iniciar a JVM. Por exemplo, para definir com.sun.management.jmxremote.port na porta 7199, especifique o seguinte ao iniciar a JVM:

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

Configure o agente de operações para Cassandra

Seguindo o guia para configurar o agente de operações, adicione os elementos necessários para coletar registros e métricas das instâncias do Cassandra e reiniciar o agente. de dados.

Exemplo de configuração

O comando a seguir cria o arquivo de configuração para coletar e ingerir registros e métricas do Cassandra e reinicia o agente de operações no Linux.

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

Neste exemplo, as propriedades do sistema com.sun.management.jmxremote.port e com.sun.management.jmxremote.rmi.port foram definidas como 7199, e a propriedade do sistema java.rmi.server.hostname foi definida como 127.0.0.1. Para mais informações, consulte Configurar a coleta de métricas.

Configurar a coleta de registros

Para ingerir registros do Cassandra, é preciso criar receptores para os registros que o Cassandra produz e criar um pipeline para os novos receptores.

cassandra_systemPara configurar um receptor para os registros , especifique os seguintes campos:

Campo Padrão Descrição
type O valor precisa ser cassandra_system.
include_paths [/var/log/cassandra/system*.log] Uma lista de caminhos do sistema de arquivos a serem lidos acompanhando cada arquivo. Um caractere curinga (*) pode ser usado nos caminhos. por exemplo, /var/log/cassandra/system*.log.
exclude_paths [] Uma lista de padrões de caminho do sistema de arquivos a serem excluídos do conjunto correspondente a include_paths.
wildcard_refresh_interval 60s O intervalo em que os caminhos de arquivos curinga no include_paths são atualizados. Dado como uma duração de tempo, por exemplo, 30s, 2m. Essa propriedade pode ser útil com capacidades de registro altas em que os arquivos de registro são alternados mais rapidamente do que o intervalo padrão.


Para configurar um receptor para os registros cassandra_debug, especifique os seguintes campos:

Campo Padrão Descrição
type O valor precisa ser cassandra_debug.
include_paths [/var/log/cassandra/debug*.log] Uma lista de caminhos do sistema de arquivos a serem lidos acompanhando cada arquivo. Um caractere curinga (*) pode ser usado nos caminhos. por exemplo, /var/log/cassandra/system*.log.
exclude_paths [] Uma lista de padrões de caminho do sistema de arquivos a serem excluídos do conjunto correspondente a include_paths.
wildcard_refresh_interval 60s O intervalo em que os caminhos de arquivos curinga no include_paths são atualizados. Dado como uma duração de tempo, por exemplo, 30s, 2m. Essa propriedade pode ser útil com capacidades altas de registro em que os arquivos de registro são alternados mais rapidamente do que o intervalo padrão.


Para configurar um receptor para os registros cassandra_gc, especifique os seguintes campos:

Campo Padrão Descrição
type O valor precisa ser cassandra_gc.
include_paths [/var/log/cassandra/gc.log.*.current] Uma lista de caminhos do sistema de arquivos a serem lidos acompanhando cada arquivo. Um caractere curinga (*) pode ser usado nos caminhos. por exemplo, /var/log/cassandra/system*.log.
exclude_paths [] Uma lista de padrões de caminho do sistema de arquivos a serem excluídos do conjunto correspondente a include_paths.
wildcard_refresh_interval 60s O intervalo em que os caminhos de arquivos curinga no include_paths são atualizados. Dado como uma duração de tempo, por exemplo, 30s, 2m. Essa propriedade pode ser útil com capacidades altas de registro em que os arquivos de registro são alternados mais rapidamente do que o intervalo padrão.

O que é registrado

Os registros logName de cassandra_system, cassandra_debug e cassandra_gc são derivados dos IDs do receptor especificados na configuração. Os campos detalhados dentro de LogEntry são os seguintes.

cassandra_system, cassandra_debug
Esses registros contêm os seguintes campos no LogEntry:

Campo Tipo Descrição
jsonPayload.level string Nível de entrada de registro
jsonPayload.module string Módulo do Cassandra em que o registro foi originado
jsonPayload.javaClass string Classe Java em que o registro foi originado
jsonPayload.lineNumber número Número da linha do arquivo de origem em que o registro foi originado
jsonPayload.message string Mensagem de registro, incluindo stacktrace detalhado, quando fornecido
severity string (LogSeverity) Nível de entrada de registro (traduzido)
timestamp string (Timestamp) Hora em que a solicitação foi recebida

Os campos em branco ou ausentes não serão presentes na entrada de registro.

cassandra_gc
Esses registros contêm os seguintes campos no LogEntry:

Campo Tipo Descrição
jsonPayload.uptime número Segundos de atividade da JVM
jsonPayload.timeStopped número Segundos em que a JVM foi interrompida para coleta de lixo
jsonPayload.timeStopping número Segundos que a JVM levou para interromper linhas de execução antes da coleta de lixo
jsonPayload.message string Mensagem de registro
timestamp string (Timestamp) Hora em que a entrada foi registrada

Configurar a coleta de métricas

Para coletar métricas de um nó do Cassandra, você precisa criar um receptor para métricas do Cassandra e, em seguida, criar um pipeline para o novo receptor. Para configurar um receptor para suas métricas do Cassandra, especifique os campos a seguir:

Campo Padrão Descrição
type O valor precisa ser cassandra.
endpoint localhost:7199 O URL do serviço JMX ou o host e a porta usados para criar o URL do serviço. Esse valor precisa estar na forma de service:jmx:<protocol>:<sap> ou host:port. Os valores no formato host:port são usados para criar um URL de serviço de service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi.
collect_jvm_metrics true Configura o receptor para coletar as métricas do JVM compatíveis.
username O nome de usuário configurado se o JMX estiver configurado para exigir autenticação.
password Senha configurada se o JMX estiver configurado para exigir autenticação.
collection_interval 60s Um valor de time.Duration, como 30s ou 5m.

O que é monitorado?

A tabela a seguir fornece a lista de métricas que o agente de operações coleta da instância do Cassandra.

Tipo de métrica 
Tipo, tipo
Recursos monitorados
Rótulos
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
 

Verificar a configuração

Use o Explorador de registros e o Metrics Explorer para verificar se você configurou corretamente o receptor do Cassandra. Pode levar um ou dois minutos para o agente de operações começar a coletar registros e métricas.

Para verificar se os registros são ingeridos, acesse o Explorador de registros e execute a seguinte consulta para ver os registros do Cassandra:

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")


Para verificar se as métricas são ingeridas, acesse o Metrics Explorer e execute a seguinte consulta na guia do MQL.

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

A seguir

Para ver um tutorial sobre como usar o Ansible para instalar o agente de operações, configurar um aplicativo de terceiros e instalar um painel de amostra, consulte o vídeo Instalar o agente de operações para resolver problemas de aplicativos de terceiros.