Skip navigation
2016
Toby Erkson

TabMon growing pains

Posted by Toby Erkson Ambassador Jan 19, 2016

I liked the explanation in Russell Christopher's Monitoring Tableau: TabMon is a #Tableau Server Detective - Tableau Love for TabMon.  In fact, I decided to add the two items he talks about and tweak it for my D: drive since that's where I have Tableau Server installed.

 

So, I updated the Counters.config based on what I glimpsed at in his video.  Here is my complete file so you can freely copy it:

<?xml version="1.0" encoding="utf-8" ?>
<Counters>
  <Perfmon>
    <Category name="LogicalDisk">
      <Counter name="% Free Space" >
        <Instance name="D:" />
        <Instance name="_Total" />
      </Counter>
    </Category>
    <Category name="Memory">
      <Counter name="% Committed Bytes In Use" />
    </Category>
    <Category name="Network Interface">
      <Counter name="Bytes Received/sec" >
        <Instance name="vmxnet3 Ethernet Adapter _2" />
      </Counter>
      <Counter name="Bytes Sent/sec" >
        <Instance name="vmxnet3 Ethernet Adapter _2" />
      </Counter>
    </Category>
    <Category name="PhysicalDisk">
      <Counter name="% Disk Read Time" >
        <Instance name="1 D:" />
      </Counter>
      <Counter name="% Disk Write Time" >
        <Instance name="1 D:" />
      </Counter>
      <Counter name="Current Disk Queue Length" >
        <Instance name="1 D:" />
      </Counter>
      <Counter name="Disk Write Bytes/sec" >
        <Instance name="1 D:" />
      </Counter>
      <Counter name="Disk Read Bytes/sec" >
        <Instance name="1 D:" />
      </Counter>
      <Counter name="Avg. Disk sec/Transfer" >
        <Instance name="1 D:" />
      </Counter>
    </Category>
    <Category name="Process">
      <Counter name="% Processor Time">
        <Instance name="backgrounder" />
        <Instance name="clustercontroller" />
        <Instance name="dataserver" />
        <Instance name="filestore" />
        <Instance name="httpd" />
        <Instance name="postgres" />
        <Instance name="searchserver" />
        <Instance name="tabadminservice" />
        <Instance name="tableau" />
        <Instance name="tabprotosrv" />
        <Instance name="tabrepo" />
        <Instance name="tabsvc" />
        <Instance name="tabsystray" />
        <Instance name="tdeserver" />
        <Instance name="vizportal" />
        <Instance name="vizqlserver" />
        <Instance name="wgserver" />
        <Instance name="zookeeper" />
      </Counter>
      <Counter name="Thread Count">
        <Instance name="httpd" />
        <Instance name="vizportal" />
        <Instance name="vizqlserver" />
      </Counter>
      <Counter name="Working Set">
        <Instance name="backgrounder" />
        <Instance name="clustercontroller" />
        <Instance name="dataserver" />
        <Instance name="filestore" />
        <Instance name="httpd" />
        <Instance name="postgres" />
        <Instance name="searchserver" />
        <Instance name="tabadminservice" />
        <Instance name="tableau" />
        <Instance name="tabprotosrv" />
        <Instance name="tabrepo" />
        <Instance name="tabsvc" />
        <Instance name="tabsystray" />
        <Instance name="tdeserver" />
        <Instance name="vizportal" />
        <Instance name="vizqlserver" />
        <Instance name="wgserver" />
        <Instance name="zookeeper" />
      </Counter>
    </Category>
    <Category name="Processor">
      <Counter name="% Processor Time">
        <Instance name="Total" />
      </Counter>
    </Category>
    <Category name="System">
      <Counter name="Processes" />
    </Category>
  </Perfmon>
  <MBean>
    <Source name="vizportal" startport="8900" endport="8999">
      <TableauHealth>
        <Category name="Get View" path="name=webclientappservice.getview">
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="Guest Login" path="name=webclientappservice.guestlogin">
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="Publish Workbook" path="name=iclientxmlappservice.publishworkbook">
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="Run Extract Tasks" path="name=webclientappservice.runextracttasks">
          <Counter name="AverageBatchFailure" />
          <Counter name="AverageBatchSize" />
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="Run Extract Refreshes on Workbooks" path="name=webclientappservice.runextractrefreshesonworkbooks">
          <Counter name="AverageBatchFailure" />
          <Counter name="AverageBatchSize" />
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="Run Extract Refreshes on Data Sources" path="name=webclientappservice.runextractrefreshesondatasources">
          <Counter name="AverageBatchFailure" />
          <Counter name="AverageBatchSize" />
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="Run Schedules" path="name=webclientappservice.runschedules">
          <Counter name="AverageBatchFailure" />
          <Counter name="AverageBatchSize" />
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="Search Metrics" path="name=searchservice">
          <Counter name="AverageQueryLatency" unit ="ms" />
          <Counter name="RequestProcessed" />
        </Category>
        <Category name="Sync AD Group" path="name=iclientxmlappservice.syncactivedirectorygroup">
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
        <Category name="User Login" path="name=webclientappservice.login">
          <Counter name="AverageRequestLatency" unit="ms" />
          <Counter name="RequestsFailed" />
          <Counter name="RequestsProcessed" />
        </Category>
      </TableauHealth>
      <JVMHealth>
        <Category name ="Compilation" path="type=Compilation">
          <Counter name="TotalCompilationTime" unit="ms" />
        </Category>
        <Category name="Memory" path="type=Memory">
          <Counter name="HeapMemoryUsage\committed" unit="bytes" />
          <Counter name="HeapMemoryUsage\used" unit="bytes" />
          <Counter name="NonHeapMemoryUsage\committed" unit="bytes" />
          <Counter name="NonHeapMemoryUsage\used" unit="bytes" />
        </Category>
      </JVMHealth>
    </Source>
    <Source name="vizql" startport="9400" endport="9499">
      <TableauHealth>
        <Category name="External Query Cache" path="name=vizqlservice">
          <Counter name="ExternalAbstractQueryCacheHits" />
          <Counter name="ExternalAbstractQueryCacheMisses" />
          <Counter name="ExternalQueryCacheHits" />
          <Counter name="ExternalQueryCacheMisses" />
        </Category>
        <Category name="InProcess Query Cache" path="name=vizqlservice">
          <Counter name="InProcessAbstractQueryCacheHits" />
          <Counter name="InProcessAbstractQueryCacheMisses" />
          <Counter name="InProcessQueryCacheHits" />
          <Counter name="InProcessQueryCacheMisses" />
        </Category>
        <Category name="Visual Model Cache" path="name=vizqlservice">
          <Counter name="VisualModelCacheHits" />
          <Counter name="VisualModelCacheMisses" />
          <Counter name="VisualModelCachePartialHits" />
        </Category>
        <Category name="Image Cache" path="name=vizqlservice">
          <Counter name="ImageCacheHits" />
          <Counter name="ImageCacheMisses" />
        </Category>
        <Category name="Sessions" path="name=vizqlservice">
          <Counter name="ActiveSessions" />
          <Counter name="SessionsInFlight" />
        </Category>
      </TableauHealth>
    </Source>
    <Source name="dataserver" startport="10000" endport="10299">
      <TableauHealth>
        <Category name="Overall Metrics" path="name=dataserver">
          <Counter name="ActiveSessions" />
          <Counter name="SessionsInFlight" />
          <Counter name="RequestsCount" />
        </Category>
      </TableauHealth>
    </Source>
  </MBean>
