Ad Widget

Collapse

Как по IP или DNS при помощи API JSON найти hostid или имя хос&#

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • BashkirovVM
    Junior Member
    • Jun 2011
    • 14

    #1

    Как по IP или DNS при помощи API JSON найти hostid или имя хос&#

    у меня zabbix 2.1.0
    подскажите, можно ли по IP или DNS при помощи API JSON найти hostid или имя хоста?
  • Navoyenok
    Senior Member
    • Dec 2011
    • 101

    #2
    Добрый день, уважаемый BashkirovVM

    Когда нам потребовалось по ip найти имя в БД zabbix (для получения SNMP-трапов), то написали на perl-е такую функцию.

    # Find HOSTNAME by IP-address
    sub FindHostByIP {
    my $Name = $_[0];
    my($Result);
    my($dbh);

    $dbh = DBI->connect('DBI:mysql:ИмяБД', 'ИмяПользователя', 'Пароль'
    ) || die "Could not connect to database: $DBI::errstr";
    my($sth) = $dbh->prepare("SELECT host FROM hosts WHERE ip=\"".$Name."\"");
    $sth->execute();
    ($Result) = $sth->fetchrow_array();
    $sth->finish();
    $dbh->disconnect();

    if( $Result eq "" ) {
    $Result = "snmptraps";
    }
    print "$Result\n";
    return($Result);
    }

    Comment

    • dotneft
      Senior Member
      • Nov 2008
      • 699

      #3
      Originally posted by bashkirovvm
      у меня zabbix 2.1.0
      подскажите, можно ли по ip или dns при помощи api json найти hostid или имя хоста?
      Думаю да, посмотрите документацию. Там есть фильтрация по полям. Лезть в базу напрямую не рекомендую, т.к. предложенный вариант не будет работать в 2.0 ветке.

      Comment

      • BashkirovVM
        Junior Member
        • Jun 2011
        • 14

        #4
        Хотелось именно через API но там возвращается только hostid
        делаю запрос
        $json_obj = {
        jsonrpc=> '2.0',
        method => 'host.get',
        params => {
        filter => { host => 'K-040-2908' },
        output => 'extended',
        sortfield => 'name',
        },
        id => 2,
        auth => "$authHash",
        };
        Возвращает
        $VAR1 = bless( {
        'version' => 0,
        'content' => {
        'jsonrpc' => '2.0',
        'id' => 2,
        'result' => [
        {
        'hostid' => '10085'
        }
        ]
        },
        'jsontext' => '{"jsonrpc":"2.0","result":[{"hostid":"10085"}],"id":2}',
        'is_success' => 1
        }, 'JSON::RPC::Legacy::ReturnObject' );
        Last edited by BashkirovVM; 31-07-2012, 14:05.

        Comment

        • dotneft
          Senior Member
          • Nov 2008
          • 699

          #5
          Output должен равняться extend, а не extended

          http://www.zabbix.com/documentation/...x/api/host/get

          Comment

          • BashkirovVM
            Junior Member
            • Jun 2011
            • 14

            #6
            Originally posted by dotneft
            output должен равняться extend, а не extended

            http://www.zabbix.com/documentation/...x/api/host/get
            Спасибо, все заработало

            Comment

            • zalex_ua
              Senior Member
              Zabbix Certified Trainer
              Zabbix Certified SpecialistZabbix Certified Professional
              • Oct 2009
              • 1286

              #7
              Originally posted by BashkirovVM
              у меня zabbix 2.1.0
              подскажите, можно ли по IP или DNS при помощи API JSON найти hostid или имя хоста?
              Originally posted by BashkirovVM
              Спасибо, все заработало
              Что же заработало ?
              Вам ведь нужно было по IP или DNS а не по имени узла в настройках.

              Вот то что пока не документировано,
              Code:
              {"jsonrpc":"2.0","method":"hostinterface.get","params":{"output":"extend","filter":{"ip":"10.20.0.16","dns":"it2.corp.net"}},"id":0,"auth":"3ce1dc98c928fd789000cd2321f2f5f8"}
              можно использовать или "ip" или "dns" в фильтре, или оба одновременно.

              Результат:

              Code:
                          "interfaceid": "30147",
                          "hostid": "10049",
                          "main": "1",
                          "type": "1",
                          "useip": "1",
                          "ip": "10.20.0.16",
                          "dns": "it2.corp.net",
                          "port": "10050"

              Comment

              Working...