警告:无法连接到agentx主代理([NIL])

时间:2012-11-02 10:31:47

标签: snmp net-snmp

我在我的系统上安装了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]):

我知道为什么?在此先感谢您的任何帮助

7 个答案:

答案 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通过套接字建立连接。以下提示可能会有所帮助:

  1. 在具有访问权限的适当权限下运行子代理 到套接字e.x.须藤
  2. 检查snmpd.conf中的套接字设置(位置不同),如果尚未指定,例如 agentxsocket /var/agentx/masteragentxperms 777 777
  3. 重新启动NetSNMP,以使更改生效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中解决了下一个命令行的问题

  1. 更改代码(添加行)
  2. 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

    1. view systemview included .1.3.6.1.2.1.25.1.1
    2. 中写下新行master agentx
    3. 重新启动 snmpd 恶魔:
    4. /etc/snmpd.confsudo /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() 来确定。