我在我的系统上安装了net-snmp5.7.2,我已经为我的应用程序编写了app_agent.conf并且
agentXSocket udp:X.X.X.X:1610
并导出SNMPCONFIGPATH = path_to_app_agent.conf
我还在/usr/etc/snmp/snmp.conf中找到了snmpd.conf
trap2sink X.X.X.Y
agentXSocket udp:X.X.X.X:1610
我的/ etc / snmp / an / var / net-snmp /中还有两个snmpd.conf 的/ etc / SNMP
com2sec notConfigUser default public
com2sec notConfigUser v1 notConfigUser
com2sec notConfigUser v1 notConfigUser
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
access notConfigGroup "" any noauth exact systemview none none
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat
的/ var / NET-SNMP /
setserialno 1322276014
ifXTable .1 14:0 18:0x $
ifXTable .2 14:0 18:0x $
ifXTable .3 14:0 18:0x $
engineBoots 14
oldEngineID 0x80001f888000e17f6964b28450
我已经启动了snmpd和snmptrapd。现在在我的代码中我正在调用
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
init_agent("app_agent");
init_snmp("app_agent");
init_snmp正在发出警告
警告:无法连接到agentx主代理([NIL]):
我知道为什么?在此先感谢您的任何帮助
答案 0 :(得分:4)
我现在遇到了这个问题w / quagga和ospfd,在做了一个' strace -f -p PID'后,在输出中注意到了这一点:
connect(14, {sa_family=AF_FILE, path="/var/agentx/master"}, 110) = -1 EACCES (Permission denied)
所以我:
ls -al /var/agentx/
总共8
drwx------ 2 root root 4096 Sep 12 20:50 .
drwxr-xr-x. 27 root root 4096 Sep 12 20:13 ..
srwxrwxrwx 1 root root 0 Sep 12 20:50 master
然后我:
chmod 755 /var/agentx/
立即斑马和ospfd将其Agentx子网连接起来。
tail -10f /var/log/quagga/zebra.log
2014/09/12 20:52:59 ZEBRA: snmp[info]: NET-SNMP version 5.5 AgentX subagent connected
tail -10f /var/log/quagga/ospfd.log
2014/09/12 20:52:59 OSPF: snmp[info]: NET-SNMP version 5.5 AgentX subagent connected
这是在RHEL6上运行quagga-0.99.23-2014062401。希望这有帮助。
答案 1 :(得分:3)
这基本上是说您编写的子代理无法连接到NetSNMP主代理,如消息所示。在Linux中,默认情况下,agentx将尝试使用/ var / agentx / master通过套接字建立连接。以下提示可能会有所帮助:
agentxsocket /var/agentx/master
和agentxperms 777 777
sudo service snmpd restart
;或者作为一个选项,您可以尝试使用sudo service snmpd stop
停止服务,并运行调试模式snmpd -f -Lo -Dagentx
的实例,这很可能会输出有关子代理连接的有用信息。答案 2 :(得分:1)
有一个类似的问题,无论是使用unix套接字还是Tcp:localhost:750我仍然收到相同的错误消息:
/var/log/quagga/ospfd.log: warning, failed to connect to Master AgentX [nill] or [tcp:localhost:750].
我通过禁用SELINUX解决了这个问题。
答案 3 :(得分:0)
也许你编译它时不支持任何传输域。
例如在OpenWRT中,您必须更改Makefile:
SNMP_TRANSPORTS_INCLUDED = Callback UDP SNMP_TRANSPORTS_EXCLUDED = TCP TCPIPv6 Unix
到
SNMP_TRANSPORTS_INCLUDED = Callback UDP TCP TCPIPv6 Unix SNMP_TRANSPORTS_EXCLUDED =
支持所有传输域。
答案 4 :(得分:0)
由于Net-SNMP的子代理有时无法从配置文件中读取主代理的地址,因此您甚至可以尝试
/* set the location of master agent */
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
NETSNMP_DS_AGENT_X_SOCKET, "udp:X.X.X.X:1610");
在调用init_agent()
之前,在agentx代码中写下这些行。
答案 5 :(得分:0)
我在OS Ubuntu 17.07中解决了下一个命令行的问题
if (e == null || !IsLoaded)
<强> view systemview included .1.3.6.1.2.1.1
强>
view systemview included .1.3.6.1.2.1.2
而不是
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
master agentx
/etc/snmpd.conf
或sudo /etc/init.d/snmpd restart
答案 6 :(得分:0)
这不是您问题的答案,但是当我的 snmpd 服务没有正确启动或关闭时,我也收到了“警告:无法连接到 agentx 主代理([NIL]):”消息。对于我的 SNMP 子代理,我使用了他们提供的示例 example-demon.c,发现在每次循环处理 agent_check_and_process(0) 时,我会不间断地(大约每秒)收到此消息。
while (true) {
agent_check_and_process(0); /* 0 == don't block */
}
我就是这样解决的。
netsnmp_transport *snmpTransport;
while( true ) {
// Check to see snmpd is still running
snmpTransport = netsnmp_transport_open_client("agentx", NULL);
if (snmpTransport == NULL)
{
// Just went down?
if (snmpAgentDown == false)
{
snmp_log( LOG_INFO, "Net-SNMP Agent is down\n" );
snmpAgentDown = true;
}
Sleep(5000); // Sleep for a 5 sec
} else
{
if (snmpAgentDown)
{
snmp_log( LOG_INFO, "Net-SNMP Agent is back up\n" );
snmpAgentDown = false;
}
// Close connection test
snmpTransport->f_close(snmpTransport); // This burn me without; its needed
netsnmp_transport_free(snmpTransport);
// Process SNMP request and notifications
agent_check_and_process( 0 ); // 0 == don't block, 1 = block
Sleep(1); // Sleep for 1ms; Need to sleep thread, but need subAgent to be responsive too
}
i++;
}
现在,如果 snmpd 出现故障,我的应用程序可以检测到它出现故障,并且不会处理 agent_check_and_process() 停止出现“警告:无法连接到 agentx 主代理 ([NIL]):”。如果 snmpd 恢复正常,则会对其进行处理。
最终说明:我确定该代码基于 net-snmp-5.7.2 包中的 subagent.c 文件 subagent_open_master_session() 功能。还需要 snmpTransport->f_close(snmpTransport) 并通过在 subagent_open_master_session() 函数末尾执行 snmp_close() 来确定。