There are a number of things can go iffy in setting up Zabbix to use SNMPv3 to collect metrics from hosts.

VMWare Discovery

If you use VMWare discovery templates to set up your hosts, you need to be aware of an issue with adding extra templates. Basically before version 6.4 of Zabbix, you won't be able to add an extra template to a host that was discovered by the VMWare discovery template. I hit this as I was using the EPEL repo version of Zabbix, so had to switch over to the offical Zabbix repo version to get this working. In the future it should be less of a problem.

Unique EngineID

This is a little less obvious, as when you test your host with snmpget/walk it will respond as expected. The problem starts when you try adding multiple hosts into Zabbix and they all have the same EngineID set in the config. In my case this was due to the config being set on the base image that the VM's were being provisioned from. Zabbix doesn't tell you that there are conflicting EngineID's set for multiple hosts, it works for the first host and then problems start with the extra hosts as you add them.

To check for EngineID you can do something like the following (substituting the <items> as needed):

for seq in host1 host2 host3;  do snmpget -v3 -l authPriv -u <secuser> -a SHA-256 -A "<authpass>" -x AES-128 -X "<privpass>" ${seq} SNMP-FRAMEWORK-MIB::snmpEngineID.0; done

This will give you the engineID of each host in your list, if there are any the same (or they are all the same) you need to sort out how to manage giving them different ID's.

I went with using and engineID built using the hostname, which is literally putting the following line in your snmpd.conf:

engineID <hostname -f>