外观
Neo4j 内置监控API
Neo4j提供了多种内置监控API,用于实时监控数据库的运行状态、性能指标和资源使用率。这些API包括REST API、JMX接口和内置的监控端点,方便管理员集成到各种监控系统中。
HTTP监控端点
Neo4j提供了多个HTTP监控端点,用于获取数据库的各种状态信息:
| 端点 | 描述 | 访问方式 |
|---|---|---|
/monitoring/metrics | 获取所有可用的监控指标 | GET |
/db/{databaseName}/monitoring/metrics | 获取特定数据库的监控指标 | GET |
/db/{databaseName}/monitoring/metrics/{metricName} | 获取特定数据库的特定指标 | GET |
/status | 获取数据库服务状态 | GET |
/db/{databaseName}/status | 获取特定数据库的状态 | GET |
/info | 获取数据库版本和配置信息 | GET |
Bolt协议监控
通过Bolt协议,客户端可以使用特定的Cypher命令获取监控信息:
SHOW DATABASES:显示所有数据库的状态SHOW DATABASE {databaseName}:显示特定数据库的详细信息SHOW CLUSTER MEMBERS:显示集群成员信息SHOW TRANSACTIONS:显示当前活跃的事务
REST API 监控
1. 基础配置
默认情况下,Neo4j的监控API是启用的。可以通过以下配置进行调整:
txt
# 启用或禁用监控API
dbms.metrics.enabled=true
# 启用或禁用HTTP监控端点
dbms.metrics.http.enabled=true
# 设置监控API的访问路径
dbms.metrics.http.endpoint=/monitoring/metrics
# 配置监控指标的导出频率(秒)
dbms.metrics.polling_interval=302. 获取所有监控指标
请求示例:
bash
curl -u neo4j:password http://localhost:7474/monitoring/metrics响应示例:
json
{
"neo4j.transaction.begin": {
"count": 12345,
"description": "Number of transactions started",
"unit": "count"
},
"neo4j.cypher.query": {
"count": 67890,
"description": "Number of Cypher queries executed",
"unit": "count"
},
"neo4j.jvm.memory.heap.used": {
"value": 536870912,
"description": "Heap memory used",
"unit": "bytes"
}
}3. 获取特定指标
请求示例:
bash
curl -u neo4j:password http://localhost:7474/monitoring/metrics/neo4j.jvm.memory.heap.used响应示例:
json
{
"value": 536870912,
"description": "Heap memory used",
"unit": "bytes"
}4. 筛选特定类型的指标
Neo4j的监控指标可以通过前缀进行筛选,常见的指标前缀包括:
| 前缀 | 描述 |
|---|---|
neo4j.cypher | Cypher查询相关指标 |
neo4j.transaction | 事务相关指标 |
neo4j.jvm | JVM相关指标 |
neo4j.pagecache | 页缓存相关指标 |
neo4j.cluster | 集群相关指标 |
neo4j.storage | 存储相关指标 |
neo4j.dbms | 数据库管理系统相关指标 |
请求示例:
bash
curl -u neo4j:password http://localhost:7474/monitoring/metrics | grep "neo4j.cypher"JMX 监控接口
Neo4j提供了丰富的JMX MBean,用于监控数据库的各个方面。这些MBean可以通过JConsole、VisualVM等JMX客户端访问。
主要JMX MBean
| MBean | 描述 |
|---|---|
org.neo4j:instance=kernel#0,name=QueryLogger | 查询日志相关指标 |
org.neo4j:instance=kernel#0,name=TransactionCount | 事务计数指标 |
org.neo4j:instance=kernel#0,name=PageCache | 页缓存相关指标 |
org.neo4j:instance=kernel#0,name=MemoryPool | 内存池相关指标 |
org.neo4j:instance=kernel#0,name=Cluster | 集群相关指标 |
org.neo4j:instance=kernel#0,name=Database | 数据库相关指标 |
org.neo4j:instance=kernel#0,name=Store | 存储相关指标 |
3. 启用JMX
默认情况下,Neo4j的JMX是启用的。可以通过以下配置进行调整:
txt
# 启用或禁用JMX
dbms.jmx.enabled=true
# 配置JMX远程访问
dbms.jmx.remote.enabled=true
# 配置JMX远程访问端口
dbms.jmx.remote.port=3637
# 配置JMX远程访问认证
dbms.jmx.remote.authenticate=true
# 配置JMX远程访问SSL
dbms.jmx.remote.ssl=false4. 使用JConsole访问JMX
- 启动JConsole:
bash
jconsole连接到Neo4j的JMX端口:
- 服务URL:
service:jmx:rmi:///jndi/rmi://localhost:3637/jmxrmi - 用户名:neo4j
- 密码:数据库密码
- 服务URL:
浏览各个MBean,查看监控指标
内置监控命令
1. Cypher监控命令
显示数据库状态
cypher
SHOW DATABASES输出示例:
| name | address | role | requestedStatus | currentStatus | error | default | home | constituents |
|---|---|---|---|---|---|---|---|---|
| neo4j | localhost:7687 | LEADER | online | online | - | TRUE | TRUE | - |
| system | localhost:7687 | LEADER | online | online | - | FALSE | FALSE | - |
显示特定数据库的详细信息
cypher
SHOW DATABASE neo4j显示集群成员信息
cypher
SHOW CLUSTER MEMBERS输出示例:
| address | state | role | groups | database |
|---|---|---|---|---|
| localhost:7687 | AVAILABLE | CORE | [] | neo4j |
| localhost:7688 | AVAILABLE | CORE | [] | neo4j |
| localhost:7689 | AVAILABLE | CORE | [] | neo4j |
| localhost:7690 | AVAILABLE | READ_REPLICA | [] | neo4j |
显示当前活跃的事务
cypher
SHOW TRANSACTIONS2. neo4j-admin监控命令
检查数据库健康状态
bash
neo4j-admin database health --database=neo4j输出示例:
Database health for 'neo4j':
- Status: ONLINE
- Store ID: neo4j-1234567890abcdef
- Log sequence number: 12345678
- Last transaction committed: 2026-01-15T10:00:00Z显示数据库统计信息
bash
neo4j-admin database stats --database=neo4j输出示例:
Node counts:
- Total nodes: 1000000
- Labels: 5
Relationship counts:
- Total relationships: 5000000
- Relationship types: 10
Property counts:
- Total properties: 20000000
Index counts:
- Total indexes: 8
- Unique constraints: 3监控指标分类
1. 事务相关指标
| 指标名称 | 描述 | 单位 |
|---|---|---|
neo4j.transaction.begin | 事务开始次数 | count |
neo4j.transaction.commit | 事务提交次数 | count |
neo4j.transaction.rollback | 事务回滚次数 | count |
neo4j.transaction.active | 当前活跃事务数 | count |
neo4j.transaction.duration | 事务平均持续时间 | ms |
2. Cypher查询相关指标
| 指标名称 | 描述 | 单位 |
|---|---|---|
neo4j.cypher.query | Cypher查询执行次数 | count |
neo4j.cypher.query.duration | Cypher查询平均执行时间 | ms |
neo4j.cypher.update | 更新查询执行次数 | count |
neo4j.cypher.readonly | 只读查询执行次数 | count |
neo4j.cypher.planning | 查询计划生成时间 | ms |
neo4j.cypher.execution | 查询执行时间 | ms |
3. 存储相关指标
| 指标名称 | 描述 | 单位 |
|---|---|---|
neo4j.storage.size | 存储文件总大小 | bytes |
neo4j.storage.node.count | 节点数量 | count |
neo4j.storage.relationship.count | 关系数量 | count |
neo4j.storage.property.count | 属性数量 | count |
neo4j.storage.page.cache.hit_ratio | 页缓存命中率 | ratio |
neo4j.storage.page.cache.miss_ratio | 页缓存未命中率 | ratio |
4. JVM相关指标
| 指标名称 | 描述 | 单位 |
|---|---|---|
neo4j.jvm.memory.heap.used | 堆内存使用量 | bytes |
neo4j.jvm.memory.heap.max | 堆内存最大值 | bytes |
neo4j.jvm.memory.nonheap.used | 非堆内存使用量 | bytes |
neo4j.jvm.memory.nonheap.max | 非堆内存最大值 | bytes |
neo4j.jvm.threads.active | 活跃线程数 | count |
neo4j.jvm.threads.peak | 峰值线程数 | count |
neo4j.jvm.gc.pause | GC暂停时间 | ms |
neo4j.jvm.gc.collections | GC收集次数 | count |
5. 集群相关指标
| 指标名称 | 描述 | 单位 |
|---|---|---|
neo4j.cluster.members | 集群成员数量 | count |
neo4j.cluster.core.members | 核心成员数量 | count |
neo4j.cluster.read.replicas | 只读副本数量 | count |
neo4j.cluster.raft.leader | 当前Raft领导者 | boolean |
neo4j.cluster.raft.term | 当前Raft任期 | count |
neo4j.cluster.raft.replication_delay | 复制延迟 | ms |
最佳实践
1. 监控策略建议
- 全面监控:监控所有关键指标,包括事务、查询、存储、JVM和集群指标
- 合理设置告警阈值:根据业务需求和数据库规模设置合适的告警阈值
- 定期分析历史数据:保存监控数据,定期分析趋势,预测潜在问题
- 集成到统一监控系统:将Neo4j的监控指标集成到Prometheus、Grafana等统一监控系统
- 设置多级告警:根据指标严重程度设置不同级别的告警(警告、严重、紧急)
2. 常见监控指标告警阈值
| 指标名称 | 告警阈值 | 告警级别 |
|---|---|---|
neo4j.jvm.memory.heap.used | > 80% 堆内存 | 警告 |
neo4j.jvm.memory.heap.used | > 90% 堆内存 | 严重 |
neo4j.storage.page.cache.miss_ratio | > 5% | 警告 |
neo4j.transaction.active | > 100 | 警告 |
neo4j.transaction.duration | > 1000ms | 警告 |
neo4j.cypher.query.duration | > 500ms | 警告 |
neo4j.cluster.raft.replication_delay | > 1000ms | 警告 |
3. 安全配置
- 启用认证:为监控API和JMX配置认证
- 限制访问IP:通过防火墙或Neo4j配置限制监控API的访问IP
- 使用SSL/TLS:为监控API启用SSL/TLS加密
- 定期更换密码:定期更换监控API和JMX的访问密码
- 最小权限原则:为监控用户分配最小必要的权限
4. 性能优化
- 调整监控频率:根据实际需求调整监控指标的导出频率,避免对数据库性能造成影响
- 选择性监控:只监控必要的指标,减少监控数据量
- 使用异步监控:使用异步方式获取监控数据,减少对数据库主线程的影响
- 合理设置JMX连接数:限制JMX客户端连接数,避免资源耗尽
常见问题(FAQ)
Q1: 如何启用Neo4j的监控API?
A1: 通过修改neo4j.conf文件,设置以下配置:
txt
dbms.metrics.enabled=true
dbms.metrics.http.enabled=trueQ2: 如何获取Neo4j的特定监控指标?
A2: 使用HTTP GET请求访问特定的监控端点:
bash
curl -u neo4j:password http://localhost:7474/monitoring/metrics/{metricName}Q3: 如何使用JConsole连接Neo4j的JMX?
A3: 启动JConsole,使用以下服务URL连接:
service:jmx:rmi:///jndi/rmi://localhost:3637/jmxrmiQ4: 如何查看当前活跃的事务?
A4: 使用Cypher命令:
cypher
SHOW TRANSACTIONSQ5: 如何检查数据库健康状态?
A5: 使用neo4j-admin命令:
bash
neo4j-admin database health --database=neo4jQ6: 如何监控Cypher查询性能?
A6: 监控以下指标:
neo4j.cypher.query.duration:查询平均执行时间neo4j.cypher.planning:查询计划生成时间neo4j.cypher.execution:查询执行时间
Q7: 如何监控集群复制延迟?
A7: 监控指标:
neo4j.cluster.raft.replication_delay:复制延迟
Q8: 如何集成Neo4j监控到Prometheus?
A8: 使用Neo4j的Prometheus导出器,或者配置Prometheus直接抓取Neo4j的监控API端点。
Q9: 如何调整监控指标的导出频率?
A9: 通过修改neo4j.conf文件中的以下配置:
txt
dbms.metrics.polling_interval=30Q10: 如何禁用特定的监控指标?
A10: 通过修改neo4j.conf文件,使用以下格式禁用特定指标:
txt
dbms.metrics.enabled{metric-name}=false例如,禁用事务相关指标:
txt
dbms.metrics.enabled{transaction}=false