技术基础 | 重要指标和告警

摘要:
DSEOpsCenter使用JMX收集指标并将其存储在DSE中,并使用这些指标进行可视化和报警。指标收集函数要求DataTaxAgent已在DSE节点上运行。本文旨在提供这方面的指导,并帮助您了解一些最重要的指标。与每个表相关的指标:跟踪最重要表的这些指标非常有用,以确保满足SLA要求并避免出现问题。通过JMX DataTax暴露的重要指标建议使用以下指标来监控和生成超过阈值的警报。

本文节选自DataStax Cassandra文档,点击这里查看更多相关信息。


监控Apache Cassandra®和DataStax Enterprise(DSE)集群是一项非常重要的工作,它帮助您识别集群中的问题并及时地应对并缓解问题。

Apache Cassandra和DSE都公开了用于观察和分析的指标。Cassandra通过使用Java管理扩展(Java Management Extensions,即JMX)公开了各种指标、允许临时的配置更改(如更改压实操作的吞吐量),并支持操作的执行(如触发压实操作)。nodetool和其他Cassandra工具也使用JMX。Cassandra文档中描述了不同类型的公开指标。

注意:JMX是Java中的一项技术,它提供了用于管理和监控应用程序的工具。

您可以使用以下工具来收集指标以进行分析:

  • 使用JMX的一次性分析工具,包括JConsole、jmxterm和nodetool sjk,我们会在下面介绍
  • DSE OpsCenter使用JMX收集指标并将其存储在DSE中,并将这些指标用于可视化和告警。指标收集功能要求DataStax Agent已经在DSE节点上运行。
  • DSE Metrics Collector通过collectd从DSE和其他实体(例如CPU和磁盘)收集指标。
  • DSE Metrics Collector还通过collectd插件与不同的监控系统集成。例如,您可以将指标数据暴露给Prometheus并通过Grafana使用预定义的监控图表(predefined dashboard)可视化。由于指标数据是直接暴露的,您不需要在节点上运行OpsCenter的DataStax Agent。
  • 用于Apache Cassandra的Metrics Collector(即MCAC)与Prometheus和Grafana(也包含预定义的监控图表)提供与DSE Metrics Collector相同的功能。
  • 如果需要使用跟像是Prometheus这样的监控系统集成的外部工具(比如JMX Exporter for Prometheus)或其他监控工具,可能需要进行其他调整或需要自行创建监控图表。

使用以上的任何一种方法,您都会获得很多信息。每个键空间(keyspace)大约有40个监控数据,每个数据库表有60至70个监控数据,另外不同的子系统还拥有更多的监控数据。本文旨在提供这方面的指导,帮助大家理解其中最重要的一些指标。


 

您需要监视什么?

需要监控的重要指标可以分为几组:

  • 与客户请求相关的指标:从客户端程序的角度来看,系统的性能如何。
    • 协调节点(Coordinator)层级上的读写操作延迟,尤其要关注P95和P99个百分位。
    • 客户端连接数。
  • 与处理数据并执行不同任务的线程池相关的监测数据:比如压实和数据的flush。
    • 多少个线程处于阻塞(blocked)状态。例如:memtable flush writer、memtable池分配等。
    • 多少个线程处于弃用(aborted)状态,例如弃用的压实。
    • 有多少个线程处于待发生(pending)状态,例如待发生的压实和待发生的flush。
  • 与Thread-per-Core(即TPC)相关的指标。
仅适用于DSE 6.0及更高版本。
  • 与各个表相关的指标:跟踪最重要的表的这些指标非常有用,这样就可以确保满足SLA的要求,并避免出现问题。
    • 分区大小。
    • SSTable的整体数量。
    • 每个请求读取的SSTable数。
    • 读取请求扫描的墓碑数。
    • 协调节点层级上的读写延迟。
  • 与集群间通信有关的指标:这些指标提供关于集群中的数据交换的信息——数据复制(Replication)、Hinted Handoff等:
    • 丢失的数据变更和其他消息的数量。
    • 超时的总次数和每个主机的超时次数。
    • 跨数据中心延迟。
    • 磁盘上的hints数量。
    • hints重传(失败和超时的hint信息的数量)。
  • 与Java虚拟机(JVM)相关的指标:
    • 内存的使用量。
    • 垃圾回收引起的暂停时长。
  • 与操作系统和硬件有关的指标:
    • 节点的CPU使用率。
    • 可用的磁盘空间。

 

