command_name check_tcptest
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$
}
define service {
use local-service
host_name localhost
service_description Check_ssh_121
check_command check_tcptest!192.168.0.121!22
}
结果报错
然后我把command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$换成
command_line $USER1$/check_tcp -H $ARG1$ -p $ARG2$就好了

这不就说明$HOSTADDRESS$ 这个东西失效了么
这玩意儿失效波及了许多监控服务比如smtp的,http的。
2014-01-19更新:
抱歉,原来这个不是宏$HOSTADDRESS$ 失效。是之前我的用法有问题。之前我认为远程主机的服务监控都是通过check_nrpe!command 这种形式来进行监控,导致我用check_http的时候也是check_nrpe!check_http 这样的形式去监控,当时想,如果是这种形式去监控,相当于自己向自己发http,网络因素很可能检测不到,于是我想放在本地去实现,但是本地的话,得定义检测主机的IP吧,于是出现了上面的“check_command check_tcptest!192.168.0.121!22” 这种用法,这种用法会导致报错的原因其实是我多此一举了。
内置的宏$HOSTADDRESS$这个参数是会自动读取host_name这个参数,不用自己再手动写一次,check_tcp正确的写法应该是:
“check_command check_tcp!22”
同样的,check_http的正确用法应该是这样:
比如想监控这个url:
先定义命令:
# 'check_http_url' command definition
define command{
command_name check_http_url
command_line $USER1$/check_http -I $HOSTADDRESS$ -u $ARG1$
}
再定义服务:
define service {
use local-service
host_name ct_server111
service_description aws.amazon.com
check_command check_http_url!'/cn/ec2/'
contact_groups admin-phone
}
看见没,“check_command check_http_url!'/cn/ec2/'” 之前的多此一举的错误用法是这样: check_command check_http_url!aws.amazon.com!'/cn/ec2/'