</Counters>

Notes:

  1. Everywhere there is an <Instance> tag you will need to correct it to your machine's particular instance OR simply delete the line if you don't care and thus want to use the default Counters.config settings.
  2. "SessionsInFlight" has been added.  See lines 195 and 203.

Narrowing the Scope

At line 21 is the category PhysicalDisk.  If you specify the <Instance name=...> then you only collect the data from that specific instance and nothing else.  Since my Tableau Server is on the D: drive I only want to collect physical disk information from it and thus exclude the C: drive as that's just OS stuff.

 

Okay, so how do you get a specific instance?  I figured it out and here's how I got it...

On your Tableau Server, open the Windows Performance Monitor.

Click on the green plus sign to Add Counters.

Select the category (1), expand it, and select the counter(2).

The instances that are available will display.  Since I only want my D: drive (3) my instance will be  1 D:

Take that value and put it in the <Instance name=...>.  You can see in the above code that I specified this for every entry where I wanted only the data from that specific area.  If you leave it blank then the assumption -- from what I can observe -- is that all instances will be collected.

 

Well, that's not exactly true because when I opened my log file, \TabMon\Logs\TabMon.log.txt, I saw this:

2016-01-19 11:31:36,625 [6] DEBUG TabMon.Counters.Perfmon.PerfmonCounter - Error sampling counter Primary\myServer\Perfmon\Network Interface\Bytes Sent/sec\: Counter is not single instance, an instance name needs to be specified.

So after looking up the instances available to me I chose the only one present and updated my Counters.config file with the following:

<Category name="Network Interface">
<Counter name="Bytes Received/sec" />
<Counter name="Bytes Sent/sec" >
<Instance name="vmxnet3 Ethernet Adapter _2" />

      </Counter>

Save the file, open Windows Services, Restart TabMon and Bob's yer uncle:

Well, no.  That didn't work as I was still getting the same error message so there's somethings that aren't obvious to me    You'll notice that I left these instances in my Counters.config file.  This seems to cause no harm since they are failing anyway.  I'm sure -- I hope! -- someone will tell me if I'm wrong.

 

However, anytime you alter your Counters.config file and want to get the data into the TabMon database right away (well, within a minute's time) simply restart the TabMon service.  Moving on...

 

There's another way to get the instance info in case you're not sure about spacing or characters (it matters).  Just add the counters you want to Performance Monitor.  Next, select Copy Properties -- Ctrl + c  works:

Then Paste into your favorite text editor (I use Notepad++).  You'll see the instance value which you can then copy/paste into your Counters.config file.  See, here's my 1 D: instance name:

Greater Than One

If you look at the LogicalDisk category at line 4 you'll see I have two instances for the one counter.  So yes, you can select more than one instance of data from your counters if they have them.

Filters, ****!

When I was testing this stuff I wasn't seeing results   After some thrashing about I saw that my instance was being filtered for 0 C:!  Uhg!

So if things don't look "right" you may want to check that the default filters that the workbook came with are changed to suit your needs

One of my talented end users asked if there was another way to get tabcmd.exe aside from requesting it from me every time I update the Server.  I told him I didn't know of any other way since what's shown in the Administrator's Guide doesn't offer any alternatives.

 

After some research he found an answer and shared it with me, so I'm sharing it with y'all:

http://onlinehelp.tableau.com/current/online/en-us/tabcmd_install.htm

 

Thanks Clive Munz!