通过JMX暴露的重要指标

DataStax建议使用以下指标来监控和生成超出阈值的警报。请注意,其中的一些数值(例如延迟)是一般性的建议,您可以根据要求降低或提高。

  • 读写延迟(在协调节点层级)

   延迟总计和每个键空间(Keyspace)或每个表的延迟。

   在MBean org.apache.cassandra.metrics中的JMX:

type=ClientRequest,scope=Write,name=Latency
ClientRequest,scope=Read,name=Latency
type=Table,keyspace=ks,scope=*,name=ReadLatency
type=Table,keyspace=ks,scope=*,name=WriteLatency

   警报条件:99百分位上持续1分钟以上大于200ms

  • 整体的节点间延迟

   在MBean org.apache.cassandra.metrics中的JMX:

type=Messaging,name=CrossNodeLatency
  • 通过“DC-Name”定位的数据中心内节点间延迟

   在MBean org.apache.cassandra.metrics中的JMX:

type=Messaging,name=<DC-Name>-Latency
  • 待处理的压实任务数

   每个节点的总数和/或特定键空间(keyspace)中的所有表的这个指标。

   在MBean org.apache.cassandra.metrics中的JMX:

type=Compaction,name=PendingTasks
type=Table,keyspace=ks,scope=*,name=PendingCompactions

   警报条件:持续15分钟超过30个。

  • 丢失的数据变更的数量

   在指定键空间内的总数量和/或每个表的数量

   在MBean org.apache.cassandra.metrics中的JMX:

type=Table,name=DroppedMutations
type=Table,keyspace=ks,scope=*,name=DroppedMutations

   警报条件:非零值。

  • 特定节点上发生的超时数

   在MBean org.apache.cassandra.metrics中的JMX:

type=MessagingService,name=TotalTimeouts
type=MessagingService,name=TimeoutsPerHost

   警报条件:最近的5到15分钟内,数量大幅增加。

   必需采取的反应:可能是网络或类似的问题。

  • 最大分区大小(以字节为单位)

   在MBean org.apache.cassandra.metrics中的JMX:

Table,name=MaxPartitionSize
type=Table,keyspace=ks,scope=*,name=MaxPartitionSize  

   警报条件:分区大于100 Mb。

   必需采取的反应:向开发团队发送警报,因为这表明数据模型存在问题。

  • 系统中和每个表中的SSTable总数

   在MBean org.apache.cassandra.metrics中的JMX:

type=Table,name=LiveSSTableCount
type=Table,keyspace=ks,scope=*,name=LiveSSTableCount

   警报条件:每个表超过200个(取决于所使用的压实策略)。

   必需采取的反应:大表太多,这将导致性能下降。

  • 存储在单个节点上的hints的数量

   在MBean org.apache.cassandra.metrics中的JMX:

type=Storage,name=TotalHints

   警报条件:值大于零,表示某些节点联系不上。

  • Hint重传的成功/失败/超时率

   在MBean org.apache.cassandra.metrics中的JMX:

type=HintsService,name=HintsSucceeded
type=HintsService,name=HintsFailed
type=HintsService,name=HintsTimedOut
  • 被memtable内存分配阻塞的线程数

   在MBean org.apache.cassandra.metrics中的JMX:

type=MemtablePool,name=BlockedOnAllocation

   警报条件:非零值

  • 受阻的memtable flush writer的任务数
注意:这种情况可能导致严重的写入性能下降。

   在MBean org.apache.cassandra.metrics中的JMX:

type=ThreadPools,path=internal,scope=MemtableFlushWriter,name=CurrentlyBlockedTasks

   警报条件:非零值。

   必需采取的反应:调查。 这种情况是由磁盘故障,磁盘操作过多等引起的。

  • 受阻的压实任务的数目

   在MBean org.apache.cassandra.metrics中的JMX:

