Skip to content

Neo4j 内置监控指标 ​

指标类别 ​

Neo4j 内置监控指标可以分为以下几个主要类别:

1. 数据库状态指标 ​

这些指标反映了数据库的整体运行状态,包括数据库的启动时间、当前状态、版本信息等。

2. 查询性能指标 ​

这些指标反映了数据库的查询性能,包括查询执行次数、查询执行时间、慢查询数量等。

3. 事务指标 ​

这些指标反映了数据库的事务处理情况,包括事务开始、提交、回滚的数量,事务等待时间等。

4. 存储指标 ​

这些指标反映了数据库的存储使用情况,包括节点数量、关系数量、属性数量、磁盘使用情况等。

5. 网络指标 ​

这些指标反映了数据库的网络通信情况,包括网络连接数、网络吞吐量等。

6. JVM 指标 ​

这些指标反映了 JVM 的运行状态,包括内存使用情况、GC 情况、线程数量等。

7. 集群指标 ​

这些指标反映了集群的运行状态,包括集群成员状态、复制延迟、选举情况等(仅适用于集群部署)。

核心指标详解 ​

1. 数据库状态指标 ​

指标名称描述单位正常范围
dbms.uptime数据库运行时间毫秒持续增长
dbms.status数据库当前状态字符串online
dbms.version数据库版本字符串无

2. 查询性能指标 ​

指标名称描述单位正常范围
neo4j.query.execution.counters.started已启动的查询数量计数与业务负载相关
neo4j.query.execution.counters.ended已结束的查询数量计数与业务负载相关
neo4j.query.execution.counters.failed失败的查询数量计数0 或极少
neo4j.query.execution.counters.slow慢查询数量计数与慢查询阈值相关
neo4j.query.execution.times.mean查询平均执行时间毫秒视查询复杂度而定
neo4j.query.execution.times.max查询最大执行时间毫秒视查询复杂度而定

3. 事务指标 ​

指标名称描述单位正常范围
neo4j.transaction.counters.started已启动的事务数量计数与业务负载相关
neo4j.transaction.counters.commited已提交的事务数量计数与业务负载相关
neo4j.transaction.counters.rollbacks已回滚的事务数量计数0 或极少
neo4j.transaction.counters.active当前活跃的事务数量计数视业务负载而定
neo4j.transaction.waiting_for_lock.time事务等待锁的时间毫秒0 或极少

4. 存储指标 ​

指标名称描述单位正常范围
neo4j.counts.nodes节点数量计数持续增长
neo4j.counts.relationships关系数量计数持续增长
neo4j.counts.properties属性数量计数持续增长
neo4j.pagecache.hits页缓存命中次数计数越高越好
neo4j.pagecache.misses页缓存未命中次数计数越低越好
neo4j.pagecache.hit_ratio页缓存命中率比率> 0.95
neo4j.pagecache.evictions页缓存驱逐次数计数视内存配置而定

5. 网络指标 ​

指标名称描述单位正常范围
neo4j.network.connection.count当前网络连接数计数视业务负载而定
neo4j.network.received.bytes网络接收字节数字节与业务负载相关
neo4j.network.sent.bytes网络发送字节数字节与业务负载相关

6. JVM 指标 ​

指标名称描述单位正常范围
jvm.memory.heap.usedJVM 堆内存使用量字节< 80% 堆内存总量
jvm.memory.heap.committedJVM 堆内存提交量字节<= 堆内存总量
jvm.memory.heap.maxJVM 堆内存最大值字节配置值
jvm.memory.nonheap.usedJVM 非堆内存使用量字节视应用情况而定
jvm.gc.pause.totalGC 总暂停时间毫秒越低越好
jvm.gc.pause.countGC 暂停次数计数越低越好
jvm.threads.countJVM 线程总数计数视业务负载而定
jvm.threads.runnable可运行状态线程数计数视业务负载而定
jvm.threads.blocked阻塞状态线程数计数0 或极少

7. 集群指标(仅适用于集群部署) ​

指标名称描述单位正常范围
neo4j.cluster.members.count集群成员数量计数配置的集群大小
neo4j.cluster.members.online在线集群成员数量计数配置的集群大小
neo4j.cluster.leader当前领导者节点字符串无
neo4j.cluster.follower.delay跟随者节点复制延迟毫秒< 100

指标获取方法 ​

1. 使用 Neo4j Browser ​

在 Neo4j Browser 中,可以使用 :sysinfo 命令查看系统信息和关键指标:

cypher
:six

2. 使用 Cypher 命令 ​

可以使用 Cypher 命令查询内置指标:

cypher
# 查询数据库运行时间
CALL dbms.queryJmx('org.neo4j:instance=kernel#0,name=Uptime') YIELD attributes RETURN attributes.uptime.value;

# 查询节点数量
CALL dbms.queryJmx('org.neo4j:instance=kernel#0,name=Counts') YIELD attributes RETURN attributes.nodes.value;

# 查询查询执行情况
CALL dbms.queryJmx('org.neo4j:instance=kernel#0,name=Query Execution') YIELD attributes RETURN attributes;

# 查询事务情况
CALL dbms.queryJmx('org.neo4j:instance=kernel#0,name=Transactions') YIELD attributes RETURN attributes;

3. 使用 JMX ​

可以使用 JMX 客户端(如 JConsole、VisualVM 等)连接到 Neo4j JMX 端口,查看所有监控指标。

配置 JMX 端口(在 neo4j.conf 中):

txt
dbms.jmx.enabled=true
dbms.jmx.port=3637

4. 使用 Prometheus 集成 ​

Neo4j 支持 Prometheus 集成,可以直接将指标暴露给 Prometheus:

配置 Prometheus 集成(在 neo4j.conf 中):

txt
dbms.metrics.prometheus.enabled=true
dbms.metrics.prometheus.endpoint=0.0.0.0:2004

然后在 Prometheus 配置中添加 Neo4j 目标:

yaml
scrape_configs:
  - job_name: 'neo4j'
    static_configs:
      - targets: ['localhost:2004']

5. 使用 REST API ​

可以通过 REST API 获取监控指标:

bash
# 获取所有指标
curl -u username:password http://localhost:7474/db/manage/server/jmx/metrics

# 获取特定指标
curl -u username:password http://localhost:7474/db/manage/server/jmx/metrics/org.neo4j:instance=kernel\#0,name=Uptime

指标监控最佳实践 ​

1. 选择关键指标 ​

根据业务需求和系统特点,选择关键指标进行监控,避免监控过多无关指标。建议监控的关键指标包括:

  • 数据库状态(uptime, status)
  • 查询性能(慢查询数量, 查询执行时间)
  • 事务情况(活跃事务数, 回滚率)
  • 存储使用(页缓存命中率, 节点/关系数量)
  • JVM 状态(堆内存使用, GC 暂停时间)
  • 集群状态(成员在线数量, 复制延迟)(仅适用于集群部署)

2. 设置合理的告警阈值 ​

根据实际情况,为关键指标设置合理的告警阈值,以便在异常情况发生时及时收到告警。

指标名称告警阈值建议告警级别
数据库状态非 online紧急
慢查询数量5 分钟内超过 10 个警告
事务回滚率> 1%警告
页缓存命中率< 0.9警告
JVM 堆内存使用> 85%警告
JVM GC 暂停时间> 1 秒警告
集群成员在线数量< 配置的集群大小紧急

3. 建立基线 ​

在系统稳定运行期间,收集指标数据,建立性能基线。这样可以更好地识别异常情况,判断指标的变化是否正常。

4. 持续监控 ​

建立持续监控机制,定期检查指标数据,及时发现异常情况。可以使用监控工具(如 Prometheus + Grafana)实现自动化监控和告警。

5. 关联分析 ​

将不同类别的指标进行关联分析,以便更全面地了解系统状态。例如:

  • 将查询执行时间与 JVM 内存使用关联,分析是否是内存不足导致查询变慢
  • 将事务回滚率与锁等待时间关联,分析是否是锁竞争导致事务回滚
  • 将网络吞吐量与查询执行次数关联,分析网络是否成为瓶颈

指标监控工具集成 ​

1. Prometheus + Grafana ​

Prometheus 配置:

yaml
scrape_configs:
  - job_name: 'neo4j'
    static_configs:
      - targets: ['localhost:2004']
    scrape_interval: 15s

Grafana 面板:

Neo4j 提供了官方的 Grafana 面板模板,可以从 Grafana Labs 下载。

2. ELK Stack ​

可以将 Neo4j 日志和指标数据发送到 ELK Stack 进行集中管理和分析:

  • 使用 Logstash 收集 Neo4j 日志和指标
  • 使用 Elasticsearch 存储数据
  • 使用 Kibana 可视化数据和设置告警

3. New Relic ​

Neo4j 支持与 New Relic 集成,可以使用 New Relic 监控 Neo4j 数据库:

  • 安装 New Relic Java 代理
  • 配置代理连接到 New Relic
  • 在 New Relic 控制台查看 Neo4j 指标

