JMX 指标

本主题描述了如何访问 Neo4j DBMS 的 JMX 以监控指标。

Neo4j 提供不同层次的监控设施,以持续概览系统健康状况。有关监控选项的说明,请参见Neo4j 操作手册 → 监控。许多指标通过JMX公开。

可用的 JMX MBean 及其名称已在 Neo4j 4.0 中更新。那些在Neo4j 操作手册 → 监控中描述的、重复指标或监控选项的 Bean 已被移除。

调整对 Neo4j 的远程 JMX 访问

默认情况下,Neo4j Enterprise 版不允许远程 JMX 连接。要启用此功能,需要在conf/neo4j.conf 文件中启用 JMX 远程管理并配置 JMX 的安全远程访问。

启用 JMX 远程管理

将以下行添加到conf/neo4j.conf文件中以启用 JMX 远程管理。如果在自动发现主机名时遇到问题,可以取消注释以下配置行

server.jvm.additional=-Djava.rmi.server.hostname=$THE_NEO4J_SERVER_HOSTNAME

server.jvm.additional=-Dcom.sun.management.jmxremote.port=3637
server.jvm.additional=-Dcom.sun.management.jmxremote.authenticate=true
server.jvm.additional=-Dcom.sun.management.jmxremote.ssl=false

# Some systems cannot discover the hostname automatically, and need this line configured:
# server.jvm.additional=-Djava.rmi.server.hostname=$THE_NEO4J_SERVER_HOSTNAME

虽然本文件中已禁用 JMX 远程管理的 SSL,但若需根据需求配置,可参考Java SE 21 监控与管理指南中的说明。

配置密码身份验证

在 JMX 远程管理中默认启用密码身份验证。下面的章节提供了使用 LDAP 和基于文件的方法进行身份验证的设置说明。

有关更多选项(包括 SSL 客户端身份验证的配置步骤),请参阅Java SE 21 监控与管理指南

LDAP 身份验证

您可以根据自身基础设施配置 JAAS 登录配置,并将其保存到conf/jmx.ldap配置文件中。

Neo4jJMXConfig {
    com.sun.security.auth.module.LdapLoginModule REQUIRED
    userProvider="ldap://127.0.0.1:10389/ou=users,dc=example,dc=net"
    authIdentity="uid={USERNAME},ou=users,dc=example,dc=net"
    userFilter="(&(samaccountname={USERNAME})(objectClass=inetOrgPerson))"
    useSSL=false
    debug=false
    authzIdentity=monitorRole;
};
userProvider

定义要连接的 LDAP 服务器以及用于搜索用户条目的节点。

authIdentity

定义用于向 LDAP 服务器进行身份验证的用户完整名称(DN)。请注意,标记{USERNAME}将在身份验证时替换为提供的用户名。

userFilter

定义在定位用户时使用的搜索过滤器。请注意,标记{USERNAME}将在搜索时替换为提供的用户名。

useSSL

定义是否为底层 LDAP 连接启用 SSL。

调试

Defines whether to output debug info about the authentication session.

authzIdentity

指定经过身份验证的用户将被授予的访问角色。

提供的配置仅为示例,需要根据您的基础设施进行相应修改。

完成 JAAS 配置后,通过将以下配置项添加到conf/neo4j.conf文件中,使 JMX 使用该配置。

server.jvm.additional=-Dcom.sun.management.jmxremote.login.config=Neo4jJMXConfig
server.jvm.additional=-Djava.security.auth.login.config=/absolute/path/to/conf/jmx.ldap

完成此设置后,您可以使用<IP-OF-SERVER>:3637连接 Neo4j 服务器的 JMX 监控,使用在 LDAP 目录中定义的有效用户名和密码。

基于文件的身份验证

基于文件的密码身份验证会以明文方式存储密码,仅供开发使用。

您可以为 JMX 远程访问设置密码,并将其保存到conf/jmx.password(Unix)和c:\jmx.password(Windows)配置文件中。请注意,jmx.password 文件必须由运行服务器的用户拥有,并且权限需设为0600

monitorRole password_to_be_changed

接下来,配置访问级别并将其保存到conf/jmx.access配置文件中。

monitorRole readonly

最后,通过将以下配置项添加到conf/neo4j.conf文件中,使 JMX 使用已完成的密码和访问文件。

server.jvm.additional=-Dcom.sun.management.jmxremote.password.file=/absolute/path/to/conf/jmx.password
server.jvm.additional=-Dcom.sun.management.jmxremote.access.file=/absolute/path/to/conf/jmx.access

在 Windows 上,需要将/改为\

dbms.jvm.additional=-Dcom.sun.management.jmxremote.password.file=\absolute\path\to\conf\jmx.password
dbms.jvm.additional=-Dcom.sun.management.jmxremote.access.file=\absolute\path\to\conf\jmx.access

完成此设置后,您可以使用<IP-OF-SERVER>:3637连接 Neo4j 服务器的 JMX 监控,使用用户名monitor,密码password_to_be_changed

使用 JMX 和 JConsole 连接 Neo4j 实例

首先,启动您的 Neo4j 实例,例如使用

$NEO4j_HOME/bin/neo4j start

现在,使用以下命令启动 JConsole

$JAVA_HOME/bin/jconsole

连接到运行 Neo4j 数据库实例的进程

Connecting with JConsole
Figure 1. Connecting JConsole to the Neo4j Java process

当连接到远程进程或某些情况下作为服务运行的本地进程时,必须选择Remote Process连接选项。

<port>的取值由com.sun.management.jmxremote.port属性配置。

除了 JVM 暴露的 MBean 外,您还会在 MBeans 选项卡中默认看到neo4j.metrics部分。展开后,可访问 Neo4j 公开的所有监控信息。

有关开启 JMX 远程监控访问的详细步骤,请参见调整对 Neo4j 的远程 JMX 访问以及JMX 文档

Neo4j MBeans view
Figure 2. Neo4j MBeans view