Giter VIP home page Giter VIP logo

unms-exporter's Introduction

UNMS Exporter for Prometheus

Small daemon offering UNMS device statistics as Prometheus metrics.

Deployment

Premade Docker Images are available at quay.io.

docker pull quay.io/ffddorf/unms-exporter

Configuration

Options

Config can be specified via a YAML file, as args or from environment variables.

Listen Address

  • Config: listen
  • Args: --listen or -l
  • Env: UNMS_EXPORTER_SERVER_ADDR

Address the exporter should listen on. Defaults to [::]:9806.

Config File Location

  • Args: --config or -c

Location of the YAML config file to load.

Log Verbosity

  • Config: log_level
  • Env: UNMS_EXPORTER_LOG_LEVEL

Log verbosity level. Defaults to info. Use debug to get more details.

UNMS API Tokens

  • Config: token
  • Env: UNMS_EXPORTER_TOKEN
    • use a comma-separated list of instance=token values

Configures an API token per UNMS instance.

Example: config file (click to open)
# config.yaml
token:
  my-unms-instance.example.org: "my token"
  unms.example.com: "token123"
$ unms-exporter --config config.yaml
Example: environment variable (click to open)
$ UNMS_EXPORTER_TOKEN="my-unms-instance.example.org=my token,unms.example.com=token123" \
    unms-exporter

Extra metrics

  • Config: extra_metrics (as Array)
  • Args: --extra-metrics (as comma-separated list)
  • Env: UNMS_EXPORTER_EXTRA_METRICS (as comma-separated list)

Enable additional metrics to be exported. These metrics may require extra HTTP requests, usually one per device, so they are disabled by default.

Example: config file (click to open)
# config.yaml
extras:
- ping
$ unms-exporter --config config.yaml
Example: environment variable (click to open)
$ UNMS_EXPORTER_EXTRA_METRICS="ping" \
    unms-exporter
Example: command line argument (click to open)
$ unms-exporter --extra-metrics="ping"

Available metrics

  • ping: Fetch statistical data from UNMS and extract and export Ping RTT measurements between UNMS and the device.

    Exported metrics (click to open)
    • ping_loss_ratio: Packet loss ratio (range 0-1, with 0.33 meaning 33% packet loss)
    • ping_rtt_best_seconds: Best round trip time, in seconds
    • ping_rtt_mean_seconds: Mean round trip time, in seconds
    • ping_rtt_worst_seconds: Worst round trip time, in seconds
    • ping_rtt_std_deviation_seconds: Standard deviation for round trip time, in seconds

Further data is available, but not currently exported (see the API documentation for the /devices/{id}/statistics endpoint on your UNMS installation to get an overview). Feel free to open a new issue to inquire whether an integration into the exporter is feasable.

Prometheus Scrape Setup

The exporter follows the convention for exporters. The UNMS instance to target should be specified using the target query parameter.

Here is how to achieve this using a static prometheus config:

scrape_configs:
- job_name: exporters
  static_configs:
    - exporter.example.org:9806 # UNMS exporter
    - exporter.example.org:9100 # node exporter
    - ...

- job_name: unms_exporter
  # for a static target "unms.example.org", rewrite it to
  # "exporter.example.org:9806/metrics?target=unms.example.org",
  # but keep "unms.example.org" as instance label
  relabel_configs:
    - source_labels: [__address__]
      target_label: instance
    - source_labels: [__address__]
      target_label: __param_target
    - replacement: 'exporter.example.org:9806'
      target_label: __address__
  static_configs:
    - targets:
      - my-unms-instance.example.org
Upgrade from v0.1.2 or earlier (click to open)

Previous versions did expose the UNMS metrics under any path on the exporter, i.e. the following URLs were handled identically:

  • http://localhost:9806/?target=my-unms-instance.example.org
  • http://localhost:9806/metrics?target=my-unms-instance.example.org
  • http://localhost:9806/this/is/all/ignored?target=my-unms-instance.example.org

Additionally, the UNMS exporter has returned a mixed set of internal and instance-specific metrics.

This has changed and now follows best practices. All UNMS-specific metrics are now available only on the following URL:

  • http://localhost:9806/metrics?target=my-unms-instance.example.org

Additionally, internal metrics (e.g. Go runtime statistics) can be retrieved by omitting the target parameter:

  • http://localhost:9806/metrics

Available Metrics

Device wide

  • device_cpu: CPU load average in percent
  • device_ram: RAM usage in percent
  • device_enabled: Indicating if device is enabled in UNMS
  • device_maintenance: Indicating if device is in maintenance mode (useful for muting alerts)
  • device_uptime: Uptime in seconds
  • device_last_seen: Last seen as unix timestamp
  • device_last_backup: Time of last backup as unix timestamp

