Skip to content

Instantly share code, notes, and snippets.

@juniorh
Last active August 29, 2015 14:14
Show Gist options
  • Save juniorh/0d5cff0128f576a95b38 to your computer and use it in GitHub Desktop.
Save juniorh/0d5cff0128f576a95b38 to your computer and use it in GitHub Desktop.
Sensu Scripts
#!/usr/bin/env python
'''
Skrip ini memproses output dari proses cek dengan format
============
<deskirpsi1> <nilai1>
<deskirpsi2> <nilai2>
...
=============
Untuk menggunakan skrip ini, diperlukan konfiurasi pada server seperti berikut
{
"influxdb": {
"host": "192.168.1.1",
"port": "8086",
"username": "sensu",
"password": "password",
"database": "sensu"
}
}
'''
import influxdb
import sensu
import logging
import json
import sys
from sys import stdin
logFileDefault = logging.FileHandler('/var/log/sensu/sensu-script-influxdb-handler.log')
logFormat = logging.Formatter('%(asctime)s %(levelname)s %(name)s: %(message)s')
logFileDefault.setFormatter(logFormat)
logger = logging.getLogger('influxdb-sensu')
logger.setLevel(100) #ubah menjadi logging.DEBUG untuk menampilkan aktifitas log lebih lengkap
logger.addHandler(logFileDefault)
delKey = '\n'
delVal = ' '
settings = sensu.utils.load_settings()
logger.debug("Config sensu - %s", settings)
dataIn = stdin.read()
logger.debug("Input data stream - %s", dataIn)
jsonIn = json.loads(dataIn, strict=False)
jsonStats = jsonIn['check']['output']
stats = []
for item in jsonStats.split(delKey):
splitItem = item.split(delVal)
logger.debug('Info Item - %s',item)
if (len(splitItem)==2 or len(splitItem)==3) and len(splitItem[0])>0:
try:
convertVal = int(splitItem[1])
except:
try:
convertVal = float(splitItem[1])
except:
convertVal = splitItem[1]
logger.debug('Split Item - %s',splitItem)
if type(convertVal)==type(int()) or type(convertVal)==type(float()):
point = [splitItem[0], convertVal , jsonIn['client']['name'], jsonIn['client']['address']]
stats.append(point)
logger.debug('Info Point - %s',point)
logger.debug('Info Stats - %s',stats)
logger.debug('Result Splitting Stats - %s',stats)
jsonOut = [{
"points": stats,
"name": jsonIn['client']['name']+'.'+jsonIn['check']['name'],
"columns": ["key", "value", "host", "ip"]
}]
logger.debug("Data sent to influxDb - %s", jsonOut)
db = influxdb.client.InfluxDBClient(
host = settings['influxdb']['host'],
port = settings['influxdb']['port'],
username = settings['influxdb']['username'],
password = settings['influxdb']['password'],
database = settings['influxdb']['database']
)
try:
db.write_points(jsonOut)
logger.info('Success send data check %s from %s to influxdb %s', jsonIn['check']['name'], jsonIn['client']['name'], settings['influxdb']['host'])
except Exception, err:
logger.exception(err)
logging.shutdown()
sys.exit(0)

Sensu Scipts

Pada umumnya direktori konfigurasi sensu memiliki sususan sebagai berikut:

  • ./config.d/
  • ./extensions/
  • ./handlers/
  • ./mutators/
  • ./plugins/
  • ./ssl/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment