【问题标题】:Warning: Failed to connect to the agentx master agent ([NIL])警告:无法连接到 agentx 主代理 ([NIL])
【发布时间】:2023-03-26 06:30:01
【问题描述】:

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

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

【问题讨论】:

    标签: snmp net-snmp


    【解决方案1】:

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

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

    【讨论】:

    • 对于这种回答,请考虑“评论”而不是“回答”。
    【解决方案2】:

    我现在在使用 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。希望这会有所帮助。

    【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      这不是您问题的答案,但是当我的 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() 函数结束时所做的事情来确定。

      【讨论】:

        【解决方案5】:

        由于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代码中写下这些行。

        【讨论】:

          【解决方案6】:

          我已经解决了 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. 在/etc/snmpd.conf 中写下新行master agentx
          2. 重启snmpd恶魔:

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

          【讨论】:

            猜你喜欢
            • 2014-04-25
            • 2021-09-22
            • 1970-01-01
            • 1970-01-01
            • 2015-04-06
            • 2017-03-14
            • 2016-05-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多