type=ThreadPools,path=internal,scope=CompactionExecutor,name=CurrentlyBlockedTasks

   警报条件:非零值。

  • 废止的压实任务的数目

   在MBean org.apache.cassandra.metrics中的JMX:

name=CompactionsAborted,type=Compaction

   警报条件:非零值。

  • 有关Java垃圾回收的信息

   由Max GC Elapsed或者类似原因引起。

   在MBean org.apache.cassandra.metrics中的JMX:

type=GCInspector​
  • 等待提交(commit)的片段的数目

   在MBean org.apache.cassandra.metrics中的JMX:

type=CommitLog,name=WaitingOnCommit,name=Count

   警报条件:最后一分钟计数很高。

  • 等待提交时间的第99百分位数

   在MBean org.apache.cassandra.metrics中的JMX:

type=CommitLog,name=WaitingOnCommit,name=99thPercentile
  • 待发生的flush次数

   在MBean org.apache.cassandra.metrics中的JMX:

type=Table,name=PendingFlushes
  • 键缓存(KeyCache)的命中率

   Cassandra和DSE 6.0之前的版本。

   在MBean org.apache.cassandra.metrics中的JMX:

type=Cache,scope=KeyCache,name=HitRate
  警报条件:命中率低于0.9。

   必需采取的反应:如果缓存已满(容量等于大小),请增加键缓存的大小。


 

在OpsCenter中可视化重要指标

OpsCenter从集群中的所有节点收集指标(6.8 | 6.7 | 6.5 | 6.1),并将原始数据以及基于这些数据的总结数据,存储在DSE集群中。 然后这些数据将被用于创建图表和警报。使用OpsCenter进行监控时,以下指标/图表对设置集群的有效监控很有帮助:

  • 活跃警报Active Alerts
  • 集群健康 Cluster Health
  • 存储容量 Storage Capacity
  • 读写请求延迟 Read and Write Request Latency
  • 读写请求 Read and Write Requests
  • 数据大小 Data Size
  • 待发生的压实操作 Compactions Pending
  • 丢失的消息:数据变更 Dropped Messages: Mutations
  • 丢失的消息:读取 Dropped Messages: Reads
  • 原生协议的客户端 Native Clients
  • 针对特定数据库表(最重要的表的设置):
    • TBL(数据库表):每次读取请求所涉及的SSTables数量(百分位数) SSTables per read (percentiles)
    • TBL(数据库表):每次读取请求所涉及的墓碑数(百分位数) Tombstones per read (percentiles)
    • TBL(数据库表):分区大小(百分位数) Partition size (percentiles)
  • 与hinted handoff有关的:
    • 磁盘上存储的hints数据 Hints on Disk
    • TP(线程池):hints的调度线程处于活跃状态 Hint Dispatcher Active
    • TP(线程池):hints的调度线程已完成 Hint Dispatcher Completed
    • 丢失的消息 Dropped Messages:hinted handoff
  • 与操作系统有关的:
    • 操作系统 OS:磁盘延迟 Disk Latency
    • 操作系统 OS:负载 Load
    • 操作系统 OS:CPU I/Owait
    • 操作系统 OS:空闲的内存容量 Memory Free
  •   与Java虚拟机有关的:
    • 使用的堆空间 Heap Used
    • JVM G1老年代回收的次数和时间 JVM G1 Old Collection Count and Time
    • JVM G1新生代回收的次数和时间 JVM G1 Young Collection Count and Time
  • 当DSE Search被启用时:
    • 搜索 Search:索引库的大小 Core Size
    • 搜索 Search:读取延迟 Read Latency
    • 搜索 Search:超时 Timeouts
  • 启用NodeSync后,与NodeSync相关的:
    • TP(线程池):读取范围NodeSync活动线程 Read Range NodeSync Active
    • NodeSync:未完成的页面、失败的页面 Uncompleted Pages, Failed Pages

 

OpsCenter中的告警