Per Interface

  • interface_enabled: Indicating if interface is enabled
  • interface_plugged: Indicating if interface has a cable plugged
  • interface_up: Indicating if interface is considered up
  • interface_dropped: Number of packets dropped
  • interface_errors: Number of interface errors
  • interface_rx_bytes: Bytes received since last reset
  • interface_tx_bytes: Bytes transmitted since last reset
  • interface_rx_rate: Bytes received rate (momentarily)
  • interface_tx_rate: Bytes transmitted rate (momentarily)
  • interface_poe_power: POE power consumption

WAN Interface

If an interface is marked as the WAN interface, these metrics are populated.

  • wan_rx_bytes: Bytes received since last reset
  • wan_tx_bytes: Bytes transmitted since last reset
  • wan_rx_rate: Bytes received rate (momentarily)
  • wan_tx_rate: Bytes transmitted rate (momentarily)

unms-exporter's People

Contributors

dmke avatar m0ppers avatar mraerino avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

unms-exporter's Issues

Error serving metrics - 3rd party devices

Hi,

Sorry about logging this as a new issue, but it is relating to 3rd party devices on the latest main. I have also tested against the latest tag "sha-963d177".

I have included just the first device logged to try make it more legible.


625 error(s) occurred:

* collected metric "unms_device_enabled" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_device_maintenance" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_device_cpu" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_device_ram" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_device_uptime" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_device_last_seen" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"X1" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"1" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"X1" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"1" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"X1" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"1" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"WAN1 AussieBB" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"WAN1 AussieBB" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"WAN1 AussieBB" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"X2" > label:<name:"ifName" value:"eth2" > label:<name:"ifPos" value:"2" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"X2" > label:<name:"ifName" value:"eth2" > label:<name:"ifPos" value:"2" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"X2" > label:<name:"ifName" value:"eth2" > label:<name:"ifPos" value:"2" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"iiNet" > label:<name:"ifName" value:"eth3" > label:<name:"ifPos" value:"3" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"iiNet" > label:<name:"ifName" value:"eth3" > label:<name:"ifPos" value:"3" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"21a9465e-9da8-4145-b8ab-ca34f8cbffdb" > label:<name:"deviceMac" value:"e8:ed:**:**:**:**" > label:<name:"deviceName" value:"ROUTER" > label:<name:"ifDescr" value:"iiNet" > label:<name:"ifName" value:"eth3" > label:<name:"ifPos" value:"3" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"router" > label:<name:"siteId" value:"2138b486-4939-4a0c-bc1e-6c5c60ba6cf2" > label:<name:"siteName" value:"SITE NAME" > gauge:<value:0 > } was collected before with the same name and label values```

Proposal: Improve metrics collector situation

Overview

This issue discusses two closely related issues:

  1. Prometheus' request context is not inherited/re-used by UNMS API client.
  2. The UNMS metrics contain metrics about the collector itself.

These issues arose when working on #23, where I needed to bump the UNMS API request timeout from 5 to 30s. This however is guess work, as the "correct" timeout value heavily depends on the number of devices in your UNMS instance.

Re-use HTTP request context in UNMS API client

