Looking at the man page again as Zoredache suggested I realized the case of options flags are different between snmpget and check_snmp for username and authPriv security level
User is lowercase 'u' for snmpget and uppercase 'U' for check_snmp, security level is 'l' and 'L' for snmpget/check_snmp respectively.
Also protocol specification goes form -v3 to --...
Seems it is a normal behaviour for OID .22.214.171.124.126.96.36.199.188.8.131.52.1.35
Its value is INTEGER: 1 when tunnel is up, but this OID disappears when tunnel is down.
So your check should handle this : if OID is not found then raise an alert because tunnel is down :
Unlike what ...
It's the value of the SNMP variable that you are querying. So, you might set a warning on CPU load above a certain percentage, or disk space below the same. For other variables, it might be some sort of enumerated type. What exactly it is in your case, you'ld have to look at the command definition to see what OID you are querying.
When you've found out, ...
You cannot use the stock check_snmp with non-numerical values; you have to either write a wrapper around the check_snmp plugin, or use/write a plugin that checks the string values. That's why there are hundreds of SNMP plugin variants for specific hardware. That OID is for a QNAP NAS, right?
Usually, you'll find that someone else has already done the work ...
You certainly already know that Nagios needs a number (0,1,2,3) as a return status code from the command launched.
if $? for the check_snmp command always returns 0, my advice would be to write your own check adding pipe and grep to the check_snmp command, something like :
./check_snmp -H 10.0.10.17 -P 2c -C public -o .184.108.40.206.4.1.246220.127.116.11.1.7.1 | grep ...
as "work around" (even though it really not), one can use -c or -w instead of -r, as -r seems to have some sort of bug.
# ./check_snmp --help | grep -E 'critical|warning'
# /usr/lib/nagios/plugins/check_snmp --hostname=X.X.X.X --community=X --protocol=X --oid=ifOperStatus.6 -c1