Sensu graphite metric check plugin
This commit is contained in:
parent
5bb8cc851f
commit
cbe74cd2e8
34
plugins/graphite/README.md
Normal file
34
plugins/graphite/README.md
Normal file
@ -0,0 +1,34 @@
|
||||
# sensu-plugin-graphite-metric-check
|
||||
|
||||
Check average value from graphite metric.
|
||||
|
||||
## Usage
|
||||
```
|
||||
usage: graphite-metric-check.py [-h] -w WARNING -c CRITICAL -s HOST [-p PORT]
|
||||
-t TARGET [-f FROM_TIME] [-o TO_TIME]
|
||||
[-m MESSAGE]
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
-w WARNING, --warning WARNING
|
||||
Integer warning level to output
|
||||
-c CRITICAL, --critical CRITICAL
|
||||
Integer critical level to output
|
||||
-s HOST, --host HOST graphite host. http://graphite.example.com
|
||||
-p PORT, --port PORT Port
|
||||
-t TARGET, --target TARGET
|
||||
metric target: com.example.some.metric
|
||||
-f FROM_TIME, --from_time FROM_TIME
|
||||
from time. Default = -5min
|
||||
-o TO_TIME, --to_time TO_TIME
|
||||
to time. Default = now
|
||||
-m MESSAGE, --message MESSAGE
|
||||
message to display
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
|
||||
* sensu-python-plugin
|
||||
* libjson-python
|
||||
|
||||
|
108
plugins/graphite/graphite-metric-check.py
Executable file
108
plugins/graphite/graphite-metric-check.py
Executable file
@ -0,0 +1,108 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from sensu_plugin import SensuPluginCheck
|
||||
import json
|
||||
import requests
|
||||
|
||||
def getGraphiteValue(host, port, target, from_time, to_time):
|
||||
|
||||
request_url = 'http://' + host + ':' + str(port) + '/render'
|
||||
ranges = { 'from': from_time, 'to': to_time, 'target': target, 'format': 'json' }
|
||||
|
||||
|
||||
r = requests.get(request_url, params=ranges)
|
||||
graphite_dict = json.loads(r.content)
|
||||
|
||||
counter = 0
|
||||
point_sum = 0
|
||||
for point in graphite_dict:
|
||||
for value, timestamp in point['datapoints']:
|
||||
if value is not None:
|
||||
point_sum = int(point_sum) + int(value)
|
||||
counter += 1
|
||||
|
||||
avg_value = point_sum / counter
|
||||
|
||||
# return str(graphite_dict)
|
||||
|
||||
return avg_value
|
||||
|
||||
|
||||
class GraphiteMetricCheck(SensuPluginCheck):
|
||||
def setup(self):
|
||||
self.parser.add_argument(
|
||||
'-w',
|
||||
'--warning',
|
||||
required=True,
|
||||
type=int,
|
||||
help='Integer warning level to output'
|
||||
)
|
||||
self.parser.add_argument(
|
||||
'-c',
|
||||
'--critical',
|
||||
required=True,
|
||||
type=int,
|
||||
help='Integer critical level to output'
|
||||
)
|
||||
self.parser.add_argument(
|
||||
'-s',
|
||||
'--host',
|
||||
required=True,
|
||||
type=str,
|
||||
help='graphite host. http://graphite.example.com'
|
||||
)
|
||||
self.parser.add_argument(
|
||||
'-p',
|
||||
'--port',
|
||||
type=int,
|
||||
default=8080,
|
||||
help='Port'
|
||||
)
|
||||
self.parser.add_argument(
|
||||
'-t',
|
||||
'--target',
|
||||
required=True,
|
||||
type=str,
|
||||
help='metric target: com.example.some.metric'
|
||||
)
|
||||
self.parser.add_argument(
|
||||
'-f',
|
||||
'--from_time',
|
||||
default='-5min',
|
||||
type=str,
|
||||
help='from time. Default = -5min'
|
||||
)
|
||||
self.parser.add_argument(
|
||||
'-o',
|
||||
'--to_time',
|
||||
type=str,
|
||||
default='now',
|
||||
help='to time. Default = now'
|
||||
)
|
||||
self.parser.add_argument(
|
||||
'-m',
|
||||
'--message',
|
||||
type=str,
|
||||
default=None,
|
||||
help='message to display'
|
||||
)
|
||||
|
||||
def run(self):
|
||||
# this method is called to_time perform the actual check
|
||||
|
||||
self.check_name('GraphiteMetricCheck') # defaults to_time class name
|
||||
|
||||
avg = getGraphiteValue(self.options.host, self.options.port, self.options.target, self.options.from_time, self.options.to_time)
|
||||
|
||||
if avg > self.options.warning and avg < self.options.critical:
|
||||
self.warning(self.options.target + ' ' + str(avg))
|
||||
elif avg < self.options.warning:
|
||||
self.ok(self.options.target + ' ' + str(avg))
|
||||
elif avg >= self.options.critical:
|
||||
self.critical(self.options.target + ' ' + str(avg))
|
||||
else:
|
||||
self.unknown(self.options.message)
|
||||
|
||||
if __name__ == "__main__":
|
||||
f = GraphiteMetricCheck()
|
Loading…
Reference in New Issue
Block a user