Skip to content

Cast all alert values to float to prevent type conflicts

Kontekst

Pan Bartłomiej znalazł Pana Buga: https://projects.task.gda.pl/citask/storage/playbooks/iscsi-manager/-/merge_requests/50/diffs#note_183057

Winszuję.

Problem

  1. Kapacitor zapisuje alerty do Influksa: https://projects.task.gda.pl/citask/monitoring/roles/kapacitor/-/blob/2.5.0/templates/kapacitor.tick.j2#L51

    Jest to potrzebne, żebyśmy mogli potem odczytać historię alertów.

  2. Zapisywane są dwa pola: severity i value.

  3. Pole value to wartość, na podstawie której generowany jest alert.

  4. Jeśli w jednym alercie value będzie floatem, a w innym alercie intem, to pojawi się konflikt przy zapisie:

    ts=2022-02-24T10:41:16.063Z lvl=error msg="failed to write points to InfluxDB" service=kapacitor task_master=main task=iscsidev_systemd_unit node=influxdb_out5 err="partial write: field type conflict: input field \"value\" on measurement \"iscsidev_alerts\" is type integer, already exists as type float dropped=5"

    Kluczowe jest: input field "value" on measurement "iscsidev_alerts" is type integer, already exists as type float dropped=5.