


Verwenden Sie die ZABBIX-API, um Serverinformationen abzurufen
Dec 22, 2017 pm 01:51 PMManchmal müssen wir den Betriebsstatus des Servers überwachen. ZABBIX ist ein solches Online-Überwachungssystem. Gleichzeitig stellt ZABBIX APIs und andere Methoden für andere Programme zum Abrufen von Daten bereit. In diesem Artikel wird die gemeinsame Nutzung von PHP-Beispielcode verwendet, um allen mitzuteilen, wie Serverinformationen über ZABBIX abgerufen werden können.
Da wir das Zabbix-System installiert haben, muss ich nur noch wissen, wie ich an die Informationen komme. Zusammenfassend gibt es zwei Möglichkeiten, diese zu erhalten.
Informationen zur Installation finden Sie unter: Detaillierte Einführung in die Installation von Zabbix auf Centos7
1. Erhalten Sie Hostinformationen über die ZABBIX-API
Die erhaltenen Hostinformationen Auf diese Weise ist es relativ neu (wird jede Minute aktualisiert). Da die Schnittstelle jedoch jedes Mal angefordert werden muss, ist sie relativ langsam. Wenn eine große Anzahl von Hosts gleichzeitig abgefragt wird, ist sie sehr langsam.
Die offizielle Dokumentation des Open-Source-Überwachungssystems ZABBIX bietet eine umfangreiche API. Ich verwende hier Guzzle 6 für http-Anfragen. Natürlich können Sie auch die in PHP integrierte Curl-Funktion verwenden, um selbst eine HTTP-Anfrage zu schreiben, was sehr einfach ist.
1. Benutzerauthentifizierung zum Erhalten des Tokens.
$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 ], ]);
Da es sich um eine Benutzerauthentifizierung handelt, können alle Authentifizierungen direkt auf Null geschrieben werden. Das zurückgegebene Ergebnis ist:
{ "jsonrpc": "2.0", "result": "0424bd59b807674191e7d77572075f33", "id": 1 }
Das Ergebnis enthält ein Token, das in nachfolgenden Anfragen benötigt wird.
2. Ermitteln Sie die Host-ID basierend auf der IP des Hosts.
$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" ], ]);
Die obige Ausgabe ist ein eingeschränktes Rückgabeelement. Wenn Sie alle Hostinformationen zurückgeben möchten, können Sie die Ausgabe entfernen. Das Rückgabeergebnis der obigen Anfrage ist:
{ "jsonrpc": "2.0", "result": [ { "hostid": "10160", } ], "id": 1 }
3. Holen Sie sich die Überwachungselement-Item-ID des Hosts.
Zabbix bietet viele Überwachungselemente. Die Frage ist also: Welche brauchen wir? Im Folgenden stellt ein Blogger einige häufig verwendete Überwachungselemente vor:
$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; }
Das zurückgegebene Ergebnis ist:
{ "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 }
4. Erhalten Sie die historischen Informationen des entsprechenden Überwachungselements
Im vorherigen Schritt Wir haben die Item-ID aller entsprechenden Überwachungselemente erhalten. Rufen Sie nun die historischen Informationen dieser Überwachungselemente ab. Die Informationen in dieser Schnittstelle werden jede Minute aktualisiert. Wie lange der Abruf der Informationen dauert, hängt also von Ihren individuellen Bedürfnissen ab.
$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; } }
Das zurückgegebene Ergebnis ist:
{ "jsonrpc": "2.0", "result": [ { "itemid": "23296", "clock": "1351090996", "value": "0.0850", "ns": "563157632" }, { ], "id": 1 }
Abschließend sollte das Ergebnis lauten:
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" ]
2. Informationen direkt aus der Datenbank beziehen
Die auf diese Weise erhaltenen Daten sind nicht die neuesten (stündlich aktualisiert). Die Abfragegeschwindigkeit wurde jedoch erheblich verbessert.
Da ich den Code mit dem Laravel-Framework geschrieben habe, werde ich einfach faul sein und keine nativen SQL-Anweisungen schreiben. Jeder kann es sich einfach ansehen.
1. Holen Sie sich die Host-ID aus der Hosts-Tabelle über IP
$host_id = Host::where('host', '10.50.150.80')->value('hostid');
Das zurückgegebene Ergebnis ist: 11101
2. Holen Sie sich die Artikel-ID des Artikelüberwachungselements aus der Artikeltabelle über die Host-ID
$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_');
Das zurückgegebene Ergebnis ist:
Collection {#183 ▼ #items: array:5 [▼ "system.cpu.util[,idle]" => 152511 "vfs.fs.size[/,total]" => 155584 "vfs.fs.size[/,used]" => 155587 "vm.memory.size[available]" => 152533 "vm.memory.size[total]" => 152534 ] }
3. Pass itemid ruft historische Informationen aus der Trends-Tabelle oder der Trends_uint-Tabelle ab
$result = array(); foreach ($item_ids as $key=>$item_id) { if($key == 'system.cpu.util[,idle]') { $value = Trend::where('itemid', $item_id)->orderBy('clock', 'DESC')->value('value_avg'); }else { $value = TrendsUint::where('itemid', $item_id)->orderBy('clock', 'DESC')->value('value_avg'); } $result[$key] = $value; }
Das zurückgegebene Ergebnis ist:
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" ]
Verwandte Empfehlungen:
Detaillierte Einführung in die Installation von Zabbix auf Centos7
Zabbix-Implementierung von E-Mail-Alarmbeispielen Tutorial
Detaillierte Erläuterung des Zabbix-Überwachungsserverzeitproblems
Das obige ist der detaillierte Inhalt vonVerwenden Sie die ZABBIX-API, um Serverinformationen abzurufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So lösen Sie das Problem, dass die eMule-Suche keine Verbindung zum Server herstellen kann

Detaillierte Erläuterung der CentOS-Installationssicherung und des CentOS-Installationsservers

Lösung für die Unfähigkeit, eine Verbindung zum RPC-Server herzustellen und den Desktop nicht aufzurufen

Best-Practice-Leitfaden zum Erstellen von IP-Proxyservern mit PHP

So konfigurieren Sie Dnsmasq als DHCP-Relay-Server

Was soll ich tun, wenn ich das Spiel nicht betreten kann, während der Epic-Server offline ist? Lösung, warum Epic das Spiel nicht offline betreten kann

Wie installiere ich die PHP-FFmpeg-Erweiterung auf dem Server?

Was tun, wenn beim Herstellen der Verbindung zum Apple-ID-Server ein Fehler auftritt?
