Zabbix API에서 Shell에서 유지 관리 작업 (Zabbix4.4)
배경이라든가
Zabbix API로 Shell에서 유지 관리 작업 를 보고, Zabbix4계에서도 GUI를 포치포치 하지 않고, API 경유로 Zabbix의 메인터넌스를 작성할 수 있으면 좋다고 생각해 만들었습니다.
Zabbix API의 유지 관리 작업 이해 도 참고로 했습니다.
필자가 쉘 스크립트(bash)밖에 이해하지 않기 때문에, 쉘 스크립트로 쓰고 있습니다.
환경
실행 결과
우선 결과로부터 기재합니다.
대상 기기: c2960
유지 보수 이름 : 재부팅을 위해
$ ./create_maintenance_period.sh c2960 再起動のため
[INFO] Successfully created a maintenance period.
[INFO] Hostname: c2960
[INFO] Maintenance Name: 再起動のため
[INFO] Maintenance_id: 28
Zabbix의 유지 보수 탭을 열면 "재부팅을위한"이라는 이름으로 유지 보수 기간이 생성됩니다.
자세한 내용을 보면 명령을 실행한 후 1시간 후까지 유지보수 시간이 설정되어 있는지 확인할 수 있습니다.
「호스트와 호스트 그룹」을 확인하면, 이번 대상이 되고 있는 「c2960」이 호스트로서 대상이 되고 있는 것을 확인할 수 있습니다.
쉘 스크립트
지정된 호스트에 대해 1시간의 유지보수 기간을 zabbix로 설정합니다.
위에서 언급했듯이 CentOS7과 8 모두에서 작동을 확인했습니다. 실행할 때 루트 권한이 필요하지 않습니다.
jq를 사용하고 있기 때문에 jq를 설치해야합니다. CentOS7은 기본적으로 들어 있지 않으므로 넣어야합니다. CentOS8은 데포에 들어간 것처럼 ... 잊었습니다.
만약 들어 있지 않은 경우는 yum나 dnf 나름으로 설치를 부탁드립니다.
※진짜는 너무 외부로부터 다운로드할 필요가 있는 커맨드에 의지하고 싶지 않습니다만, 편리한 것은 어쩔 수 없다. .
create_maintenance_period.sh
#!/bin/bash
#
# Create maintanance period on zabbix for specific host.
# Default maintenance period is 1 hours.
# If you need to change the period, change folowing values:
# - time_till=`date "+%s" -d "1 hours"`
# - "period": 3600
#
# Usage
# Arguments:
# $1 hostname(zabbix registered)
# $2 zabbix maintenance name
# Note: $2 cannot contain any spaces.
#
# Example
# ./create_maintenance_period.sh centos8 "Sunday_maintenance"
# ./create_maintenance_period.sh centos8 centos8_メモリ増設のため
#
# Initial settings
zbx_endpoint="http://zabbix4/zabbix/api_jsonrpc.php"
user="arkey22"
password="XXXXXXXXXXXX"
time_since=`date +%s`
time_till=`date "+%s" -d "1 hours"`
# Get token
token=`curl -s -d '{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "'$user'",
"password": "'$password'"
},
"id": 1,
"auth": null
}' -H "Content-Type: application/json-rpc" $zbx_endpoint | awk -F'"' '{print $8}'`
# Get host id
host_id=`curl -s -d '{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid"
],
"filter": {
"host": [
"'$1'"
]
}
},
"auth": "'${token}'",
"id": 1
}' -H "Content-Type: application/json-rpc" ${zbx_endpoint} | jq -r '.result[].hostid'`
# Create maintenance
maintenance_id=`curl -s -d '{
"jsonrpc": "2.0",
"method": "maintenance.create",
"params": {
"name": "'$2'",
"active_since": '$time_since',
"active_till": '$time_till',
"hostids": [
"'$host_id'"
],
"timeperiods": [
{
"period": 3600
}
]
},
"id": 1,
"auth": "'${token}'"
}' -H "Content-Type: application/json-rpc" ${zbx_endpoint} | jq -r '.result.maintenanceids[]'`
if [ $? -eq 0 ]; then
/bin/echo -e "[INFO] Successfully created a maintenance period."
/bin/echo -e "[INFO] Hostname: $1"
/bin/echo -e "[INFO] Maintenance Name: $2"
/bin/echo -e "[INFO] Maintenance_id: $maintenance_id"
else
/bin/echo -e "[ERROR] Failed to create maintenance period."
fi
마지막으로
쉘 스크립트에서 json을 다루면 json 내에서 변수를 기재해도 전개되지 않아 빠졌습니다.
이번에는 변수를 단일 따옴표로 묶어서 회피했습니다.
또한 인수로 유지 보수 이름을 전달할 때 공백을 넣으면 제대로 작동하지 않았습니다.
$./create_maintenance_period.sh c2960 "Sunday maintenance"
쉘 스크립트의 작성 방법의 문제라고 생각합니다만, 해결에 이르지 않고 방치해 사양으로 했습니다.
여기까지 보아 주셔서 감사합니다.
Reference
이 문제에 관하여(Zabbix API에서 Shell에서 유지 관리 작업 (Zabbix4.4)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y-nara/items/f994e781f21beac30a2b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)