On Friday, 5 June 2020 22:31:13 UTC+12, Brian Brazil wrote: > > On Fri, 5 Jun 2020 at 11:13, Cameron Kerr <[email protected] > <javascript:>> wrote: > >> Hi all, I've spent a few days coming up to speed on understanding >> jmx_exporter, and I think I'm in a pretty good place now, understanding how >> MBeans, JMX, and RMI work. >> >> I've so far deployed jmx_exporter in two ways: >> >> * as a Java Agent on Tomcat 6 (on RHEL6) for a small application that >> includes SOLR and PostgreSQL >> * and as a standalone Java HTTP server on Tomcat 8.5.34 (that comes >> bundled with a mission-critical application) >> >> I found going with the Java Agent relatively easy, although I think I'll >> contribute a blog post and pull-request to help on the documentation front. >> >> You might reasonably ask why I'm bothering with the HTTP server. Here's >> my business logic that drives this: >> >> * we have a mission-critical application that we urgently need to improve >> our visibility on to diagnose some performance limits we believe we're >> reaching >> * we're reluctant to introduce (and cause an outage to introduce) a java >> agent --- as far as I'm aware jmx_exporter lacks the ability that jconsole >> has to dynamically inject an agent. >> > > It's a very simple Java agent that doesn't do anything fancy. I believe > it's possible if you already know how to do such things, though using it as > an agent is almost always better. >
I can appreciate that a lot more now that I understand more about the issues around RMI etc. > * as part of a previous monitoring drive, we've already introduced the >> appropriate Remote JMX configuration (-D....jmxremote... etc.), which means >> we can introduce some monitoring into our production environment and easily >> restart the JMX exporter as needed to iterate through configuration changes. >> > > The JMX exporter will pick up configuration changes without restarting > Very happy to hear that. I'll be sure to mention that in an upcoming doc PR, as that behaviour is not listed on the README.md that I could find. > [...] You also lose some process and JVM metrics. > I'm not sure that's necessarily the case; at least I can see MBeans for Memory, OperatingSytem, Runtime, Threading, etc. under the 'java.lang' domain, but that's likely to be JVM dependent, I don't think I saw that on Java 7 (or Tomcat 6). But I guess you mean that jmx_exporter is exporting some of its own information, rather than from MBeans for "process and JVM metrics" I would like to propose that we introduce one of two things: >> >> EITHER add a new attribute whitelistObjectNameAttributes that could be >> used for Jconsole-style attribute at a time (or similar; can you grab a few >> named attributes in one go?), which would allow for either the broad-brush >> or fine-brush approach to collecting the data; >> > > I'd be open to considering an attribute name blacklist, if there's a sane > way to specify that. > Looking at the following makes me think it should be reasonably straightforward to create an additional white/blacklists for Attributes within an ObjectName; I think the crux of it would be in located around this part of the code: https://github.com/prometheus/jmx_exporter/blob/master/collector/src/main/java/io/prometheus/jmx/JmxScraper.java#L140-L147 Map<String, MBeanAttributeInfo> name2AttrInfo = new LinkedHashMap<String, MBeanAttributeInfo>(); for (int idx = 0; idx < attrInfos.length; ++idx) { MBeanAttributeInfo attr = attrInfos[idx]; if (!attr.isReadable()) { logScrape(mbeanName, attr, "not readable"); continue; } name2AttrInfo.put(attr.getName(), attr); Plus there would have to the config-level stuff and validation thereof, and plumbing the config into the various method calls in places where where whitelistObjectName and blacklistObjectName appear. And test-cases. On a higher level, I'd suggest looking at ways to get metrics that don't > involve JMX. Using client_java directly as far as possible will avoid all > the fun and performance issues that JMX brings. > That would seem to be impractical in all my use-cases, as I don't control the application (certainly not the code-base) to that extent, and JMX would be the right, supported, tool for this job. I think I can probably work in the agent though; it seems to be the normal way for other similar vendors to do the same monitoring thing. -- You received this message because you are subscribed to the Google Groups "Prometheus Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/prometheus-users/cda0dce5-603c-4af8-be79-712f7f2a6436o%40googlegroups.com.

