Pada umumnya direktori konfigurasi sensu memiliki sususan sebagai berikut:
- ./config.d/
- ./extensions/
- ./handlers/
- ./mutators/
- ./plugins/
- ./ssl/
#!/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) |