내부 API를 아십니까?

3145 단어 zabbixapi
아무래도, 일본 Zabbix 사용자회@_BSmile_ 입니다.

전치



zabbix는 버전 1.8부터 API를 구현했으며, 이 놀라운 기능을 통해 외부 AP와의 연동이 가능해졌습니다.
그렇게, 예를 들면 「Zabbix의 대시보드 화면은 XXXXX다!」라고 말하고 있는 분들이 사용하고 있는 grafana 어째서 Zabbix 대시보드를 표시하고 있는 경우는 API를 사용하고 있군요.
일단 말해 둡니다만, XXXXX인 화면은 Zabbix 3.4부터 조금 보기가 좋아지므로 사용해 보면 좋을지도 모릅니다.

아래 이미지는 2.2.


API 문서

내부 API



그런데 이번에 이야기하고 싶은 것은 API 문서에 실려 있지 않은 API가 있다는 것입니다.
통칭 "내부 API".

Zabbix는 과거의 수집 이력 등 거의 모든 정보를 DB에 저장하고 있습니다.
여러분이 사용하는 WebUI에 대해서는, 이 DB로부터 데이터를 검색한 결과를 보고 있습니다.
이 점은 로그인 유저의 그룹에 「디버그 모드」를 유효화하면 알기 쉽습니다.

하지만 Zabbix의 DB에 보관하지 않은 정보라는 것도 존재합니다.
큐 정보입니다.
DB에 없는 정보를 WebUI로 취득하는, 그러한 때에 내부 API는 사용되고 있습니다.

대기열 정보



큐의 정보는,zabbix3.0.8 이전에는 취득·표시할 수 있는 상한치가 500이 되고 있어 C의 소스와 php의 개수가 필요했습니다만 그 이후는 php의 파라미터 변경 가능하게 되어 있습니다.
htps //w w. 잔인한 x. 코 m / 도쿠 멘 타치 온 / 3.2 / 마누아 l / 우우 b_ 이런 r 푸세 / / 후 니치 온 s

절차


  • 준비 : 일반 API로 사용자를 로그인하고 인증 토큰을 지불하십시오.
  • [root@localhost ~]# curl -X POST -H 'Content-Type:application/json' -d'{"jsonrpc": "2.0","method":"user.login","params": {"user":"Admin","password":"zabbix"},"id":0}' 127.0.0.1/zabbix/api_jsonrpc.php
    {"jsonrpc":"2.0","result":"fa23a03c53c8db0c2654ce0893611747","id":0}
    
  • 연습 : 지불 한 토큰을 사용하고 내부 API 실행

  • 내부 API는 일반 api와 달리 웹 서버를 통하지 않고 Zabbix 서버의 대기 포트(일반적으로 10051/TCP)를 사용합니다.
    telnet이 아니라 nc 명령을 사용하여 얻을 수 있습니다.
    queue.get에서 사용하는 sid는 이전 user.login에서 얻은 결과 값을 사용하십시오.
    [root@localhost ~]# telnet 127.0.0.1 10051
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    {"request":"queue.get", "sid":"fa23a03c53c8db0c2654ce0893611747","type":"overview"}
    {"response":"success","data":[{"itemtype":3,"delay5":0,"delay10":1,"delay30":0,"delay60":0,"delay300":0,"delay600":0}]}Connection closed by foreign host.
    

    위는 큐 화면의 「개요」를 JSON 형식으로 취득한 것입니다.
    type을 "overview by proxy"나 "details"로 하면, 프록시의 개요나 상세를 취득할 수 있습니다.

    요약



    10분 이상 경과한 큐가 묻혀 WebUI에서 보이지 않게 되어 버렸을 때에는, 이 내부 API가 도움이 될지도 모릅니다.
    소스를 읽으면 의외로 재미있는 것을 알 수 있는 Zabbix, 꼭 도전해 보세요!

    좋은 웹페이지 즐겨찾기