4. Datadog ​

Neo4j 支持与 Datadog 集成,可以使用 Datadog 监控 Neo4j 数据库:

  • 安装 Datadog Agent
  • 配置 Agent 收集 Neo4j 指标
  • 在 Datadog 控制台查看 Neo4j 指标

常见问题(FAQ) ​

Q1: 如何查看 Neo4j 内置监控指标? ​

A1: 可以通过以下方式查看 Neo4j 内置监控指标:

  • 使用 Neo4j Browser 的 :sysinfo 命令
  • 使用 Cypher 命令 CALL dbms.queryJmx()
  • 使用 JMX 客户端(如 JConsole、VisualVM 等)
  • 使用 Prometheus 集成
  • 使用 REST API

Q2: 哪些指标是 Neo4j 监控的关键指标? ​

A2: 关键指标包括:

  • 数据库状态(uptime, status)
  • 查询性能(慢查询数量, 查询执行时间)
  • 事务情况(活跃事务数, 回滚率)
  • 存储使用(页缓存命中率, 节点/关系数量)
  • JVM 状态(堆内存使用, GC 暂停时间)
  • 集群状态(仅适用于集群部署)

Q3: 如何设置 Neo4j 监控告警? ​

A3: 可以通过以下方式设置 Neo4j 监控告警:

  • 使用监控工具(如 Prometheus + Grafana)设置告警规则
  • 使用云服务提供商的监控服务(如 AWS CloudWatch、Azure Monitor 等)
  • 使用第三方监控工具(如 New Relic、Datadog 等)

Q4: 如何提高 Neo4j 页缓存命中率? ​

A4: 可以通过以下方式提高 Neo4j 页缓存命中率:

  • 增加 JVM 堆内存分配
  • 优化查询,减少不必要的数据访问
  • 增加页面缓存大小(通过配置 dbms.memory.pagecache.size)
  • 使用合适的索引,减少全表扫描

Q5: 如何分析 Neo4j 慢查询? ​

A5: 分析 Neo4j 慢查询的方法:

  • 查看慢查询日志(配置 dbms.logs.query.threshold)
  • 使用 PROFILE 或 EXPLAIN 命令分析查询执行计划
  • 检查是否缺少索引
  • 优化查询结构,减少复杂度
  • 检查硬件资源(CPU, 内存, 磁盘 I/O)是否充足

Q6: 如何监控 Neo4j 集群状态? ​

A6: 监控 Neo4j 集群状态的方法:

  • 查看集群成员在线数量
  • 监控领导者节点状态
  • 查看复制延迟
  • 检查集群日志
  • 使用监控工具监控集群指标

Q7: 如何监控 Neo4j JVM 状态? ​

A7: 监控 Neo4j JVM 状态的方法:

  • 查看 JVM 内存使用情况
  • 监控 GC 暂停时间和频率
  • 查看线程数量和状态
  • 使用 JMX 客户端连接到 Neo4j JVM
  • 使用监控工具监控 JVM 指标

Q8: 如何配置 Neo4j Prometheus 集成? ​

A8: 配置 Neo4j Prometheus 集成的步骤:

  1. 在 neo4j.conf 中启用 Prometheus 集成:
    txt
    dbms.metrics.prometheus.enabled=true
    dbms.metrics.prometheus.endpoint=0.0.0.0:2004
  2. 在 Prometheus 配置中添加 Neo4j 目标:
    yaml
    scrape_configs:
      - job_name: 'neo4j'
        static_configs:
          - targets: ['localhost:2004']
  3. 重启 Neo4j 和 Prometheus
  4. 在 Prometheus 控制台验证指标是否正常采集

Q9: 如何监控 Neo4j 磁盘使用情况? ​

A9: 监控 Neo4j 磁盘使用情况的方法:

  • 使用操作系统命令(如 df -h)监控数据目录大小
  • 使用 Neo4j 指标 neo4j.counts.nodes、neo4j.counts.relationships、neo4j.counts.properties 监控数据量增长
  • 使用监控工具监控数据目录大小
  • 配置告警,当磁盘使用率超过阈值时触发告警

Q10: 如何优化 Neo4j 性能? ​

A10: 优化 Neo4j 性能的方法:

  • 配置合适的内存分配(堆内存和页缓存)
  • 使用合适的索引
  • 优化查询结构,减少复杂度
  • 合理设置事务边界
  • 配置合适的并发度
  • 定期维护数据库(如重建索引、压缩存储)
  • 监控指标,及时发现和解决性能瓶颈