Librenms / oxidized integration - ignore librenms groups

Hello,

I cannot get librenms and oxidized working the way I want. I have 2 groups in librenms, one Backup and the other Nobackup and I want only the devices in Backup group to be sent to oxidized for backup.

It seems (cf. doc feeding oxidized in librenms) that lnms config:set oxidized.ignore_groups '["Nobackup"]' would do the job, but it doesn’t seem to work (i.e. every device is polled for backup by oxidized). When I go in the UI Settings > External > oxidized, it seems this setting concerns “Do not backup these Oxidized groups”, so no librenms groups…

Did I miss something in the docs, or this should be working and doesn’t?

Thanks for any hint.

validate.php:

===========================================
Component | Version
--------- | -------
LibreNMS  | 25.4.0 (2025-04-14T14:11:19+02:00)
DB Schema | 2025_03_22_134124_fix_ipv6_addresses_id_type (331)
PHP       | 8.2.28
Python    | 3.11.2
Database  | MariaDB 10.11.11-MariaDB-0+deb12u1
RRDTool   | 1.7.2
SNMP      | 5.9.3
===========================================

[OK]    Composer Version: 2.8.8
[OK]    Dependencies up-to-date.
[OK]    Database Connected
[OK]    Database Schema is current
[OK]    SQL Server meets minimum requirements
[OK]    lower_case_table_names is enabled
[OK]    MySQL engine is optimal
[OK]    Database and column collations are correct
[OK]    Database schema correct
[OK]    MySQL and PHP time match
[OK]    Active pollers found
[OK]    Dispatcher Service not detected
[OK]    Locks are functional
[OK]    Python poller wrapper is polling
[OK]    Redis is unavailable
[WARN]  IPv6 is disabled on your server, you will not be able to add IPv6 devices.
[OK]    rrd_dir is writable
[OK]    rrdtool version ok

result of lnms config:get oxidized (section os pruned, it’s the default):

{
    "default_group": null,
    "ignore_groups": [
        "Nobackup"
    ],
    "enabled": true,
    "features": {
        "versioning": true
    },
    "group_support": true,
    "ignore_os": [],
    "ignore_types": [
        "Environment",
        "Firewall",
        "Server"
    ],
    "maps": {
        "os": {
            […]
        }
    },
    "reload_nodes": true,
    "url": "http://127.0.0.1:8888"
}

oxydized config:

---
username: oxidized
password: myultrasecurepassword
resolve_dns: true
interval: 3600
use_syslog: false
debug: false
run_once: false
threads: 30
use_max_threads: false
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
next_adds_job: false
vars: {}
groups: {}
group_map: {}
pid: "/etc/oxidized/.config/oxidized/pid"
extensions:
  oxidized-web:
    load: true
    listen: 127.0.0.1
    port: 8888
    vhosts:
      - localhost
      - 127.0.0.1
crash:
  directory: "/etc/oxidized/.config/oxidized/crashes"
  hostnames: false
stats:
  history_size: 10
input:
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
  utf8_encoded: true
output:
  default: git
  git:
    user: Oxidized
    single_repo: true
    repo: /etc/oxidized/devices.git
source:
  default: http
  debug: false
  http:
    url: https://librenms.grenoble-inp.fr/api/v0/oxidized
    scheme: https
    secure: false
    map:
      name: hostname
      model: os
      group: group
    headers:
      X-Auth-Token: ea99624895220e6c7518f77c90dd9588
model_map:
  juniper: junos
  cisco: ios

Have you checked to make sure the format is correct on your config?

I’ve discovered a problem in the git output, when specifiying a user, you need to provide an email as well:

output:
  default: git
  git:
    user: Oxidized
    email: [email protected]

And I managed to get it working (at least for tests), but not as I intended. I did not use my librenms groups and set this config:

    "default_group": "Nobackup",
    "ignore_groups": [
        "Nobackup"
    ],
    "enabled": true,
    "group_support": true,
    […]
    "group": {
            "hostname": [
                {
                    "match": "sw-xxx.example.com",
                    "value": "Backup"
                }
            ]
        }

As I test my oxidized config only on one switch for the moment, that’s ok. But I’m still interested in making smarter groups between oxidized and librenms. I need to test further the regex format for grouping hosts when I’ll get into production.