Problem with collecting wrong data type from a Supermicro Device

Hi, I’m having a problem retrieving SNMP data from a Supermicro device via Telegraf. Although I’ve correctly configured the OIDs to retrieve the desired data, I’m having trouble converting the retrieved values into float numbers.
To solve this problem, I’ve tried adding the option conversion = “float(0)” to each field in my Telegraf configuration file. This should correctly convert the retrieved values to floats, as the original values I’m collecting are strings, so I need to convert them to floats, which is necessary to aggregate or parse them in InfluxDB later and display them in Grafana.
However, despite this configuration, I’m not getting the expected results when executing my InfluxDB queries.
I’m aware that the variables that are read are purely in string, but I would have liked a solution in order to set up my graphs on Grafana. The mib is correctly installed and functional (I tried with snmpwalk).

Here’s a part of my telegraf.conf :

[[inputs.snmp.field]]
oid = “ATEN-IPMI-MIB::sensorReading.1”
name = “cpu_temp
is_tag = false
conversion = “float(0)”

[[inputs.snmp.field]]
oid = “ATEN-IPMI-MIB::sensorReading.2”
name = “pch_temp”
is_tag = false
conversion = “float(0)”

I hope you can help me, thank you for reading my message.

Sincerely,

The values for cpu_temp and pch_temp look okay to me. What do you expect them to be?

Yes, they are, but even converting them i can’t see nothing on InfluxDB, i don’t know why ! I can’t see nothing in Grafana because they still a string. My main objective is to create graphs.

Okay, then this is a InfluxDB problem, not a telegraf one.

See this on how to change the field data type in the bucket.

Thanks for the help ! I tried to convert all of my “string” data to "float"with InfluxDB and it worked.
Apparently it’s not “ethical” to use InfluxDB as a converter, it would be better to convert since the collect of metrics (with Telegraf, i’m sorry, i’m just an apprentice and my tutor give me a lot of restrict orders xd).

I tried with an Plugin named Starlark, but it doesn’t work. Any advices ?

[[processors.starlark]]
  namepass = ["supermicro.snmp"]

  source = '''
def apply(metric):
    for k, v in metric.fields.items():
        if type(v) == "string":
            if v.isdigit(): 
                metric.fields[k] = int(v)
    return metric
'''

If my request is too complex or impossible you can tell me, i’ll try to explain to my superiors that is not possible. Thank you for the help, i really appreciate it !

The starlark is not needed, the fields are already float in telegraf. The only problem you had was that they first came into InfluxDB as a string and InfluxDB keeps using that format unless you convert it (or drop the whole metric/bucket).

So there is really nothing to do at telegraf side. The problem only exists in InfluxDB.

well thanks anyway, I had a meeting today and my tutor doesn’t want to have a background task on InfluxDB that converts data (the only solution I’ve found for this problem), thank you very much for the advice! goodbye

Err, that doesn’t need to be a background task. It’s only a one time conversion?

Yes, but i created a automatic task

import "types"

option task = {name: "SupermicroNXNINJAP01", every: 1m}

convertToFloat = (bucket, measurement, server, field) => {
    return
        from(bucket: bucket)
            |> range(start: -1h)
            |> filter(fn: (r) => r["_measurement"] == measurement)
            |> filter(fn: (r) => r["server"] == server)
            |> filter(fn: (r) => r._field == field)
            |> toFloat()
            |> set(key: "_field", value: field + "_float")
            |> to(bucket: bucket)
}

bucket = "network_metrics"

measurement = "supermicro.snmp"

server = "xxxxxxxx"

