Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Neo4j: Accessing JMX beans via HTTP

DZone's Guide to

Neo4j: Accessing JMX beans via HTTP

· Java Zone
Free Resource

Bitbucket is for the code that takes us to Mars, decodes the human genome, or drives your next car. What will your code do? Get started with Bitbucket today, it's free.

One of the additional features that Neo4j enterprise provides is access to various JMX properties which describe various aspects of the database.

These would typically be accessed by using jConsole or similar but some monitoring tools aren’t able to use the JMX hook and a HTTP interface would work better.

Luckily Neo4j server does expose the JMX beans and we can get a list of URIs to query by hitting the following URI:

$ curl -H "Content-Type:application/json" http://localhost:7474/db/manage/server/jmx/
{
"resources" : {
"kernelquery" : "http://localhost:7474/db/manage/server/jmx/kernelquery",
"bean" : "http://localhost:7474/db/manage/server/jmx/domain/{domain}/{objectName}",
"query" : "http://localhost:7474/db/manage/server/jmx/query",
"domains" : "http://localhost:7474/db/manage/server/jmx/domain",
"domain" : "http://localhost:7474/db/manage/server/jmx/domain/{domain}"
}
}

If we want to get the output for all JMX beans we can hit the following URI:

$ curl -H "Content-Type:application/json" http://localhost:7474/db/manage/server/jmx/domain/*/*
// cut for verbosity
...
{
"description" : "Estimates of the numbers of different kinds of Neo4j primitives",
"name" : "org.neo4j:instance=kernel#0,name=Primitive count",
"attributes" : [ {
"description" : "An estimation of the number of nodes used in this Neo4j instance",
"name" : "NumberOfNodeIdsInUse",
"value" : 24117,
"isReadable" : "true",
"type" : "long",
"isWriteable" : "false ",
"isIs" : "false "
}, {
"description" : "An estimation of the number of relationships used in this Neo4j instance",
"name" : "NumberOfRelationshipIdsInUse",
"value" : 1,
"isReadable" : "true",
"type" : "long",
"isWriteable" : "false ",
"isIs" : "false "
}, {
"description" : "An estimation of the number of properties used in this Neo4j instance",
"name" : "NumberOfPropertyIdsInUse",
"value" : 19078,
"isReadable" : "true",
"type" : "long",
"isWriteable" : "false ",
"isIs" : "false "
}, {
"description" : "The number of relationship types used in this Neo4j instance",
"name" : "NumberOfRelationshipTypeIdsInUse",
"value" : 0,
"isReadable" : "true",
"type" : "long",
"isWriteable" : "false ",
"isIs" : "false "
} ],
"url" : "org.neo4j/instance%3Dkernel%230%2Cname%3DPrimitive+count"
}
...

If we only wanted to return the the numbers of different kinds of Neo4j primitives we could run the following query which uses the name returned by the previous query:

$ curl -H "Content-Type:application/json" -d '["org.neo4j:name=Primitive count,instance=*"]' http://localhost:7474/db/manage/server/jmx/query
[ {
"description" : "Estimates of the numbers of different kinds of Neo4j primitives",
"name" : "org.neo4j:instance=kernel#0,name=Primitive count",
"attributes" : [ {
"description" : "An estimation of the number of nodes used in this Neo4j instance",
"name" : "NumberOfNodeIdsInUse",
"value" : 24117,
"isReadable" : "true",
"type" : "long",
"isWriteable" : "false ",
"isIs" : "false "
}],
...
"url" : "org.neo4j/instance%3Dkernel%230%2Cname%3DPrimitive+count"
} ]

We could also use the following URI if we don’t want to/can’t send a POST body:

$ curl -H "Content-Type:application/json" http://localhost:7474/db/manage/server/jmx/domain/org.neo4j/instance%3Dkernel%230%2Cname%3DPrimitive+count
[ {
"description" : "Estimates of the numbers of different kinds of Neo4j primitives",
"name" : "org.neo4j:instance=kernel#0,name=Primitive count",
"attributes" : [ {
"description" : "An estimation of the number of nodes used in this Neo4j instance",
"name" : "NumberOfNodeIdsInUse",
"value" : 24117,
"isReadable" : "true",
"type" : "long",
"isWriteable" : "false ",
"isIs" : "false "
}],
...
"url" : "org.neo4j/instance%3Dkernel%230%2Cname%3DPrimitive+count"
} ]

Bitbucket is the Git solution for professional teams who code with a purpose, not just as a hobby. Get started today, it's free.

Topics:

Published at DZone with permission of Mark Needham, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}