如何使用Prometheus监控Cassandra

更新时间:
复制 MD 格式

本文介绍如何使用Prometheus监控Cassandra。

前提条件

已创建Prometheus实例,具体操作,请参见:

步骤一:自行部署Cassandra JMX Agent

  1. 您需要根据Cassandra的版本下载合适的Cassandra JMX AgentCassandra所在的ECS内。

  2. 解压缩下载的Agent压缩包到MCAC_ROOT,修改cassandra-env.sh文件,追加以下内容。

    MCAC_ROOT=/path/to/directory
    JVM_OPTS="$JVM_OPTS -javaagent:${MCAC_ROOT}/lib/datastax-mcac-agent.jar"
    重要

    Cassandra JMX AgentPrometheus暴露的数据抓取端口为9103,如果需要修改为其他的端口,则修改${MCAC_ROOT}/config/collectd.conf.tmpl文件中的如下所示的内容为想要提供的端口。

    
    LoadPlugin write_prometheus
    <Plugin write_prometheus>
      Port "9103"
    </Plugin>
  3. 完成上述配置之后,重新启动Cassandra应用程序,在ECS服务器上执行命令curl localhost:{jmx端口}/metrics,查看是否正常有数据返回,如果有数据返回,则说明Cassandra JMX Agent已经正确安装。

    
    # HELP collectd_collectd_cache_size write_prometheus plugin: 'collectd' Type: 'cache_size', Dstype: 'gauge', Dsname: 'value'
    # TYPE collectd_collectd_cache_size gauge
    collectd_collectd_cache_size(collectd="cache",instance="172.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1") 6985 16
    # HELP collectd_collectd_derive_total write_prometheus plugin: 'collectd' Type: 'derive', Dstype: 'derive', Dsname: 'value'
    # TYPE collectd_collectd_derive_total counter
    collectd_collectd_derive_total(collectd="write_queue",type="dropped",instance="172.1xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1") 0 168768x
    # HELP collectd_collectd_queue_length write_prometheus plugin: 'collectd' Type: 'queue_length', Dstype: 'gauge', Dsname: 'value'
    # TYPE collectd_collectd_queue_length gauge
    collectd_collectd_queue_length(collectd="write_queue",instance="172.1xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1") 144 168
    # HELP collectd_contextswitch_total write_prometheus plugin: 'contextswitch' Type: 'contextswitch', Dstype: 'derive', Dsname: 'value'
    # TYPE collectd_contextswitch_total counter
    collectd_contextswitch_total(instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1") 3xxx 168768x
    # HELP collectd_cpu_total write_prometheus plugin: 'cpu' Type: 'cpu', Dstype: 'derive', Dsname: 'value'
    # TYPE collectd_cpu_total counter
    collectd_cpu_total(cpu="0",type="idle",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 50160255 16876
    collectd_cpu_total(cpu="0",type="interrupt",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686
    collectd_cpu_total(cpu="0",type="nice",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 226 1687686335
    collectd_cpu_total(cpu="0",type="softirq",instance="172.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 13644 16876
    collectd_cpu_total(cpu="0",type="steal",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686335x
    collectd_cpu_total(cpu="0",type="system",instance="172.1xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 231356 16876
    collectd_cpu_total(cpu="0",type="user",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 1519742 168768
    collectd_cpu_total(cpu="0",type="wait",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 585 1687686335
    collectd_cpu_total(cpu="1",type="idle",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 50596353 16876
    collectd_cpu_total(cpu="1",type="interrupt",instance="17xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686
    collectd_cpu_total(cpu="1",type="nice",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 219 1687686335
    collectd_cpu_total(cpu="1",type="softirq",instance="172.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 9320 168768
    collectd_cpu_total(cpu="1",type="steal",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686335x
    collectd_cpu_total(cpu="1",type="system",instance="172.1xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 129114 16876
    collectd_cpu_total(cpu="1",type="user",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 1504382 168768
    collectd_cpu_total(cpu="1",type="wait",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 50115892 16876
    collectd_cpu_total(cpu="1",type="interrupt",instance="17xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686
    collectd_cpu_total(cpu="1",type="nice",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 190 1687686335
    collectd_cpu_total(cpu="2",type="softirq",instance="172.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 4906 168768
    collectd_cpu_total(cpu="2",type="steal",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686335x
    collectd_cpu_total(cpu="2",type="system",instance="172.1xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 230256 16876
    collectd_cpu_total(cpu="2",type="user",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 1562142 168768
    collectd_cpu_total(cpu="2",type="wait",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 8267 168768633x
    collectd_cpu_total(cpu="3",type="idle",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 50612210 16876
    collectd_cpu_total(cpu="3",type="interrupt",instance="17xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686
    collectd_cpu_total(cpu="3",type="nice",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 218 1687686335
    collectd_cpu_total(cpu="3",type="softirq",instance="172.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 2815 168768
    collectd_cpu_total(cpu="3",type="steal",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 0 1687686335x
    collectd_cpu_total(cpu="3",type="system",instance="172.1xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 129656 16876
    collectd_cpu_total(cpu="3",type="user",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 1506299 168768
    collectd_cpu_total(cpu="3",type="xxx",instance="172.16.xxx",cluster="Test Cluster",dc="datacenter1",rack="rack1",insight_series="1") 183 1687686335x

步骤二:接入 Cassandra

  1. 登录ARMS控制台

  2. 在左侧导航栏,单击接入中心

  3. 接入中心页面的数据库区域,单击 Cassandra

  1. Cassandra面板的开始接入页签完成接入,然后单击确定

    参数

    说明

    选择所属环境类型

    可以接入以下两种服务环境:

    • 容器服务环境

    • ECS(VPC)

    选择集群

    选择目标集群。

    Pod 标签

    部署 Cassandra 服务 Pod 的标签(建议使用有特定标识的标签)

    服务端口

    步骤一中安装的 Cassandra JMX Agent 的端口,默认端口号会自动填充。

    Metrics 采集路径

    步骤一中安装的 Cassandra JMX Agent 指标透出路径,默认路径会自动填充。

    Metric 采集间隔(单位/秒)

    可观测监控 Prometheus 版采集指标数据的时间间隔,默认30秒。

步骤三:查看Cassandra大盘数据

  1. 登录ARMS控制台

  2. 在左侧导航栏,单击接入管理

  3. 接入管理页面的已接入环境页签中,选择目标环境,在目标环境列表中,单击目标环境名称进入容器环境详情页面。

  4. 组件管理页签下的组件类型区域,单击Cassandra,然后单击大盘,即可查看所有的大盘名称。

    大盘列表中包含 Cassandra DetailCassandra Summary 两个监控大盘,标签均为 cassandra。

  5. 单击目标大盘名称,查看对应的Grafana大盘。

步骤四:配置 Cassandra 监控告警

  1. 组件管理页签下的组件类型区域,单击Cassandra,然后单击告警规则,即可查看默认创建的告警规则。

    默认创建的告警规则包括:

    • 请求超时数

    • 失败请求数

    • 悬挂消息数

    • 磁盘使用率

    • 内存使用率

    • CPU 使用率

    • 客户端连接数

    所有规则状态均为运行中,可对每条规则执行编辑停止查看告警事件操作。

  2. 您还可以根据业务需求新增告警规则,创建Prometheus告警规则的具体操作,请参见创建Prometheus告警规则

关键指标说明

集群/节点基础信息

指标名称

关键级别

指标描述

指标说明

mcac_client_connected_native_clients

Major

CQL连接数

连接数过多会占用系统过多资源,导致客户端延迟变高。

mcac_table_live_disk_space_used_total

Major

cassandra占据的空间

该指标过高可能导致硬盘空间不足以及数据存取延迟增加。

mcac_table_snapshots_size

Recommand

cassandra快照文件大小

快照用于数据恢复,该指标过高可能导致硬盘空间不足从而无法存储下完整的快照。

collectd_uptime

Major

节点开机时间

该指标过高说明系统长期没有进行重启,存在漏洞的系统可能会带来安全隐患。

关键性能指标

指标名称

重要级别

指标描述

指标说明

mcac_table_read_latency

Critical

客户端读取数据的延迟

该指标过高会导致应用程序的读取速度变慢,影响用户体验。

mcac_table_write_latency

Critical

客户端写数据的延迟

该指标过高会导致应用程序的写入速度变慢,影响用户体验。

异常和错误

指标名称

重要级别

指标描述

指标说明

mcac_client_request_timeouts_total

Critical

超时的客户端请求

该指标过高,说明系统负载较高,会严重影响用户体验。

mcac_client_request_failures_total

Critical

出现异常的客户端请求

该指标过高,说明系统负载较高,会严重影响用户体验。

mcac_dropped_message_dropped_total

Critical

丢弃的消息

该指标过高,说明系统负载较高,会严重影响用户体验。

缓存和布隆过滤器

指标名称

重要级别

指标描述

指标说明

mcac_table_key_cache_hit_rate

Major

key_cache的命中率

该指标过低可能会导致应用程序的读取速度变慢,影响用户体验。

mcac_table_row_cache_hit_total

Major

row_cache的命中次数

该指标过低可能会导致应用程序的读取速度变慢,影响用户体验。

mcac_table_row_cache_miss_total

Recommand

row_cache未命中的次数

该指标过高可能会导致应用程序的读取速度变慢,影响用户体验。

mcac_table_row_cache_hit_out_of_range_total

Recommand

row_cache命中但还是去访问磁盘的次数

该指标过高可能会导致应用程序的读取速度变慢,影响用户体验。

mcac_table_bloom_filter_false_ratio

Major

布隆过滤器的误判率

当布隆过滤器误报比例过高时,会导致查询结果中有很多本来不存在的元素被判断为存在,从而浪费查询时间和资源。这会降低查询性能并增加查询成本。

CPU/内存/硬盘使用趋势

指标名称

重要级别

指标描述

指标说明

collectd_cpu_total

Critical

CPU的使用率

该指标过高说明系统负载较高,会导致客户端请求延迟过高,严重影响用户体验。

collectd_memory

Critical

内存的使用率

该指标过高说明系统负载较高,会导致客户端请求延迟升高,严重影响用户体验。

collectd_df_df_complex

Critical

硬盘的使用率

该指标过高说明硬盘可用空间不足,会导致数据无法正常持久化存储,有宕机的风险。

SSTable压缩

指标名称

重要级别

指标描述

指标说明

mcac_table_pending_compactions

Major

进行中的SSTable压缩任务

该指标过高说明系统负载较高,会导致客户端请求延迟升高,建议合理配置SSTable的压缩间隔。

mcac_table_compaction_bytes_written_total

Major

SSTable的压缩速率

该指标过低说明系统压缩速率较慢,会导致压缩任务累积,建议提高节点的硬件配置。

mcac_table_compression_ratio

Major

SSTable的压缩率

该指标过高说明压缩后的文件仍然过大,压缩没有达到预期的效果。

磁盘文件

指标名称

重要级别

指标描述

指标说明

mcac_table_live_ss_table_count

Major

SSTable的数量

该指标越高会导致硬盘占用过高并且读写延迟增加,需合理配置SSTable的压缩策略。

mcac_table_live_disk_space_used_total

Major

SSTable占用的硬盘空间

该指标越高会导致硬盘占用过高并且读写延迟增加,需合理配置SSTable的压缩策略。

mcac_table_ss_tables_per_read_histogram

Major

一次read操作需要读取的SSTable数量

该指标越高会导致客户端读取延迟增加。

mcac_commit_log_total_commit_log_size

Major

Commit Log占用的硬盘空间

该指标过高会导致硬盘空间不足,读写性能下降以及数据恢复时间增加。

mcac_table_memtable_live_data_size

Major

MemTable占用的空间

该指标过高会导致数据写入性能下降,节点稳定性下降。

mcac_table_waiting_on_free_memtable_space

Major

等待释放MemTable花费的时间

该指标过高会导致数据写入性能下降,节点稳定性下降。

线程池状态

指标名称

重要级别

指标描述

指标说明

mcac_thread_pools_active_tasks

Critical

线程池中正在活跃的任务数量

阻塞任务过多会导致占用系统资源过高,响应速度下降甚至系统崩溃。

mcac_thread_pools_total_blocked_tasks_total

Critical

线程池中正处于阻塞状态的任务数量

阻塞任务过多会导致占用系统资源过高,响应速度下降甚至系统崩溃。

mcac_thread_pools_pending_tasks

Critical

线程池中处于pending状态的任务数量

处于pending状态的任务过多会导致占用系统资源过高,这些任务对应的请求超时,甚至导致系统崩溃。

mcac_thread_pools_completed_tasks

Major

线程池中已经完成的任务数量

该指标可以反映系统的吞吐量,该指标越高说明系统的性能优秀。

JVM相关

指标名称

重要级别

指标描述

指标说明

mcac_jvm_memory_used

Critical

已经使用的JVM堆内存大小

该指标越高,可能导致内存不足,触发频繁的垃圾回收,降低应用的吞吐率。

mcac_jvm_gc_time

Critical

应用程序用于GC的时间

该指标过高说明GC过于频繁,系统用于执行用户任务时间较少,可能导致客户端请求超时,甚至导致系统崩溃等。