Skip to content

Instantly share code, notes, and snippets.

@juniorh
Created January 27, 2015 05:04
Show Gist options
  • Save juniorh/fbfdb543f93e0a184593 to your computer and use it in GitHub Desktop.
Save juniorh/fbfdb543f93e0a184593 to your computer and use it in GitHub Desktop.
Influxdb plugin for sensu with key series

Lokasi file

Konfigurasi

/etc/sensu/conf.d/handler_influxdb_noHost.json /etc/sensu/conf.d/db_influxdb.json /etc/sensu/handlers/influxdb-sensu-noHostKey.py

Log

/var/log/sensu/sensu-script-influxdb-handler.log

{
"influxdb": {
"host": "192.168.1.1",
"port": "8086",
"username": "sensu",
"password": "password",
"database": "sensu"
}
}
{
"handlers": {
"influxdb_noHostKey": {
"type" : "pipe",
"mutator" : "removeHostKey",
"command" : "/etc/sensu/handlers/influxdb-sensu-noHostKey.py"
}
}
}
#!/usr/bin/env python
'''
Skrip cek metrik sensu yang dibuat kebanyakan memiliki output dengan format
<hostname>.<key> <value>
Skrip handler ini memproses output tersebut untuk dimasukan ke influxdb
dengan format nama series: <nama_klien>.<nama_cek>.<key>
Isi series tersebut hanya kolom 'value' yang menggambarkan nilai pada key tersebut.
Penggunaan skrip ini ditujukan untuk menghindari filter kolom pada saat query di influxdb
'''
import influxdb
import sensu
import logging
import json
import sys
from sys import stdin
logFileDefault = logging.FileHandler('/var/log/sensu/sensu-script-influxdb-handler-noHostKey.log')
logFormat = logging.Formatter('%(asctime)s %(levelname)s %(name)s: %(message)s')
logFileDefault.setFormatter(logFormat)
logger = logging.getLogger('influxdb-sensu')
logger.setLevel(100) #Ubah nilai menjadi logging.DEBUG untuk melihat aktifitas log lebih lengkap
logger.addHandler(logFileDefault)
logger.debug("Initiation influxDb")
settings = sensu.utils.load_settings()
db = influxdb.client.InfluxDBClient(
host = settings['influxdb']['host'],
port = settings['influxdb']['port'],
username = settings['influxdb']['username'],
password = settings['influxdb']['password'],
database = settings['influxdb']['database']
)
delKey = '\n'
delVal = ' '
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 = [convertVal]
stats=[(point)]
logger.debug('Info Point - %s',point)
logger.debug('Info Stats - %s',stats)
logger.debug('Result Splitting Stats - %s',stats)
jsonOut = [{
"points": stats,
"name": 'sensuType1.'+jsonIn['client']['name']+'.'+jsonIn['check']['name']+'.'+splitItem[0],
"columns": ["value"]
}]
try:
db.write_points(jsonOut)
logger.info('Data JSON out = %s', jsonOut)
logger.info('Success send check %s key %s from %s to influxdb %s', jsonIn['check']['name'], splitItem[0], jsonIn['client']['name'], settings['influxdb']['host'])
except Exception, err:
logger.exception(err)
logging.shutdown()
sys.exit(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment