Solution 1:

ESXi only provides comprehensive monitoring via CIM (WBEM\WS-MAN) not SNMP. Whether that was a good decision by VMware or not is an argument for another day but SNMP based monitoring and management support is (as you said) effectively useless. There is a thread on VMware Communities with a basic sample Python Script to provide some glue between ESXi's WBEM\WS-MAN interface and Nagios - I've never tried this as the System's Management tools I use can handle direct management via WS-MAN but it seems like a viable approach provided you are prepared to do a bit of coding in Python.

Solution 2:

You can monitor ESX hosts directly (or through vSphere) using the check_vmware_api.pl from op5. You can monitor the hardware with the check_esxi_hardware.py plugin (Dell, HP, IBM). They both work exactly as advertised (at this moment we are running ESXi 5.1)

Solution 3:

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1008065

Configuring SNMP Traps for ESXi/ESX 3.5, 4.x, and 5.0 Details

To generate virtual machine and environmental traps from ESX/ESXi 3.5, 4.x and 5.0 hosts, you must configure and enable the embedded SNMP agent. You cannot use the Net-SNMP-based agent to generate these traps, although it can receive GET transactions and generate other types of traps.

This represents a change in behavior from ESX 3.0.x, in which the configuration file for the Net-SNMP-based agent controlled the generation of virtual machine traps. For more information, see Configuring SNMP on an ESX 3.0.x host(1008186). Solution

Use the vicfg-snmp.pl command from the Remote CLI or vSphere CLI to enable the SNMP agent and configure trap destinations. Each time you specify a target with the vicfg-snmp.pl command, the settings you specify overwrite all previously specified settings. To specify multiple targets, specify them in a single command, separated by commas.

To enable and configure SNMP traps:

Notes:

Prior to ESXi 5, ESXi did not include a firewall
Ensure that the SNMP protocol is open in the ESX firewall. For more information, see:

    ESX 4.x: Working with firewall rules in ESX 4.x (1021779)
    ESXi 5.0: By default, the SNMP firewall port 161 is open. If it is not, see the ESXi Firewall Configuration section of the ESXi and vCenter Server 5.0 Documentation.

To implement these steps:

    ESX/ESXi 3.5: Use the Remote CLI. For more information, see the Remote Command-Line Interface Documentation. You can download the VMware Infrastructure Remote CLI from the VMware Download Center.
    ESX/ESXi 4.x and ESXi 5.0: Run this procedure using vSphere CLI, not vSphere PowerCLI.

    For more information, see the vSphere Command-Line Interface Documentation.

    If you have a My VMware profile, you can download vSphere CLI from:

    vSphere 4.x – http://www.vmware.com/download/download.do?downloadGroup=VCLI41
    vSphere 5.0 – http://www.vmware.com/download/download.do?downloadGroup=VCLI50 

    Note: If you do not have a My VMware profile, you must create one. For more information, see Creating a My VMware profile (2007005).

Navigate to the directory where vicfg-snmp.pl is stored. By default, vicfg-snmp.pl is located in:

C:\Program Files\VMware\VMware vSphere CLI\bin

Run this command:

vicfg-snmp.pl --server hostname --username username --password password --show

Note: Run the vicfg-snmp.pl --help command for a full list of options.

Specify the communities and trap targets with this command:

vicfg-snmp.pl --server hostname --username username --password password -t hostname@port/community

Note: In ESX 4.x or ESXi 5.0, you may need to use the -c community flag.

Example: To send SNMP traps from the host host.example.com, to port 162 on target.example.com, using the public community, use this command:

vicfg-snmp.pl --server host.example.com --username root --password password -t target.example.com@162/public

Note: To prevent clear text display of the user password, remove the --password password portion. You are then prompted to enter the password, and the entry is hidden.

To enable the SNMP service, run this command:

vicfg-snmp.pl --server hostname --username username --password password --enable

Note: To verify SNMP settings, run this command:

vicfg-snmp.pl --server hostname --username username --password password --show

(Optional) To send a test trap to verify that the agent is configured correctly, run this command:

vicfg-snmp.pl --server hostname --username username --password password --test

The test trap generated is a warmStart trap.