I've been frequently involved in projects where I had to deal with
performance issues. I knew there were many commercial APM solutions
but I wanted to check whether there was some free alternative that I
could use both on my developer workstation and on the project's infrastructure.
This is how I came across https://glowroot.org.
Glowroot is a Java Application Performance Monitoring
application. It integrates with the target application as a Java
agent and has 2 operation modes:
I've personnally only used the first basic setup of the two. This
is mainly due to the nature of my missions. I come and go from one
project to the other, often to deal with some specific issue and I'm
not involved in everyday operation.
As you will see, that default setup can be rolled out in a couple
of hours on a project infrastructure. When I know a mission will
involve some performance monitoring, I usually share the Glowroot
installation steps to my contact so that we can use Glowroot the day
or the week after because I know it should be simple enough to be
dealt with it even with short notice.
If I was responsible for the operations of a Liferay
infrastructure, I'd likely implement the second setup.
I've recently made a presentation during Liferay Dev24 showcasing
how you can use Glowroot in a Liferay context: https://liferay.dev/twentyfour#Glowroot%20%20-%20Let's%20monitor%20Liferay%20performance%20with%20an%20APM
This first blog post is about setting up Glowroot. I'll write
some additional posts later on in order to share some tips like the
ones I have talked about during Dev24.
The Glowroot homepage claims it is very easy to use: https://glowroot.org
And it's almost true. There's just one extra step for Liferay
because of its OSGi architecture. As a Java Agent, Glowroot hooks
itself all over the JVM. As a consequence, its Java classes have to be
loaded whereever it is hooked.
But beware, every OSGi bundle inside of Liferay has its own
classloader. For that reason, we need to make sure that the Glowroot
java package are visible from them and there is a specific portal
property you need to adjust so that those packages are added to the
existing list of packages we want to be imported inside of all OSGi bundles.
Dave has written a detailed article about this topic that you can
check here: https://liferay.dev/blogs/-/blogs/liferay-ce-7-x-liferay-dxp-7-x-java-agents
That specific portal property is called module.framework.properties.org.osgi.framework.bootdelegation.
The list of packages imported into all OSGi bundles varies from
one Liferay version to the other. So, be careful when overriding it
and I encourage you to keep an eye on the Liferay default values in
the documentation (eg.
for DXP 7.4).
In the case of Liferay DXP 7.4, this is what I'm adding to my
You now may also want to update the Glowroot
admin.json file if you want to adjust some network
settings, in particular this section:
Since we're talking about security, the usual next step (you can
usually skip that on the local workstation) is to configure roles,
users and passwords.
Here's an example of such configuration:
Because hashing those passwords is a bit tedious (you have to
download glowroot-central.jar from here https://github.com/glowroot/glowroot/wiki/Central-Collector-Installation and
run java -jar glowroot-central.jar
hash-password <plain password> to create a password
hash), you may just decide to create those roles and users from the GUI.
java -jar glowroot-central.jar
hash-password <plain password>
And once it is done, go to the admin.json section in the left
menu to export the configuration if you wish to duplicate it in
That's all for today. More of Glowroot stuff in another blog post.
To conclude, I'm infinitely grateful to the people behind
Glowroot. Thank you, this tool is fantastic!
Thank you fabian