fields = [
    "cpu_temp",
    "pch_temp",
    "system_temp",
    "peripheral_temp",
    "nic_temp",
    "cpu_vrmin_temp",
    "vrmabcd_temp",
    "vrmefgh_temp",
    "inlet_temp",
    "dimmabcd_temp",
    "dimmefgh_temp",
    "pmemabcd_temp",
    "pmemefgh_temp",
    "m2ssd_temp",
    "fan1",
    "fan2",
    "fan3",
    "fan4",
    "fan5",
    "fan6",
    "fan7",
    "12v",
    "5vcc",
    "3.3vcc",
    "vbat",
    "5vsb",
    "3.3vsb",
    "1.8v_pch",
    "pvnn_pch",
    "1.05v_pch",
    "2.5v_bmc",
    "1.8v_bmc",
    "1.2v_bmc",
    "1.0v_bmc",
    "vcpuvrm",
    "vcpu",
    "vdimmabcd",
    "vdimmefgh",
    "chassis_intru",
    "ps1_status",
    "ps2_status",
    "aoc_nic1_1",
    "aoc_nic1_2",
]

cpuTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "cpu_temp")

pchTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "pch_temp")

systemTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "system_temp")

peripheralTempFloat =
    convertToFloat(
        bucket: bucket,
        measurement: measurement,
        server: server,
        field: "peripheral_temp",
    )

nicTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "nic_temp")

cpuVrminTempFloat =
    convertToFloat(
        bucket: bucket,
        measurement: measurement,
        server: server,
        field: "cpu_vrmin_temp",
    )

vrmAbcdTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "vrmabcd_temp")

vrmEfghTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "vrmefgh_temp")

inletTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "inlet_temp")

dimmAbcdTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "dimmabcd_temp")

dimmEfghTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "dimmefgh_temp")

pmemAbcdTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "pmemabcd_temp")

pmemEfghTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "pmemefgh_temp")

m2SsdTempFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "m2ssd_temp")

fan1Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "fan1")

fan2Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "fan2")

fan3Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "fan3")

fan4Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "fan4")

fan5Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "fan5")

fan6Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "fan6")

fan7Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "fan7")

v12Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "12v")

vcc5Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "5vcc")

vcc33Float =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "3.3vcc")

vbatFloat = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "vbat")

vsb5Float = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "5vsb")

vsb33Float =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "3.3vsb")

v18PchFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "1.8v_pch")

pvnnPchFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "pvnn_pch")

v105PchFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "1.05v_pch")

v25BmcFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "2.5v_bmc")

v18BmcFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "1.8v_bmc")

v12BmcFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "1.2v_bmc")

v10BmcFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "1.0v_bmc")

vcpuVrmFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "vcpuvrm")

vcpuFloat = convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "vcpu")

vdimmAbcdFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "vdimmabcd")

vdimmEfghFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "vdimmefgh")

chassisIntruFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "chassis_intru")

ps1StatusFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "ps1_status")

ps2StatusFloat =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "ps2_status")

aocNic11Float =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "aoc_nic1_1")

aocNic12Float =
    convertToFloat(bucket: bucket, measurement: measurement, server: server, field: "aoc_nic1_2")

union(
    tables: [
        cpuTempFloat,
        pchTempFloat,
        systemTempFloat,
        peripheralTempFloat,
        nicTempFloat,
        cpuVrminTempFloat,
        vrmAbcdTempFloat,
        vrmEfghTempFloat,
        inletTempFloat,
        dimmAbcdTempFloat,
        dimmEfghTempFloat,
        pmemAbcdTempFloat,
        pmemEfghTempFloat,
        m2SsdTempFloat,
        fan1Float,
        fan2Float,
        fan3Float,
        fan4Float,
        fan5Float,
        fan6Float,
        fan7Float,
        v12Float,
        vcc5Float,
        vcc33Float,
        vbatFloat,
        vsb5Float,
        vsb33Float,
        v18PchFloat,
        pvnnPchFloat,
        v105PchFloat,
        v25BmcFloat,
        v18BmcFloat,
        v12BmcFloat,
        v10BmcFloat,
        vcpuVrmFloat,
        vcpuFloat,
        vdimmAbcdFloat,
        vdimmEfghFloat,
        chassisIntruFloat,
        ps1StatusFloat,
        ps2StatusFloat,
        aocNic11Float,
        aocNic12Float,
    ],
)