Juniper EX4200 POE consumption Issue

Good Day All

I am in the process of getting all my Devices into Check_MK CRE and I can the see the following on one of my Juniper EX4200 Switches (It shows POE Usage of 8132%):

Has anyone else come across something similar and if so how did you rectify it?

CMK Version: Checkmk Raw Edition 2.1.0

There is no easy solution as Juniper is one of some manufacturers that are not correctly implement the POE MIB. The shown value here is in Milliwatt and the MIB definition says it should be Watt. I extended the check a little bit that every Value higher than 1000 is divided by 1000 to normal values.
I know that’s an ugly work around but i don’t know of a nice solution as the MIB is no multiplication factor or anything like this.

So basically there is no real solution and Juniper wont talk nicely to Check>Mk?

Yes, same issue here on EX3300. Switch is at 0.8% and CheckMK says is 80% and CRIT

There is a solution.
Copy the file pse_poe from “~/share/check_mk/checks/” to “~/local/share/check_mk/checks/” and modify it the following way.

Original

def parse_pse_poe(info):
    """
    parse info data and create dictionary with namedtuples for each OID.
    {
       oid_end : PoeValues(poe_max, poe_used, poe_status, poe_status_detail)
    }
    :param info: parsed snmp data
    :return: dictionary
    """
    poe_dict = {}
    for oid_end, poe_max, pse_op_status, poe_used in info:
        poe_dict[str(oid_end)] = PoeValues(poe_max=int(poe_max),
                                           poe_used=int(poe_used),
                                           poe_status=int(pse_op_status),
                                           poe_status_detail=None)
    return poe_dict

modified version

def parse_pse_poe(info):
    """
    parse info data and create dictionary with namedtuples for each OID.
    {
       oid_end : PoeValues(poe_max, poe_used, poe_status, poe_status_detail)
    }
    :param info: parsed snmp data
    :return: dictionary
    """
    poe_dict = {}
    for oid_end, poe_max, pse_op_status, poe_used in info:
        if int(poe_used) >= 1000:
            used_poe = int(poe_used) / 1000
        else:
            used_poe = int(poe_used)
        poe_dict[str(oid_end)] = PoeValues(poe_max=int(poe_max),
                                           poe_used=used_poe,
                                           poe_status=int(pse_op_status),
                                           poe_status_detail=None)
    return poe_dict

If i made no mistake this should work. :smiley:

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed. Contact an admin if you think this should be re-opened.