Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

VmBix Build Status

VmBix is a multi-threaded TCP proxy for the VMWare Sphere API written in Java. It accepts connections from a Zabbix server/proxy/agent or the zabbix_get binary and translates them to VMWare API calls.

Starting from version 2.2, Zabbix can natively monitor a VMWare environment. But there are a few drawbacks :

  • The monitored items are not all very relevant
  • This is not easily extensible
  • The created ESX and VM hosts are mostly read-only. You cannot attach them different templates, put them into different groups, or use a Zabbix agent to monitor their OS or apps

VmBix helps you to overcome these limitations, with very good performance. It is multi-threaded, implements objects caching, and can be queried using a Zabbix loadable module.

VmBix comes with a set of templates adding several monitored items, triggers and graphs in Zabbix. Here are a few screenshots of what you can expect in Zabbix :

You can use VmBix methods to query interesting VMWare metrics, for example :

    "data": [
            "{#METRICINSTANCE}": "scsi2:2"
            "{#METRICINSTANCE}": "scsi2:1"
            "{#METRICINSTANCE}": "scsi2:0"
            "{#METRICINSTANCE}": "scsi2:6"
            "{#METRICINSTANCE}": "scsi2:5"
            "{#METRICINSTANCE}": "scsi2:4"
            "{#METRICINSTANCE}": "scsi2:3"


Get the latest version of the server here. RPM & DEB packages are provided.

You will also need the Zabbix loadable module corresponding to your zabbix version. See for installation details.

The VmBix server can be installed on the same machine as a Zabbix server or proxy. The loadable module must be installed on the Zabbix machine that will monitor the VMWare environment.

Or build from source

Note: you will need to install JDK and Maven to compile VmBix.

  • Install Maven

Follow the instructions on this page to install Maven.

  • Compile
tar -zxvf vmbix-x.x.tar.gz
cd vmbix-x.x
mvn package

See the instructions here to compile the loadable module.

Quick start

Note: to run VmBix you'll have to install a JRE (OpenJDK should suite but not tested). All the scripts are tested on Centos 7 but should work on other *NIX distributions as well.

Test the binary

Try to run /usr/local/sbin/vmbix, you should get a usage output :

# /usr/local/sbin/vmbix
vmbix {-P|--port} listenPort {-s|--serviceurl} http[s]://serveraddr/sdk {-u|--username} username {-p|--password} password [-f|--pid pidfile] [-i|--interval interval] [-U|--useuuid (true|false)]
vmbix [-c|--config] config_file  [-f|--pid pidfile] [-i|--interval interval] [-U|--useuuid (true|false)]

Configure the daemon

It is strongly recommended to check your parameters before writing them down to a config file. Run VmBix with your username, password and service url. It is recommended to use a read-only user to connect to the vCenter.

$ vmbix -P 12050 -u "MYDOMAIN\\myvmwareuser" -p "mypassword"" -s "https://myvcenter.mydomain.local/sdk"
log4j:WARN No appenders could be found for logger (
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See for more info.
17:39:08.430 [main] INFO net.dav3860.VmBix - starting server on port 12050
17:39:08.433 [main] INFO net.dav3860.VmBix - server started

You should see a similar ouput. Once you have validated that you can start VmBix, you can edit the configuration file /etc/vmbix/vmbix.conf and run the daemon. You can still run the process in foreground for real-time troubleshooting if necessary.

To install as a daemon:

chkconfig --add vmbixd

Now you may start the daemon:

service vmbixd start

And configure autostart if you wish:

chkconfig vmbixd on

For logs, check the file :

tail -f /var/log/vmbix.log

Configure Zabbix

All the ESX servers, datastores and virtual machines will automatically be discovered and created in Zabbix. See the following instructions to configure Zabbix.

Import the templates

Import the templates from here or from /usr/share/vmbix/zabbix/templates if you installed a package (import the vCenter template after the others). At the moment, only Zabbix 3.0.x templates are provided. The VmBix items in Zabbix are configured with an "Simple Check" type as Zabbix uses a loadable module to talk to VmBix. So it is still possible to use a Zabbix agent in parallel to monitor the hosts. The loadable module must be installed on your server/proxy.

Discover the objects

VmBix can discover and create your VMWare environment (hypervisors, VMs, datastores) in too ways :

  • using Zabbix Low-Level Discovery (LLD) and host prototypes
  • using a provided script talking to the Zabbix API to create regular Zabbix hosts (recommended)

Using Zabbix LLD

Create a host named "VmBix" for example and link it with the VmBix vCenter template. The IP address and port are not used, but it is necessary to make it monitored by the server/proxy running the loadable module.

Wait for the ESX servers, datastores and virtual machines to be discovered and created. They will be automatically linked to the VmBix ESX, datastore or VM template. You may need to increase the Timeout parameter in the Zabbix configuration file if VSphere takes too long to respond.

You can also link additional templates to the created hosts by editing the corresponding host prototype in the VmBix vCenter template discovery rules.

As these hosts are created using the host prototype mechanism in Zabbix, they will be almost read-only. For example, you can't edit one host to link it to a specific template. This must be made at the host prototype level, which can be a limitation if your virtual machines are different.

Using VMWare objects as regular hosts in Zabbix

To overcome this limitation, you can disable the VM discovery rule in the VmBix vCenter template and create your virtual machines manually in Zabbix. Then, link them to the VmBix VM template (preferably with the loadable module method). You can then edit them as any other host.

Note: if the parameter useuuid is set to true in the VmBix configuration file, the objects must be referenced using their VMWare UUID. So if you create a host manually, you must set its name to the UUID and its visible name to the name of the VM. You can use the *.discovery[*] methods to get the UUID of an object :

# zabbix_get -s -p 12050 -k "vm.discovery[*]"
  "data": [
      "{#VIRTUALMACHINE}": "MYVM01",
      "{#UUID}": "4214811c-1bab-f0fb-363b-9698a2dc607c"
      "{#VIRTUALMACHINE}": "MYVM02",
      "{#UUID}": "4214c939-18f1-2cd5-928a-67d83bc2f503"

As it would be a pain to create all your virtual machines/ESX/datastores manually, a sample import script (vmbix-object-sync) is provided for this purpose. This is the recommended way to discover your environment with VmBix. Check the instructions here to setup and configure the script.

If you installed VmBix from a package, the script is located in /usr/share/vmbix/zabbix/addons.

Querying VmBix in CLI

You can query VmBix like a Zabbix agent using the zabbix_get tool :

# zabbix_get -s -p 12050 -k about[*]
VMware vCenter Server 5.1.0 build-1364037
# zabbix_get -s -p 12050 -k esx.status[esx01.domain.local]
# zabbix_get -s -p 12050 -k vm.guest.os[4214811c-1bab-f0fb-363b-9698a2dc607c]
CentOS 4/5/6 (64 bits)
# zabbix_get -s -p 12050 -k esx.discovery[*]
  "data": [
      "{#ESXHOST}": "esx01.domain.local"
      "{#ESXHOST}": "esx02.domain.local"
}# zabbix_get -s -p 12050 -k vm.counter[MYVM01,virtualDisk.totalReadLatency.average,scsi0:1,300]

Again, if useuuid is set to true in the configuration file, objects are identified using their UUID :

# zabbix_get -s -p 12050 -k vm.guest.os[421448c4-8970-28f0-05a5-90a20724bd08]
CentOS 4/5/6 (64 bits)

Supported Zabbix checks

There a a complete description of the VmBix supported methods in the Wiki section.


To disable the cache set CacheTtl variables to 0.

How to implement your own checks

  1. Find a function called
private void checkAllPatterns                (String string, PrintWriter out  )
  1. Add your own pattern. For example this string:
Pattern pHostCpuUsed            = Pattern.compile("^(?:\\s*ZBXD.)?.*esx\\.cpu\\.load\\[(.+),used\\]"             );        // :checks host cpu usage

will be responsible for this item:

  1. Scroll down to the next block of code in the same function starting with "String found;", add you own "found=" block:
found = checkPattern(pHostCpuUsed           ,string); if (found != null) { getHostCpuUsed           (found, out); return; }

This one calls a function called "getHostCpuUsed" with {HOST.DNS} as an a first argument and a PrintWriter instance as a second one.

  1. Your function should accept String and PrintWriter arguments. It should return values like that:
  1. Add a usage line to the methods() function :
static void methods() {
            "Available methods :                                  \n"
          + "esx.cpu.load[name,used]                              \n"

Querying multiple vCenters

At the moment, VmBix does not support multiple vCenters. If you still want to query multiple vCenters, you need to install VmBix on different Zabbix proxies, pointing to different vCenters. Then select the right proxy in each Zabbix host configuration page.

  • If you use Zabbix LLD to discover the VMWare environment, you will need to create multiple VmBix hosts, one for each proxy/VmBix installation.
  • If you use the Python script, you will have to edit its configuration file to assign a Zabbix proxy to the discovered hosts.

Version history


This project is a fork of the original VmBix by @hryamzik.


Fork of vmbix, a TCP proxy for querying a VMWare infrastucture with Zabbix



No packages published