Right now I use Netbox to control monitoring with node_exporter and snmp_exporter.
I have three custom fields on Device and VirtualMachine, all of which are optional: * "monitoring" is a selection field with values "node", "snmp" and "icmp" * "snmp_auth" is a selection field with the names of the configured auths * "snmp_module" is a multi-select field with the names of the snmp modules I use. (snmp_exporter now supports selection of multiple modules in a single scrape, but sadly combined with how netbox-plugin-prometheus-sd exposes lists, that makes the rewriting config messy) Prometheus configuration: - job_name: exporter scrape_interval: 1m metrics_path: /metrics static_configs: - targets: - localhost:9115 # blackbox_exporter - localhost:9116 # snmp_exporter - job_name: snmp scrape_interval: 15s http_sd_configs: # https://github.com/netbox-community/netbox/issues/11538#issuecomment-1635839720 - url: https://netbox.example.net/api/plugins/prometheus-sd/devices/?cf_monitoring=snmp&status=active refresh_interval: 10m authorization: type: Token credentials_file: /etc/prometheus/netbox.token - url: https://netbox.example.net/api/plugins/prometheus-sd/virtual-machines/?cf_monitoring=snmp&status=active refresh_interval: 10m authorization: type: Token credentials_file: /etc/prometheus/netbox.token metrics_path: /snmp relabel_configs: # Labels which control scraping - source_labels: [__address__] target_label: instance - source_labels: [__address__] target_label: __param_target - source_labels: [__meta_netbox_primary_ip] regex: '(.+)' target_label: __param_target - source_labels: [__meta_netbox_custom_field_snmp_module] target_label: __param_module # Ugh: multiselect is of form ['foo', 'bar'] and we need foo,bar. There is no gsub. - source_labels: [__param_module] regex: "\\['(.*)'\\]" target_label: __param_module - source_labels: [__param_module] regex: "(.*)', *'(.*)" replacement: "$1,$2" target_label: __param_module - source_labels: [__param_module] regex: "(.*)', *'(.*)" replacement: "$1,$2" target_label: __param_module - source_labels: [__param_module] regex: "(.*)', *'(.*)" replacement: "$1,$2" target_label: __param_module - source_labels: [__meta_netbox_custom_field_snmp_auth] target_label: __param_auth - target_label: __address__ replacement: 127.0.0.1:9116 # SNMP exporter # Optional extra metadata labels - source_labels: [__param_module] target_label: module - source_labels: [__meta_netbox_cluster_slug] target_label: cluster - source_labels: [__meta_netbox_device_type_slug] target_label: device_type - source_labels: [__meta_netbox_model] target_label: netbox_model - source_labels: [__meta_netbox_platform_slug] target_label: platform - source_labels: [__meta_netbox_role_slug] target_label: role - source_labels: [__meta_netbox_site_slug] target_label: site - source_labels: [__meta_netbox_tag_slugs] target_label: tags - source_labels: [__meta_netbox_tenant_slug] target_label: tenant - job_name: icmp scrape_interval: 1m http_sd_configs: - url: https://netbox.example.net/api/plugins/prometheus-sd/devices/?cf_monitoring=icmp&status=active refresh_interval: 10m authorization: type: Token credentials_file: /etc/prometheus/netbox.token - url: https://netbox.example.net/api/plugins/prometheus-sd/virtual-machines/?cf_monitoring=icmp&status=active refresh_interval: 10m authorization: type: Token credentials_file: /etc/prometheus/netbox.token metrics_path: /probe params: module: [icmp] relabel_configs: # Labels which control scraping - source_labels: [__address__] target_label: instance - source_labels: [__address__] target_label: __param_target - source_labels: [__meta_netbox_primary_ip] regex: '(.+)' target_label: __param_target - target_label: __address__ replacement: 127.0.0.1:9115 # Blackbox exporter # Optional extra metadata labels - source_labels: [__meta_netbox_cluster_slug] target_label: cluster - source_labels: [__meta_netbox_device_type_slug] target_label: device_type - source_labels: [__meta_netbox_model] target_label: netbox_model - source_labels: [__meta_netbox_platform_slug] target_label: platform - source_labels: [__meta_netbox_role_slug] target_label: role - source_labels: [__meta_netbox_site_slug] target_label: site - source_labels: [__meta_netbox_tag_slugs] target_label: tags - source_labels: [__meta_netbox_tenant_slug] target_label: tenant - job_name: node scrape_interval: 1m scrape_timeout: 50s http_sd_configs: - url: https://netbox.example.net/api/plugins/prometheus-sd/devices/?cf_monitoring=node&status=active refresh_interval: 10m authorization: type: Token credentials_file: /etc/prometheus/netbox.token - url: https://netbox.example.net/api/plugins/prometheus-sd/virtual-machines/?cf_monitoring=node&status=active refresh_interval: 10m authorization: type: Token credentials_file: /etc/prometheus/netbox.token metrics_path: /metrics relabel_configs: # Labels which control scraping - source_labels: [__address__] target_label: instance - source_labels: [__meta_netbox_primary_ip4] regex: '(.+)' target_label: __address__ - source_labels: [__meta_netbox_primary_ip6] regex: '(.+)' target_label: __address__ replacement: '[${1}]' - source_labels: [__address__] target_label: __address__ replacement: '${1}:9100' # Optional extra metadata labels - source_labels: [__meta_netbox_cluster_slug] target_label: cluster - source_labels: [__meta_netbox_device_type_slug] target_label: device_type - source_labels: [__meta_netbox_model] target_label: netbox_model - source_labels: [__meta_netbox_platform_slug] target_label: platform - source_labels: [__meta_netbox_role_slug] target_label: role - source_labels: [__meta_netbox_site_slug] target_label: site - source_labels: [__meta_netbox_tag_slugs] target_label: tags - source_labels: [__meta_netbox_tenant_slug] target_label: tenant # Monitoring of netbox itself - job_name: netbox scrape_interval: 2m scheme: https authorization: type: Token credentials_file: /etc/prometheus/netbox.token static_configs: - targets: ['netbox.example.net:443'] I added the "icmp" monitoring option only for completeness and haven't really tested it yet. I'm still on static files for other blackbox_exporter tests though. Although Netbox does have a "service" model, there are things I want to monitor which are not attached to devices or VMs. I'm currently thinking about using config contexts and/or attaching blackbox monitoring directly to an IP address object rather than a device or VM. Discussion: https://github.com/netbox-community/netbox/discussions/14261 (That shows a slightly older Prometheus config where I was using tags to enable the various monitoring types; a custom field is actually simpler) On Thursday 14 December 2023 at 00:27:08 UTC Elliott Balsley wrote: > I've just started looking at Netbox as a way to store "inventory" for > Prometheus using this plugin: > https://github.com/FlxPeters/netbox-plugin-prometheus-sd > > The documentation is a bit light and I'm wondering if anyone can share a > good example of how to use the multi-target exporter pattern. My initial > thought is to add custom fields in netbox like this: > *prom_job*: (multi-selection with choices like blackbox, snmp, json) > *prom_blackbox_module*: (selection with choices like ping, http, tcp3389, > etc.) > *prom_snmp_module*: (selection with choices for all my snmp modules) > *prom_snmp_auth*: (selection with choices like public_v2, public_v3, etc. > to be used by snmp). > > Then in Prometheus, I would have just one blackbox job which chooses the > right module based on that field, and its target URL includes a Netbox > filter for prom_job to only return targets which have that module selected. > > Similarly, I would have one snmp job, etc. Does this sound like the best > approach? > -- You received this message because you are subscribed to the Google Groups "Prometheus Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to prometheus-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/prometheus-users/b95127d2-c1f2-47d1-b6d2-1f1b8e2bc949n%40googlegroups.com.