4

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

我不知道为什么??提前感谢您的帮助

4

6 回答 6

5

这基本上是说您编写的子代理未能连接到 NetSNMP 主代理,如消息所示。在 Linux 中,默认情况下,agentx 将尝试使用 /var/agentx/master 通过套接字建立连接。以下提示可能会有所帮助:

  1. 在有权访问套接字 ex sudo 的适当权限下运行您的子代理
  2. 如果尚未指定,请检查您的 snmpd.conf 中的套接字设置(位置不同),例如 agentxsocket /var/agentx/masteragentxperms 777 777
  3. 重新启动 NetSNMP 以使任何更改生效sudo service snmpd restart;或者作为一个选项,您可以尝试停止服务sudo service snmpd stop并以调试模式运行实例,snmpd -f -Lo -Dagentx这很可能会输出有关子代理连接的有用信息。
于 2014-04-22T15:18:03.423 回答
5

我现在用 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/
total 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/

zebra 和 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。希望这可以帮助。

于 2014-09-13T04:09:11.793 回答
1

有类似的问题,无论是使用 unix Sockets 还是 Tcp:localhost:750 我仍然收到相同的错误消息:

/var/log/quagga/ospfd.log:  warning, failed to connect to Master AgentX [nill] or [tcp:localhost:750].

我通过禁用 SELINUX 解决了这个问题。

于 2015-10-05T14:02:33.650 回答
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) 并通过遵循 snmp_close() 在 subagent_open_master_session() 函数末尾所做的事情来确定这一点。

于 2021-02-10T22:49:55.730 回答
-1

我已经解决了 OS Ubuntu 17.07 中下一条命令行的问题

  1. 更改代码(添加行)

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

  1. 写下新master agentx/etc/snmpd.conf
  2. 重启snmpd恶魔:

sudo /etc/init.d/snmpd restart或者sudo service snmpd restart

于 2017-07-11T10:21:39.747 回答
-1

由于 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");

在调用之前将这些行写在 agentx 代码中init_agent()

于 2016-12-05T04:31:24.240 回答