def print_to_cli_short(self): alert_symbol = cmt.get_alert_symbol(self.alert) severity_label = cmt.get_severity_label(self.severity) severity_label += ' ' * (8 - len(severity_label)) if self.severity == cmt.SEVERITY_CRITICAL: head = bcolors.FAIL + bcolors.BOLD elif self.severity == cmt.SEVERITY_ERROR: head = bcolors.FAIL elif self.severity == cmt.SEVERITY_WARNING: head = bcolors.WARNING elif self.severity == cmt.SEVERITY_NOTICE: head = bcolors.CYAN else: head = bcolors.OKGREEN #head = head + alert_symbol + severity_label + bcolors.ENDC head = head + severity_label + bcolors.ENDC print("{:12} {:12} {}".format(head, self.module, self.get_message_as_str()))
def print_to_cli_detail(self): alert_symbol = cmt.get_alert_symbol(self.alert) severity_label = cmt.get_severity_label(self.severity) #severity_label += ' ' * (8 - len(severity_label)) # print('------------------------------------------------------------------') # print(bcolors.WHITE + self.module, self.check + bcolors.ENDC) # print('------------------------------------------------------------------') for i in self.checkitems: v = str(i.value) if len(str(i.unit)) > 0: v = v + ' ' + str(i.unit) + ' ' if len(str(i.human())) > 0: v = v + ' [' + i.human() + ']' if len(i.description) > 0: v = v + ' - ' + i.description print("cmt_{:20} {}".format(i.name, v)) if self.severity == cmt.SEVERITY_CRITICAL: head = bcolors.FAIL + bcolors.BOLD elif self.severity == cmt.SEVERITY_ERROR: head = bcolors.FAIL elif self.severity == cmt.SEVERITY_WARNING: head = bcolors.WARNING elif self.severity == cmt.SEVERITY_NOTICE: head = bcolors.CYAN else: head = bcolors.OKGREEN #head = head + severity_label + ' ' + alert_symbol + bcolors.ENDC head = head + severity_label + ' ' + bcolors.ENDC print("{} : {}".format(head, self.get_message_as_str()))
def build_influxdb_message(check, metroconf, index=None): ''' Prepare a string with and influxdb protocol formatted message.''' time_format = metroconf.get('time_format','') rawdata_prefix = metroconf.get("rawdata_prefix", "raw_") single_measurement = metroconf.get('single_measurement',True) is True send_tags = metroconf.get('send_tags',False) is True influx_data = '' # measurement section # ------------------- # cmt,cmt_module=XX,cmt_group=XX,cmt_node=XX,cmt_check=XX,cmt_node_env=XX k=v,k=v # cmt_{module},cmt_group=XX,cmt_node=XX,cmt_check=XX,cmt_node_env=XX k=v,k=v if single_measurement: influx_data += 'cmt,cmt_module=' + check.module else: influx_data += 'cmt_' + check.module # tag section # ------------ # global tags influx_data += ',cmt_group={},cmt_node={},cmt_check={},cmt_node_env={}'.format( check.group, check.node, check.check, check.node_env) # none datapoint checkitems tags for item in check.checkitems: if item.datapoint: # skip items to be inserted in the influx field section of line protocol continue # add as a tag in the influx tag section influx_data += ',' try: float(item.value) influx_data += 'cmt_{}={}'.format(item.name, item.value) except ValueError: influx_data += 'cmt_{}="{}"'.format(item.name, item.value) # cmt conf tags if send_tags: for item in check.checkitems: if item.name.startswith('tag_'): #float(item.value) influx_data += ',cmt_{}="{}"'.format(item.name, item.value) # severity, alert influx_data += ',cmt_alert={}'.format(check.alert) influx_data += ',cmt_severity={}'.format(check.severity) influx_data += ',alert="{}"'.format(cmt.get_alert_label(check.alert)) influx_data += ',severity="{}"'.format(cmt.get_severity_label(check.severity)) # field section # ------------ # rawdata multi-event part if index is not None: influx_data += ' cmt_raw_id={}'.format(index) event = check.multievent[index] for k,v in event.items(): try: float(v) influx_data += ',{}_{}_{}={}'.format(rawdata_prefix, check.check, k, v) except ValueError: influx_data += ',{}_{}_{}="{}"'.format(rawdata_prefix, check.check, k, v) # main / standard event else: influx_data += ' ' first_item = True for item in check.checkitems: if item.name.startswith('tag_'): continue if not item.datapoint: # skip items already inserted in the influx tag section of line protocol continue if item.multiline: # not suitable for influx line protocol continue if not first_item: influx_data += ',' try: float(item.value) influx_data += 'cmt_{}={}'.format(item.name, item.value) except ValueError: influx_data += 'cmt_{}="{}"'.format(item.name, item.value) first_item = False # also add severity, alert as field/value items in the influx line protocol if not first_item: influx_data += ',' influx_data += 'cmt_alert={}'.format(check.alert) influx_data += ',cmt_severity={}'.format(check.severity) influx_data += ',alert="{}"'.format(cmt.get_alert_label(check.alert)) influx_data += ',severity="{}"'.format(cmt.get_severity_label(check.severity)) # timestamp section # ----------------- # timestamp in milliseconds tsms = round(time.time() * 1000) if time_format == 'msec': influx_data += " {}".format(tsms) elif time_format == 'sec': influx_data += " {}".format(round(tsms / 1000)) elif time_format == 'nsec': influx_data += " {}".format(round(tsms) * 1000000) else: pass # no timestamp ; will be provided by influxdb server return influx_data
def build_json_message(check, index=None, rawdata_prefix='raw'): '''Prepare a JSON message suitable to be sent to an Elatic server.''' json_data = '' # common values json_data += '"cmt_group":"{}"'.format(check.group) json_data += ',"cmt_node":"{}"'.format(check.node) json_data += ',"cmt_node_env":"{}"'.format(check.node_env) json_data += ',"cmt_node_role":"{}"'.format(check.node_role) json_data += ',"cmt_node_location":"{}"'.format(check.node_location) json_data += ',"cmt_version":"{}"'.format(check.version) json_data += ',"cmt_module":"{}"'.format(check.module) json_data += ',"cmt_check":"{}"'.format(check.check) # deprecated json_data += ',"cmt_id":"{}"'.format(check.get_id()) # rawadata / multi-event part if index is not None: json_data += ',"cmt_raw_id":{}'.format(index) event = check.multievent[index] m = "{} ".format(check.check) for k,v in event.items(): m = m + "; {}={}".format(k,v) #QUOTES BUG : m = m + json.dumps(event) json_data += ',"short_message":"{}"'.format(m) json_data += ',"cmt_message":"{}"'.format(m) for k,v in event.items(): try: float(v) json_data += ',"{}_{}_{}":{}'.format(rawdata_prefix, check.check, k, v) except Exception as e: json_data += ',"{}_{}_{}":"{}"'.format(rawdata_prefix, check.check, k, v) debug2("Build json data rawdata multievent: ", str(k), str(v)) # main / standard event else: # cmt_message : Check name + check.message + all items.alert_message m = "{} - ".format(check.module) m = m + check.get_message_as_str() json_data += ',"cmt_message":"{}"'.format(m) # check items key/values for item in check.checkitems: value2 = item.value if item.multiline: #print("********************************** multi") # not suitable for elastic line protocol value2 = value2.replace('\n', ' ; ') value2 = value2.replace('\r', ' ') # value2 = '["a","b","c"]' # json_data += ',"cmt_{}":{}'.format(item.name, value2) # continue try: float(value2) json_data += ',"cmt_{}":{}'.format(item.name, value2) except ValueError: json_data += ',"cmt_{}":"{}"'.format(item.name, value2) debug2("Build json data : ", str(item.name), str(value2)) json_data += ',"cmt_alert":{}'.format(check.alert) json_data += ',"cmt_severity":{}'.format(check.severity) json_data += ',"alert":"{}"'.format(cmt.get_alert_label(check.alert)) json_data += ',"severity":"{}"'.format(cmt.get_severity_label(check.severity)) json_data = '{' + json_data + '}' return json_data
def build_gelf_message(check, index=None, rawdata_prefix='raw'): '''Prepare a GELF JSON message suitable to be sent to a Graylog GELF server.''' graylog_data = '"version":"1.1"' graylog_data += ',"host":"{}_{}"'.format(check.group, check.node) # common values graylog_data += ',"cmt_group":"{}"'.format(check.group) graylog_data += ',"cmt_node":"{}"'.format(check.node) graylog_data += ',"cmt_node_env":"{}"'.format(check.node_env) graylog_data += ',"cmt_node_role":"{}"'.format(check.node_role) graylog_data += ',"cmt_node_location":"{}"'.format(check.node_location) graylog_data += ',"cmt_version":"{}"'.format(check.version) graylog_data += ',"cmt_module":"{}"'.format(check.module) graylog_data += ',"cmt_check":"{}"'.format(check.check) # deprecated graylog_data += ',"cmt_id":"{}"'.format(check.get_id()) # rawdata / multi-event part if index is not None: graylog_data += ',"cmt_raw_id":{}'.format(index) event = check.multievent[index] m = "{}".format(check.check) for k,v in event.items(): m = m + " ; {}={}".format(k,v) #QUOTES BUG : m = m + json.dumps(event) graylog_data += ',"short_message":"{}"'.format(m) graylog_data += ',"cmt_message":"{}"'.format(m) for k,v in event.items(): try: float(v) graylog_data += ',"{}_{}_{}":{}'.format(rawdata_prefix, check.check, k, v) except Exception as e: graylog_data += ',"{}_{}_{}":"{}"'.format(rawdata_prefix, check.check, k, v) debug2("Build gelf rawdata multievent: ", str(k), str(v)) # main / standard event else: # cmt_message : Check name + check.message + all items.alert_message m = "{} - ".format(check.module) m = m + check.get_message_as_str() graylog_data += ',"short_message":"{}"'.format(m) graylog_data += ',"cmt_message":"{}"'.format(m) # check items key/values for item in check.checkitems: try: float(item.value) graylog_data += ',"cmt_{}":{}'.format(item.name, item.value) except ValueError: graylog_data += ',"cmt_{}":"{}"'.format(item.name, item.value) debug2("Build gelf data : ", str(item.name), str(item.value)) graylog_data += ',"cmt_alert":{}'.format(check.alert) graylog_data += ',"cmt_severity":{}'.format(check.severity) graylog_data += ',"alert":"{}"'.format(cmt.get_alert_label(check.alert)) graylog_data += ',"severity":"{}"'.format(cmt.get_severity_label(check.severity)) # all messages graylog_data = '{' + graylog_data + '}' return graylog_data