Ejemplo n.º 1
0
    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()))
Ejemplo n.º 2
0
    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()))
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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