1
+plugin_name: netflow-plugin
2
+modules:
3
+ - meta:
4
+ plugin_name: netflow-plugin
5
+ module_name: netflow
6
+ monitored_instance:
7
+ name: NetFlow
8
+ link: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_pi/configuration/15-s/nf-15-s-book/ios-netflow-ov.html
9
+ categories:
10
+ - flows.sources
11
+ icon_filename: network-wired.svg
12
+ keywords:
13
+ - netflow
14
+ - netflow v5
15
+ - netflow v7
16
+ - netflow v9
17
+ - cisco
18
+ - flows
19
+ - network flows
20
+ - flow collector
21
+ related_resources:
22
+ integrations:
23
+ list:
24
+ - plugin_name: netflow-plugin
25
+ module_name: ipfix
26
+ - plugin_name: netflow-plugin
27
+ module_name: sflow
28
+ info_provided_to_referring_integrations:
29
+ description: ""
30
+ overview:
31
+ data_collection:
32
+ metrics_description: |
33
+ Collects NetFlow v5, v7, and v9 records from one or more exporters (routers, switches, firewalls)
34
+ and stores them in tiered journal files. Each record exposes source and destination IP, ports,
35
+ protocol, bytes, packets, ToS, TCP flags, and ingress/egress interface indices.
36
+ Enrichment adds GeoIP country/city/ASN, static metadata, and classifier tags.
37
+
38
+ For full documentation including vendor configuration examples, sampling caveats, template
39
+ handling and verification steps, see [NetFlow](https://learn.netdata.cloud/docs/network-flows/sources/netflow)
40
+ and the [Network Flows Overview](https://learn.netdata.cloud/docs/network-flows/).
41
+ method_description: |
42
+ The plugin listens on a configurable UDP socket for NetFlow datagrams.
43
+ NetFlow v5 and v7 records are decoded directly. NetFlow v9 records are decoded using
44
+ dynamic templates cached from the exporter. Decoded records are enriched in-memory
45
+ and appended to disk-backed journal tiers (raw, 1-minute, 5-minute, 1-hour rollups).
46
+ supported_platforms:
47
+ include:
48
+ - Linux
49
+ exclude: []
50
+ multi_instance: false
51
+ additional_permissions:
52
+ description: ""
53
+ default_behavior:
54
+ auto_detection:
55
+ description: "The plugin starts when enabled in netflow.yaml and listens on the configured UDP port."
56
+ limits:
57
+ description: ""
58
+ performance_impact:
59
+ description: ""
60
+ setup:
61
+ prerequisites:
62
+ list:
63
+ - title: NetFlow-capable exporter
64
+ description: |
65
+ A router, switch, or firewall configured to export NetFlow v5, v7, or v9 datagrams to the
66
+ Netdata agent's UDP listener.
67
+ configuration:
68
+ file:
69
+ name: netflow.yaml
70
+ options:
71
+ description: |
72
+ The plugin is configured via `netflow.yaml` in the Netdata configuration directory.
73
+ folding:
74
+ title: Config options
75
+ enabled: true
76
+ list:
77
+ - name: listener.listen
78
+ description: UDP endpoint for NetFlow datagrams.
79
+ default_value: "0.0.0.0:2055"
80
+ required: false
81
+ - name: protocols.v5
82
+ description: Enable NetFlow v5 decoding.
83
+ default_value: true
84
+ required: false
85
+ - name: protocols.v7
86
+ description: Enable NetFlow v7 decoding.
87
+ default_value: true
88
+ required: false
89
+ - name: protocols.v9
90
+ description: Enable NetFlow v9 decoding.
91
+ default_value: true
92
+ required: false
93
+ - name: journal.journal_dir
94
+ description: Directory for journal files (relative to NETDATA_CACHE_DIR).
95
+ default_value: flows
96
+ required: false
97
+ - name: journal.size_of_journal_files
98
+ description: Maximum total size of all journal files.
99
+ default_value: "10GB"
100
+ required: false
101
+ - name: journal.duration_of_journal_files
102
+ description: Maximum age of journal files.
103
+ default_value: "7d"
104
+ required: false
105
+ examples:
106
+ folding:
107
+ title: Config
108
+ enabled: true
109
+ list:
110
+ - name: Basic NetFlow v5/v9 collection
111
+ folding:
112
+ enabled: false
113
+ description: Listen on the standard NetFlow port for v5 and v9 records.
114
+ config: |
115
+ enabled: true
116
+ listener:
117
+ listen: "0.0.0.0:2055"
118
+ protocols:
119
+ v5: true
120
+ v9: true
121
+ - name: NetFlow v9 only with extended retention
122
+ folding:
123
+ enabled: true
124
+ description: Accept only v9 records and keep 30 days of journal data.
125
+ config: |
126
+ enabled: true
127
+ listener:
128
+ listen: "0.0.0.0:2055"
129
+ protocols:
130
+ v5: false
131
+ v7: false
132
+ v9: true
133
+ journal:
134
+ journal_dir: flows
135
+ size_of_journal_files: 50GB
136
+ duration_of_journal_files: 30d
137
+ troubleshooting:
138
+ problems:
139
+ list:
140
+ - name: Verifying flow data is arriving and diagnosing failures
141
+ description: |
142
+ See [Troubleshooting](https://learn.netdata.cloud/docs/network-flows/troubleshooting) for
143
+ the full diagnostic recipe -- including UDP path checks, template-error analysis,
144
+ and the "looks like a bug but isn't" section (doubling, mirroring, internal-IP geolocation).
145
+ See also [Validation and Data Quality](https://learn.netdata.cloud/docs/network-flows/validation)
146
+ and [Anti-patterns](https://learn.netdata.cloud/docs/network-flows/anti-patterns).
147
+ alerts: []
148
+ metrics:
149
+ folding:
150
+ title: Metrics
151
+ enabled: false
152
+ description: |
153
+ Network flow data is stored as journal records, not as traditional metrics.
154
+ Use the "Network Flows" tab in the Netdata dashboard to query and visualize flow data.
155
+ For the full list of fields and the per-protocol availability matrix, see the
156
+ [Field Reference](https://learn.netdata.cloud/docs/network-flows/field-reference).
157
+ For visualisation guidance see [Sankey and Table](https://learn.netdata.cloud/docs/network-flows/visualization/summary-sankey),
158
+ [Time-Series](https://learn.netdata.cloud/docs/network-flows/visualization/time-series),
159
+ and [Maps and Globe](https://learn.netdata.cloud/docs/network-flows/visualization/maps-globe).
160
+ availability: []
161
+ scopes: []
162
+
163
+ - meta:
164
+ plugin_name: netflow-plugin
165
+ module_name: ipfix
166
+ monitored_instance:
167
+ name: IPFIX
168
+ link: https://datatracker.ietf.org/doc/html/rfc7011
169
+ categories:
170
+ - flows.sources
171
+ icon_filename: network-wired.svg
172
+ keywords:
173
+ - ipfix
174
+ - netflow v10
175
+ - flows
176
+ - network flows
177
+ - flow collector
178
+ - rfc 7011
179
+ related_resources:
180
+ integrations:
181
+ list:
182
+ - plugin_name: netflow-plugin
183
+ module_name: netflow
184
+ - plugin_name: netflow-plugin
185
+ module_name: sflow
186
+ info_provided_to_referring_integrations:
187
+ description: ""
188
+ overview:
189
+ data_collection:
190
+ metrics_description: |
191
+ Collects IPFIX (NetFlow v10) records from one or more exporters and stores them in tiered
192
+ journal files. IPFIX extends NetFlow v9 with variable-length fields, vendor-specific
193
+ information elements, and template withdrawal. Each record exposes the same core fields
194
+ as NetFlow plus any additional IEs the exporter provides.
195
+
196
+ For full documentation including vendor configuration examples (Cisco, Juniper, Arista,
197
+ ASA NSEL), biflow handling, sampling caveats, and verification steps, see
198
+ [IPFIX](https://learn.netdata.cloud/docs/network-flows/sources/ipfix) and the
199
+ [Network Flows Overview](https://learn.netdata.cloud/docs/network-flows/).
200
+ method_description: |
201
+ The plugin listens on the same UDP socket as NetFlow. IPFIX messages are identified by
202
+ version number 10 and decoded using cached templates. Decoded records are enriched and
203
+ appended to disk-backed journal tiers.
204
+ supported_platforms:
205
+ include:
206
+ - Linux
207
+ exclude: []
208
+ multi_instance: false
209
+ additional_permissions:
210
+ description: ""
211
+ default_behavior:
212
+ auto_detection:
213
+ description: "The plugin starts when enabled in netflow.yaml and listens on the configured UDP port."
214
+ limits:
215
+ description: ""
216
+ performance_impact:
217
+ description: ""
218
+ setup:
219
+ prerequisites:
220
+ list:
221
+ - title: IPFIX-capable exporter
222
+ description: |
223
+ A router, switch, or firewall configured to export IPFIX datagrams to the
224
+ Netdata agent's UDP listener.
225
+ configuration:
226
+ file:
227
+ name: netflow.yaml
228
+ options:
229
+ description: |
230
+ IPFIX shares the same `netflow.yaml` configuration file as NetFlow and sFlow.
231
+ Enable IPFIX via the `protocols.ipfix` option.
232
+ folding:
233
+ title: Config options
234
+ enabled: true
235
+ list:
236
+ - name: listener.listen
237
+ description: UDP endpoint for IPFIX datagrams.
238
+ default_value: "0.0.0.0:2055"
239
+ required: false
240
+ - name: protocols.ipfix
241
+ description: Enable IPFIX decoding.
242
+ default_value: true
243
+ required: false
244
+ - name: journal.journal_dir
245
+ description: Directory for journal files (relative to NETDATA_CACHE_DIR).
246
+ default_value: flows
247
+ required: false
248
+ - name: journal.size_of_journal_files
249
+ description: Maximum total size of all journal files.
250
+ default_value: "10GB"
251
+ required: false
252
+ - name: journal.duration_of_journal_files
253
+ description: Maximum age of journal files.
254
+ default_value: "7d"
255
+ required: false
256
+ examples:
257
+ folding:
258
+ title: Config
259
+ enabled: true
260
+ list:
261
+ - name: IPFIX collection
262
+ folding:
263
+ enabled: false
264
+ description: Listen for IPFIX records on the standard port.
265
+ config: |
266
+ enabled: true
267
+ listener:
268
+ listen: "0.0.0.0:2055"
269
+ protocols:
270
+ v5: false
271
+ v7: false
272
+ v9: false
273
+ ipfix: true
274
+ sflow: false
275
+ troubleshooting:
276
+ problems:
277
+ list:
278
+ - name: Verifying flow data is arriving and diagnosing failures
279
+ description: |
280
+ See [Troubleshooting](https://learn.netdata.cloud/docs/network-flows/troubleshooting) for
281
+ the full diagnostic recipe. For IPFIX specifically, watch the `template_errors` dimension
282
+ on `netflow.input_packets` -- IPFIX is template-driven and data records arriving before
283
+ their templates are dropped. See also
284
+ [Validation and Data Quality](https://learn.netdata.cloud/docs/network-flows/validation).
285
+ alerts: []
286
+ metrics:
287
+ folding:
288
+ title: Metrics
289
+ enabled: false
290
+ description: |
291
+ Network flow data is stored as journal records, not as traditional metrics.
292
+ Use the "Network Flows" tab in the Netdata dashboard to query and visualize flow data.
293
+ For the full list of fields and the per-protocol availability matrix, see the
294
+ [Field Reference](https://learn.netdata.cloud/docs/network-flows/field-reference).
295
+ IPFIX biflow records are emitted as two separate flow records (forward + reverse).
296
+ availability: []
297
+ scopes: []
298
+
299
+ - meta:
300
+ plugin_name: netflow-plugin
301
+ module_name: sflow
302
+ monitored_instance:
303
+ name: sFlow
304
+ link: https://sflow.org/
305
+ categories:
306
+ - flows.sources
307
+ icon_filename: network-wired.svg
308
+ keywords:
309
+ - sflow
310
+ - sflow v5
311
+ - sampled flows
312
+ - flows
313
+ - network flows
314
+ - flow collector
315
+ - inmon
316
+ related_resources:
317
+ integrations:
318
+ list:
319
+ - plugin_name: netflow-plugin
320
+ module_name: netflow
321
+ - plugin_name: netflow-plugin
322
+ module_name: ipfix
323
+ info_provided_to_referring_integrations:
324
+ description: ""
325
+ overview:
326
+ data_collection:
327
+ metrics_description: |
328
+ Collects sFlow v5 datagrams from one or more agents and stores them in tiered journal files.
329
+ sFlow provides statistically sampled packet headers, interface counters, or extended
330
+ gateway data. Each flow record exposes source and destination IP, ports, protocol, bytes,
331
+ packets, and sampling rate information.
332
+
333
+ For full documentation including how sFlow differs fundamentally from NetFlow (packet
334
+ sampling vs aggregated flows), vendor configuration examples (Arista, Juniper, Aruba CX,
335
+ Ruckus, hsflowd), and the limits of sampled data, see
336
+ [sFlow](https://learn.netdata.cloud/docs/network-flows/sources/sflow) and the
337
+ [Network Flows Overview](https://learn.netdata.cloud/docs/network-flows/).
338
+ method_description: |
339
+ The plugin listens on the same UDP socket as NetFlow. sFlow datagrams are identified by
340
+ their distinct header format and decoded per the sFlow v5 specification. Decoded records
341
+ are enriched and appended to disk-backed journal tiers.
342
+ supported_platforms:
343
+ include:
344
+ - Linux
345
+ exclude: []
346
+ multi_instance: false
347
+ additional_permissions:
348
+ description: ""
349
+ default_behavior:
350
+ auto_detection:
351
+ description: "The plugin starts when enabled in netflow.yaml and listens on the configured UDP port."
352
+ limits:
353
+ description: ""
354
+ performance_impact:
355
+ description: ""
356
+ setup:
357
+ prerequisites:
358
+ list:
359
+ - title: sFlow-capable agent
360
+ description: |
361
+ A switch, router, or host-based sFlow agent (such as Host sFlow) configured to send
362
+ sFlow v5 datagrams to the Netdata agent's UDP listener.
363
+ configuration:
364
+ file:
365
+ name: netflow.yaml
366
+ options:
367
+ description: |
368
+ sFlow shares the same `netflow.yaml` configuration file as NetFlow and IPFIX.
369
+ Enable sFlow via the `protocols.sflow` option.
370
+ folding:
371
+ title: Config options
372
+ enabled: true
373
+ list:
374
+ - name: listener.listen
375
+ description: UDP endpoint for sFlow datagrams.
376
+ default_value: "0.0.0.0:2055"
377
+ required: false
378
+ - name: protocols.sflow
379
+ description: Enable sFlow decoding.
380
+ default_value: true
381
+ required: false
382
+ - name: journal.journal_dir
383
+ description: Directory for journal files (relative to NETDATA_CACHE_DIR).
384
+ default_value: flows
385
+ required: false
386
+ - name: journal.size_of_journal_files
387
+ description: Maximum total size of all journal files.
388
+ default_value: "10GB"
389
+ required: false
390
+ - name: journal.duration_of_journal_files
391
+ description: Maximum age of journal files.
392
+ default_value: "7d"
393
+ required: false
394
+ examples:
395
+ folding:
396
+ title: Config
397
+ enabled: true
398
+ list:
399
+ - name: sFlow collection
400
+ folding:
401
+ enabled: false
402
+ description: Listen for sFlow v5 datagrams on the standard port.
403
+ config: |
404
+ enabled: true
405
+ listener:
406
+ listen: "0.0.0.0:2055"
407
+ protocols:
408
+ v5: false
409
+ v7: false
410
+ v9: false
411
+ ipfix: false
412
+ sflow: true
413
+ troubleshooting:
414
+ problems:
415
+ list:
416
+ - name: Verifying sFlow is arriving and diagnosing failures
417
+ description: |
418
+ See [Troubleshooting](https://learn.netdata.cloud/docs/network-flows/troubleshooting) for
419
+ the full diagnostic recipe. sFlow-specific gotchas: counter samples are not surfaced
420
+ (only flow samples), bytes/packets are statistical estimates that won't match SNMP
421
+ byte-for-byte, and VLAN information comes from `ExtendedSwitch` records only -- not
422
+ from 802.1Q tags inside the sampled header. See also
423
+ [Validation and Data Quality](https://learn.netdata.cloud/docs/network-flows/validation)
424
+ and the sFlow section of [Anti-patterns](https://learn.netdata.cloud/docs/network-flows/anti-patterns).
425
+ alerts: []
426
+ metrics:
427
+ folding:
428
+ title: Metrics
429
+ enabled: false
430
+ description: |
431
+ Network flow data is stored as journal records, not as traditional metrics.
432
+ Use the "Network Flows" tab in the Netdata dashboard to query and visualize flow data.
433
+ For the full list of fields and the per-protocol availability matrix, see the
434
+ [Field Reference](https://learn.netdata.cloud/docs/network-flows/field-reference).
435
+ sFlow byte counts are statistical estimates (sampled packets multiplied by sampling rate);
436
+ they will not reconcile byte-for-byte with SNMP interface counters.
437
+ availability: []
438
+ scopes: []
439
+
440
+ # =====================================================================
441
+ # IP Intelligence: GeoIP / ASN data sources used to enrich flow records
442
+ # =====================================================================
443
+
444
+ - meta:
445
+ plugin_name: netflow-plugin
446
+ module_name: dbip
447
+ monitored_instance:
448
+ name: DB-IP IP Intelligence
449
+ link: https://db-ip.com/
450
+ categories:
451
+ - flows.ip-intelligence
452
+ icon_filename: network-wired.svg
453
+ keywords:
454
+ - geoip
455
+ - asn
456
+ - dbip
457
+ - db-ip
458
+ - mmdb
459
+ - ip intelligence
460
+ - flow enrichment
461
+ related_resources:
462
+ integrations:
463
+ list:
464
+ - plugin_name: netflow-plugin
465
+ module_name: maxmind
466
+ - plugin_name: netflow-plugin
467
+ module_name: iptoasn
468
+ - plugin_name: netflow-plugin
469
+ module_name: custom-mmdb
470
+ info_provided_to_referring_integrations:
471
+ description: ""
472
+ overview:
473
+ data_collection:
474
+ metrics_description: |
475
+ DB-IP is the **default** IP intelligence source for the Netdata netflow plugin. Its
476
+ MMDB-format databases are bundled with native packages (DEB, RPM) under
477
+ `/usr/share/netdata/topology-ip-intel/`. Refreshing pulls newer data from
478
+ `download.db-ip.com` via the bundled `topology-ip-intel-downloader`.
479
+
480
+ Populates `SRC_COUNTRY`, `DST_COUNTRY`, `SRC_GEO_STATE`, `DST_GEO_STATE`,
481
+ `SRC_GEO_CITY`, `DST_GEO_CITY`, `SRC_GEO_LATITUDE`, `DST_GEO_LATITUDE`,
482
+ `SRC_GEO_LONGITUDE`, `DST_GEO_LONGITUDE`, plus the AS-number and AS-name fields
483
+ when included in the resolution chain.
484
+
485
+ For the full IP-intelligence concept (MMDB format, lookup priority, internal-IP
486
+ handling, hot reload semantics), see
487
+ [IP Intelligence](https://learn.netdata.cloud/docs/network-flows/enrichment/ip-intelligence).
488
+ method_description: |
489
+ Files are read on plugin start and reloaded automatically every 30 seconds when
490
+ their mtime or size changes. Lookups happen in-process; there is no per-flow network
491
+ call. Auto-detection scans `${NETDATA_CACHE_DIR}/topology-ip-intel/` first, falling
492
+ back to the stock copy under `${NETDATA_STOCK_DATA_DIR}/topology-ip-intel/`.
493
+ supported_platforms:
494
+ include:
495
+ - Linux
496
+ exclude: []
497
+ multi_instance: false
498
+ additional_permissions:
499
+ description: ""
500
+ default_behavior:
501
+ auto_detection:
502
+ description: "Native packages ship the stock DB-IP MMDB files; the plugin auto-detects them at startup. No configuration required for the default install."
503
+ limits:
504
+ description: ""
505
+ performance_impact:
506
+ description: ""
507
+ setup:
508
+ prerequisites:
509
+ list:
510
+ - title: DB-IP MMDB files
511
+ description: |
512
+ Ships with native packages. For source builds, run the bundled downloader once
513
+ to populate `/var/cache/netdata/topology-ip-intel/`:
514
+
515
+ ```bash
516
+ sudo /usr/sbin/topology-ip-intel-downloader
517
+ ```
518
+
519
+ Subsequent refreshes (e.g., monthly cron) re-fetch from db-ip.com.
520
+ configuration:
521
+ file:
522
+ name: netflow.yaml
523
+ options:
524
+ description: |
525
+ Configure DB-IP under `enrichment.geoip` in `netflow.yaml`. Empty `asn_database`
526
+ and `geo_database` enable auto-detection.
527
+ folding:
528
+ title: Config options
529
+ enabled: true
530
+ list:
531
+ - name: enrichment.geoip.asn_database
532
+ description: List of MMDB paths providing AS data. Empty = auto-detect under cache/stock dirs.
533
+ default_value: "[] (auto-detect)"
534
+ required: false
535
+ - name: enrichment.geoip.geo_database
536
+ description: List of MMDB paths providing geo data. Empty = auto-detect.
537
+ default_value: "[] (auto-detect)"
538
+ required: false
539
+ - name: enrichment.geoip.optional
540
+ description: When true, missing or unreadable MMDBs are warnings, not fatal. Auto-detected files default to optional.
541
+ default_value: "false (true when auto-detected)"
542
+ required: false
543
+ examples:
544
+ folding:
545
+ title: Config
546
+ enabled: true
547
+ list:
548
+ - name: Default (auto-detect stock files)
549
+ folding:
550
+ enabled: false
551
+ description: Native package install. No explicit configuration; the plugin finds the stock or cache copy automatically.
552
+ config: |
553
+ enrichment:
554
+ geoip:
555
+ asn_database: []
556
+ geo_database: []
557
+ optional: true
558
+ - name: Explicit DB-IP paths
559
+ folding:
560
+ enabled: true
561
+ description: Override auto-detection by pointing to specific DB-IP MMDBs (for example, after running the downloader to a non-standard location).
562
+ config: |
563
+ enrichment:
564
+ geoip:
565
+ asn_database:
566
+ - /var/cache/netdata/topology-ip-intel/topology-ip-asn.mmdb
567
+ geo_database:
568
+ - /var/cache/netdata/topology-ip-intel/topology-ip-geo.mmdb
569
+ optional: false
570
+ troubleshooting:
571
+ problems:
572
+ list:
573
+ - name: Internal IPs appearing in random countries
574
+ description: |
575
+ GeoIP databases have no entry for RFC 1918 / private space. The stock DB-IP
576
+ build tags private ranges so `*_AS_NAME` renders as "AS0 Private IP Address Space"
577
+ with empty country. With third-party MMDBs, results may vary. Declare your
578
+ internal CIDRs under `enrichment.networks` to override -- see
579
+ [Static metadata](https://learn.netdata.cloud/docs/network-flows/enrichment/static-metadata).
580
+ - name: Stale databases
581
+ description: |
582
+ The plugin does not alert on staleness. Check file mtime: `ls -la /var/cache/netdata/topology-ip-intel/`.
583
+ Schedule a weekly cron of `topology-ip-intel-downloader` to keep data fresh.
584
+ alerts: []
585
+ metrics:
586
+ folding:
587
+ title: Metrics
588
+ enabled: false
589
+ description: |
590
+ IP intelligence enriches existing flow records; it does not produce metrics of its own.
591
+ Verify enrichment is working by querying `SRC_COUNTRY` / `DST_COUNTRY` on the
592
+ Network Flows tab and confirming non-empty values for public IPs.
593
+ availability: []
594
+ scopes: []
595
+
596
+ - meta:
597
+ plugin_name: netflow-plugin
598
+ module_name: maxmind
599
+ monitored_instance:
600
+ name: MaxMind GeoIP / GeoLite2
601
+ link: https://www.maxmind.com/
602
+ categories:
603
+ - flows.ip-intelligence
604
+ icon_filename: network-wired.svg
605
+ keywords:
606
+ - maxmind
607
+ - geoip2
608
+ - geolite2
609
+ - geoip
610
+ - asn
611
+ - mmdb
612
+ - ip intelligence
613
+ related_resources:
614
+ integrations:
615
+ list:
616
+ - plugin_name: netflow-plugin
617
+ module_name: dbip
618
+ - plugin_name: netflow-plugin
619
+ module_name: iptoasn
620
+ - plugin_name: netflow-plugin
621
+ module_name: custom-mmdb
622
+ info_provided_to_referring_integrations:
623
+ description: ""
624
+ overview:
625
+ data_collection:
626
+ metrics_description: |
627
+ MaxMind GeoIP2 (commercial) and GeoLite2 (free tier with license key) MMDB databases
628
+ are read directly by the netflow plugin. The plugin uses any MMDB-format file that
629
+ exposes the standard schema -- it is not tied to MaxMind specifically, but MaxMind
630
+ is the canonical source and the format originator.
631
+
632
+ Populates the same `SRC_COUNTRY`, `*_GEO_*`, and AS-name fields as DB-IP. Use this
633
+ integration when you have a MaxMind license and prefer their data over the bundled
634
+ DB-IP defaults.
635
+
636
+ For the full IP-intelligence concept, see
637
+ [IP Intelligence](https://learn.netdata.cloud/docs/network-flows/enrichment/ip-intelligence).
638
+ method_description: |
639
+ You download the MaxMind MMDB files yourself (via `geoipupdate` or manual download),
640
+ then point the plugin at their paths in `netflow.yaml`. The plugin reloads on file
641
+ change every 30 seconds.
642
+ supported_platforms:
643
+ include:
644
+ - Linux
645
+ exclude: []
646
+ multi_instance: false
647
+ additional_permissions:
648
+ description: ""
649
+ default_behavior:
650
+ auto_detection:
651
+ description: "Not auto-detected. You must configure the database paths explicitly."
652
+ limits:
653
+ description: ""
654
+ performance_impact:
655
+ description: ""
656
+ setup:
657
+ prerequisites:
658
+ list:
659
+ - title: MaxMind license + downloaded MMDBs
660
+ description: |
661
+ For GeoLite2 (free): create a MaxMind account, generate a license key, install
662
+ `geoipupdate`, and configure it to fetch `GeoLite2-City.mmdb` and
663
+ `GeoLite2-ASN.mmdb`. For GeoIP2 (paid): obtain a subscription and use the same
664
+ `geoipupdate` mechanism with your paid license key.
665
+ configuration:
666
+ file:
667
+ name: netflow.yaml
668
+ options:
669
+ description: |
670
+ Override the default DB-IP auto-detection by pointing `asn_database` and `geo_database`
671
+ at your MaxMind MMDB files.
672
+ folding:
673
+ title: Config options
674
+ enabled: true
675
+ list:
676
+ - name: enrichment.geoip.asn_database
677
+ description: Paths to MaxMind ASN MMDB files (typically GeoLite2-ASN.mmdb or GeoIP2-ISP.mmdb).
678
+ default_value: "[]"
679
+ required: true
680
+ - name: enrichment.geoip.geo_database
681
+ description: Paths to MaxMind geographic MMDB files (typically GeoLite2-City.mmdb or GeoIP2-City.mmdb).
682
+ default_value: "[]"
683
+ required: true
684
+ - name: enrichment.geoip.optional
685
+ description: When true, missing or unreadable MMDBs are warnings, not fatal at startup.
686
+ default_value: "false"
687
+ required: false
688
+ examples:
689
+ folding:
690
+ title: Config
691
+ enabled: true
692
+ list:
693
+ - name: GeoLite2 (free tier)
694
+ folding:
695
+ enabled: false
696
+ description: Standard `geoipupdate` install path. Free tier requires a license key.
697
+ config: |
698
+ enrichment:
699
+ geoip:
700
+ asn_database:
701
+ - /usr/share/GeoIP/GeoLite2-ASN.mmdb
702
+ geo_database:
703
+ - /usr/share/GeoIP/GeoLite2-City.mmdb
704
+ optional: false
705
+ - name: GeoIP2 (paid)
706
+ folding:
707
+ enabled: true
708
+ description: Commercial subscription. Higher accuracy, more frequent updates.
709
+ config: |
710
+ enrichment:
711
+ geoip:
712
+ asn_database:
713
+ - /usr/share/GeoIP/GeoIP2-ISP.mmdb
714
+ geo_database:
715
+ - /usr/share/GeoIP/GeoIP2-City.mmdb
716
+ optional: false
717
+ troubleshooting:
718
+ problems:
719
+ list:
720
+ - name: License key missing or expired
721
+ description: |
722
+ `geoipupdate` fails silently and the MMDB files become stale. Set up a working
723
+ `geoipupdate` cron and monitor its exit code.
724
+ - name: Schema differences between GeoLite2 and GeoIP2
725
+ description: |
726
+ Both share the standard MMDB structure but the `Anonymous IP`, `ISP`, and
727
+ `Connection Type` databases have GeoIP2-only fields the plugin does not read.
728
+ Use `City` for geographic enrichment and `ASN` (GeoLite2) or `ISP` (GeoIP2)
729
+ for AS data.
730
+ alerts: []
731
+ metrics:
732
+ folding:
733
+ title: Metrics
734
+ enabled: false
735
+ description: |
736
+ Enriches flow records; produces no metrics of its own. Verify on the Network Flows
737
+ tab via `SRC_COUNTRY`, `DST_COUNTRY`, and `*_AS_NAME` columns.
738
+ availability: []
739
+ scopes: []
740
+
741
+ - meta:
742
+ plugin_name: netflow-plugin
743
+ module_name: iptoasn
744
+ monitored_instance:
745
+ name: IPtoASN
746
+ link: https://iptoasn.com/
747
+ categories:
748
+ - flows.ip-intelligence
749
+ icon_filename: network-wired.svg
750
+ keywords:
751
+ - iptoasn
752
+ - asn
753
+ - bgp
754
+ - public asn
755
+ - ip intelligence
756
+ related_resources:
757
+ integrations:
758
+ list:
759
+ - plugin_name: netflow-plugin
760
+ module_name: dbip
761
+ - plugin_name: netflow-plugin
762
+ module_name: maxmind
763
+ - plugin_name: netflow-plugin
764
+ module_name: custom-mmdb
765
+ info_provided_to_referring_integrations:
766
+ description: ""
767
+ overview:
768
+ data_collection:
769
+ metrics_description: |
770
+ [IPtoASN](https://iptoasn.com/) is a free public IP-to-ASN database derived from
771
+ BGP RIB snapshots. Daily updates, no license required. Use it as a free, open
772
+ alternative to MaxMind ASN data when license cost or terms matter.
773
+
774
+ IPtoASN provides ASN data only -- no geographic data. Pair with DB-IP, MaxMind,
775
+ or another geo source for country/city enrichment.
776
+
777
+ For the full IP-intelligence concept, see
778
+ [IP Intelligence](https://learn.netdata.cloud/docs/network-flows/enrichment/ip-intelligence).
779
+ method_description: |
780
+ The bundled `topology-ip-intel-downloader` supports IPtoASN as an ASN provider,
781
+ fetching the latest TSV and converting it to MMDB format the plugin can read.
782
+ Configure the downloader to use IPtoASN with `--asn iptoasn:combined`.
783
+ supported_platforms:
784
+ include:
785
+ - Linux
786
+ exclude: []
787
+ multi_instance: false
788
+ additional_permissions:
789
+ description: ""
790
+ default_behavior:
791
+ auto_detection:
792
+ description: "Not auto-detected as the default ASN source -- the plugin auto-detects DB-IP. To use IPtoASN as ASN, run the downloader explicitly."
793
+ limits:
794
+ description: ""
795
+ performance_impact:
796
+ description: ""
797
+ setup:
798
+ prerequisites:
799
+ list:
800
+ - title: Run the downloader with IPtoASN as ASN source
801
+ description: |
802
+ IPtoASN is a TSV file. The bundled downloader knows how to fetch and convert
803
+ it to MMDB:
804
+
805
+ ```bash
806
+ sudo /usr/sbin/topology-ip-intel-downloader \
807
+ --asn iptoasn:combined \
808
+ --geo dbip:city-lite
809
+ ```
810
+
811
+ This produces ASN data from IPtoASN and geographic data from DB-IP. Schedule
812
+ this in cron (daily for ASN; weekly is enough for geo).
813
+ configuration:
814
+ file:
815
+ name: netflow.yaml
816
+ options:
817
+ description: |
818
+ Once the downloader has produced MMDB files in the cache directory, the plugin
819
+ auto-detects them. To pin the path explicitly, set `enrichment.geoip.asn_database`.
820
+ folding:
821
+ title: Config options
822
+ enabled: true
823
+ list:
824
+ - name: enrichment.geoip.asn_database
825
+ description: Path to the IPtoASN-derived MMDB. Empty = auto-detect from cache directory.
826
+ default_value: "[]"
827
+ required: false
828
+ examples:
829
+ folding:
830
+ title: Config
831
+ enabled: true
832
+ list:
833
+ - name: After running the downloader with IPtoASN
834
+ folding:
835
+ enabled: false
836
+ description: Auto-detection picks up the cache copy.
837
+ config: |
838
+ enrichment:
839
+ geoip:
840
+ asn_database: []
841
+ geo_database: []
842
+ optional: true
843
+ troubleshooting:
844
+ problems:
845
+ list:
846
+ - name: ASN names not appearing
847
+ description: |
848
+ IPtoASN's data does not always carry a human-readable ASN organization name.
849
+ The plugin renders `AS{n}` (without a name) for those records. This is data-source-
850
+ level, not a plugin issue. Use MaxMind GeoLite2-ASN if you need richer name data.
851
+ - name: Outdated ASN attribution
852
+ description: |
853
+ IPtoASN is rebuilt daily from BGP. Cron the downloader at least daily to keep
854
+ ASN attribution current with real-world routing changes.
855
+ alerts: []
856
+ metrics:
857
+ folding:
858
+ title: Metrics
859
+ enabled: false
860
+ description: |
861
+ Enriches flow records with AS numbers; provides no metrics of its own.
862
+ availability: []
863
+ scopes: []
864
+
865
+ - meta:
866
+ plugin_name: netflow-plugin
867
+ module_name: custom-mmdb
868
+ monitored_instance:
869
+ name: Custom MMDB Database
870
+ link: https://maxmind.github.io/MaxMind-DB/
871
+ categories:
872
+ - flows.ip-intelligence
873
+ icon_filename: network-wired.svg
874
+ keywords:
875
+ - mmdb
876
+ - custom database
877
+ - bring your own
878
+ - ipinfo
879
+ - ip intelligence
880
+ related_resources:
881
+ integrations:
882
+ list:
883
+ - plugin_name: netflow-plugin
884
+ module_name: dbip
885
+ - plugin_name: netflow-plugin
886
+ module_name: maxmind
887
+ - plugin_name: netflow-plugin
888
+ module_name: iptoasn
889
+ info_provided_to_referring_integrations:
890
+ description: ""
891
+ overview:
892
+ data_collection:
893
+ metrics_description: |
894
+ The plugin reads any MMDB file that conforms to the standard schema -- this catch-all
895
+ integration covers IPInfo, custom-built internal MMDBs, vendor-specific feeds, or
896
+ any provider that publishes MMDB data.
897
+
898
+ The plugin reads `country.iso_code`, `city.names.en`, `subdivisions[].iso_code`,
899
+ `location.latitude`, `location.longitude`, `autonomous_system_number`, and
900
+ `autonomous_system_organization`. Vendor-specific extra fields are ignored.
901
+
902
+ For the full IP-intelligence concept, see
903
+ [IP Intelligence](https://learn.netdata.cloud/docs/network-flows/enrichment/ip-intelligence).
904
+ method_description: |
905
+ You produce or download an MMDB file. Place it on the agent host. Point the
906
+ plugin at it via `netflow.yaml`. The plugin reloads on file change every 30
907
+ seconds.
908
+ supported_platforms:
909
+ include:
910
+ - Linux
911
+ exclude: []
912
+ multi_instance: false
913
+ additional_permissions:
914
+ description: ""
915
+ default_behavior:
916
+ auto_detection:
917
+ description: "Not auto-detected. You must configure paths explicitly."
918
+ limits:
919
+ description: ""
920
+ performance_impact:
921
+ description: ""
922
+ setup:
923
+ prerequisites:
924
+ list:
925
+ - title: A standards-compliant MMDB file
926
+ description: |
927
+ The MMDB file must use the [standard MMDB schema](https://maxmind.github.io/MaxMind-DB/).
928
+ Validate with `mmdblookup` from the `libmaxminddb-tools` package before deploying.
929
+
930
+ Common sources: IPInfo (`ipinfo.io`), custom internal builds via the `mmdbwriter`
931
+ Go tool, or vendor-specific feeds.
932
+ configuration:
933
+ file:
934
+ name: netflow.yaml
935
+ options:
936
+ description: |
937
+ Point `enrichment.geoip.asn_database` and/or `enrichment.geoip.geo_database` at
938
+ your MMDB file paths.
939
+ folding:
940
+ title: Config options
941
+ enabled: true
942
+ list:
943
+ - name: enrichment.geoip.asn_database
944
+ description: List of MMDB paths providing AS data. Multiple files allowed; later entries override on overlap.
945
+ default_value: "[]"
946
+ required: false
947
+ - name: enrichment.geoip.geo_database
948
+ description: List of MMDB paths providing geographic data.
949
+ default_value: "[]"
950
+ required: false
951
+ - name: enrichment.geoip.optional
952
+ description: When true, missing files become startup warnings instead of fatal errors.
953
+ default_value: "false"
954
+ required: false
955
+ examples:
956
+ folding:
957
+ title: Config
958
+ enabled: true
959
+ list:
960
+ - name: IPInfo MMDB
961
+ folding:
962
+ enabled: false
963
+ description: Using IPInfo's MMDB feed (subscription required).
964
+ config: |
965
+ enrichment:
966
+ geoip:
967
+ asn_database:
968
+ - /opt/mmdb/ipinfo-asn.mmdb
969
+ geo_database:
970
+ - /opt/mmdb/ipinfo-city.mmdb
971
+ optional: false
972
+ - name: Internal custom MMDB
973
+ folding:
974
+ enabled: true
975
+ description: Built in-house with `mmdbwriter`. Combines public BGP data with internal CIDR labels.
976
+ config: |
977
+ enrichment:
978
+ geoip:
979
+ asn_database:
980
+ - /etc/netdata/internal-asn.mmdb
981
+ geo_database:
982
+ - /etc/netdata/internal-geo.mmdb
983
+ optional: false
984
+ troubleshooting:
985
+ problems:
986
+ list:
987
+ - name: Lookups silently return empty
988
+ description: |
989
+ The MMDB schema is non-standard or the IP types don't match (some custom builds
990
+ use `string` instead of `array` for ASN). Validate with `mmdblookup -f file.mmdb -i 8.8.8.8`
991
+ and confirm the standard fields are present.
992
+ - name: Plugin fails to start with optional=false
993
+ description: |
994
+ File missing or unreadable at the configured path. Check permissions; the netdata
995
+ user must be able to read the file.
996
+ alerts: []
997
+ metrics:
998
+ folding:
999
+ title: Metrics
1000
+ enabled: false
1001
+ description: |
1002
+ Enriches flow records; produces no metrics of its own.
1003
+ availability: []
1004
+ scopes: []
1005
+
1006
+ # =====================================================================
1007
+ # BGP Routing: live route feeds (BMP, BioRIS) used to enrich flow records
1008
+ # =====================================================================
1009
+
1010
+ - meta:
1011
+ plugin_name: netflow-plugin
1012
+ module_name: bmp
1013
+ monitored_instance:
1014
+ name: BMP (BGP Monitoring Protocol)
1015
+ link: https://www.rfc-editor.org/rfc/rfc7854
1016
+ categories:
1017
+ - flows.bgp-routing
1018
+ icon_filename: network-wired.svg
1019
+ keywords:
1020
+ - bmp
1021
+ - bgp
1022
+ - rfc 7854
1023
+ - route monitoring
1024
+ - cisco
1025
+ - juniper
1026
+ - frr
1027
+ related_resources:
1028
+ integrations:
1029
+ list:
1030
+ - plugin_name: netflow-plugin
1031
+ module_name: bioris
1032
+ info_provided_to_referring_integrations:
1033
+ description: ""
1034
+ overview:
1035
+ data_collection:
1036
+ metrics_description: |
1037
+ BMP (BGP Monitoring Protocol, RFC 7854) lets a router push its BGP route updates
1038
+ to a passive collector. With this integration enabled, Netdata acts as that
1039
+ collector -- it listens for BMP TCP connections from your routers, parses the BGP
1040
+ UPDATE messages, and builds an in-memory routing table that flow enrichment then
1041
+ reads from.
1042
+
1043
+ The result: every flow gets accurate AS numbers, AS paths, communities, and
1044
+ next-hop information from your real-time BGP table -- not from a stale GeoIP
1045
+ database or from whatever the exporter happened to send in the flow record.
1046
+
1047
+ For the full BGP-routing concept (shared trie with BioRIS, withdrawal handling,
1048
+ per-vendor caveats, integration test gap), see
1049
+ [BGP Routing](https://learn.netdata.cloud/docs/network-flows/enrichment/bgp-routing).
1050
+ method_description: |
1051
+ The plugin runs a TCP listener on `0.0.0.0:10179` (Akvorado convention -- not the
1052
+ IANA-registered port 7854). Routers initiate BMP sessions to it. The plugin
1053
+ processes Initiation, Termination, RouteMonitoring (BGP UPDATE messages), and
1054
+ PeerDownNotification messages. NLRI types: IPv4/IPv6 unicast, MPLS-labelled, VPNv4,
1055
+ VPNv6, EVPN IP-prefix.
1056
+
1057
+ BMP and BioRIS share a single in-memory routing trie. Memory grows with the size
1058
+ of the BGP table; a full IPv4+IPv6 feed is roughly 1.2M prefixes per peer.
1059
+ supported_platforms:
1060
+ include:
1061
+ - Linux
1062
+ exclude: []
1063
+ multi_instance: false
1064
+ additional_permissions:
1065
+ description: ""
1066
+ default_behavior:
1067
+ auto_detection:
1068
+ description: "Disabled by default. Set enrichment.routing_dynamic.bmp.enabled to true and configure your routers."
1069
+ limits:
1070
+ description: ""
1071
+ performance_impact:
1072
+ description: ""
1073
+ setup:
1074
+ prerequisites:
1075
+ list:
1076
+ - title: BMP-capable routers
1077
+ description: |
1078
+ Modern Cisco IOS-XR, Juniper JunOS, Arista EOS, and FRR all support BMP v3.
1079
+ The plugin parses RFC 7854 BMP v3 specifically. Older versions (v1, v2) are
1080
+ not supported and will fail to parse.
1081
+ - title: TCP reachability between routers and the agent
1082
+ description: |
1083
+ Routers initiate the connection -- the plugin is a passive listener. Allow
1084
+ inbound TCP on the configured port (default 10179) from each BMP-speaking
1085
+ router to the agent.
1086
+ - title: No TLS, no authentication
1087
+ description: |
1088
+ The listener accepts plain TCP only. Restrict access at the firewall and on a
1089
+ dedicated management network -- do not expose 10179 to the public internet.
1090
+ configuration:
1091
+ file:
1092
+ name: netflow.yaml
1093
+ options:
1094
+ description: |
1095
+ All BMP options live under `enrichment.routing_dynamic.bmp` in `netflow.yaml`.
1096
+ folding:
1097
+ title: Config options
1098
+ enabled: true
1099
+ list:
1100
+ - name: enabled
1101
+ description: Master switch. Set to true to start the listener.
1102
+ default_value: "false"
1103
+ required: false
1104
+ - name: listen
1105
+ description: TCP bind address (host:port).
1106
+ default_value: "0.0.0.0:10179"
1107
+ required: false
1108
+ - name: keep
1109
+ description: Grace window after a BMP disconnect before purging that session's routes.
1110
+ default_value: "5m"
1111
+ required: false
1112
+ - name: max_consecutive_decode_errors
1113
+ description: Close the session after N consecutive decode errors.
1114
+ default_value: "8"
1115
+ required: false
1116
+ - name: receive_buffer
1117
+ description: Optional SO_RCVBUF per connection in bytes (0 = OS default).
1118
+ default_value: "0"
1119
+ required: false
1120
+ - name: collect_asns
1121
+ description: When false, AS numbers from BMP are forced to 0.
1122
+ default_value: "true"
1123
+ required: false
1124
+ - name: collect_as_paths
1125
+ description: When false, AS paths are dropped before storage.
1126
+ default_value: "true"
1127
+ required: false
1128
+ - name: collect_communities
1129
+ description: When false, communities and large communities are dropped.
1130
+ default_value: "true"
1131
+ required: false
1132
+ - name: rds
1133
+ description: |
1134
+ Whitelist of accepted Route Distinguishers. Empty = accept all.
1135
+ Formats: "0", "ASN:idx", "IPv4:idx", or full text.
1136
+ default_value: "[]"
1137
+ required: false
1138
+ examples:
1139
+ folding:
1140
+ title: Config
1141
+ enabled: true
1142
+ list:
1143
+ - name: Enable BMP listener
1144
+ folding:
1145
+ enabled: false
1146
+ description: Start the listener on the default port.
1147
+ config: |
1148
+ enrichment:
1149
+ routing_dynamic:
1150
+ bmp:
1151
+ enabled: true
1152
+ listen: "0.0.0.0:10179"
1153
+ keep: 5m
1154
+ - name: Cisco IOS-XR router config
1155
+ folding:
1156
+ enabled: true
1157
+ description: Vendor-side config to send BMP to Netdata. The bmp server block is global, not under router bgp.
1158
+ config: |
1159
+ bmp server 1
1160
+ host 10.0.0.10 port 10179
1161
+ description "Netdata BMP collector"
1162
+ initial-delay 5
1163
+ stats-reporting-period 60
1164
+ initial-refresh delay 30 spread 2
1165
+ !
1166
+ router bgp 65000
1167
+ neighbor 192.0.2.1
1168
+ bmp-activate server 1
1169
+ - name: Juniper JunOS router config
1170
+ folding:
1171
+ enabled: true
1172
+ description: Recommended local-address and statistics-timeout for production.
1173
+ config: |
1174
+ set routing-options bmp station netdata station-address 10.0.0.10
1175
+ set routing-options bmp station netdata station-port 10179
1176
+ set routing-options bmp station netdata connection-mode active
1177
+ set routing-options bmp station netdata local-address 10.0.0.1
1178
+ set routing-options bmp station netdata statistics-timeout 60
1179
+ set routing-options bmp station netdata route-monitoring pre-policy
1180
+ - name: FRR (bgpd) router config
1181
+ folding:
1182
+ enabled: true
1183
+ description: |
1184
+ Critical -- BMP is a runtime module in FRR. Without "-M bmp" in
1185
+ /etc/frr/daemons (bgpd_options), every BMP command silently fails.
1186
+ config: |
1187
+ # /etc/frr/daemons:
1188
+ # bgpd_options=" -A 127.0.0.1 -M bmp"
1189
+ router bgp 65000
1190
+ bmp targets netdata
1191
+ bmp connect 10.0.0.10 port 10179 min-retry 5000 max-retry 60000
1192
+ bmp stats interval 60000
1193
+ bmp monitor ipv4 unicast pre-policy
1194
+ bmp monitor ipv6 unicast pre-policy
1195
+ exit
1196
+ troubleshooting:
1197
+ problems:
1198
+ list:
1199
+ - name: Listener not receiving BMP sessions
1200
+ description: |
1201
+ Check `show bmp` (Cisco) / `show bmp connections` (Juniper) / `show bmp targets` (FRR)
1202
+ to confirm the router has dialed in. The plugin does not initiate -- it listens.
1203
+ Firewall: allow inbound TCP on 10179.
1204
+ - name: Memory growth
1205
+ description: |
1206
+ A full BGP feed adds ~1.2M prefixes per peer permanently. There is no time-based
1207
+ eviction. Plan capacity accordingly. After a router disconnect, the routes
1208
+ for that session are kept for `keep` (default 5 min) before purging.
1209
+ - name: Integration-test gap
1210
+ description: |
1211
+ BMP message parsing has unit tests. The TCP listener path, framed decode loop,
1212
+ trie apply, and per-router cleanup are NOT integration-tested. Validate against
1213
+ your specific router firmware before depending on this for capacity / security
1214
+ decisions.
1215
+ alerts: []
1216
+ metrics:
1217
+ folding:
1218
+ title: Metrics
1219
+ enabled: false
1220
+ description: |
1221
+ Enriches flow records with `SRC_AS`, `DST_AS`, `SRC_MASK`, `DST_MASK`, `NEXT_HOP`,
1222
+ `DST_AS_PATH`, `DST_COMMUNITIES`, `DST_LARGE_COMMUNITIES`. Source-side AS path and
1223
+ communities are not surfaced. AS names come from the GeoIP/ASN MMDB, not from BMP.
1224
+ Verify by querying the AS-path columns on the Network Flows tab.
1225
+ availability: []
1226
+ scopes: []
1227
+
1228
+ - meta:
1229
+ plugin_name: netflow-plugin
1230
+ module_name: bioris
1231
+ monitored_instance:
1232
+ name: bio-rd / RIPE RIS
1233
+ link: https://github.com/bio-routing/bio-rd
1234
+ categories:
1235
+ - flows.bgp-routing
1236
+ icon_filename: network-wired.svg
1237
+ keywords:
1238
+ - bioris
1239
+ - bio-rd
1240
+ - ripe ris
1241
+ - bgp
1242
+ - grpc
1243
+ - route information service
1244
+ related_resources:
1245
+ integrations:
1246
+ list:
1247
+ - plugin_name: netflow-plugin
1248
+ module_name: bmp
1249
+ info_provided_to_referring_integrations:
1250
+ description: ""
1251
+ overview:
1252
+ data_collection:
1253
+ metrics_description: |
1254
+ BioRIS lets Netdata consume BGP routing data from a [bio-rd](https://github.com/bio-routing/bio-rd)
1255
+ `cmd/ris/` daemon over gRPC. bio-rd is a Go-based BGP daemon that can peer with
1256
+ [RIPE RIS](https://www.ripe.net/analyse/internet-measurements/routing-information-service-ris)
1257
+ Route Collectors -- or any BGP / BMP source you have access to -- and expose the
1258
+ resulting RIB through a gRPC interface. Netdata is a client of that interface.
1259
+
1260
+ Use this when you want a third-party view of the BGP routing table (e.g., RIPE
1261
+ RIS's view) without running a BGP session yourself or deploying BMP across your
1262
+ network.
1263
+
1264
+ For the full BGP-routing concept and how BMP and BioRIS share the same trie, see
1265
+ [BGP Routing](https://learn.netdata.cloud/docs/network-flows/enrichment/bgp-routing).
1266
+ method_description: |
1267
+ The plugin connects to one or more bio-rd `ris` gRPC endpoints. It runs three RPCs:
1268
+ `GetRouters` to discover what's available, `DumpRIB` to do baseline reconciliation,
1269
+ and `ObserveRIB` for incremental updates. Multiple instances are additive (not
1270
+ failover); they all merge into the shared in-memory trie.
1271
+ supported_platforms:
1272
+ include:
1273
+ - Linux
1274
+ exclude: []
1275
+ multi_instance: false
1276
+ additional_permissions:
1277
+ description: ""
1278
+ default_behavior:
1279
+ auto_detection:
1280
+ description: "Disabled by default. Set enrichment.routing_dynamic.bioris.enabled to true and provide at least one ris_instances entry."
1281
+ limits:
1282
+ description: ""
1283
+ performance_impact:
1284
+ description: ""
1285
+ setup:
1286
+ prerequisites:
1287
+ list:
1288
+ - title: A running bio-rd 'ris' daemon
1289
+ description: |
1290
+ bio-rd is a separate project. The plugin only consumes its gRPC interface; it
1291
+ does not bundle bio-rd. You install it yourself:
1292
+
1293
+ ```bash
1294
+ # Install Go (>=1.20), then:
1295
+ git clone https://github.com/bio-routing/bio-rd.git
1296
+ cd bio-rd/cmd/ris
1297
+ go build -o /usr/local/bin/ris .
1298
+ ```
1299
+
1300
+ Configure `ris` to peer with one or more BGP / BMP sources (RIPE RIS Route
1301
+ Collectors, your own peers, etc.). Refer to the bio-rd documentation for the
1302
+ peering setup -- this is bio-rd's configuration, not Netdata's.
1303
+
1304
+ Run the daemon with a gRPC port:
1305
+ `/usr/local/bin/ris --grpc_port 50051 --config.file /etc/bio-rd.yml`
1306
+ - title: Network reachability + no auth
1307
+ description: |
1308
+ The gRPC connection is plain HTTP/2 by default (or TLS with system-CA when
1309
+ `grpc_secure: true`). There is no authentication. Restrict access at the
1310
+ firewall, or run bio-rd on the same host as the agent and bind it to localhost.
1311
+ configuration:
1312
+ file:
1313
+ name: netflow.yaml
1314
+ options:
1315
+ description: |
1316
+ BioRIS options live under `enrichment.routing_dynamic.bioris`.
1317
+ folding:
1318
+ title: Config options
1319
+ enabled: true
1320
+ list:
1321
+ - name: enabled
1322
+ description: Master switch.
1323
+ default_value: "false"
1324
+ required: false
1325
+ - name: timeout
1326
+ description: Connect + per-RPC timeout. Default is aggressive for public RIS over the internet -- raise if you see "deadline exceeded".
1327
+ default_value: "200ms"
1328
+ required: false
1329
+ - name: refresh
1330
+ description: How often to re-dump every router's RIB from scratch.
1331
+ default_value: "30m"
1332
+ required: false
1333
+ - name: refresh_timeout
1334
+ description: Per-DumpRIB request timeout and per-message stream timeout.
1335
+ default_value: "10s"
1336
+ required: false
1337
+ - name: ris_instances
1338
+ description: |
1339
+ List of bio-rd endpoints. Each: grpc_addr, grpc_secure, vrf, vrf_id.
1340
+ Multiple instances are additive (not failover) -- routes from all merge.
1341
+ default_value: "[]"
1342
+ required: true
1343
+ examples:
1344
+ folding:
1345
+ title: Config
1346
+ enabled: true
1347
+ list:
1348
+ - name: Local bio-rd
1349
+ folding:
1350
+ enabled: false
1351
+ description: bio-rd running on the same host, plain gRPC.
1352
+ config: |
1353
+ enrichment:
1354
+ routing_dynamic:
1355
+ bioris:
1356
+ enabled: true
1357
+ timeout: 2s
1358
+ refresh: 30m
1359
+ refresh_timeout: 30s
1360
+ ris_instances:
1361
+ - grpc_addr: "127.0.0.1:50051"
1362
+ grpc_secure: false
1363
+ - name: Remote bio-rd over TLS
1364
+ folding:
1365
+ enabled: true
1366
+ description: Across a network, system CA bundle. No client cert / mTLS.
1367
+ config: |
1368
+ enrichment:
1369
+ routing_dynamic:
1370
+ bioris:
1371
+ enabled: true
1372
+ timeout: 5s
1373
+ ris_instances:
1374
+ - grpc_addr: "ris.example.internal:50051"
1375
+ grpc_secure: true
1376
+ vrf: "global"
1377
+ troubleshooting:
1378
+ problems:
1379
+ list:
1380
+ - name: Default 200ms timeout too aggressive
1381
+ description: |
1382
+ Over the public internet to RIPE RIS, you may need 2-5 seconds. If you see
1383
+ "deadline exceeded" errors in the journal, raise `timeout`.
1384
+ - name: Initial dump takes minutes for full feeds
1385
+ description: |
1386
+ A full IPv4+IPv6 RIB from a route collector is millions of prefixes. The first
1387
+ refresh takes time; subsequent observe streams are incremental.
1388
+ - name: Integration-test gap
1389
+ description: |
1390
+ proto and route conversion are unit-tested. The gRPC client path
1391
+ (connecting, consuming streams, retry/backoff) is NOT integration-tested.
1392
+ Validate against your specific bio-rd setup before relying on this for
1393
+ capacity / security decisions.
1394
+ alerts: []
1395
+ metrics:
1396
+ folding:
1397
+ title: Metrics
1398
+ enabled: false
1399
+ description: |
1400
+ Enriches flow records with the same fields as BMP (`SRC_AS`, `DST_AS`, masks,
1401
+ `NEXT_HOP`, `DST_AS_PATH`, `DST_COMMUNITIES`, `DST_LARGE_COMMUNITIES`). Both
1402
+ sources contribute to the same shared trie -- if both are enabled, lookups
1403
+ prefer the best-matching route across both.
1404
+ availability: []
1405
+ scopes: []
1406
+
1407
+ # =====================================================================
1408
+ # Network Identity: external feeds that label your network prefixes
1409
+ # =====================================================================
1410
+
1411
+ - meta:
1412
+ plugin_name: netflow-plugin
1413
+ module_name: aws-ip-ranges
1414
+ monitored_instance:
1415
+ name: AWS IP Ranges
1416
+ link: https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html
1417
+ categories:
1418
+ - flows.network-identity
1419
+ icon_filename: network-wired.svg
1420
+ keywords:
1421
+ - aws
1422
+ - amazon
1423
+ - cloud
1424
+ - ip ranges
1425
+ - vpc
1426
+ - ec2
1427
+ - prefix list
1428
+ related_resources:
1429
+ integrations:
1430
+ list:
1431
+ - plugin_name: netflow-plugin
1432
+ module_name: gcp-ip-ranges
1433
+ - plugin_name: netflow-plugin
1434
+ module_name: azure-ip-ranges
1435
+ - plugin_name: netflow-plugin
1436
+ module_name: netbox
1437
+ - plugin_name: netflow-plugin
1438
+ module_name: generic-ipam
1439
+ info_provided_to_referring_integrations:
1440
+ description: ""
1441
+ overview:
1442
+ data_collection:
1443
+ metrics_description: |
1444
+ AWS publishes a continuously updated JSON file listing every public IP prefix used
1445
+ by AWS services -- per region, per service. This integration fetches that file
1446
+ periodically, transforms it via a jq expression, and uses the result to label flow
1447
+ records destined to / from AWS with `*_NET_TENANT="amazon"` plus a per-region tag.
1448
+
1449
+ The result: traffic to/from AWS shows up clearly in dashboards as "amazon", with
1450
+ per-region and per-service breakdown if you customize the jq transform.
1451
+
1452
+ For the full network-identity concept (merge order, jq transform, TLS verification),
1453
+ see [Network Identity](https://learn.netdata.cloud/docs/network-flows/enrichment/network-identity).
1454
+ method_description: |
1455
+ The plugin issues a periodic GET to `https://ip-ranges.amazonaws.com/ip-ranges.json`,
1456
+ parses the JSON body, runs the configured jq transform via the [jaq](https://github.com/01mf02/jaq)
1457
+ library, and merges the resulting prefix-labeled rows into the network-attributes trie.
1458
+ supported_platforms:
1459
+ include:
1460
+ - Linux
1461
+ exclude: []
1462
+ multi_instance: true
1463
+ additional_permissions:
1464
+ description: ""
1465
+ default_behavior:
1466
+ auto_detection:
1467
+ description: "Disabled by default. Add an entry under enrichment.network_sources to enable."
1468
+ limits:
1469
+ description: ""
1470
+ performance_impact:
1471
+ description: ""
1472
+ setup:
1473
+ prerequisites:
1474
+ list:
1475
+ - title: Outbound HTTPS to AWS
1476
+ description: |
1477
+ The agent host must be able to reach `https://ip-ranges.amazonaws.com/ip-ranges.json`.
1478
+ No AWS credentials needed -- the file is public.
1479
+ configuration:
1480
+ file:
1481
+ name: netflow.yaml
1482
+ options:
1483
+ description: |
1484
+ Add a named entry under `enrichment.network_sources`. The `name` you choose appears
1485
+ in flow records via the `*_NET_TENANT` field (when your jq transform sets it).
1486
+ folding:
1487
+ title: Config options
1488
+ enabled: true
1489
+ list:
1490
+ - name: url
1491
+ description: AWS publishes the master file at this URL.
1492
+ default_value: "https://ip-ranges.amazonaws.com/ip-ranges.json"
1493
+ required: true
1494
+ - name: interval
1495
+ description: How often to fetch. AWS updates the file roughly every 15 minutes; daily is enough for most uses.
1496
+ default_value: "60s (loop floor)"
1497
+ required: false
1498
+ - name: timeout
1499
+ description: Per-request timeout.
1500
+ default_value: "60s"
1501
+ required: false
1502
+ - name: transform
1503
+ description: jq expression that converts the AWS response into objects with `prefix` and label fields.
1504
+ default_value: "."
1505
+ required: true
1506
+ examples:
1507
+ folding:
1508
+ title: Config
1509
+ enabled: true
1510
+ list:
1511
+ - name: Tag all AWS prefixes by region and service
1512
+ folding:
1513
+ enabled: false
1514
+ description: Sets tenant=amazon, region=<aws-region>, role=<service-name>.
1515
+ config: |
1516
+ enrichment:
1517
+ network_sources:
1518
+ aws:
1519
+ url: "https://ip-ranges.amazonaws.com/ip-ranges.json"
1520
+ interval: 24h
1521
+ timeout: 60s
1522
+ transform: |
1523
+ (.prefixes + .ipv6_prefixes)[] | {
1524
+ prefix: (.ip_prefix // .ipv6_prefix),
1525
+ tenant: "amazon",
1526
+ region: .region,
1527
+ role: (.service | ascii_downcase)
1528
+ }
1529
+ - name: AWS S3 only
1530
+ folding:
1531
+ enabled: true
1532
+ description: Filter to a single AWS service for narrower tagging.
1533
+ config: |
1534
+ enrichment:
1535
+ network_sources:
1536
+ aws-s3:
1537
+ url: "https://ip-ranges.amazonaws.com/ip-ranges.json"
1538
+ interval: 24h
1539
+ transform: |
1540
+ (.prefixes + .ipv6_prefixes)[]
1541
+ | select(.service == "S3")
1542
+ | {
1543
+ prefix: (.ip_prefix // .ipv6_prefix),
1544
+ tenant: "amazon",
1545
+ role: "s3",
1546
+ region: .region
1547
+ }
1548
+ troubleshooting:
1549
+ problems:
1550
+ list:
1551
+ - name: Empty result from the transform is treated as failure
1552
+ description: |
1553
+ If the jq filter happens to produce nothing (e.g., AWS responds with no prefixes),
1554
+ the source backs off as if it errored. Check the journal for `network-sources` warnings.
1555
+ - name: TLS verification cannot be disabled
1556
+ description: |
1557
+ `tls.skip_verify: true` is rejected by validation. Use `tls.ca_file` for
1558
+ custom-CA paths if needed.
1559
+ alerts: []
1560
+ metrics:
1561
+ folding:
1562
+ title: Metrics
1563
+ enabled: false
1564
+ description: |
1565
+ Tags flow records with `SRC_NET_TENANT`, `*_NET_REGION`, `*_NET_ROLE`, etc. when
1566
+ the source or destination IP matches an AWS prefix. Verify on the Network Flows
1567
+ tab via the `*_NET_*` columns.
1568
+ availability: []
1569
+ scopes: []
1570
+
1571
+ - meta:
1572
+ plugin_name: netflow-plugin
1573
+ module_name: gcp-ip-ranges
1574
+ monitored_instance:
1575
+ name: GCP IP Ranges
1576
+ link: https://cloud.google.com/compute/docs/faq#find_ip_range
1577
+ categories:
1578
+ - flows.network-identity
1579
+ icon_filename: network-wired.svg
1580
+ keywords:
1581
+ - gcp
1582
+ - google cloud
1583
+ - cloud
1584
+ - ip ranges
1585
+ - prefix list
1586
+ related_resources:
1587
+ integrations:
1588
+ list:
1589
+ - plugin_name: netflow-plugin
1590
+ module_name: aws-ip-ranges
1591
+ - plugin_name: netflow-plugin
1592
+ module_name: azure-ip-ranges
1593
+ - plugin_name: netflow-plugin
1594
+ module_name: netbox
1595
+ - plugin_name: netflow-plugin
1596
+ module_name: generic-ipam
1597
+ info_provided_to_referring_integrations:
1598
+ description: ""
1599
+ overview:
1600
+ data_collection:
1601
+ metrics_description: |
1602
+ Google Cloud publishes its public IP prefixes at `https://www.gstatic.com/ipranges/cloud.json`,
1603
+ updated periodically. This integration fetches the file and labels flow records
1604
+ to/from Google Cloud with `*_NET_TENANT="gcp"` plus per-scope and per-service tags.
1605
+
1606
+ For the full network-identity concept, see
1607
+ [Network Identity](https://learn.netdata.cloud/docs/network-flows/enrichment/network-identity).
1608
+ method_description: |
1609
+ Periodic HTTPS GET, jq transform, merge into network-attributes trie. Same mechanism
1610
+ as AWS IP Ranges, different URL and JSON shape.
1611
+ supported_platforms:
1612
+ include:
1613
+ - Linux
1614
+ exclude: []
1615
+ multi_instance: true
1616
+ additional_permissions:
1617
+ description: ""
1618
+ default_behavior:
1619
+ auto_detection:
1620
+ description: "Disabled by default. Add an entry under enrichment.network_sources to enable."
1621
+ limits:
1622
+ description: ""
1623
+ performance_impact:
1624
+ description: ""
1625
+ setup:
1626
+ prerequisites:
1627
+ list:
1628
+ - title: Outbound HTTPS to Google
1629
+ description: |
1630
+ The agent host must be able to reach `https://www.gstatic.com/ipranges/cloud.json`.
1631
+ No GCP credentials needed -- the file is public.
1632
+ configuration:
1633
+ file:
1634
+ name: netflow.yaml
1635
+ options:
1636
+ description: |
1637
+ Add a named entry under `enrichment.network_sources`.
1638
+ folding:
1639
+ title: Config options
1640
+ enabled: true
1641
+ list:
1642
+ - name: url
1643
+ description: GCP publishes the master file here.
1644
+ default_value: "https://www.gstatic.com/ipranges/cloud.json"
1645
+ required: true
1646
+ - name: transform
1647
+ description: jq expression mapping `prefixes[]` to `prefix` + label objects.
1648
+ default_value: "."
1649
+ required: true
1650
+ examples:
1651
+ folding:
1652
+ title: Config
1653
+ enabled: true
1654
+ list:
1655
+ - name: Tag all GCP prefixes by service and scope
1656
+ folding:
1657
+ enabled: false
1658
+ description: Sets tenant=gcp, role=<service>, region=<scope>.
1659
+ config: |
1660
+ enrichment:
1661
+ network_sources:
1662
+ gcp:
1663
+ url: "https://www.gstatic.com/ipranges/cloud.json"
1664
+ interval: 24h
1665
+ transform: |
1666
+ .prefixes[] | {
1667
+ prefix: (.ipv4Prefix // .ipv6Prefix),
1668
+ tenant: "gcp",
1669
+ role: .service,
1670
+ region: .scope
1671
+ }
1672
+ troubleshooting:
1673
+ problems:
1674
+ list:
1675
+ - name: Customer-only ranges
1676
+ description: |
1677
+ GCP also publishes a `goog.json` file (broader: includes Google services beyond
1678
+ cloud). Use `cloud.json` for compute IP attribution; `goog.json` if you also
1679
+ want to tag Google's other services.
1680
+ alerts: []
1681
+ metrics:
1682
+ folding:
1683
+ title: Metrics
1684
+ enabled: false
1685
+ description: |
1686
+ Tags flow records with `*_NET_TENANT`, `*_NET_REGION`, `*_NET_ROLE`. Verify on the
1687
+ Network Flows tab via the `*_NET_*` columns.
1688
+ availability: []
1689
+ scopes: []
1690
+
1691
+ - meta:
1692
+ plugin_name: netflow-plugin
1693
+ module_name: azure-ip-ranges
1694
+ monitored_instance:
1695
+ name: Azure IP Ranges
1696
+ link: https://www.microsoft.com/en-us/download/details.aspx?id=56519
1697
+ categories:
1698
+ - flows.network-identity
1699
+ icon_filename: network-wired.svg
1700
+ keywords:
1701
+ - azure
1702
+ - microsoft
1703
+ - cloud
1704
+ - ip ranges
1705
+ - service tags
1706
+ related_resources:
1707
+ integrations:
1708
+ list:
1709
+ - plugin_name: netflow-plugin
1710
+ module_name: aws-ip-ranges
1711
+ - plugin_name: netflow-plugin
1712
+ module_name: gcp-ip-ranges
1713
+ - plugin_name: netflow-plugin
1714
+ module_name: netbox
1715
+ - plugin_name: netflow-plugin
1716
+ module_name: generic-ipam
1717
+ info_provided_to_referring_integrations:
1718
+ description: ""
1719
+ overview:
1720
+ data_collection:
1721
+ metrics_description: |
1722
+ Azure publishes "Service Tags" data describing IP ranges per region and per service.
1723
+ The Azure publication mechanism is **less convenient** than AWS / GCP -- the
1724
+ authoritative URL contains a date stamp that changes weekly, so you cannot use
1725
+ a single stable URL.
1726
+
1727
+ For automated fetching, you have two options:
1728
+ 1. Mirror the file in your own infrastructure (a script that resolves the latest
1729
+ URL via the Azure CLI, downloads, and serves at a stable internal URL).
1730
+ 2. Skip Azure IP Ranges entirely and rely on GeoIP / ASN data for Azure
1731
+ attribution (Azure ASN is 8075).
1732
+
1733
+ For the full network-identity concept, see
1734
+ [Network Identity](https://learn.netdata.cloud/docs/network-flows/enrichment/network-identity).
1735
+ method_description: |
1736
+ Periodic HTTPS GET against your stable mirror URL, jq transform, merge into
1737
+ network-attributes trie. The plugin does not handle Azure's date-stamped URL
1738
+ rotation -- you provide a stable URL via your own mirror.
1739
+ supported_platforms:
1740
+ include:
1741
+ - Linux
1742
+ exclude: []
1743
+ multi_instance: true
1744
+ additional_permissions:
1745
+ description: ""
1746
+ default_behavior:
1747
+ auto_detection:
1748
+ description: "Disabled by default. Set up your own URL mirror, then add an entry under enrichment.network_sources."
1749
+ limits:
1750
+ description: ""
1751
+ performance_impact:
1752
+ description: ""
1753
+ setup:
1754
+ prerequisites:
1755
+ list:
1756
+ - title: A stable URL for the Azure Service Tags JSON
1757
+ description: |
1758
+ Azure's authoritative URL embeds a date stamp that changes weekly. A simple
1759
+ workaround: a cron job that calls
1760
+ `az network list-service-tags --location global -o json` (Azure CLI) and
1761
+ writes the result to a stable path on an internal HTTP server. The plugin then
1762
+ fetches from that stable URL.
1763
+ - title: Outbound HTTPS to your mirror
1764
+ description: |
1765
+ No Azure credentials needed by the plugin itself; credentials only matter on
1766
+ the side that does the upstream Azure CLI call.
1767
+ configuration:
1768
+ file:
1769
+ name: netflow.yaml
1770
+ options:
1771
+ description: |
1772
+ Add a named entry under `enrichment.network_sources` pointing at your mirror URL.
1773
+ folding:
1774
+ title: Config options
1775
+ enabled: true
1776
+ list:
1777
+ - name: url
1778
+ description: Stable URL to your locally-mirrored Azure Service Tags JSON.
1779
+ default_value: ""
1780
+ required: true
1781
+ - name: transform
1782
+ description: jq expression mapping the values[] array to per-prefix objects.
1783
+ default_value: "."
1784
+ required: true
1785
+ examples:
1786
+ folding:
1787
+ title: Config
1788
+ enabled: true
1789
+ list:
1790
+ - name: Internal mirror of Azure Service Tags
1791
+ folding:
1792
+ enabled: false
1793
+ description: Tag every Azure prefix with tenant=azure plus region/service.
1794
+ config: |
1795
+ enrichment:
1796
+ network_sources:
1797
+ azure:
1798
+ url: "https://internal.example/azure-service-tags.json"
1799
+ interval: 24h
1800
+ transform: |
1801
+ .values[]
1802
+ | .id as $id
1803
+ | .properties.region as $region
1804
+ | (.properties.systemService // "") as $service
1805
+ | .properties.addressPrefixes[]
1806
+ | {
1807
+ prefix: .,
1808
+ tenant: "azure",
1809
+ region: ($region // ""),
1810
+ role: ($service | ascii_downcase)
1811
+ }
1812
+ troubleshooting:
1813
+ problems:
1814
+ list:
1815
+ - name: Empty results
1816
+ description: |
1817
+ The Azure Service Tags JSON has nested structure (`values[].properties.addressPrefixes[]`).
1818
+ If your jq doesn't unwrap correctly, every fetch yields zero rows and the source
1819
+ backs off. Test the jq locally with `jq < azure-service-tags.json`.
1820
+ alerts: []
1821
+ metrics:
1822
+ folding:
1823
+ title: Metrics
1824
+ enabled: false
1825
+ description: |
1826
+ Tags flow records to/from Azure with `*_NET_TENANT`, `*_NET_REGION`, `*_NET_ROLE`.
1827
+ availability: []
1828
+ scopes: []
1829
+
1830
+ - meta:
1831
+ plugin_name: netflow-plugin
1832
+ module_name: netbox
1833
+ monitored_instance:
1834
+ name: NetBox
1835
+ link: https://netboxlabs.com/oss/netbox/
1836
+ categories:
1837
+ - flows.network-identity
1838
+ icon_filename: network-wired.svg
1839
+ keywords:
1840
+ - netbox
1841
+ - ipam
1842
+ - dcim
1843
+ - source of truth
1844
+ - prefix list
1845
+ related_resources:
1846
+ integrations:
1847
+ list:
1848
+ - plugin_name: netflow-plugin
1849
+ module_name: aws-ip-ranges
1850
+ - plugin_name: netflow-plugin
1851
+ module_name: gcp-ip-ranges
1852
+ - plugin_name: netflow-plugin
1853
+ module_name: azure-ip-ranges
1854
+ - plugin_name: netflow-plugin
1855
+ module_name: generic-ipam
1856
+ info_provided_to_referring_integrations:
1857
+ description: ""
1858
+ overview:
1859
+ data_collection:
1860
+ metrics_description: |
1861
+ [NetBox](https://netboxlabs.com/oss/netbox/) is the most widely deployed open-source
1862
+ IPAM / DCIM. Many networks already curate prefix metadata there -- tenant, site,
1863
+ role, VRF -- and want flow data to inherit those labels automatically rather than
1864
+ duplicating them in `netflow.yaml`.
1865
+
1866
+ This integration polls NetBox's Prefixes API at a configurable interval, transforms
1867
+ the response with jq, and labels flow records with the prefix metadata.
1868
+
1869
+ For the full network-identity concept, see
1870
+ [Network Identity](https://learn.netdata.cloud/docs/network-flows/enrichment/network-identity).
1871
+ method_description: |
1872
+ Periodic HTTPS GET to a NetBox API endpoint with a Bearer token in the
1873
+ `Authorization` header. jq transform produces per-prefix objects with the labels
1874
+ you want -- typically `tenant.name`, `site.name`, `role.name`, `description`.
1875
+
1876
+ NetBox paginates results -- there is **no automatic pagination** in this plugin.
1877
+ For inventories larger than the default page size (50), wrap NetBox with a
1878
+ server-side aggregator that returns the full list at one URL.
1879
+ supported_platforms:
1880
+ include:
1881
+ - Linux
1882
+ exclude: []
1883
+ multi_instance: true
1884
+ additional_permissions:
1885
+ description: ""
1886
+ default_behavior:
1887
+ auto_detection:
1888
+ description: "Disabled by default. Add an entry under enrichment.network_sources with your NetBox URL and API token."
1889
+ limits:
1890
+ description: ""
1891
+ performance_impact:
1892
+ description: ""
1893
+ setup:
1894
+ prerequisites:
1895
+ list:
1896
+ - title: NetBox API token with read scope on Prefixes
1897
+ description: |
1898
+ In NetBox, create or use a service account, generate an API token, scope it
1899
+ read-only to the Prefixes endpoint. The token goes in the `Authorization` header.
1900
+ - title: A bulk endpoint or aggregator
1901
+ description: |
1902
+ The plugin does not paginate. If your NetBox has more prefixes than fit in the
1903
+ default page (`?limit=50`), either raise `limit` (`?limit=10000`) or expose
1904
+ an internal endpoint that aggregates all pages and serves them at one URL.
1905
+ configuration:
1906
+ file:
1907
+ name: netflow.yaml
1908
+ options:
1909
+ description: |
1910
+ Add a named entry under `enrichment.network_sources` pointing at your NetBox.
1911
+ folding:
1912
+ title: Config options
1913
+ enabled: true
1914
+ list:
1915
+ - name: url
1916
+ description: NetBox Prefixes API endpoint, with `?limit=` if needed.
1917
+ default_value: ""
1918
+ required: true
1919
+ - name: headers.Authorization
1920
+ description: NetBox API token, prefixed with "Token ".
1921
+ default_value: ""
1922
+ required: true
1923
+ - name: interval
1924
+ description: How often to refresh. NetBox is your source of truth -- 5-15 minutes is typical.
1925
+ default_value: "60s"
1926
+ required: false
1927
+ - name: transform
1928
+ description: jq expression mapping `.results[]` (NetBox's response shape) to per-prefix objects.
1929
+ default_value: "."
1930
+ required: true
1931
+ examples:
1932
+ folding:
1933
+ title: Config
1934
+ enabled: true
1935
+ list:
1936
+ - name: NetBox with API token and standard label set
1937
+ folding:
1938
+ enabled: false
1939
+ description: Tags prefixes with tenant, site, role, and the NetBox description.
1940
+ config: |
1941
+ enrichment:
1942
+ network_sources:
1943
+ netbox:
1944
+ url: "https://netbox.example.internal/api/ipam/prefixes/?limit=10000"
1945
+ headers:
1946
+ Authorization: "Token abcdef0123456789"
1947
+ interval: 5m
1948
+ timeout: 30s
1949
+ transform: |
1950
+ .results[] | {
1951
+ prefix: .prefix,
1952
+ tenant: (.tenant.name // ""),
1953
+ site: (.site.name // ""),
1954
+ role: (.role.name // ""),
1955
+ name: .description
1956
+ }
1957
+ - name: NetBox with mTLS to internal CA
1958
+ folding:
1959
+ enabled: true
1960
+ description: When NetBox is behind your internal PKI; use tls.ca_file plus client cert.
1961
+ config: |
1962
+ enrichment:
1963
+ network_sources:
1964
+ netbox:
1965
+ url: "https://netbox.example.internal/api/ipam/prefixes/?limit=10000"
1966
+ headers:
1967
+ Authorization: "Token abcdef0123456789"
1968
+ interval: 5m
1969
+ tls:
1970
+ enable: true
1971
+ ca_file: /etc/netdata/ssl/internal-ca.pem
1972
+ cert_file: /etc/netdata/ssl/netdata.crt
1973
+ key_file: /etc/netdata/ssl/netdata.key
1974
+ transform: |
1975
+ .results[] | {
1976
+ prefix: .prefix,
1977
+ tenant: (.tenant.name // ""),
1978
+ site: (.site.name // ""),
1979
+ role: (.role.name // ""),
1980
+ name: .description
1981
+ }
1982
+ troubleshooting:
1983
+ problems:
1984
+ list:
1985
+ - name: Only first page of results loaded
1986
+ description: |
1987
+ NetBox paginates by default at 50 results. The plugin does not follow `next`
1988
+ links. Use `?limit=10000` (or the actual count) on the URL, or expose an
1989
+ aggregating endpoint server-side.
1990
+ - name: Token missing or wrong scope
1991
+ description: |
1992
+ NetBox returns 403 silently consumed by the plugin's HTTP error path. Watch
1993
+ the journal for `network-sources` warnings; verify with curl:
1994
+ `curl -H "Authorization: Token <tok>" https://netbox/api/ipam/prefixes/`.
1995
+ alerts: []
1996
+ metrics:
1997
+ folding:
1998
+ title: Metrics
1999
+ enabled: false
2000
+ description: |
2001
+ Tags flow records with the labels you mapped from NetBox -- typically `*_NET_TENANT`,
2002
+ `*_NET_SITE`, `*_NET_ROLE`, `*_NET_NAME`. Verify on the Network Flows tab.
2003
+ availability: []
2004
+ scopes: []
2005
+
2006
+ - meta:
2007
+ plugin_name: netflow-plugin
2008
+ module_name: generic-ipam
2009
+ monitored_instance:
2010
+ name: Generic JSON-over-HTTP IPAM
2011
+ link: https://learn.netdata.cloud/docs/network-flows/enrichment/network-identity
2012
+ categories:
2013
+ - flows.network-identity
2014
+ icon_filename: network-wired.svg
2015
+ keywords:
2016
+ - ipam
2017
+ - cmdb
2018
+ - infoblox
2019
+ - bluecat
2020
+ - phpipam
2021
+ - custom
2022
+ - prefix list
2023
+ related_resources:
2024
+ integrations:
2025
+ list:
2026
+ - plugin_name: netflow-plugin
2027
+ module_name: aws-ip-ranges
2028
+ - plugin_name: netflow-plugin
2029
+ module_name: gcp-ip-ranges
2030
+ - plugin_name: netflow-plugin
2031
+ module_name: azure-ip-ranges
2032
+ - plugin_name: netflow-plugin
2033
+ module_name: netbox
2034
+ info_provided_to_referring_integrations:
2035
+ description: ""
2036
+ overview:
2037
+ data_collection:
2038
+ metrics_description: |
2039
+ The catch-all integration. Any IPAM, CMDB, or service that exposes prefix metadata
2040
+ via an HTTP-fetchable JSON endpoint can plug into Netdata's flow enrichment via this
2041
+ mechanism. Examples: Infoblox WAPI, BlueCat REST API, phpIPAM, internal-built CMDB
2042
+ endpoints, ServiceNow CMDB queries, custom Lambda functions producing JSON.
2043
+
2044
+ You define the URL, the HTTP method, headers (for auth), and a jq transform that
2045
+ converts the response into objects with `prefix` + label fields.
2046
+
2047
+ For the full network-identity concept, see
2048
+ [Network Identity](https://learn.netdata.cloud/docs/network-flows/enrichment/network-identity).
2049
+ method_description: |
2050
+ Periodic HTTPS GET (or POST) to a configured URL with optional headers, optional
2051
+ custom CA / mTLS, jq transform of the response, merge into network-attributes trie.
2052
+ supported_platforms:
2053
+ include:
2054
+ - Linux
2055
+ exclude: []
2056
+ multi_instance: true
2057
+ additional_permissions:
2058
+ description: ""
2059
+ default_behavior:
2060
+ auto_detection:
2061
+ description: "Disabled by default. Add an entry per IPAM source under enrichment.network_sources."
2062
+ limits:
2063
+ description: ""
2064
+ performance_impact:
2065
+ description: ""
2066
+ setup:
2067
+ prerequisites:
2068
+ list:
2069
+ - title: An HTTP/HTTPS endpoint returning JSON
2070
+ description: |
2071
+ The endpoint must produce a parseable JSON document. The plugin only supports
2072
+ GET and POST. There is no pagination, no cursor following, no OAuth flow --
2073
+ if your IPAM needs those, wrap it in an internal aggregator.
2074
+ - title: Authentication via headers
2075
+ description: |
2076
+ The plugin has no built-in auth helpers. Set whatever the API needs -- bearer
2077
+ tokens, basic-auth header, custom API-key headers -- via `headers:`. Store
2078
+ tokens carefully; they're written into the YAML.
2079
+ configuration:
2080
+ file:
2081
+ name: netflow.yaml
2082
+ options:
2083
+ description: |
2084
+ Add a named entry under `enrichment.network_sources`. The keys below are the
2085
+ full set of options.
2086
+ folding:
2087
+ title: Config options
2088
+ enabled: true
2089
+ list:
2090
+ - name: url
2091
+ description: HTTP/HTTPS endpoint.
2092
+ default_value: ""
2093
+ required: true
2094
+ - name: method
2095
+ description: GET or POST.
2096
+ default_value: "GET"
2097
+ required: false
2098
+ - name: interval
2099
+ description: Refresh interval (loop floors at 60s).
2100
+ default_value: "60s"
2101
+ required: false
2102
+ - name: timeout
2103
+ description: Per-request timeout.
2104
+ default_value: "60s"
2105
+ required: false
2106
+ - name: headers
2107
+ description: Map of additional HTTP request headers (e.g., authentication).
2108
+ default_value: "{}"
2109
+ required: false
2110
+ - name: transform
2111
+ description: jq expression converting response to {prefix, name?, role?, site?, region?, country?, state?, city?, tenant?, asn?, asn_name?} stream.
2112
+ default_value: "."
2113
+ required: true
2114
+ - name: tls.enable
2115
+ description: Use custom TLS settings (custom CA, mTLS).
2116
+ default_value: "false"
2117
+ required: false
2118
+ - name: tls.ca_file
2119
+ description: PEM file with the CA bundle.
2120
+ default_value: ""
2121
+ required: false
2122
+ - name: tls.cert_file
2123
+ description: PEM file with the client certificate (mTLS).
2124
+ default_value: ""
2125
+ required: false
2126
+ - name: tls.key_file
2127
+ description: PEM file with the client private key.
2128
+ default_value: ""
2129
+ required: false
2130
+ examples:
2131
+ folding:
2132
+ title: Config
2133
+ enabled: true
2134
+ list:
2135
+ - name: phpIPAM with API token
2136
+ folding:
2137
+ enabled: false
2138
+ description: phpIPAM exposes /api/<app>/subnets/. Use the standard transform.
2139
+ config: |
2140
+ enrichment:
2141
+ network_sources:
2142
+ phpipam:
2143
+ url: "https://ipam.example/api/netdata/subnets/"
2144
+ headers:
2145
+ token: "abcdef..."
2146
+ interval: 10m
2147
+ transform: |
2148
+ .data[] | {
2149
+ prefix: (.subnet + "/" + (.mask|tostring)),
2150
+ name: .description,
2151
+ tenant: (.custom_tenant // ""),
2152
+ site: (.location.name // "")
2153
+ }
2154
+ - name: Custom internal CMDB (POST with body)
2155
+ folding:
2156
+ enabled: true
2157
+ description: When your CMDB requires POST with a query body. Define `method` and append the body via headers/url. The plugin's body support is limited -- prefer GET endpoints when possible.
2158
+ config: |
2159
+ enrichment:
2160
+ network_sources:
2161
+ cmdb:
2162
+ url: "https://cmdb.example/query/networks"
2163
+ method: POST
2164
+ headers:
2165
+ Authorization: "Bearer ..."
2166
+ Content-Type: "application/json"
2167
+ interval: 30m
2168
+ transform: |
2169
+ .results[] | {
2170
+ prefix: .cidr,
2171
+ tenant: .organization,
2172
+ site: .datacenter,
2173
+ role: .purpose
2174
+ }
2175
+ - name: Internal IPAM with mTLS
2176
+ folding:
2177
+ enabled: true
2178
+ description: When the IPAM is behind your internal PKI.
2179
+ config: |
2180
+ enrichment:
2181
+ network_sources:
2182
+ corp_ipam:
2183
+ url: "https://ipam.corp/api/networks"
2184
+ tls:
2185
+ enable: true
2186
+ ca_file: /etc/netdata/ssl/corp-ca.pem
2187
+ cert_file: /etc/netdata/ssl/netdata.crt
2188
+ key_file: /etc/netdata/ssl/netdata.key
2189
+ interval: 10m
2190
+ transform: |
2191
+ .[] | {
2192
+ prefix: .cidr,
2193
+ name: .label,
2194
+ tenant: .tenant
2195
+ }
2196
+ troubleshooting:
2197
+ problems:
2198
+ list:
2199
+ - name: Endpoint requires pagination
2200
+ description: |
2201
+ The plugin does not paginate. Either raise the page size to cover your inventory,
2202
+ or wrap the endpoint with an internal aggregator that returns all results at one URL.
2203
+ - name: TLS verification cannot be disabled
2204
+ description: |
2205
+ `tls.skip_verify` and `tls.verify: false` are rejected by validation. Use
2206
+ `tls.ca_file` to trust internal CAs.
2207
+ - name: Empty result back-off
2208
+ description: |
2209
+ An empty jq result is treated as a fetch failure. If your IPAM legitimately
2210
+ returns no prefixes (quiet state), the source backs off as if it errored.
2211
+ Workaround: have the upstream return at least one synthetic prefix.
2212
+ alerts: []
2213
+ metrics:
2214
+ folding:
2215
+ title: Metrics
2216
+ enabled: false
2217
+ description: |
2218
+ Tags flow records with whatever labels your jq transform emits. Verify on the
2219
+ Network Flows tab via the `*_NET_*` columns.
2220
+ availability: []
2221
+ scopes: []