ZABBIX API를 사용하여 서버 정보 얻기
Dec 22, 2017 pm 01:51 PM때때로 서버의 실행 상태를 모니터링해야 하는 경우가 있습니다. ZABBIX는 이러한 온라인 모니터링 시스템입니다. 동시에 ZABBIX는 다른 프로그램이 데이터를 얻을 수 있는 API 및 기타 방법을 제공합니다. 이 기사에서는 PHP 예제 코드 공유를 사용하여 ZABBIX를 통해 서버 정보를 얻는 방법을 모든 사람에게 알립니다.
이미 Zabbix 시스템이 설치되어 있으므로 정보를 얻는 방법만 알면 됩니다. 정보를 얻는 방법은 두 가지가 있습니다.
설치는 다음을 참조하세요. centos7에 zabbix 설치에 대한 자세한 소개
1. ZABBIX API를 통해 호스트 정보 얻기
이 방법으로 얻은 호스트 정보는 비교적 새로운 것입니다(1분마다 업데이트됨). 하지만 인터페이스를 매번 요청해야 하기 때문에 상대적으로 속도가 느립니다. 동시에 쿼리하는 호스트 수가 많으면 속도가 매우 느려집니다.
오픈 소스 모니터링 시스템 ZABBIX의 공식 문서는 풍부한 API를 제공합니다. 여기서는 http 요청에 Guzzle 6을 사용합니다. 물론, PHP에 내장된 컬 기능을 사용하여 http 요청을 직접 작성할 수도 있는데 이는 매우 간단합니다.
1. 토큰을 얻기 위한 사용자 인증.
$responst = $this->httpClient->request('POST', 'http://zabbix.xxxxx.com/zabbix/api_jsonrpc.php', [ 'headers' => [ 'Content-Type' => 'application/json-rpc', ], 'json' => [ 'jsonrpc' => '2.0', 'method' => 'user.login', 'params' => [ "user"=> 'your username', "password"=> 'your password' ], 'id' => 1, 'auth' => null ], ]);
이것은 사용자 인증이므로 모든 인증을 null 에 직접 쓸 수 있습니다. 반환 결과는 다음과 같습니다.
{ "jsonrpc": "2.0", "result": "0424bd59b807674191e7d77572075f33", "id": 1 }
결과에는 후속 요청에 필요한 토큰이 포함됩니다.
2. 호스트의 IP를 기반으로 호스트 ID를 가져옵니다.
$responst = $this->httpClient->request('POST', 'http://zabbix.xxxxx.com/zabbix/api_jsonrpc.php', [ 'headers' => [ 'Content-Type' => 'application/json-rpc', ], 'json' => [ 'jsonrpc' => '2.0', 'method' => 'host.get', 'params' => [ "output" => ["hostid"], "filter" => [ "host" => '192.168.1.1' ] ], 'id' => 1, 'auth' =>"0424bd59b807674191e7d77572075f33" ], ]);
위의 출력은 반품이 제한된 항목입니다. 모든 호스트 정보를 반환하려면 출력을 제거하면 됩니다. 위 요청의 반환 결과는 다음과 같습니다.
{ "jsonrpc": "2.0", "result": [ { "hostid": "10160", } ], "id": 1 }
3. 호스트의 모니터링 항목 itemid를 가져옵니다.
zabbix는 다양한 모니터링 항목을 제공하는데 어떤 항목이 필요한가? 다음은 블로거가 소개하는 일반적으로 사용되는 모니터링 항목입니다. 이전 단계에서는 해당하는 모든 모니터링 항목의 itemid를 얻었습니다. 이제 이러한 모니터링 항목에 대한 이력 정보를 가져옵니다. 이 인터페이스의 정보는 1분마다 업데이트되므로 정보를 검색해야 하는 기간은 개인의 필요에 따라 다릅니다.
$items = array( 'vm.memory.size[available]', // 内存可用值 (KB) 'vm.memory.size[total]', // 内存总数 (KB) 'system.cpu.util[,idle]', // 当前CPU IDLE值 (%) 'vfs.fs.size[/,used]', // 当前 / 盘使用值 (KB) 'vfs.fs.size[/,total]', // 当前 / 盘总数 (KB) );
반환된 결과는 다음과 같습니다.
$item_ids = array(); foreach ($items as $item) { $responst = $this->httpClient->request('POST', $this->url, [ 'headers' => [ 'Content-Type' => 'application/json-rpc', ], 'json' => [ 'jsonrpc' => $this->jsonrpc, 'method' => $this->METHOD_ITEM_GET, 'params' => [ "output" => 'extend', "hostids" => $this->hostid, "search" => [ "key_" => $item ], 'sortfield' => 'name' ], 'id' => 1, 'auth' => $this->token ], ]); $body = json_decode($responst->getBody()->getContents()); $item_ids[] = $body->result[0]->itemid; }
최종 결과는 다음과 같습니다.
{ "jsonrpc": "2.0", "result": [ { "itemid": "23298", "type": "0", "snmp_community": "", "snmp_oid": "", "hostid": "10084", "name": "Context switches per second", "key_": "vm.memory.size[available]", "delay": "60", "history": "7", "trends": "365", "lastvalue": "2552", "lastclock": "1351090998", "prevvalue": "2641", "state": "0", "status": "0", "value_type": "3", "trapper_hosts": "", "units": "sps", "multiplier": "0", "delta": "1", "snmpv3_securityname": "", "snmpv3_securitylevel": "0", "snmpv3_authpassphrase": "", "snmpv3_privpassphrase": "", "snmpv3_authprotocol": "0", "snmpv3_privprotocol": "0", "snmpv3_contextname": "", "formula": "1", "error": "", "lastlogsize": "0", "logtimefmt": "", "templateid": "22680", "valuemapid": "0", "delay_flex": "", "params": "", "ipmi_sensor": "", "data_type": "0", "authtype": "0", "username": "", "password": "", "publickey": "", "privatekey": "", "mtime": "0", "lastns": "564054253", "flags": "0", "interfaceid": "1", "port": "", "description": "", "inventory_link": "0", "lifetime": "0", "evaltype": "0" } ], "id": 1 }
에서 직접 가져옵니다.
저는 laravel 프레임워크를 사용하여 코드를 작성했기 때문에 그냥 게을러서 네이티브 SQL 문을 작성하지 않을 것입니다.
1. IP 주소를 통해 호스트 테이블에서 호스트 ID를 가져옵니다
$items_result = array(); foreach ($this->itemids as $k=>$itemid) { if($this->items[$k] == 'system.cpu.util[,idle]') { $history = 0; }else { $history = 3; } $responst = $this->httpClient->request('POST', 'http://zabbix.xxxxx.com/zabbix/api_jsonrpc.php', [ 'headers' => [ 'Content-Type' => 'application/json-rpc', ], 'json' => [ 'jsonrpc' => '2.0', 'method' => 'history.get', 'params' => [ "output" => 'extend', "history" => $history, "itemids" => $itemid, "sortfield" => 'clock', 'sortorder' => 'DESC', 'limit' => '1', ], 'id' => 1, 'auth' => $this->token ], ]); $body = json_decode($responst->getBody()->getContents()); if(property_exists($body, 'result')) { $items_result[$this->items[$k]] = $body->result[0]->value; }else { Log::error(json_encode($body)); return false; } }
반환된 결과는 11101
{ "jsonrpc": "2.0", "result": [ { "itemid": "23296", "clock": "1351090996", "value": "0.0850", "ns": "563157632" }, { ], "id": 1 }
반환된 결과는
array:5 [▼ "system.cpu.util[,idle]" => 98.9622 "vfs.fs.size[/,total]" => "42141548544" "vfs.fs.size[/,used]" => "6917797137" "vm.memory.size[available]" => "57394996906" "vm.memory.size[total]" => "67439050752" ]
3입니다. itemid
$host_id = Host::where('host', '10.50.150.80')->value('hostid');
를 통해 Trends 테이블 또는 Trends_uint 테이블에서 기록 정보를 얻습니다.
$items = array( 'vm.memory.size[available]', // 内存可用值 (KB) 'vm.memory.size[total]', // 内存总数 (KB) 'system.cpu.util[,idle]', // 当前CPU IDLE值 (%) 'vfs.fs.size[/,used]', // 当前 / 盘使用值 (KB) 'vfs.fs.size[/,total]', // 当前 / 盘总数 (KB) ); $item_ids = Item::where('hostid', 11106)->whereIn('key_', $items)->pluck('itemid', 'key_');
관련 권장 사항:
centos7에 zabbix 설치에 대한 자세한 소개
zabbix 이메일 알람 구현 예제 튜토리얼
zabbix 모니터링 서버 시간 문제의 예에 대한 자세한 설명
위 내용은 ZABBIX API를 사용하여 서버 정보 얻기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











CentOS 설치 퓨즈 및 CentOS 설치 서버에 대한 자세한 설명

RPC 서버 연결 불가 및 데스크탑 진입 불가 현상에 대한 해결 방법

에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 에픽게임즈가 오프라인으로 게임에 입장할 수 없는 이유에 대한 해결책

Apple ID 서버에 연결할 때 오류가 발생하면 어떻게 해야 합니까?
