Zabbix API 예제

리눅스/OS 일반|2022. 4. 22. 15:59
반응형

[ PHP 코드 ]

아래 샘플 코드를 이용해 토큰을 출력해 봅니다.

<?php
$curl = curl_init() ;

curl_setopt ( $curl , CURLOPT_URL , 'http://sysdocu.tistory.com/api_jsonrpc.php' ) ;
curl_setopt ( $curl , CURLOPT_TIMEOUT , 10 ) ;
curl_setopt ( $curl , CURLOPT_POST , 1 ) ;
curl_setopt ( $curl , CURLOPT_RETURNTRANSFER , 1 ) ;
curl_setopt ( $curl , CURLOPT_SSL_VERIFYPEER , FALSE ) ;
curl_setopt ( $curl , CURLOPT_HTTPHEADER , array ( 'Content-Type: application/json'  ) ) ;
curl_setopt ( $curl , CURLOPT_POSTFIELDS , '{"jsonrpc":"2.0" , "method":"user.login" , "params":{"user":"Admin", "password":"12345678"} , "auth":null, "id":1}' ) ;

$result = curl_exec ( $curl ) ;
$err = curl_error ( $curl ) ;

curl_close ( $curl ) ;

if ( $err )
  echo 'Error :' . $err ;
else
  echo $result;


$data = json_decode($result, true);
$token = $data['result'];
echo $token
?>


[ BASH 코드 ]

#!/bin/bash

TOKEN=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{ "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "12345678" }, "id":1 }' 'http://sysdocu.tistory.com/api_jsonrpc.php' |sed -e "s/.*\"result\":\"//;s/\".*//"`

echo -e "TOKEN : $TOKEN\n"

 

[ API 종류 ]

더 자세한 API 종류 및 설명은 zabbix 공식 사이트를 참고해주세요.

아래는 curl 명령을 기준으로 작성하였습니다.

PHP 코드는 아래 코드와 맨 위 PHP 예제 파일을 참고해서 작성하면 됩니다.


1) 토큰 생성
Admin 계정으로 토큰을 생성해야 생성된 토큰으로 계정 추가, 삭제가 가능합니다.

(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0", 
"method": "user.login", 
"params": { 
    "user": "Admin", 
"password": "12345678" 
}, 
"id":1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

 


(결과)
{
    "jsonrpc":"2.0",
"result":"c436f84f928956be8db12704db759376",
"id":1
}


2) 계정 생성
'${TOKEN}' 부분에 위에서 생성한 토큰이 들어갑니다.
usrgrpid 값 16은 임의로 만든 값입니다.

(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "user.create",
    "params": {
        "alias": "CDH",
        "passwd": "1234",
        "roleid": "1",
        "usrgrps": [
            {
                "usrgrpid": "16"
            }
        ],
        "medias": [
            {
                "mediatypeid": "16",
                "sendto": [
                    "123456789"
                ],
                "active": 0,
                "severity": 63,
                "period": "1-7,00:00-24:00"
            }
        ]
    },
    "auth": "'${TOKEN}'",
    "id": 2
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

(결과)
{
  "jsonrpc": "2.0",
  "result": {
    "userids": [
      "20"
    ]
  },
  "id": 2
}


3) 계정 삭제
생성시 부여되었던 userids 값을 사용합니다.

(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "user.delete",
    "params": [
        "20"
    ],
        "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

(결과)
{
  "jsonrpc": "2.0",
  "result": {
    "userids": [
      "20"
    ]
  },
  "id": 1
}


4) 유저 리스트
(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "user.get",
    "params": {
        "output": "extend"
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'


5) 그룹 리스트
(명령)
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "usergroup.get",
    "params": {
        "output": "extend",
        "status": 0
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php'

 

아래는 쉘스크립트 코드 입니다. curl 형식은 동일합니다.


# 호스트 그룹 추가
HOSTGROUP_ADD=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "hostgroup.create",
    "params": {
        "name": "sysdocu"
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "호스트 그룹 생성 결과\n${HOSTGROUP_ADD}"


# 호스트 그룹 리스트 출력
HOSTGROUP_GET=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend"
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "호스트 그룹 리스트 출력 결과\n${HOSTGROUP_GET}"


# 유저 그룹 추가
GROUP_ADD=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "usergroup.create",
    "params": {
        "name": "sysdocu",
        "rights": {
            "id": "37",       // 호스트 그룹 id
            "permission": 3   // 권한 (RW)
        }
    },
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "그룹 생성 결과\n${GROUP_ADD}"


# 유저 그룹 삭제
GROUP_DEL=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "usergroup.delete",
    "params": [ "18" ],
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "그룹 삭제 결과\n${GROUP_DEL}"


# 호스트 그룹 삭제
HOSTGROUP_DEL=`curl -s -X POST -H 'Content-Type: application/json-rpc' -d '{
    "jsonrpc": "2.0",
    "method": "hostgroup.delete",
    "params": [ "32" ],
    "auth": "'${TOKEN}'",
    "id": 1
}' 'http://sysdocu.tistory.com/api_jsonrpc.php' | jq '.'`
echo -e "호스트 그룹 삭제 결과\n${HOSTGROUP_DEL}"


* 참고

roleid
1 : User role
2 : Admin role
3 : Super role
4 : Guest role

mediatypeid
1 : email
2 : x
3 : sms
4 : email
5 : Mattermost
6 : Opsgenie  
7 : PagerDuty
8 : Pushover
9 : Slack
10 : discord
11 : SIGNL4
12 : Jira
13 : Jira with CustomFields  
14 : MS Teams  
15 : Redmine
16 : Telegram

반응형

댓글()