copr: nagios check for Copr's CDN
Relates: https://pagure.io/fedora-infrastructure/issue/10456
This commit is contained in:
parent
eb2dac57e1
commit
b9fa39f0c8
5 changed files with 123 additions and 0 deletions
|
@ -172,3 +172,25 @@
|
||||||
line: 'OPTIONS=--collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd'
|
line: 'OPTIONS=--collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd'
|
||||||
backrefs: yes
|
backrefs: yes
|
||||||
notify: restart node_exporter
|
notify: restart node_exporter
|
||||||
|
|
||||||
|
- name: install nrpe
|
||||||
|
dnf: name=nrpe state=present
|
||||||
|
|
||||||
|
- name: install nrpe checks
|
||||||
|
template: src=copr_frontend_nrpe.cfg
|
||||||
|
dest=/etc/nrpe.d/copr_frontend_nrpe.cfg
|
||||||
|
notify:
|
||||||
|
- restart nrpe
|
||||||
|
tags:
|
||||||
|
- nagios_client
|
||||||
|
- copr_cdn
|
||||||
|
|
||||||
|
- name: install the check script
|
||||||
|
template:
|
||||||
|
dest: "/usr/bin/copr-cdn-check.py"
|
||||||
|
src: "copr-cdn-check.py.j2"
|
||||||
|
group: "nagios"
|
||||||
|
mode: 0750
|
||||||
|
vars:
|
||||||
|
api_key: "{{ copr_cdn_api_key }}"
|
||||||
|
tags: copr_cdn
|
||||||
|
|
92
roles/copr/frontend/templates/copr-cdn-check.py.j2
Normal file
92
roles/copr/frontend/templates/copr-cdn-check.py.j2
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
import sys
|
||||||
|
import requests
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# NAGIOS exit codes
|
||||||
|
NAG_UNKNOWN = 3
|
||||||
|
NAG_CRITICAL = 2
|
||||||
|
NAG_WARNING = 1
|
||||||
|
NAG_OK = 0
|
||||||
|
|
||||||
|
# UptimeRobot statuses
|
||||||
|
STATUS = (
|
||||||
|
'PAUSED', # 0
|
||||||
|
'NOT_CHECKED_YET', # 1
|
||||||
|
'UP', # 2
|
||||||
|
'NOT_USED', # 3
|
||||||
|
'NOT_USED', # 4
|
||||||
|
'NOT_USED', # 5
|
||||||
|
'NOT_USED', # 6
|
||||||
|
'NOT_USED', # 7
|
||||||
|
'SEEMS_DOWN', # 8
|
||||||
|
'DOWN' # 9
|
||||||
|
)
|
||||||
|
|
||||||
|
# Read only API key
|
||||||
|
API_KEY = "{{ api_key }}"
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.INFO,
|
||||||
|
format='%(message)s',
|
||||||
|
handlers=[logging.StreamHandler(sys.stdout)],
|
||||||
|
)
|
||||||
|
LOG = logging.getLogger()
|
||||||
|
|
||||||
|
|
||||||
|
class UptimeRobot:
|
||||||
|
|
||||||
|
def __init__(self, api_key):
|
||||||
|
self.api_key = api_key
|
||||||
|
|
||||||
|
def post(self, method='getMonitors'):
|
||||||
|
"""Send the post request to UptimeRobot api"""
|
||||||
|
url = "https://api.uptimerobot.com/v2/{method}".format(method=method)
|
||||||
|
payload = "api_key={api_key}&format=json".format(api_key=self.api_key)
|
||||||
|
headers = {
|
||||||
|
'content-type': "application/x-www-form-urlencoded",
|
||||||
|
'cache-control': "no-cache"
|
||||||
|
}
|
||||||
|
response = requests.request("POST", url, data=payload, headers=headers)
|
||||||
|
return response.json()
|
||||||
|
|
||||||
|
def get_monitor(self, name):
|
||||||
|
"""Return specific monitor"""
|
||||||
|
monitors = self.post('getMonitors')
|
||||||
|
if 'monitors' not in monitors:
|
||||||
|
return None
|
||||||
|
|
||||||
|
for monitor in monitors['monitors']:
|
||||||
|
if monitor['friendly_name'] == name:
|
||||||
|
return {'name': name,
|
||||||
|
'print_status': STATUS[monitor['status']],
|
||||||
|
'status': monitor['status'],
|
||||||
|
'url': monitor['url']
|
||||||
|
}
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
monitor_name = "Copr's CDN"
|
||||||
|
uptime_robot = UptimeRobot(API_KEY)
|
||||||
|
|
||||||
|
monitor = uptime_robot.get_monitor(monitor_name)
|
||||||
|
if monitor:
|
||||||
|
result = "{name} ({url}) is {status}".format(name=monitor['name'], url=monitor['url'],
|
||||||
|
status=monitor['print_status'])
|
||||||
|
if monitor['status'] in (0, 1):
|
||||||
|
LOG.warning(result)
|
||||||
|
sys.exit(NAG_WARNING)
|
||||||
|
elif monitor['status'] in (8, 9):
|
||||||
|
LOG.critical(result)
|
||||||
|
sys.exit(NAG_CRITICAL)
|
||||||
|
elif monitor['status'] == 2:
|
||||||
|
LOG.info(result)
|
||||||
|
sys.exit(NAG_OK)
|
||||||
|
else:
|
||||||
|
LOG.critical(result)
|
||||||
|
sys.exit(NAG_UNKNOWN)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
sys.exit(NAG_UNKNOWN)
|
1
roles/copr/frontend/templates/copr_frontend_nrpe.cfg
Normal file
1
roles/copr/frontend/templates/copr_frontend_nrpe.cfg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
command[check_copr_cdn]=/usr/bin/copr-cdn-check.py
|
|
@ -32,3 +32,10 @@ define service {
|
||||||
check_command check_by_nrpe!check_copr_ping
|
check_command check_by_nrpe!check_copr_ping
|
||||||
use defaulttemplate
|
use defaulttemplate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define service {
|
||||||
|
hostgroup_name copr_front_aws, copr_front_dev_aws
|
||||||
|
service_description The copr cdn status
|
||||||
|
check_command check_by_nrpe!check_copr_cdn
|
||||||
|
use defaulttemplate
|
||||||
|
}
|
||||||
|
|
|
@ -320,6 +320,7 @@ command[check_lock_file_age]=/usr/lib64/nagios/plugins/check_lock_file_age -w 1
|
||||||
command[check_nagios]=/usr/lib64/nagios/plugins/check_nagios -e 5 -F /var/spool/nagios/status.dat -C /usr/sbin/nagios
|
command[check_nagios]=/usr/lib64/nagios/plugins/check_nagios -e 5 -F /var/spool/nagios/status.dat -C /usr/sbin/nagios
|
||||||
command[check_auditd]=/usr/lib64/nagios/plugins/check_procs -c 1:1 -C 'auditd' -u root
|
command[check_auditd]=/usr/lib64/nagios/plugins/check_procs -c 1:1 -C 'auditd' -u root
|
||||||
command[check_copr_ping]=/usr/bin/copr-ping-check.py
|
command[check_copr_ping]=/usr/bin/copr-ping-check.py
|
||||||
|
command[check_copr_cdn]=/usr/bin/copr-cdn-check.py
|
||||||
command[check_cron]=/usr/lib64/nagios/plugins/check_procs -c 1:10 -C 'crond' -u root
|
command[check_cron]=/usr/lib64/nagios/plugins/check_procs -c 1:10 -C 'crond' -u root
|
||||||
command[check_varnish_proc]=/usr/lib64/nagios/plugins/check_procs -c 1:2 -C 'varnishd' -u varnish
|
command[check_varnish_proc]=/usr/lib64/nagios/plugins/check_procs -c 1:2 -C 'varnishd' -u varnish
|
||||||
command[check_rsyslogd_proc]=/usr/lib64/nagios/plugins/check_procs -c 1:2 -C 'rsyslogd'
|
command[check_rsyslogd_proc]=/usr/lib64/nagios/plugins/check_procs -c 1:2 -C 'rsyslogd'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue