| import{_ as r,C as n,O as u,P as s,ah as i,Q as t,U as e,ai as o,aW as a}from"./framework-62ad666a.js";const c={},l=a('<h1 id="监控告警" tabindex="-1"><a class="header-anchor" href="#监控告警" aria-hidden="true">#</a> 监控告警</h1><p>在 IoTDB 的运行过程中,我们希望对 IoTDB 的状态进行观测,以便于排查系统问题或者及时发现系统潜在的风险,能够<strong>反映系统运行状态的一系列指标</strong>就是系统监控指标。</p><h2 id="_1-什么场景下会使用到监控" tabindex="-1"><a class="header-anchor" href="#_1-什么场景下会使用到监控" aria-hidden="true">#</a> 1. 什么场景下会使用到监控?</h2><p>那么什么时候会用到监控框架呢?下面列举一些常见的场景。</p><ol><li><p>系统变慢了</p><p>系统变慢几乎是最常见也最头疼的问题,这时候我们需要尽可能多的信息来帮助我们找到系统变慢的原因,比如:</p><ul><li>JVM信息:是不是有FGC?GC耗时多少?GC后内存有没有恢复?是不是有大量的线程?</li><li>系统信息:CPU使用率是不是太高了?磁盘IO是不是很频繁?</li><li>连接数:当前连接是不是太多?</li><li>接口:当前TPS是多少?各个接口耗时有没有变化?</li><li>线程池:系统中各种任务是否有积压?</li><li>缓存命中率</li></ul></li><li><p>磁盘快满了</p><p>这时候我们迫切想知道最近一段时间数据文件的增长情况,看看是不是某种文件有突增。</p></li><li><p>系统运行是否正常</p><p>此时我们可能需要通过错误日志的数量、集群节点的状态等指标来判断系统是否在正常运行。</p></li></ol><h2 id="_2-什么人需要使用监控" tabindex="-1"><a class="header-anchor" href="#_2-什么人需要使用监控" aria-hidden="true">#</a> 2. 什么人需要使用监控?</h2><p>所有关注系统状态的人员都可以使用,包括但不限于研发、测试、运维、DBA等等</p><h2 id="_3-什么是监控指标" tabindex="-1"><a class="header-anchor" href="#_3-什么是监控指标" aria-hidden="true">#</a> 3. 什么是监控指标?</h2><h3 id="_3-1-监控指标名词解释" tabindex="-1"><a class="header-anchor" href="#_3-1-监控指标名词解释" aria-hidden="true">#</a> 3.1. 监控指标名词解释</h3><p>在 IoTDB 的监控模块,每个监控指标被 <code>Metric Name</code> 和 <code>Tags</code> 唯一标识。</p><ul><li><code>Metric Name</code>:指标类型名称,比如<code>logback_events</code>表示日志事件。</li><li><code>Tags</code>:指标分类,形式为Key-Value对,每个指标下面可以有0到多个分类,常见的Key-Value对: <ul><li><code>name = xxx</code>:被监控对象的名称,是对<strong>业务逻辑</strong>的说明。比如对于<code>Metric Name = entry_seconds_count</code> 类型的监控项,name的含义是指被监控的业务接口。</li><li><code>type = xxx</code>:监控指标类型细分,是对<strong>监控指标</strong>本身的说明。比如对于<code>Metric Name = point</code> 类型的监控项,type的含义是指监控具体是什么类型的点数。</li><li><code>status = xxx</code>:被监控对象的状态,是对<strong>业务逻辑</strong>的说明。比如对于<code>Metric Name = Task</code>类型的监控项可以通过该参数,从而区分被监控对象的状态。</li><li><code>user = xxx</code>:被监控对象的相关用户,是对<strong>业务逻辑</strong>的说明。比如统计<code>root</code>用户的写入总点数。</li><li>根据具体情况自定义:比如logback_events_total下有一个level的分类,用来表示特定级别下的日志数量。</li></ul></li><li><code>Metric Level</code>:<strong>指标管理级别</strong>,默认启动级别为<code>Core</code>级别,建议启动级别为<code>Important级别</code> ,审核严格程度<code>Core > Important > Normal > All</code><ul><li><code>Core</code>:系统的核心指标,供<strong>系统内核和运维人员</strong>使用,关乎系统的<strong>性能、稳定性、安全性</strong>,比如实例的状况,系统的负载等。</li><li><code>Important</code>:模块的重要指标,供<strong>运维和测试人员</strong>使用,直接关乎<strong>每个模块的运行状态</strong>,比如合并文件个数、执行情况等。</li><li><code>Normal</code>:模块的一般指标,供<strong>开发人员</strong>使用,方便在出现问题时<strong>定位模块</strong>,比如合并中的特定关键操作情况。</li><li><code>All</code>:模块的全部指标,供<strong>模块开发人员</strong>使用,往往在复现问题的时候使用,从而快速解决问题。</li></ul></li></ul><h3 id="_3-2-监控指标对外获取数据格式" tabindex="-1"><a class="header-anchor" href="#_3-2-监控指标对外获取数据格式" aria-hidden="true">#</a> 3.2. 监控指标对外获取数据格式</h3><ul><li>IoTDB 对外提供 JMX、 Prometheus 和 IoTDB 格式的监控指标: <ul><li>对于 JMX ,可以通过<code>org.apache.iotdb.metrics</code>获取系统监控指标指标。</li><li>对于 Prometheus ,可以通过对外暴露的端口获取监控指标的值</li><li>对于 IoTDB 方式对外暴露:可以通过执行 IoTDB 的查询来获取监控指标</li></ul></li></ul><h2 id="_4-监控指标有哪些" tabindex="-1"><a class="header-anchor" href="#_4-监控指标有哪些" aria-hidden="true">#</a> 4. 监控指标有哪些?</h2>',14),h={href:"https://github.com/apache/iotdb/tree/master/metrics",target:"_blank",rel:"noopener noreferrer"},m=a('<h3 id="_4-1-core-级别监控指标" tabindex="-1"><a class="header-anchor" href="#_4-1-core-级别监控指标" aria-hidden="true">#</a> 4.1. Core 级别监控指标</h3><p>Core 级别的监控指标在系统运行中默认开启,每一个 Core 级别的监控指标的添加都需要经过谨慎的评估,目前 Core 级别的监控指标如下所述:</p><h4 id="_4-1-1-集群运行状态" tabindex="-1"><a class="header-anchor" href="#_4-1-1-集群运行状态" aria-hidden="true">#</a> 4.1.1. 集群运行状态</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>up_time</td><td>-</td><td>AutoGauge</td><td>IoTDB 启动的运行时间</td></tr><tr><td>config_node</td><td>name="total",status="Registered/Online/Unknown"</td><td>AutoGauge</td><td>已注册/在线/离线 confignode 的节点数量</td></tr><tr><td>data_node</td><td>name="total",status="Registered/Online/Unknown"</td><td>AutoGauge</td><td>已注册/在线/离线 datanode 的节点数量</td></tr><tr><td>cluster_node_leader_count</td><td>name="{ip}:{port}"</td><td>Gauge</td><td>节点上共识组Leader的数量</td></tr><tr><td>cluster_node_status</td><td>name="{ip}:{port}",type="ConfigNode/DataNode"</td><td>Gauge</td><td>节点的状态,0=Unkonwn 1=online</td></tr><tr><td>entry</td><td>name="{interface}"</td><td>Timer</td><td>Client 建立的 Thrift 的耗时情况</td></tr><tr><td>mem</td><td>name="IoTConsensus"</td><td>AutoGauge</td><td>IoT共识协议的内存占用,单位为byte</td></tr></tbody></table><h4 id="_4-1-2-接口层统计" tabindex="-1"><a class="header-anchor" href="#_4-1-2-接口层统计" aria-hidden="true">#</a> 4.1.2. 接口层统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>thrift_connections</td><td>name="ConfigNodeRPC"</td><td>AutoGauge</td><td>ConfigNode 的内部 Thrift 连接数</td></tr><tr><td>thrift_connections</td><td>name="InternalRPC"</td><td>AutoGauge</td><td>DataNode 的内部 Thrift 连接数</td></tr><tr><td>thrift_connections</td><td>name="MPPDataExchangeRPC"</td><td>AutoGauge</td><td>MPP 框架的内部 Thrift 连接数</td></tr><tr><td>thrift_connections</td><td>name="ClientRPC"</td><td>AutoGauge</td><td>Client 建立的 Thrift 连接数</td></tr><tr><td>thrift_active_threads</td><td>name="ConfigNodeRPC-Service"</td><td>AutoGauge</td><td>ConfigNode 的内部活跃 Thrift 连接数</td></tr><tr><td>thrift_active_threads</td><td>name="DataNodeInternalRPC-Service"</td><td>AutoGauge</td><td>DataNode 的内部活跃 Thrift 连接数</td></tr><tr><td>thrift_active_threads</td><td>name="MPPDataExchangeRPC-Service"</td><td>AutoGauge</td><td>MPP 框架的内部活跃 Thrift 连接数</td></tr><tr><td>thrift_active_threads</td><td>name="ClientRPC-Service"</td><td>AutoGauge</td><td>Client 建立的活跃 Thrift 连接数</td></tr><tr><td>session_idle_time</td><td>name = "sessionId"</td><td>Histogram</td><td>不同 Session 的空闲时间分布情况</td></tr></tbody></table><h4 id="_4-1-3-节点统计" tabindex="-1"><a class="header-anchor" href="#_4-1-3-节点统计" aria-hidden="true">#</a> 4.1.3. 节点统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>quantity</td><td>name="database"</td><td>AutoGauge</td><td>系统数据库数量</td></tr><tr><td>quantity</td><td>name="timeSeries"</td><td>AutoGauge</td><td>系统时间序列数量</td></tr><tr><td>quantity</td><td>name="pointsIn"</td><td>Counter</td><td>系统累计写入点数</td></tr><tr><td>points</td><td>database="{database}", type="flush"</td><td>Gauge</td><td>最新一个刷盘的memtale的点数</td></tr></tbody></table><h4 id="_4-1-4-集群全链路" tabindex="-1"><a class="header-anchor" href="#_4-1-4-集群全链路" aria-hidden="true">#</a> 4.1.4. 集群全链路</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>performance_overview</td><td>interface="{interface}", type="{statement_type}"</td><td>Timer</td><td>客户端执行的操作的耗时情况</td></tr><tr><td>performance_overview_detail</td><td>stage="authority"</td><td>Timer</td><td>权限认证总耗时</td></tr><tr><td>performance_overview_detail</td><td>stage="parser"</td><td>Timer</td><td>解析构造总耗时</td></tr><tr><td>performance_overview_detail</td><td>stage="analyzer"</td><td>Timer</td><td>语句分析总耗时</td></tr><tr><td>performance_overview_detail</td><td>stage="planner"</td><td>Timer</td><td>请求规划总耗时</td></tr><tr><td>performance_overview_detail</td><td>stage="scheduler"</td><td>Timer</td><td>请求执行总耗时</td></tr><tr><td>performance_overview_schedule_detail</td><td>stage="local_scheduler"</td><td>Timer</td><td>本地请求执行总耗时</td></tr><tr><td>performance_overview_schedule_detail</td><td>stage="remote_scheduler"</td><td>Timer</td><td>远程请求执行总耗时</td></tr><tr><td>performance_overview_local_detail</td><td>stage="schema_validate"</td><td>Timer</td><td>元数据验证总耗时</td></tr><tr><td>performance_overview_local_detail</td><td>stage="trigger"</td><td>Timer</td><td>Trigger 触发总耗时</td></tr><tr><td>performance_overview_local_detail</td><td>stage="storage"</td><td>Timer</td><td>共识层总耗时</td></tr><tr><td>performance_overview_storage_detail</td><td>stage="engine"</td><td>Timer</td><td>DataRegion 抢锁总耗时</td></tr><tr><td>performance_overview_engine_detail</td><td>stage="lock"</td><td>Timer</td><td>DataRegion 抢锁总耗时</td></tr><tr><td>performance_overview_engine_detail</td><td>stage="create_memtable_block"</td><td>Timer</td><td>创建新的 Memtable 耗时</td></tr><tr><td>performance_overview_engine_detail</td><td>stage="memory_block"</td><td>Timer</td><td>内存控制阻塞总耗时</td></tr><tr><td>performance_overview_engine_detail</td><td>stage="wal"</td><td>Timer</td><td>写入 Wal 总耗时</td></tr><tr><td>performance_overview_engine_detail</td><td>stage="memtable"</td><td>Timer</td><td>写入 Memtable 总耗时</td></tr><tr><td>performance_overview_engine_detail</td><td>stage="last_cache"</td><td>Timer</td><td>更新 LastCache 总耗时</td></tr></tbody></table><h4 id="_4-1-5-任务统计" tabindex="-1"><a class="header-anchor" href="#_4-1-5-任务统计" aria-hidden="true">#</a> 4.1.5. 任务统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>queue</td><td>name="compaction_inner", status="running/waiting"</td><td>Gauge</td><td>空间内合并任务数</td></tr><tr><td>queue</td><td>name="compaction_cross", status="running/waiting"</td><td>Gauge</td><td>跨空间合并任务数</td></tr><tr><td>queue</td><td>name="flush",status="running/waiting"</td><td>AutoGauge</td><td>刷盘任务数</td></tr><tr><td>cost_task</td><td>name="inner_compaction/cross_compaction/flush"</td><td>Gauge</td><td>任务耗时情况</td></tr></tbody></table><h4 id="_4-1-6-iotdb-进程运行状态" tabindex="-1"><a class="header-anchor" href="#_4-1-6-iotdb-进程运行状态" aria-hidden="true">#</a> 4.1.6. IoTDB 进程运行状态</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>process_cpu_load</td><td>name="process"</td><td>AutoGauge</td><td>IoTDB 进程的 CPU 占用率,单位为%</td></tr><tr><td>process_cpu_time</td><td>name="process"</td><td>AutoGauge</td><td>IoTDB 进程占用的 CPU 时间,单位为ns</td></tr><tr><td>process_max_mem</td><td>name="memory"</td><td>AutoGauge</td><td>IoTDB 进程最大可用内存</td></tr><tr><td>process_total_mem</td><td>name="memory"</td><td>AutoGauge</td><td>IoTDB 进程当前已申请内存</td></tr><tr><td>process_free_mem</td><td>name="memory"</td><td>AutoGauge</td><td>IoTDB 进程当前剩余可用内存</td></tr></tbody></table><h4 id="_4-1-7-系统运行状态" tabindex="-1"><a class="header-anchor" href="#_4-1-7-系统运行状态" aria-hidden="true">#</a> 4.1.7. 系统运行状态</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>sys_cpu_load</td><td>name="system"</td><td>AutoGauge</td><td>系统的 CPU 占用率,单位为%</td></tr><tr><td>sys_cpu_cores</td><td>name="system"</td><td>Gauge</td><td>系统的可用处理器数</td></tr><tr><td>sys_total_physical_memory_size</td><td>name="memory"</td><td>Gauge</td><td>系统的最大物理内存</td></tr><tr><td>sys_free_physical_memory_size</td><td>name="memory"</td><td>AutoGauge</td><td>系统的剩余可用内存</td></tr><tr><td>sys_total_swap_space_size</td><td>name="memory"</td><td>AutoGauge</td><td>系统的交换区最大空间</td></tr><tr><td>sys_free_swap_space_size</td><td>name="memory"</td><td>AutoGauge</td><td>系统的交换区剩余可用空间</td></tr><tr><td>sys_committed_vm_size</td><td>name="memory"</td><td>AutoGauge</td><td>系统保证可用于正在运行的进程的虚拟内存量</td></tr><tr><td>sys_disk_total_space</td><td>name="disk"</td><td>AutoGauge</td><td>系统磁盘总大小</td></tr><tr><td>sys_disk_free_space</td><td>name="disk"</td><td>AutoGauge</td><td>系统磁盘可用大小</td></tr></tbody></table><h4 id="_4-1-8-iotdb-日志统计" tabindex="-1"><a class="header-anchor" href="#_4-1-8-iotdb-日志统计" aria-hidden="true">#</a> 4.1.8. IoTDB 日志统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>logback_events</td><td>level="trace/debug/info/warn/error"</td><td>Counter</td><td>不同类型的日志个数</td></tr></tbody></table><h4 id="_4-1-9-文件统计信息" tabindex="-1"><a class="header-anchor" href="#_4-1-9-文件统计信息" aria-hidden="true">#</a> 4.1.9. 文件统计信息</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>file_size</td><td>name="wal"</td><td>AutoGauge</td><td>写前日志总大小,单位为byte</td></tr><tr><td>file_size</td><td>name="seq"</td><td>AutoGauge</td><td>顺序TsFile总大小,单位为byte</td></tr><tr><td>file_size</td><td>name="unseq"</td><td>AutoGauge</td><td>乱序TsFile总大小,单位为byte</td></tr><tr><td>file_size</td><td>name="inner-seq-temp"</td><td>AutoGauge</td><td>顺序空间内合并临时文件大小,单位为byte</td></tr><tr><td>file_size</td><td>name="inner-unseq-temp"</td><td>AutoGauge</td><td>乱序空间内合并临时文件大小,单位为byte</td></tr><tr><td>file_size</td><td>name="cross-temp"</td><td>AutoGauge</td><td>跨空间合并临时文件大小,单位为byte</td></tr><tr><td>file_size</td><td>name="mods"</td><td>AutoGauge</td><td>Modification 文件的大小</td></tr><tr><td>file_count</td><td>name="wal"</td><td>AutoGauge</td><td>写前日志文件个数</td></tr><tr><td>file_count</td><td>name="seq"</td><td>AutoGauge</td><td>顺序TsFile文件个数</td></tr><tr><td>file_count</td><td>name="unseq"</td><td>AutoGauge</td><td>乱序TsFile文件个数</td></tr><tr><td>file_count</td><td>name="inner-seq-temp"</td><td>AutoGauge</td><td>顺序空间内合并临时文件个数</td></tr><tr><td>file_count</td><td>name="inner-unseq-temp"</td><td>AutoGauge</td><td>乱序空间内合并临时文件个数</td></tr><tr><td>file_count</td><td>name="cross-temp"</td><td>AutoGauge</td><td>跨空间合并临时文件个数</td></tr><tr><td>file_count</td><td>name="open_file_handlers"</td><td>AutoGauge</td><td>IoTDB 进程打开文件数,仅支持Linux和MacOS</td></tr><tr><td>file_count</td><td>name="mods</td><td>AutoGauge</td><td>Modification 文件的数目</td></tr></tbody></table><h4 id="_4-1-10-jvm-内存统计" tabindex="-1"><a class="header-anchor" href="#_4-1-10-jvm-内存统计" aria-hidden="true">#</a> 4.1.10. JVM 内存统计</h4>',21),_=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"Metric"),t("th",null,"Tags"),t("th",null,"Type"),t("th",null,"Description")])]),t("tbody",null,[t("tr",null,[t("td",null,"jvm_buffer_memory_used_bytes"),t("td",null,'id="direct/mapped"'),t("td",null,"AutoGauge"),t("td",null,"已经使用的缓冲区大小")]),t("tr",null,[t("td",null,"jvm_buffer_total_capacity_bytes"),t("td",null,'id="direct/mapped"'),t("td",null,"AutoGauge"),t("td",null,"最大缓冲区大小")]),t("tr",null,[t("td",null,"jvm_buffer_count_buffers"),t("td",null,'id="direct/mapped"'),t("td",null,"AutoGauge"),t("td",null,"当前缓冲区数量")]),t("tr",null,[t("td",null,"jvm_memory_committed_bytes"),t("td",{area:'heap/nonheap,id="xxx",'}),t("td",null,"AutoGauge"),t("td",null,"当前申请的内存大小")]),t("tr",null,[t("td",null,"jvm_memory_max_bytes"),t("td",{area:'heap/nonheap,id="xxx",'}),t("td",null,"AutoGauge"),t("td",null,"最大内存")]),t("tr",null,[t("td",null,"jvm_memory_used_bytes"),t("td",{area:'heap/nonheap,id="xxx",'}),t("td",null,"AutoGauge"),t("td",null,"已使用内存大小")])])],-1),q=a('<h4 id="_4-1-11-jvm-线程统计" tabindex="-1"><a class="header-anchor" href="#_4-1-11-jvm-线程统计" aria-hidden="true">#</a> 4.1.11. JVM 线程统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>jvm_threads_live_threads</td><td></td><td>AutoGauge</td><td>当前线程数</td></tr><tr><td>jvm_threads_daemon_threads</td><td></td><td>AutoGauge</td><td>当前 Daemon 线程数</td></tr><tr><td>jvm_threads_peak_threads</td><td></td><td>AutoGauge</td><td>峰值线程数</td></tr><tr><td>jvm_threads_states_threads</td><td>state="runnable/blocked/waiting/timed-waiting/new/terminated"</td><td>AutoGauge</td><td>当前处于各种状态的线程数</td></tr></tbody></table><h4 id="_4-1-12-jvm-gc-统计" tabindex="-1"><a class="header-anchor" href="#_4-1-12-jvm-gc-统计" aria-hidden="true">#</a> 4.1.12. JVM GC 统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>jvm_gc_pause</td><td>action="end of major GC/end of minor GC",cause="xxxx"</td><td>Timer</td><td>不同原因的Young GC/Full GC的次数与耗时</td></tr><tr><td></td><td></td><td></td><td></td></tr><tr><td>jvm_gc_concurrent_phase_time</td><td>action="{action}",cause="{cause}"</td><td>Timer</td><td>不同原因的Young GC/Full GC的次数与耗时</td></tr><tr><td></td><td></td><td></td><td></td></tr><tr><td>jvm_gc_max_data_size_bytes</td><td></td><td>AutoGauge</td><td>老年代内存的历史最大值</td></tr><tr><td>jvm_gc_live_data_size_bytes</td><td></td><td>AutoGauge</td><td>老年代内存的使用值</td></tr><tr><td>jvm_gc_memory_promoted_bytes</td><td></td><td>Counter</td><td>老年代内存正向增长累计值</td></tr><tr><td>jvm_gc_memory_allocated_bytes</td><td></td><td>Counter</td><td>GC分配内存正向增长累计值</td></tr></tbody></table><h3 id="_4-2-important-级别监控指标" tabindex="-1"><a class="header-anchor" href="#_4-2-important-级别监控指标" aria-hidden="true">#</a> 4.2. Important 级别监控指标</h3><p>目前 Important 级别的监控指标如下所述:</p><h4 id="_4-2-1-节点统计" tabindex="-1"><a class="header-anchor" href="#_4-2-1-节点统计" aria-hidden="true">#</a> 4.2.1. 节点统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>region</td><td>name="total",type="SchemaRegion"</td><td>AutoGauge</td><td>分区表中 SchemaRegion 总数量</td></tr><tr><td>region</td><td>name="total",type="DataRegion"</td><td>AutoGauge</td><td>分区表中 DataRegion 总数量</td></tr><tr><td>region</td><td>name="{ip}:{port}",type="SchemaRegion"</td><td>Gauge</td><td>分区表中对应节点上 DataRegion 总数量</td></tr><tr><td>region</td><td>name="{ip}:{port}",type="DataRegion"</td><td>Gauge</td><td>分区表中对应节点上 DataRegion 总数量</td></tr></tbody></table><h4 id="_4-2-2-ratis共识协议统计" tabindex="-1"><a class="header-anchor" href="#_4-2-2-ratis共识协议统计" aria-hidden="true">#</a> 4.2.2. Ratis共识协议统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>ratis_consensus_write</td><td>stage="writeLocally"</td><td>Timer</td><td>本地写入阶段的时间</td></tr><tr><td>ratis_consensus_write</td><td>stage="writeRemotely"</td><td>Timer</td><td>远程写入阶段的时间</td></tr><tr><td>ratis_consensus_write</td><td>stage="writeStateMachine"</td><td>Timer</td><td>写入状态机阶段的时间</td></tr><tr><td>ratis_server</td><td>clientWriteRequest</td><td>Timer</td><td>处理来自客户端写请求的时间</td></tr><tr><td>ratis_server</td><td>followerAppendEntryLatency</td><td>Timer</td><td>跟随者追加日志条目的总时间</td></tr><tr><td>ratis_log_worker</td><td>appendEntryLatency</td><td>Timer</td><td>领导者追加日志条目的总时间</td></tr><tr><td>ratis_log_worker</td><td>queueingDelay</td><td>Timer</td><td>一个 Raft 日志操作被请求后进入队列的时间,等待队列未满</td></tr><tr><td>ratis_log_worker</td><td>enqueuedTime</td><td>Timer</td><td>一个 Raft 日志操作在队列中的时间</td></tr><tr><td>ratis_log_worker</td><td>writelogExecutionTime</td><td>Timer</td><td>一个 Raft 日志写入操作完成执行的时间</td></tr><tr><td>ratis_log_worker</td><td>flushTime</td><td>Timer</td><td>刷新日志的时间</td></tr><tr><td>ratis_log_worker</td><td>closedSegmentsSizeInBytes</td><td>Gauge</td><td>关闭的 Raft 日志段的总大小</td></tr><tr><td>ratis_log_worker</td><td>openSegmentSizeInBytes</td><td>Gauge</td><td>打开的 Raft 日志段的总大小</td></tr></tbody></table><h4 id="_4-2-3-iot共识协议统计" tabindex="-1"><a class="header-anchor" href="#_4-2-3-iot共识协议统计" aria-hidden="true">#</a> 4.2.3. IoT共识协议统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>iot_consensus</td><td>name="logDispatcher-{IP}:{Port}", region="{region}", type="currentSyncIndex"</td><td>AutoGauge</td><td>副本组同步线程的当前同步进度</td></tr><tr><td>iot_consensus</td><td>name="logDispatcher-{IP}:{Port}", region="{region}", type="cachedRequestInMemoryQueue"</td><td>AutoGauge</td><td>副本组同步线程缓存队列请求总大小</td></tr><tr><td>iot_consensus</td><td>name="IoTConsensusServerImpl", region="{region}", type="searchIndex"</td><td>AutoGauge</td><td>副本组主流程写入进度</td></tr><tr><td>iot_consensus</td><td>name="IoTConsensusServerImpl", region="{region}", type="safeIndex"</td><td>AutoGauge</td><td>副本组同步进度</td></tr><tr><td>iot_consensus</td><td>name="IoTConsensusServerImpl", region="{region}", type="syncLag"</td><td>AutoGauge</td><td>副本组写入进度与同步进度差</td></tr><tr><td>iot_consensus</td><td>name="IoTConsensusServerImpl", region="{region}", type="LogEntriesFromWAL"</td><td>AutoGauge</td><td>副本组Batch中来自WAL的日志项数量</td></tr><tr><td>iot_consensus</td><td>name="IoTConsensusServerImpl", region="{region}", type="LogEntriesFromQueue"</td><td>AutoGauge</td><td>副本组Batch中来自队列的日志项数量</td></tr><tr><td>stage</td><td>name="iot_consensus", region="{region}", type="getStateMachineLock"</td><td>Histogram</td><td>主流程获取状态机锁耗时</td></tr><tr><td>stage</td><td>name="iot_consensus", region="{region}", type="checkingBeforeWrite"</td><td>Histogram</td><td>主流程写入状态机检查耗时</td></tr><tr><td>stage</td><td>name="iot_consensus", region="{region}", type="writeStateMachine"</td><td>Histogram</td><td>主流程写入状态机耗时</td></tr><tr><td>stage</td><td>name="iot_consensus", region="{region}", type="offerRequestToQueue"</td><td>Histogram</td><td>主流程尝试添加队列耗时</td></tr><tr><td>stage</td><td>name="iot_consensus", region="{region}", type="consensusWrite"</td><td>Histogram</td><td>主流程全写入耗时</td></tr><tr><td>stage</td><td>name="iot_consensus", region="{region}", type="constructBatch"</td><td>Histogram</td><td>同步线程构造 Batch 耗时</td></tr><tr><td>stage</td><td>name="iot_consensus", region="{region}", type="syncLogTimePerRequest"</td><td>Histogram</td><td>异步回调流程同步日志耗时</td></tr></tbody></table><h4 id="_4-2-4-缓存统计" tabindex="-1"><a class="header-anchor" href="#_4-2-4-缓存统计" aria-hidden="true">#</a> 4.2.4. 缓存统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>cache_hit</td><td>name="chunk"</td><td>AutoGauge</td><td>ChunkCache的命中率,单位为%</td></tr><tr><td>cache_hit</td><td>name="schema"</td><td>AutoGauge</td><td>SchemaCache的命中率,单位为%</td></tr><tr><td>cache_hit</td><td>name="timeSeriesMeta"</td><td>AutoGauge</td><td>TimeseriesMetadataCache的命中率,单位为%</td></tr><tr><td>cache_hit</td><td>name="bloomFilter"</td><td>AutoGauge</td><td>TimeseriesMetadataCache中的bloomFilter的拦截率,单位为%</td></tr><tr><td>cache</td><td>name="Database", type="hit"</td><td>Counter</td><td>Database Cache 的命中次数</td></tr><tr><td>cache</td><td>name="Database", type="all"</td><td>Counter</td><td>Database Cache 的访问次数</td></tr><tr><td>cache</td><td>name="SchemaPartition", type="hit"</td><td>Counter</td><td>SchemaPartition Cache 的命中次数</td></tr><tr><td>cache</td><td>name="SchemaPartition", type="all"</td><td>Counter</td><td>SchemaPartition Cache 的访问次数</td></tr><tr><td>cache</td><td>name="DataPartition", type="hit"</td><td>Counter</td><td>DataPartition Cache 的命中次数</td></tr><tr><td>cache</td><td>name="DataPartition", type="all"</td><td>Counter</td><td>DataPartition Cache 的访问次数</td></tr><tr><td>cache</td><td>name="SchemaCache", type="hit"</td><td>Counter</td><td>SchemaCache 的命中次数</td></tr><tr><td>cache</td><td>name="SchemaCache", type="all"</td><td>Counter</td><td>SchemaCache 的访问次数</td></tr></tbody></table><h4 id="_4-2-5-内存统计" tabindex="-1"><a class="header-anchor" href="#_4-2-5-内存统计" aria-hidden="true">#</a> 4.2.5. 内存统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>mem</td><td>name="database_{name}"</td><td>AutoGauge</td><td>DataNode内对应DataRegion的内存占用,单位为byte</td></tr><tr><td>mem</td><td>name="chunkMetaData_{name}"</td><td>AutoGauge</td><td>写入TsFile时的ChunkMetaData的内存占用,单位为byte</td></tr><tr><td>mem</td><td>name="IoTConsensus"</td><td>AutoGauge</td><td>IoT共识协议的内存占用,单位为byte</td></tr><tr><td>mem</td><td>name="IoTConsensusQueue"</td><td>AutoGauge</td><td>IoT共识协议用于队列的内存占用,单位为byte</td></tr><tr><td>mem</td><td>name="IoTConsensusSync"</td><td>AutoGauge</td><td>IoT共识协议用于同步的内存占用,单位为byte</td></tr><tr><td>mem</td><td>name="schema_region_total_usage"</td><td>AutoGauge</td><td>所有SchemaRegion的总内存占用,单位为byte</td></tr></tbody></table><h4 id="_4-2-6-合并统计" tabindex="-1"><a class="header-anchor" href="#_4-2-6-合并统计" aria-hidden="true">#</a> 4.2.6. 合并统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>data_written</td><td>name="compaction", type="aligned/not-aligned/total"</td><td>Counter</td><td>合并时写入量</td></tr><tr><td>data_read</td><td>name="compaction"</td><td>Counter</td><td>合并时的读取量</td></tr><tr><td>compaction_task_count</td><td>name = "inner_compaction", type="sequence"</td><td>Counter</td><td>顺序空间内合并次数</td></tr><tr><td>compaction_task_count</td><td>name = "inner_compaction", type="unsequence"</td><td>Counter</td><td>乱序空间内合并次数</td></tr><tr><td>compaction_task_count</td><td>name = "cross_compaction", type="cross"</td><td>Counter</td><td>跨空间合并次数</td></tr></tbody></table><h4 id="_4-2-7-iotdb-进程统计" tabindex="-1"><a class="header-anchor" href="#_4-2-7-iotdb-进程统计" aria-hidden="true">#</a> 4.2.7. IoTDB 进程统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>process_used_mem</td><td>name="memory"</td><td>AutoGauge</td><td>IoTDB 进程当前使用内存</td></tr><tr><td>process_mem_ratio</td><td>name="memory"</td><td>AutoGauge</td><td>IoTDB 进程的内存占用比例</td></tr><tr><td>process_threads_count</td><td>name="process"</td><td>AutoGauge</td><td>IoTDB 进程当前线程数</td></tr><tr><td>process_status</td><td>name="process"</td><td>AutoGauge</td><td>IoTDB 进程存活状态,1为存活,0为终止</td></tr></tbody></table><h4 id="_4-2-8-jvm-类加载统计" tabindex="-1"><a class="header-anchor" href="#_4-2-8-jvm-类加载统计" aria-hidden="true">#</a> 4.2.8. JVM 类加载统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>jvm_classes_unloaded_classes</td><td></td><td>AutoGauge</td><td>累计卸载的class数量</td></tr><tr><td>jvm_classes_loaded_classes</td><td></td><td>AutoGauge</td><td>累计加载的class数量</td></tr></tbody></table><h4 id="_4-2-9-jvm-编译时间统计" tabindex="-1"><a class="header-anchor" href="#_4-2-9-jvm-编译时间统计" aria-hidden="true">#</a> 4.2.9. JVM 编译时间统计</h4>',23),g=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"Metric"),t("th",null,"Tags"),t("th",null,"Type"),t("th",null,"Description")])]),t("tbody",null,[t("tr",null,[t("td",null,"jvm_compilation_time_ms"),t("td",{compiler:"HotSpot 64-Bit Tiered Compilers,"}),t("td",null,"AutoGauge"),t("td",null,"耗费在编译上的时间")])])],-1),p=a(`<h4 id="_4-2-10-查询规划耗时统计" tabindex="-1"><a class="header-anchor" href="#_4-2-10-查询规划耗时统计" aria-hidden="true">#</a> 4.2.10. 查询规划耗时统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>query_plan_cost</td><td>stage="analyzer"</td><td>Timer</td><td>查询语句分析耗时</td></tr><tr><td>query_plan_cost</td><td>stage="logical_planner"</td><td>Timer</td><td>查询逻辑计划规划耗时</td></tr><tr><td>query_plan_cost</td><td>stage="distribution_planner"</td><td>Timer</td><td>查询分布式执行计划规划耗时</td></tr><tr><td>query_plan_cost</td><td>stage="partition_fetcher"</td><td>Timer</td><td>分区信息拉取耗时</td></tr><tr><td>query_plan_cost</td><td>stage="schema_fetcher"</td><td>Timer</td><td>元数据信息拉取耗时</td></tr></tbody></table><h4 id="_4-2-11-执行计划分发耗时统计" tabindex="-1"><a class="header-anchor" href="#_4-2-11-执行计划分发耗时统计" aria-hidden="true">#</a> 4.2.11. 执行计划分发耗时统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>dispatcher</td><td>stage="wait_for_dispatch"</td><td>Timer</td><td>分发执行计划耗时</td></tr><tr><td>dispatcher</td><td>stage="dispatch_read"</td><td>Timer</td><td>查询执行计划发送耗时</td></tr></tbody></table><h4 id="_4-2-12-查询资源访问统计" tabindex="-1"><a class="header-anchor" href="#_4-2-12-查询资源访问统计" aria-hidden="true">#</a> 4.2.12. 查询资源访问统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>query_resource</td><td>type="sequence_tsfile"</td><td>Rate</td><td>顺序文件访问频率</td></tr><tr><td>query_resource</td><td>type="unsequence_tsfile"</td><td>Rate</td><td>乱序文件访问频率</td></tr><tr><td>query_resource</td><td>type="flushing_memtable"</td><td>Rate</td><td>flushing memtable 访问频率</td></tr><tr><td>query_resource</td><td>type="working_memtable"</td><td>Rate</td><td>working memtable 访问频率</td></tr></tbody></table><h4 id="_4-2-13-数据传输模块统计" tabindex="-1"><a class="header-anchor" href="#_4-2-13-数据传输模块统计" aria-hidden="true">#</a> 4.2.13. 数据传输模块统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>data_exchange_cost</td><td>operation="source_handle_get_tsblock", type="local/remote"</td><td>Timer</td><td>source handle 接收 TsBlock 耗时</td></tr><tr><td>data_exchange_cost</td><td>operation="source_handle_deserialize_tsblock", type="local/remote"</td><td>Timer</td><td>source handle 反序列化 TsBlock 耗时</td></tr><tr><td>data_exchange_cost</td><td>operation="sink_handle_send_tsblock", type="local/remote"</td><td>Timer</td><td>sink handle 发送 TsBlock 耗时</td></tr><tr><td>data_exchange_cost</td><td>operation="send_new_data_block_event_task", type="server/caller"</td><td>Timer</td><td>sink handle 发送 TsBlock RPC 耗时</td></tr><tr><td>data_exchange_cost</td><td>operation="get_data_block_task", type="server/caller"</td><td>Timer</td><td>source handle 接收 TsBlock RPC 耗时</td></tr><tr><td>data_exchange_cost</td><td>operation="on_acknowledge_data_block_event_task", type="server/caller"</td><td>Timer</td><td>source handle 确认接收 TsBlock RPC 耗时</td></tr><tr><td>data_exchange_count</td><td>name="send_new_data_block_num", type="server/caller"</td><td>Histogram</td><td>sink handle 发送 TsBlock数量</td></tr><tr><td>data_exchange_count</td><td>name="get_data_block_num", type="server/caller"</td><td>Histogram</td><td>source handle 接收 TsBlock 数量</td></tr><tr><td>data_exchange_count</td><td>name="on_acknowledge_data_block_num", type="server/caller"</td><td>Histogram</td><td>source handle 确认接收 TsBlock 数量</td></tr><tr><td>data_exchange_count</td><td>name="shuffle_sink_handle_size"</td><td>AutoGauge</td><td>sink handle 数量</td></tr><tr><td>data_exchange_count</td><td>name="source_handle_size"</td><td>AutoGauge</td><td>source handle 数量</td></tr></tbody></table><h4 id="_4-2-14-查询任务调度统计" tabindex="-1"><a class="header-anchor" href="#_4-2-14-查询任务调度统计" aria-hidden="true">#</a> 4.2.14. 查询任务调度统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>driver_scheduler</td><td>name="ready_queued_time"</td><td>Timer</td><td>就绪队列排队时间</td></tr><tr><td>driver_scheduler</td><td>name="block_queued_time"</td><td>Timer</td><td>阻塞队列排队时间</td></tr><tr><td>driver_scheduler</td><td>name="ready_queue_task_count"</td><td>AutoGauge</td><td>就绪队列排队任务数</td></tr><tr><td>driver_scheduler</td><td>name="block_queued_task_count"</td><td>AutoGauge</td><td>阻塞队列排队任务数</td></tr><tr><td>driver_scheduler</td><td>name="timeout_queued_task_count"</td><td>AutoGauge</td><td>超时队列排队任务数</td></tr><tr><td>driver_scheduler</td><td>name="query_map_size"</td><td>AutoGauge</td><td>记录在查询调度器中的查询数</td></tr></tbody></table><h4 id="_4-2-15-查询执行耗时统计" tabindex="-1"><a class="header-anchor" href="#_4-2-15-查询执行耗时统计" aria-hidden="true">#</a> 4.2.15. 查询执行耗时统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>query_execution</td><td>stage="local_execution_planner"</td><td>Timer</td><td>算子树构造耗时</td></tr><tr><td>query_execution</td><td>stage="query_resource_init"</td><td>Timer</td><td>查询资源初始化耗时</td></tr><tr><td>query_execution</td><td>stage="get_query_resource_from_mem"</td><td>Timer</td><td>查询资源内存查询与构造耗时</td></tr><tr><td>query_execution</td><td>stage="driver_internal_process"</td><td>Timer</td><td>Driver 执行耗时</td></tr><tr><td>query_execution</td><td>stage="wait_for_result"</td><td>Timer</td><td>从resultHandle 获取一次查询结果的耗时</td></tr><tr><td>operator_execution_cost</td><td>name="{operator_name}"</td><td>Timer</td><td>算子执行耗时</td></tr><tr><td>operator_execution_count</td><td>name="{operator_name}"</td><td>Counter</td><td>算子调用次数(以 next 方法调用次数计算)</td></tr><tr><td>aggregation</td><td>from="raw_data"</td><td>Timer</td><td>从一批原始数据进行一次聚合计算的耗时</td></tr><tr><td>aggregation</td><td>from="statistics"</td><td>Timer</td><td>使用统计信息更新一次聚合值的耗时</td></tr><tr><td>series_scan_cost</td><td>stage="load_timeseries_metadata", type="aligned/non_aligned", from="mem/disk"</td><td>Timer</td><td>加载 TimeseriesMetadata 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="read_timeseries_metadata", type="", from="cache/file"</td><td>Timer</td><td>读取一个文件的 Metadata 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="timeseries_metadata_modification", type="aligned/non_aligned", from="null"</td><td>Timer</td><td>过滤删除的 TimeseriesMetadata 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="load_chunk_metadata_list", type="aligned/non_aligned", from="mem/disk"</td><td>Timer</td><td>加载 ChunkMetadata 列表耗时</td></tr><tr><td>series_scan_cost</td><td>stage="chunk_metadata_modification", type="aligned/non_aligned", from="mem/disk"</td><td>Timer</td><td>过滤删除的 ChunkMetadata 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="chunk_metadata_filter", type="aligned/non_aligned", from="mem/disk"</td><td>Timer</td><td>根据查询过滤条件过滤 ChunkMetadata 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="construct_chunk_reader", type="aligned/non_aligned", from="mem/disk"</td><td>Timer</td><td>构造 ChunkReader 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="read_chunk", type="", from="cache/file"</td><td>Timer</td><td>读取 Chunk 的耗时</td></tr><tr><td>series_scan_cost</td><td>stage="init_chunk_reader", type="aligned/non_aligned", from="mem/disk"</td><td>Timer</td><td>初始化 ChunkReader(构造 PageReader) 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="build_tsblock_from_page_reader", type="aligned/non_aligned", from="mem/disk"</td><td>Timer</td><td>从 PageReader 构造 Tsblock 耗时</td></tr><tr><td>series_scan_cost</td><td>stage="build_tsblock_from_merge_reader", type="aligned/non_aligned", from="null"</td><td>Timer</td><td>从 MergeReader 构造 Tsblock (解乱序数据)耗时</td></tr></tbody></table><h4 id="_4-2-16-协调模块统计" tabindex="-1"><a class="header-anchor" href="#_4-2-16-协调模块统计" aria-hidden="true">#</a> 4.2.16. 协调模块统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>coordinator</td><td>name="query_execution_map_size"</td><td>AutoGauge</td><td>当前DataNode上记录的查询数</td></tr></tbody></table><h4 id="_4-2-17-查询实例管理模块统计" tabindex="-1"><a class="header-anchor" href="#_4-2-17-查询实例管理模块统计" aria-hidden="true">#</a> 4.2.17. 查询实例管理模块统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>fragment_instance_manager</td><td>name="instance_context_size"</td><td>AutoGauge</td><td>当前 DataNode 上的查询分片 context 数</td></tr><tr><td>fragment_instance_manager</td><td>name="instance_execution_size"</td><td>AutoGauge</td><td>当前 DataNode 上的查询分片数</td></tr></tbody></table><h4 id="_4-2-18-内存池统计" tabindex="-1"><a class="header-anchor" href="#_4-2-18-内存池统计" aria-hidden="true">#</a> 4.2.18. 内存池统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>memory_pool</td><td>name="max_bytes"</td><td>Gauge</td><td>用于数据交换的最大内存</td></tr><tr><td>memory_pool</td><td>name="remaining_bytes"</td><td>AutoGauge</td><td>用于数据交换的剩余内存</td></tr><tr><td>memory_pool</td><td>name="query_memory_reservation_size"</td><td>AutoGauge</td><td>申请内存的查询数</td></tr><tr><td>memory_pool</td><td>name="memory_reservation_size"</td><td>AutoGauge</td><td>申请内存的 sink handle 和 source handle 数</td></tr></tbody></table><h4 id="_4-2-19-本地查询分片调度模块统计" tabindex="-1"><a class="header-anchor" href="#_4-2-19-本地查询分片调度模块统计" aria-hidden="true">#</a> 4.2.19. 本地查询分片调度模块统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>local_execution_planner</td><td>name="free_memory_for_operators"</td><td>AutoGauge</td><td>可分配给operator执行的剩余内存</td></tr></tbody></table><h4 id="_4-2-20-元数据引擎统计" tabindex="-1"><a class="header-anchor" href="#_4-2-20-元数据引擎统计" aria-hidden="true">#</a> 4.2.20. 元数据引擎统计</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>schema_engine</td><td>name="schema_region_total_mem_usage"</td><td>AutoGauge</td><td>SchemaRegion 全局内存使用量</td></tr><tr><td>schema_engine</td><td>name="schema_region_mem_capacity"</td><td>AutoGauge</td><td>SchemaRegion 全局可用内存</td></tr><tr><td>schema_engine</td><td>name="schema_engine_mode"</td><td>Gauge</td><td>SchemaEngine 模式</td></tr><tr><td>schema_engine</td><td>name="schema_region_consensus"</td><td>Gauge</td><td>元数据管理引擎共识协议</td></tr><tr><td>schema_engine</td><td>name="schema_region_number"</td><td>AutoGauge</td><td>SchemaRegion 个数</td></tr><tr><td>quantity</td><td>name="template_series_cnt"</td><td>AutoGauge</td><td>模板序列数</td></tr><tr><td>schema_region</td><td>name="schema_region_mem_usage", region="SchemaRegion[{regionId}]"</td><td>AutoGauge</td><td>每个 SchemaRegion 分别的内存使用量</td></tr><tr><td>schema_region</td><td>name="schema_region_series_cnt", region="SchemaRegion[{regionId}]"</td><td>AutoGauge</td><td>每个 SchemaRegion 分别的时间序列数</td></tr><tr><td>schema_region</td><td>name="activated_template_cnt", region="SchemaRegion[{regionId}]"</td><td>AutoGauge</td><td>每个 SchemaRegion 激活的模板数</td></tr><tr><td>schema_region</td><td>name="template_series_cnt", region="SchemaRegion[{regionId}]"</td><td>AutoGauge</td><td>每个 SchemaRegion 的模板序列数</td></tr></tbody></table><h4 id="_4-2-21-写入指标统计" tabindex="-1"><a class="header-anchor" href="#_4-2-21-写入指标统计" aria-hidden="true">#</a> 4.2.21. 写入指标统计</h4><table><thead><tr><th>Metric</th><th style="text-align:left;">Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>wal_node_num</td><td style="text-align:left;">name="wal_nodes_num"</td><td>AutoGauge</td><td>WALNode数量</td></tr><tr><td>wal_cost</td><td style="text-align:left;">stage="make_checkpoint" type="<checkpoint_type>"</td><td>Timer</td><td>创建各种类型的Checkpoint耗时</td></tr><tr><td>wal_cost</td><td style="text-align:left;">type="serialize_one_wal_info_entry"</td><td>Timer</td><td>对每个WALInfoEntry serialize耗时</td></tr><tr><td>wal_cost</td><td style="text-align:left;">stage="sync_wal_buffer" type="<force_flag>"</td><td>Timer</td><td>WAL flush SyncBuffer耗时</td></tr><tr><td>wal_buffer</td><td style="text-align:left;">name="used_ratio"</td><td>Histogram</td><td>WALBuffer利用率</td></tr><tr><td>wal_buffer</td><td style="text-align:left;">name="entries_count"</td><td>Histogram</td><td>WALBuffer条目数量</td></tr><tr><td>wal_cost</td><td style="text-align:left;">stage="serialize_wal_entry" type="serialize_wal_entry_total"</td><td>Timer</td><td>WALBuffer serialize任务耗时</td></tr><tr><td>wal_node_info</td><td style="text-align:left;">name="effective_info_ratio" type="<wal_node_id>"</td><td>Histogram</td><td>WALNode有效信息占比</td></tr><tr><td>wal_node_info</td><td style="text-align:left;">name="oldest_mem_table_ram_when_cause_snapshot" type="<wal_node_id>"</td><td>Histogram</td><td>WAL触发oldest MemTable snapshot时MemTable大小</td></tr><tr><td>wal_node_info</td><td style="text-align:left;">name="oldest_mem_table_ram_when_cause_flush" type="<wal_node_id>"</td><td>Histogram</td><td>WAL触发oldest MemTable flush时MemTable大小</td></tr><tr><td>flush_sub_task_cost</td><td style="text-align:left;">type="sort_task"</td><td>Timer</td><td>排序阶段中的每个series排序耗时</td></tr><tr><td>flush_sub_task_cost</td><td style="text-align:left;">type="encoding_task"</td><td>Timer</td><td>编码阶段中处理每个encodingTask耗时</td></tr><tr><td>flush_sub_task_cost</td><td style="text-align:left;">type="io_task"</td><td>Timer</td><td>IO阶段中处理每个ioTask耗时</td></tr><tr><td>flush_cost</td><td style="text-align:left;">stage="write_plan_indices"</td><td>Timer</td><td>writePlanIndices耗时</td></tr><tr><td>flush_cost</td><td style="text-align:left;">stage="sort"</td><td>Timer</td><td>排序阶段总耗时</td></tr><tr><td>flush_cost</td><td style="text-align:left;">stage="encoding"</td><td>Timer</td><td>编码阶段总耗时</td></tr><tr><td>flush_cost</td><td style="text-align:left;">stage="io"</td><td>Timer</td><td>IO阶段总耗时</td></tr><tr><td>pending_flush_task</td><td style="text-align:left;">type="pending_task_num"</td><td>AutoGauge</td><td>阻塞的Task数</td></tr><tr><td>pending_flush_task</td><td style="text-align:left;">type="pending_sub_task_num"</td><td>AutoGauge</td><td>阻塞的SubTask数</td></tr><tr><td>flushing_mem_table_status</td><td style="text-align:left;">name="mem_table_size" region="DataRegion[<data_region_id>]"</td><td>Histogram</td><td>Flush时MemTable大小</td></tr><tr><td>flushing_mem_table_status</td><td style="text-align:left;">name="total_point_num" region="DataRegion[<data_region_id>]"</td><td>Histogram</td><td>Flush时MemTable中point数量</td></tr><tr><td>flushing_mem_table_status</td><td style="text-align:left;">name="series_num" region="DataRegion[<data_region_id>]"</td><td>Histogram</td><td>Flush时MemTable中series数量</td></tr><tr><td>flushing_mem_table_status</td><td style="text-align:left;">name="avg_series_points_num" region="DataRegion[<data_region_id>]"</td><td>Histogram</td><td>Flush时该memTable内平均每个Memchunk中的point数量</td></tr><tr><td>flushing_mem_table_status</td><td style="text-align:left;">name="tsfile_compression_ratio" region="DataRegion[<data_region_id>]"</td><td>Histogram</td><td>Flush MemTable时对应的TsFile的压缩率</td></tr><tr><td>flushing_mem_table_status</td><td style="text-align:left;">name="flush_tsfile_size" region="DataRegion[<data_region_id>]"</td><td>Histogram</td><td>Flush的MemTable对应的TsFile大小</td></tr><tr><td>data_region_mem_cost</td><td style="text-align:left;">name="data_region_mem_cost"</td><td>AutoGauge</td><td>DataRegion内存占用</td></tr></tbody></table><h3 id="_4-3-normal-级别监控指标" tabindex="-1"><a class="header-anchor" href="#_4-3-normal-级别监控指标" aria-hidden="true">#</a> 4.3. Normal 级别监控指标</h3><h4 id="_4-3-1-集群" tabindex="-1"><a class="header-anchor" href="#_4-3-1-集群" aria-hidden="true">#</a> 4.3.1. 集群</h4><table><thead><tr><th>Metric</th><th>Tags</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>region</td><td>name="{DatabaseName}",type="SchemaRegion/DataRegion"</td><td>AutoGauge</td><td>特定节点上不同 Database 的 DataRegion/SchemaRegion 个数</td></tr><tr><td>slot</td><td>name="{DatabaseName}",type="schemaSlotNumber/dataSlotNumber"</td><td>AutoGauge</td><td>特定节点上不同 Database 的 DataSlot/SchemaSlot 个数</td></tr></tbody></table><h3 id="_4-4-all-级别监控指标" tabindex="-1"><a class="header-anchor" href="#_4-4-all-级别监控指标" aria-hidden="true">#</a> 4.4. All 级别监控指标</h3><p>目前还没有All级别的监控指标,后续会持续添加。</p><h2 id="_5-怎样获取这些系统监控" tabindex="-1"><a class="header-anchor" href="#_5-怎样获取这些系统监控" aria-hidden="true">#</a> 5. 怎样获取这些系统监控?</h2><ul><li>监控模块的相关配置均在<code>conf/iotdb-{datanode/confignode}.properties</code>中,所有配置项支持通过<code>load configuration</code>命令热加载。</li></ul><h3 id="_5-1-使用-jmx-方式" tabindex="-1"><a class="header-anchor" href="#_5-1-使用-jmx-方式" aria-hidden="true">#</a> 5.1. 使用 JMX 方式</h3><p>对于使用 JMX 对外暴露的指标,可以通过 Jconsole 来进行查看。在进入 Jconsole 监控页面后,首先会看到 IoTDB 的各类运行情况的概览。在这里,您可以看到堆内存信息、线程信息、类信息以及服务器的 CPU 使用情况。</p><h4 id="_5-1-1-获取监控指标数据" tabindex="-1"><a class="header-anchor" href="#_5-1-1-获取监控指标数据" aria-hidden="true">#</a> 5.1.1. 获取监控指标数据</h4><p>连接到 JMX 后,您可以通过 "MBeans" 标签找到名为 "org.apache.iotdb.metrics" 的 "MBean",可以在侧边栏中查看所有监控指标的具体值。</p><img style="width:100%;max-width:800px;max-height:600px;margin-left:auto;margin-right:auto;display:block;" alt="metric-jmx" src="https://alioss.timecho.com/docs/img/github/204018765-6fda9391-ebcf-4c80-98c5-26f34bd74df0.png"><h4 id="_5-1-2-获取其他相关数据" tabindex="-1"><a class="header-anchor" href="#_5-1-2-获取其他相关数据" aria-hidden="true">#</a> 5.1.2. 获取其他相关数据</h4><p>连接到 JMX 后,您可以通过 "MBeans" 标签找到名为 "org.apache.iotdb.service" 的 "MBean",如下图所示,了解服务的基本状态</p><p><img style="width:100%;max-width:800px;max-height:600px;margin-left:auto;margin-right:auto;display:block;" src="https://alioss.timecho.com/docs/img/github/149951720-707f1ee8-32ee-4fde-9252-048caebd232e.png"> <br></p><p>为了提高查询性能,IOTDB 对 ChunkMetaData 和 TsFileMetaData 进行了缓存。用户可以使用 MXBean ,展开侧边栏<code>org.apache.iotdb.db.service</code>查看缓存命中率:</p><img style="width:100%;max-width:800px;max-height:600px;margin-left:auto;margin-right:auto;display:block;" src="https://alioss.timecho.com/docs/img/github/112426760-73e3da80-8d73-11eb-9a8f-9232d1f2033b.png"><h3 id="_5-2-使用-prometheus-方式" tabindex="-1"><a class="header-anchor" href="#_5-2-使用-prometheus-方式" aria-hidden="true">#</a> 5.2. 使用 Prometheus 方式</h3><h4 id="_5-2-1-监控指标的-prometheus-映射关系" tabindex="-1"><a class="header-anchor" href="#_5-2-1-监控指标的-prometheus-映射关系" aria-hidden="true">#</a> 5.2.1. 监控指标的 Prometheus 映射关系</h4><blockquote><p>对于 Metric Name 为 name, Tags 为 K1=V1, ..., Kn=Vn 的监控指标有如下映射,其中 value 为具体值</p></blockquote><table><thead><tr><th>监控指标类型</th><th>映射关系</th></tr></thead><tbody><tr><td>Counter</td><td>name_total{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value</td></tr><tr><td>AutoGauge、Gauge</td><td>name{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value</td></tr><tr><td>Histogram</td><td>name_max{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value <br> name_sum{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value <br> name_count{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value <br> name{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", quantile="0.5"} value <br> name{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", quantile="0.99"} value</td></tr><tr><td>Rate</td><td>name_total{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value <br> name_total{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", rate="m1"} value <br> name_total{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", rate="m5"} value <br> name_total{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", rate="m15"} value <br> name_total{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", rate="mean"} value</td></tr><tr><td>Timer</td><td>name_seconds_max{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value <br> name_seconds_sum{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value <br> name_seconds_count{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn"} value <br> name_seconds{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", quantile="0.5"} value value <br> name_seconds{cluster="clusterName", nodeType="nodeType", nodeId="nodeId",k1="V1" , ..., Kn="Vn", quantile="0.99"} value</td></tr></tbody></table><h4 id="_5-2-2-修改配置文件" tabindex="-1"><a class="header-anchor" href="#_5-2-2-修改配置文件" aria-hidden="true">#</a> 5.2.2. 修改配置文件</h4><ol><li>以 DataNode 为例,修改 iotdb-datanode.properties 配置文件如下:</li></ol><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="language-properties"><code><span class="token key attr-name">dn_metric_reporter_list</span><span class="token punctuation">=</span><span class="token value attr-value">PROMETHEUS</span> |