The release of Tableau 9.3 brings lots of great new stuff to Tableau Desktop and Tableau Server. By now, I’m sure you’ve read all the stuff on the Tableau blog. You’ve watched your Tableau Twitter stream and know about versioning, UNION, and so on.
This morning I’m going to show you something that got no press. I will introduce you to OMG OMG OMG cool changes lurking beneath the covers of Tableau Server. Some of these improvements could actually cause some of your TabMon reports to “come up blank” if you don’t know about them.
On with the show!
TabMon (the open source cluster monitor from Tableau) relies on Windows Perfmon Counters and JMX MBeans to report on the health of your Tableau Server. In this blog series, I wrote about how you can use some additional Tableau MBeans to extend the base values that Tabmon retrieves for you.
FYI, The JMX instrumentation in Tableau Server is actually not documented. It can change at any time. Well, in 9.3 it began to change. You get even more goodness, but a few of the MBeans you may rely on have moved or behave differently.
For example, here is what we saw in 9.2 if we connected to the Application Server with JConsole:
These are MBeans which tell us a bunch about what is going on inside the Application Server:
- How many times has a Group been deleted?
- How many times has a Site or Project been created?
- How many Logins have occurred?
- How many times have views been executed?
The latter two metrics actually show up in the sample workbook you get with TabMon.
Here’s what the Application Server looks like now:
Whoops! Notice something a little different? Perhaps a few things…missing?
That’s right, all of the MBeans under tableau.health.jmx have changed their names and moved away. They can now be found here:
Seems like the MBeans list under WebClient is a bit small compared to what we see in the earlier 9.2 screenshot, too? Well, these MBeans won’t appear until someone actually performs the task they report on.
So, for example, immediately after taking the screenshot above I added a new Group to my Tableau Server. Look what happened:
The net effect of these changes are:
- If you use Tabmon (with its existing 9.2 config file) and point it at 9.3, TabMon will dutifully “go looking” for MBeans which no longer exist or have been moved. Your workbook may have some empty measures (for example the “Latency”, “Users” and “Requests” dashboards in the TabMon sample will be blank), and your TabMon log will show lots of errors.
- If you connect to Tableau Server with JConsole on a freshly bounced Tableau Server, you may not even see the com.tableausoftware.instrumentation folder, because nothing of interest has happened yet:
- You will then slowly go criminally insane and end up getting a sweet deal to appear in a Batman reboot in which Christian Bale kicks your rear end after you entrance Gotham with beautiful vizzes which contain incorrect data.
Here is some Google-bait for folks running into problems and awesome enough to try and figure this out on their own (THANK YOU!). These are the logged errors you can expect to see when running “out of the box” Tabmon against 9.3:
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.getview\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.getview\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.getview\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.guestlogin\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.guestlogin\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.guestlogin\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=iclientxmlappservice.publishworkbook\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=iclientxmlappservice.publishworkbook\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=iclientxmlappservice.publishworkbook\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextracttasks\AverageBatchFailure\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextracttasks\AverageBatchSize\vizportal: Unable to query MBean.
2016-03-26 11:16:50,365 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextracttasks\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextracttasks\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextracttasks\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesonworkbooks\AverageBatchFailure\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesonworkbooks\AverageBatchSize\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesonworkbooks\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesonworkbooks\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesonworkbooks\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesondatasources\AverageBatchFailure\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesondatasources\AverageBatchSize\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesondatasources\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesondatasources\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runextractrefreshesondatasources\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runschedules\AverageBatchFailure\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runschedules\AverageBatchSize\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runschedules\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runschedules\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,380 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.runschedules\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,443 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=iclientxmlappservice.syncactivedirectorygroup\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,443 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=iclientxmlappservice.syncactivedirectorygroup\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,443 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=iclientxmlappservice.syncactivedirectorygroup\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,443 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.login\AverageRequestLatency\vizportal: Unable to query MBean.
2016-03-26 11:16:50,443 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.login\RequestsFailed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,443 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=webclientappservice.login\RequestsProcessed\vizportal: Unable to query MBean.
2016-03-26 11:16:50,505 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizql\tableau.health.jmx:name=vizqlservice\ExternalQueryCacheHits\vizql: Argument key=”ExternalQueryCacheHits” is not an existing item name for this CompositeData instance.
2016-03-26 11:16:50,505 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizql\tableau.health.jmx:name=vizqlservice\ExternalQueryCacheMisses\vizql: Argument key=”ExternalQueryCacheMisses” is not an existing item name for this CompositeData instance.
2016-03-26 11:16:50,537 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizql\tableau.health.jmx:name=vizqlservice\InProcessQueryCacheHits\vizql: Argument key=”InProcessQueryCacheHits” is not an existing item name for this CompositeData instance.
2016-03-26 11:16:50,537 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizql\tableau.health.jmx:name=vizqlservice\InProcessQueryCacheMisses\vizql: Argument key=”InProcessQueryCacheMisses” is not an existing item name for this CompositeData instance.
Many of these MBeans have an equivalent in the “New Order”. You just have to find them.
For example, here’s a rather important one:
\tableau.health.jmx:name=webclientappservice.login\RequestsProcessed\vizportal
Without being able to count the number of logins processed, the “Logins” viz in the “Users” dashboard of the TabMon sample workbook isn’t going to paint anything for you.
Here’s what the entry for the MBean above looks like in TabMon’s counters.config:
Go hunt around in JConsole and we see an equivalent metric with a different name…along with all sorts of NEW attributes we could use, too!:
We can see that someone (me) tried to login 3 times…There was a single exception, which was me purposefully entering a bad password.
Unfortunately, you can’t just change TabMon’s Counters.config entries and continue on. Below I’ve attempted to do so, and I still get errors:
2016-03-26 12:11:39,007 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=login\DurationMean\vizportal: Unable to query MBean.
2016-03-26 12:11:39,007 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=login\ExceptionCount\vizportal: Unable to query MBean.
2016-03-26 12:11:39,007 [6] DEBUG TabMon.Counters.MBean.AbstractMBeanCounter – Error sampling counter Primary\tableau\vizportal\tableau.health.jmx:name=login\InvocationCount\vizportal: Unable to query MBean.
The issue here is that the namespace “tableau.health.jmx” is actually hard-coded into the TabMon tool. Here’s the source code I pulled from GitHub:
So unless you happen to have a copy of Visual Studio lying around to modify / re-build this project, it looks like the fine people who created TabMon will need to make a few minor adjustments before it’ll work exactly the way you want it to.
So there you go! You’re not crazy, it’s not your fault, and there’s more good stuff ahead. Here’s something to whet your appetite:
Looks like I had four extract refreshes execute over the last two hours. Two failed, and two succeeded. My successful refreshes took about 200-204 seconds each. Wouldn’t it be nice if I could just ask that backgrounder the same question directly? Maybe collect those results in TabMon so I can watch trends over time?
Hot damn, you can:
I can see 4 invocations with two failures (Book1 refreshes have the wrong password to SQL Server):
- The failed executions happen very quickly (in less than a second): 731ms, to be exact
- My longest running refreshes (75th+ percentile) are taking ~204 seconds (204046 ms)
It’ll be child’s play to track some of these metrics (DurationMean, Duration75thPercentile, ExceptionCount, and SucessRatioFifteenMinute look yummy to me) over time and get an excellent feel for the “health” of my refresh tasks.
I can’t wait for the 9.3 version of TabMon to hit. Do I know when we’ll see it? Nope! And give the developers a break, they have day jobs..and in the meantime I gotta figure out what all these new MBeans actually DO!
Russell, thanks for the heads up. A typo in the last paragraph, I think you really want is version 9.3 of Tabmon?
Indeed! Thank you.
doesn’t look like TabMon is getting any love lately. this issue (and others) are just sitting there waiting for someone to support the product. i assume the lack of support/interest means TabMon is done?
Nah – The issue is that the guys who created it are finishing off another project. They’ll be back soon to get TabMon back into ship shape!