Zabbix API で Shell からメンテナンスを操作するを見て、Zabbix4系でもできたら良いなと思って作りました。作ったメンテナンスの情報を削除しない予定なので、メンテナンスの作成のみとなっています。
Zabbix APIからのメンテナンス操作についても参考にさせて頂きました。
【環境】
CentOS Linux release 7.7.1908 (Core)
Zabbix 4.4.0
コード
#!/bin/bash # # Create maintanance period on zabbix for specific host. # Default maintenance period is 1 hours. # If you need to change the period, change the folowing values: # - time_till=`date "+%s" -d "1 hours"` # - "period": 3600 # # Usage # Arguments: # $1 hostname(zabbix registered) # $2 zabbix maintenance name # Note: $2 cannnot contain any spaces. # # Example # ./create_maintenance_period.sh server "Sunday_maintenance" # ./create_maintenance_period.sh hinata サーバ再起動 # # Initial settings zbx_endpoint="http://zabbix4/zabbix/api_jsonrpc.php" user="arkey22" password="XXXXXXXX" 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
実行結果
$ ./create_maintenance_period.sh c2960 再起動のため
[INFO] Successfully created a maintenance period.
[INFO] Hostname: c2960
[INFO] Maintenance Name: 再起動のため
[INFO] Maintenance_id: 28


