Cassandra

Cassandra 是可扩缩且具备容错能力的 NoSQL 数据库系统。 如需了解详情,请访问 http://cassandra.apache.org/

您可以为 Ops Agent 配置接收器,以通过 Java Management Extensions (JMX) 从 Cassandra 节点的 Java 虚拟机 (JVM) 中检索遥测数据。

前提条件

如需收集和注入 Cassandra 日志和指标,您必须安装 Ops Agent 2.6.0 或更高版本。

配置 Cassandra 实例

如需公开 JMX 端点,您必须在启动 JVM 时设置 com.sun.management.jmxremote.port 系统属性。我们还建议您将 com.sun.management.jmxremote.rmi.port 系统属性设置为同一端口。 如需远程公开 JMX 端点,您还必须设置 java.rmi.server.hostname 系统属性。

默认情况下,这些属性在 Cassandra 部署的 cassandra-env.sh 文件中设置。

如需使用命令行参数设置系统属性,请在启动 JVM 时在属性名称前加上 -D。 例如,如需将 com.sun.management.jmxremote.port 设置为端口 7199,请在启动 JVM 时指定以下内容:

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

为 Cassandra 配置 Ops Agent

按照配置 Ops Agent 指南,添加从 Cassandra 实例收集日志和指标所需的元素,并重启代理

配置示例

以下命令会创建配置文件,以收集和注入 Cassandra 的日志和指标,并在 Linux 上重启 Ops Agent。

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

在此示例中,com.sun.management.jmxremote.portcom.sun.management.jmxremote.rmi.port 系统属性设置为 7199java.rmi.server.hostname 系统属性设置为 127.0.0.1。如需了解详情,请参阅配置指标收集

配置日志收集

如需从 Cassandra 注入日志,您必须为 Cassandra 生成的日志创建接收器,然后为新的接收器创建流水线。

如需为 cassandra_system 日志配置接收器,请指定以下字段:

字段 默认 说明
type 该值必须为 cassandra_system
include_paths [/var/log/cassandra/system*.log] 要通过跟踪每个文件读取的文件系统路径列表。路径中可以使用通配符 (*);例如 /var/log/cassandra/system*.log
exclude_paths [] 要从 include_paths 匹配的集合中排除的文件系统路径模式列表。
wildcard_refresh_interval 60s include_paths 中通配符文件路径的刷新间隔。指定为时长,例如 30s2m。该属性在高日志记录吞吐量下可能很有用,因为日志文件的轮替速度快于默认时间间隔。


如需为 cassandra_debug 日志配置接收器,请指定以下字段:

字段 默认 说明
type 该值必须为 cassandra_debug
include_paths [/var/log/cassandra/debug*.log] 要通过跟踪每个文件读取的文件系统路径列表。路径中可以使用通配符 (*);例如 /var/log/cassandra/system*.log
exclude_paths [] 要从 include_paths 匹配的集合中排除的文件系统路径模式列表。
wildcard_refresh_interval 60s include_paths 中通配符文件路径的刷新间隔。指定为时长,例如 30s2m。该属性在高日志记录吞吐量下可能很有用,因为日志文件的轮替速度快于默认时间间隔。


如需为 cassandra_gc 日志配置接收器,请指定以下字段:

字段 默认 说明
type 该值必须为 cassandra_gc
include_paths [/var/log/cassandra/gc.log.*.current] 要通过跟踪每个文件读取的文件系统路径列表。路径中可以使用通配符 (*);例如 /var/log/cassandra/system*.log
exclude_paths [] 要从 include_paths 匹配的集合中排除的文件系统路径模式列表。
wildcard_refresh_interval 60s include_paths 中通配符文件路径的刷新间隔。指定为时长,例如 30s2m。该属性在高日志记录吞吐量下可能很有用,因为日志文件的轮替速度快于默认时间间隔。

记录的内容

cassandra_systemcassandra_debugcassandra_gc 日志的 logName 派生自配置中指定的接收器 ID。LogEntry 中的详细字段如下所示。

cassandra_systemcassandra_debug
这些日志包含 LogEntry 中的以下字段:

字段 类型 说明
jsonPayload.level 字符串 日志条目级别
jsonPayload.module 字符串 日志源自的 Cassandra 模块
jsonPayload.javaClass 字符串 日志源自的 Java 类
jsonPayload.lineNumber 数字 日志源自的源文件的行号
jsonPayload.message 字符串 日志消息,包括详细的堆栈轨迹(如果提供)
severity 字符串 (LogSeverity) 日志条目级别(已转换)
timestamp 字符串 (Timestamp) 收到请求的时间

任何空白或缺失的字段都不会出现在日志条目中。

cassandra_gc
这些日志包含 LogEntry 中的以下字段:

字段 类型 说明
jsonPayload.uptime 数字 JVM 保持活跃状态的秒数
jsonPayload.timeStopped 数字 JVM 被停止以进行垃圾回收的秒数
jsonPayload.timeStopping 数字 JVM 在垃圾回收之前停止线程所花的秒数
jsonPayload.message 字符串 日志消息
timestamp 字符串 (Timestamp) 记录条目的时间

配置指标收集

如需从 Cassandra 节点收集指标,您必须为 Cassandra 指标创建接收器,然后为新接收器创建流水线。如需为 Cassandra 指标配置接收器,请指定以下字段:

字段 默认 说明
type 该值必须为 cassandra
endpoint localhost:7199 JMX 服务网址或用于构造服务网址的主机和端口。此值必须采用 service:jmx:<protocol>:<sap>host:port 格式。host:port 格式的值用于创建 service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi 的服务网址。
collect_jvm_metrics true 配置接收器以同时收集支持的 JVM 指标
username 将 JMX 配置为需要身份验证时配置的用户名。
password 将 JMX 配置为需要身份验证时配置的密码。
collection_interval 60s time.Duration 值,例如 30s5m

监控的内容

下表提供了 Ops Agent 从 Cassandra 实例收集的指标列表。

指标类型
种类、类型
受监控的资源
标签
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
 

验证配置

您可以使用日志浏览器和 Metrics Explorer 来验证已正确配置 Cassandra 接收器。Ops Agent 可能需要一两分钟才会开始收集日志和指标。

如需验证是否已注入日志,请转到日志浏览器并运行以下查询来查看 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")


如需验证指标是否已注入,请转到 Metrics Explorer 并在 MQL 标签页中运行以下查询。

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

后续步骤

如需查看如何使用 Ansible 安装 Ops Agent、配置第三方应用和安装示例信息中心的演示,请参阅安装 Ops Agent 以排查第三方应用的问题视频。