OpsCenter(6.8 | 6.7 | 6.5 | 6.1)在满足特定条件时会向管理员告警。示例包括节点宕机且长时间出现延迟时间过长的情况。OpsCenter可以通过电子邮件,SNMP和HTTP请求发送警报。

配置以下警报,以运维的方式应对DSE集群中的问题。

  • 节点下线:当节点被OpsCenter标记为已下线时。

条件:“<event>”超过X <minutes|hours|days>

建议:X:“immediately(立即)”或“ 1 minute(1分钟)”(取决于是否可以对此情况有一定程度的容忍)

关键程度/通知频率:紧急

  • 代理(Agent)问题:当DataStax Agent被监控到出现了一些问题时。

条件:“<event>”超过X <minutes|hours|days>

建议:X:“ 30 minutes (30分钟)”

关键程度/通知频率:低

  • CPU使用率:占用的CPU的百分比。

条件:“<event>”超过X,持续了超过Y时间 <minutes|hours|days>

建议:X:100,Y:1小时

关键程度/通知频率:低

  • 负载:计算机系统执行的总工作量。

条件:“<event>”超过X,持续了超过Y时间 <minutes|hours|days>

建议:X:0.7 x CPU内核总数,Y:1小时

关键程度/通知频率:高

  • 写请求延迟(百分位数):成功写入操作的响应时间(以毫秒为单位)。

条件:对于选定的Z百分位数,“<event>”高于X ms/op,持续了超过Y <minutes|hours|days>

建议:X:<取决于应用程序SLA>,Y:4小时,Z:99

危险程度/通知频率:中

  • 读取请求延迟(百分比):成功读取操作的响应时间(以毫秒为单位)。

条件:对于选定的Z百分位数,“ <event>”高于X ms / op,持续了超过Y <minutes|hours|days>

建议:X:<取决于应用程序SLA>,Y:4小时,Z:99

危险程度/通知频率:中

  • 高级->系统->磁盘使用率(%):用于特定磁盘分区的磁盘百分比。

条件:“ <event>”超过了X%,持续了超过Y <minutes|hours|days>

建议:X:50,Y:4小时

危险程度/通知频率:中

  • 高级->表-> TBL:每次读取的SSTable(百分位数):对于指定的百分位,一次读取操作访问了多少个SSTable。

条件:对于W表,在Z百分位数处,“ <event>”超过了X SSTables,持续了超过Y <minutes|hours|days>。

建议:X:10,Y:1天,W:自己指定的表,Z:99

关键程度/通知频率:低

  • 高级->表-> TBL:每次读取的墓碑(百分位数):对于指定的百分位数,一次读取操作访问了多少个墓碑。

条件:对于W表,在Z百分点处,“ <event>”超过了X墓碑,持续了超过Y <minutes|hours|days>。

建议:X:cassandra.yaml中的tombstone_warn_threshold,Y:1天,W:自己指定的表,Z:99

关键程度/通知频率:低

  • 高级->表-> TBL:分区大小(百分位数):对于指定的百分位数,此表的分区大小(以字节为单位)是多少。

条件:对于W表,在Z百分位数处,“<event>”超过X,持续了超过Y <minutes|hours|days>。

建议:X:200 MB(以字节为单位),Y:1天,W:自己指定的表,Z:99

关键程度/通知频率:低


 

用于JMX的工具

对特定指标进行一次性分析的工具有不少。通常,您仅在调试(debugging)时使用这些工具,因为它们不是用于代替监控解决方案的。 这些工具主要是能提供当下的某个特定时间点上的单个指标。 它们无法生成随时间变化的视图,也无法提供多个节点上的多个指标。

  • JConsole

JConsole是在例如OpenJDK等Java发行版中包含的GUI工具。它可以轻松浏览指标并检查其值。它还可以将这些数据按时间顺序绘图。

注意:下图中列出了更多工具。

技术基础 | 重要指标和告警第1张Java监控和管理控制台

要访问指标,JConsole需要在服务器上运行(通常需要安装GUI库);或者需要通过网络进行访问,那会将JMX暴露给外部,导致可能对安全性有所影响。

  • Jmxterm