It would be nice, if the (*Exporter).collectImpl() method (and (*Exporter).fetchDeviceData(), introduced in #22) could inherit and re-use the request context available in the handler (i.e. (*http.Request).Context()).

This allows the HTTP client (i.e. Prometheus) to abort the request, which in turn would stop all pending UNMS API requests (they will fail because the inherited context is already cancelled). It also removes the guesswork involved in choosing a "correct" timeout value.

However, since the Prometheus prometheus.Collector interface predates Go's context package, it is not easy to pass the request context down to the collector. One way to work around this issue, is to create a new prometheus.Registry in the HTTP handler and register a new Collector containing the context:

// omitting error handling
handler := func(w http.RequestWriter, r *http.Request) {
  target := r.URL.Query().Get("target")

  if instance, ok := targets[target]; ok {
    reg := prometheus.NewPedanticRegistry()
    reg.MustRegister(&contextWrapper{instance, r.Context()})
    promhttp.HandlerFor(reg, promhttp.HandlerOpts{
      ErrorLog: log,
    }).Serve(w, r)
    return
  }
}
This requires a few additions/changes

A new contextWrapper type (bringing the context.Context into the Exporter struct itself is not a good idea, because that requires getting rid of their internal metrics).

type contextWrapper struct {
  instance *Exporter
  ctx      context.Context
}

func (cw *contextWrapper) Describe(out chan<- *prom.Desc) {
  cw.instance.Describe(out)
}

func (w *contextWrapper) Collect(out chan<- prom.Metric) {
  cw.instance.CollectWithContext(cw.ctx, out)
}

Some changes to the Exporter struct:

// Keep prometheus.Collector interface intact (optional). Just pick
// a default timeout and pass it down.
func (e *Exporter) Collect(out chan<- prom.Metric) {
  ctx, cancel := context.WithTimeout(context.Backround(), 30*time.Second)
  defer cancel()

  e.CollectWithContext(ctx, out)
}

func (e *Exporter) Collect(ctx context.Context, out chan<- prom.Metric) {
  // fetch data from UNMS API
}

Untangle Exporter and UNMS metrics

The current registries contain both the prometheus.NewBuildInfoCollector() and prometheus.NewGoCollector() which yield (almost) duplicate data if you have multiple UNMS instances configured.

I'd like to take the opportunity to move them out of the UNMS metrics and into a separate exporter metrics set, and apply some common patterns found on other exporters:

  • /metrics would yield build info and Go metrics (go_info, go_gc_*, et.al.)
  • /metrics?target=name would yield only the UNMS data, as described in the README.
  • / would return a simple HTML page listing the available instances, and linking to their metrics endpoint
For this the Prometheus scrape configuration will need an update.
scrape_configs:
- job_name: exporters
  static_configs:
    - exporter.example.org:9100 # node exporter
    - exporter.example.org:9806 # UNMS exporter
    - ...

- job_name: unms_exporter
  # for a static target "unms.example.org", rewrite it to
  # "exporter.example.org:9806/metrics?target=unms.example.org",
  # but keep "unms.example.org" as instance label
  relabel_configs:
    - source_labels: [__address__]
      target_label: instance
    - source_labels: [__address__]
      target_label: __param_target
    - replacement: 'exporter.example.org:9806'
      target_label: __address__
  static_configs:
    - targets:
      - my-unms-instance.example.org

I've implemented this pattern successfully in the past (our cambium-exporter and unifi-sdn-exporter work in a similar way). So far, I've not encountered any issues.

Feedback wanted

Before I start on this, I'd like to gather some feedback, including, but not limited to:

  • Would you be willing to accept a PR implementing this? These changes will undoubtedly cause work on your infrastructure (reconfigure Prometheus, maybe update Grafana dashboards).
  • Should I provide a single or multiple PRs? (I don't think separating this into multiple PRs would make much sense, however I'd be OK with putting in the extra work).

providing podman-compose.yaml

It would be helpful to have a working podman-compose.yaml

It started with

version: 3.7 

services:
     unms-exporter:
         image: quay.io/ffddorf/unms-exporter
         conateiner_name: unms-exporter
         command: /usr/local/bin/umns-exporter --config /config.yaml
         volumens:
             - /home/pi/config.yaml:/config.yaml

Example Config file please

I have been fighting this for a while and I cant seem to get a config file with the correct context etc. Can you please include an example file. Pretty please

Thank you

Token environment variable not picked up

When trying to deploy the exporter via docker compose, the token environmental token is not getting picked up.

time="2023-01-04T00:54:51Z" level=fatal msg="invalid config" error="No token configured"
  -c, --config string   Config file to use
  -l, --listen string   Address for the exporter to listen on (default "[::]:9806")

This is using the below compose file.

version: '3.7'
services:
  unms-exporter:
    image: quay.io/ffddorf/unms-exporter
    container_name: unms-exporter
    environment:
      - UNMS_EXPORTER_TOKEN="instance.unmsapp.com=token"
      - TZ=Australia/Melbourne
    ports:
      - 9806:9806
    restart: unless-stopped

Unable to get metrics

Trying to scrape by visiting unms:9806/metrics?target=mysite.unmsapp.com as its definitely hitting the target, but its failing to return any valid metrics.

Redacted log below:


51 error(s) occurred:
* collected metric "unms_device_enabled" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_device_maintenance" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_device_cpu" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:8 > } was collected before with the same name and label values
* collected metric "unms_device_ram" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:60 > } was collected before with the same name and label values
* collected metric "unms_device_uptime" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:4.157011e+06 > } was collected before with the same name and label values
* collected metric "unms_device_last_seen" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:1.672890227e+09 > } was collected before with the same name and label values
* collected metric "unms_device_last_backup" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1.658294944e+09 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_dropped" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_errors" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:2.283684503e+09 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:1.7529246126e+10 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:2416 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:7200 > } was collected before with the same name and label values
* collected metric "unms_interface_poe_power" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_dropped" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_errors" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:1.721484414116e+12 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:5.3403681322e+10 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:3.096288e+06 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:91992 > } was collected before with the same name and label values
* collected metric "unms_interface_poe_power" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"eth1" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"eth" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_dropped" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_errors" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:4.766068826e+09 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:2.755217928e+09 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:6968 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:2624 > } was collected before with the same name and label values
* collected metric "unms_interface_poe_power" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"br0" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"br" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_enabled" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_plugged" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:1 > } was collected before with the same name and label values
* collected metric "unms_interface_up" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_dropped" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_errors" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:0 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:9.0595610688e+10 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:1.785364309352e+12 > } was collected before with the same name and label values
* collected metric "unms_interface_rx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:130504 > } was collected before with the same name and label values
* collected metric "unms_interface_tx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:3.203928e+06 > } was collected before with the same name and label values
* collected metric "unms_interface_poe_power" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"ifDescr" value:"" > label:<name:"ifName" value:"main" > label:<name:"ifPos" value:"0" > label:<name:"ifType" value:"wlan" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:0 > } was collected before with the same name and label values
* collected metric "unms_wan_rx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:1.721484414116e+12 > } was collected before with the same name and label values
* collected metric "unms_wan_tx_bytes" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > counter:<value:5.3403681322e+10 > } was collected before with the same name and label values
* collected metric "unms_wan_rx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:3.096288e+06 > } was collected before with the same name and label values
* collected metric "unms_wan_tx_rate" { label:<name:"deviceId" value:"redacted" > label:<name:"deviceMac" value:"24:xx:xx:xx:xx:xx" > label:<name:"deviceName" value:"Ubiquity Device" > label:<name:"role" value:"station" > label:<name:"siteId" value:"redacted" > label:<name:"siteName" value:"My Site" > gauge:<value:91992 > } was collected before with the same name and label values
* ```

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

dockerfile
Dockerfile
  • golang 1.21-alpine
github-actions
.github/workflows/build-publish.yml
  • docker/metadata-action v5
  • actions/github-script v7.0.1
  • docker/metadata-action v5
  • docker/login-action v3
  • docker/build-push-action v5
  • docker/build-push-action v5
  • ubuntu 22.04
.github/workflows/test.yml
  • actions/setup-go v5
  • actions/checkout v4
  • actions/cache v3.3.3
  • actions/setup-go v5
  • actions/checkout v4
  • actions/cache v3.3.3
  • golangci/golangci-lint-action v3
gomod
go.mod
  • go 1.21
  • github.com/go-openapi/errors v0.21.0
  • github.com/go-openapi/runtime v0.26.2
  • github.com/go-openapi/strfmt v0.22.0
  • github.com/go-openapi/swag v0.22.7
  • github.com/go-openapi/validate v0.22.6
  • github.com/go-swagger/go-swagger v0.30.5
  • github.com/kelseyhightower/envconfig v1.4.0
  • github.com/prometheus/client_golang v1.18.0
  • github.com/sirupsen/logrus v1.9.3
  • github.com/spf13/pflag v1.0.5
  • github.com/spf13/viper v1.18.2
  • github.com/stretchr/testify v1.8.4

  • Check this box to trigger a request for Renovate to run again on this repository

Segfault checking target

I've been trying to set every thing up, but it didn't work

When requesting http://localhost:9806/?target=unms.example.com I get a segfault in the logs.

Here is how I launch the container and the error It throws (I've redacted the domain and token):

# export UNMS_EXPORTER_LOG_LEVEL=debug
# cat /usr/src/unms-exporter/unms_exporter.yml
token: {"unms.example.com": "bla-bla-bla"}
# docker run --name unms_exporter -e UNMS_EXPORTER_LOG_LEVEL \
--volume "/usr/src/unms-exporter/unms_exporter.yml":"/home/unms/unms_exporter.yml" \
--publish 9806:9806 quay.io/ffddorf/unms-exporter \
/usr/local/bin/unms-exporter -c /home/unms/unms_exporter.yml

time="2021-12-25T17:33:03Z" level=info msg="Server starting..." addr="[::]:9806"
time="2021-12-25T17:33:29Z" level=debug msg="Starting request" method=GET url="/?target=unms.example.com"
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa1390f]

goroutine 23 [running]:
github.com/ffddorf/unms-exporter/exporter.(*Exporter).collectImpl(0xc000339a00, 0xc000128240, 0x0, 0x0)
	/src/exporter/exporter.go:185 +0x76f
github.com/ffddorf/unms-exporter/exporter.(*Exporter).Collect(0xc000339a00, 0xc000128240)
	/src/exporter/exporter.go:115 +0x6c
github.com/prometheus/client_golang/prometheus.(*Registry).Gather.func1()
	/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:446 +0x1a2
created by github.com/prometheus/client_golang/prometheus.(*Registry).Gather
	/go/pkg/mod/github.com/prometheus/[email protected]/prometheus/registry.go:538 +0xe8e

I have no idea why it fails or how to debug it.
If I query the unms API form the same machine I get the json data without problem.
curl --include --header "Accept: application/json" --header "x-auth-token: bla-bla-bla" 'https://unms.example.com/nms/api/v2.1/devices?withInterfaces=true'.

The uisp server version is 1.3.11 and is running in debian 11.2 with Docker version 20.10.12, build e91ed57.

Thanks in advance.
Alejandroscf

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.