这是一个非常流行的JMX命令行工具。 下载后,可以轻松运行并连接到本地节点;或者如果JMX暴露给外部时,也可以连接到其他节点:

$>open localhost:7199
#Connection to localhost:7199 is opened

您可以使用以下命令访问特定指标:

$>get -b org.apache.cassandra.metrics:type=Cache,scope=KeyCache,name=Size Value
#mbean = org.apache.cassandra.metrics:type=Cache,scope=KeyCache,name=Size:
Value = 0;

如果想获取所有可用命令的清单,请在交互式控制台内运行“help”。除了获取属性值之外,您还可以设置属性值(如果它们是可设置的)或调用函数——借此,您可以临时性地修改Cassandra的行为(与nodetool命令相同)。

  • nodetool sjk(DSE和Cassandra 4.0)

DSE提供了nodetool sjk (6.8|6.7|6.0|5.1),它是Swiss Java Knife (SJK) 这个知名的库的包装器 (wrapper)。 这个子命令非常方便,因为您无需指定DSE进程的PID或其他参数; 您只需提供必要的命令行参数(flags)。 例如,要获取键缓存(key cache)的命中率,请使用以下命令,其中-b参数指定了bean的名称,而-f指定了字段:

nodetool sjk mx -b "org.apache.cassandra.metrics:type=Cache,scope=KeyCache,name=Size" -mg -f Value
与jmxterm相似,您可以使用此命令来设置变量值(可设置时)或调用函数。
type=Table,name=DroppedMutations
type=Table,keyspace=ks,scope=*,name=DroppedMutations
 

免责声明:文章转载自《技术基础 | 重要指标和告警》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(八)Asp.NET中三层架构的应用kibana查询语法 使用教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux加固

一、linux下挂载iso光盘镜像     1、#mkdir  /mnt/vcdrom          ————建立一个目录用来作挂接点       2、#mount  –o  loop  –t  iso9660 /root/XX.iso  /mnt/vcdrom ————将root目        录下的XX.ISO挂载到/mnt/vcdrom下。 二...

如何使用JMeter从文件中提取数据

在性能测试方面,重用响应数据至关重要。几乎(如果不是全部!)负载测试场景假设您: 从先前的响应中提取有趣的方面,并在下一个请求中重用它们(也称为相关) 确保实际响应符合预期(又称断言) 因此,如果您是性能测试工程师,那么了解如何实现此关联和断言逻辑非常重要。幸运的是,BlazeMeter的知识库和JMeter博客已经有一些关于如何做到这一点的精彩文章。...

VC++开发股票软件

VC炒股软件开发 文档说明: 此文档适合VC++的初学者,高手也可参考(希望能提出宝贵意见)。   开发前准备: 这是一个根据股票信息的数据绘的几个制界面,数据来源通信达软件的数据文件,通常在安装了通信达以后并下载数据到本地以后就有了。 1.数据文件的准备: 假如你安装通信达的目录是:D:\jcb_gx。那么对应的数据文件就在D:\jcb_gx\vipd...

Java 中的监控与管理原理概述

点赞再看,动力无限。Hello world : ) 微信搜「程序猿阿朗 」。 本文 Github.com/niumoo/JavaNotes 和 程序猿阿朗博客 已经收录,有很多知识点和系列文章。 当前文章属于Java 性能分析优化系列文章,点击可以查看所有文章。 这篇文章是 Java 性能分析监控与优化系列的第一篇文章,原本是计划系统的介绍 Java...

优秀开源项目的svn地址

很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习,都是一大幸福之事啊! Apache的SVN库,强烈推荐! http://svn.apache.org/repos/asf/  里面不但有Struts的源码,还有著名的Apache jakarta project 相当好的Web UI框架Tiles 现在很流行的项目管理工具Maven Ant、C...

查看当前linux有多少http连接数

已采纳 1、查看apache当前并发访问数:    #对比httpd.conf中MaxClients的数字差距多少。netstat -an | grep ESTABLISHED | wc -l2、查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):ps aux|grep httpd|wc -l3、可以使用如下参数查看数据    ...