Regenerate integrations docs (#22135)
Co-authored-by: ilyam8 <22274335+ilyam8@users.noreply.github.com>
Netdata bot committed
Apr 4, 2026 at 06:05 UTC
facaad15a01754eae6238dfc6f57a9c50b3281ac
40 files changed
+4760
-560
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_api_management.md
+119
-14
@@ -62,7 +62,7 @@ The collector has two discovery phases:
62
**Bootstrap (first run)**
63
64
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
65
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
65
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
66
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
67
- A single job can monitor multiple subscriptions.
68
@@ -164,7 +164,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
164
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
165
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
166
167
-User profile files with the same `id` as a stock profile override it.
167
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
168
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
169
170
@@ -192,8 +192,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
192
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
193
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
194
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
195
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
196
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
195
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
196
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
197
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
198
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
199
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
200
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -239,6 +240,7 @@ Controls how the collector finds candidate Azure resources.
240
##### discovery.mode_query.kql
241
242
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
243
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
244
245
The query **must** project these five columns:
246
@@ -250,6 +252,14 @@ The query **must** project these five columns:
252
| `resourceGroup` | Resource group name |
253
| `location` | Azure region |
254
255
+:::info
256
+
257
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
258
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
259
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
260
+
261
+:::
262
+
263
Example:
264
265
```
@@ -266,11 +276,67 @@ Controls how the collector decides which metric profiles to activate.
276
277
| Mode | Behavior |
278
|:-----|:---------|
269
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
270
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
271
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
279
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
280
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
281
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
282
+
283
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
284
+
285
+Filter layering:
286
+
287
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
288
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
289
+- The effective resource set for a profile is the intersection of both filter sets.
290
+- Per-profile filters never widen or bypass the global discovery scope.
291
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
292
+
293
+
294
+<a id="option-profiles-profiles-mode-auto-entries"></a>
295
+##### profiles.mode_auto.entries
296
+
297
+Each entry has:
298
+
299
+| Field | Description |
300
+|:------|:------------|
301
+| `name` | Canonical profile basename. |
302
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
303
+| `filters.regions` | Optional region narrowing for this profile. |
304
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
305
+
306
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
307
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
308
+
309
+
310
+<a id="option-profiles-profiles-mode-exact-entries"></a>
311
+##### profiles.mode_exact.entries
312
+
313
+Each entry has:
314
+
315
+| Field | Description |
316
+|:------|:------------|
317
+| `name` | Canonical profile basename. |
318
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
319
+| `filters.regions` | Optional region narrowing for this profile. |
320
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
321
+
322
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
323
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
324
+
325
+
326
+<a id="option-profiles-profiles-mode-combined-entries"></a>
327
+##### profiles.mode_combined.entries
328
+
329
+Each entry has:
330
+
331
+| Field | Description |
332
+|:------|:------------|
333
+| `name` | Canonical profile basename. |
334
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
335
+| `filters.regions` | Optional region narrowing for this profile. |
336
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
337
273
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
338
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
339
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
340
341
342
@@ -358,9 +424,48 @@ jobs:
424
profiles:
425
mode: exact
426
mode_exact:
361
- names:
362
- - sql_database
363
- - postgres_flexible
427
+ entries:
428
+ - name: sql_database
429
+ - name: postgres_flexible
430
+ auth:
431
+ mode: managed_identity
432
+
433
+```
434
+</details>
435
+
436
+###### Global and per-profile filters together
437
+
438
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
439
+
440
+<details open><summary>Config</summary>
441
+
442
+```yaml
443
+jobs:
444
+ - name: prod-databases
445
+ subscription_ids:
446
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
447
+ discovery:
448
+ mode: filters
449
+ mode_filters:
450
+ resource_groups:
451
+ - production-rg
452
+ regions:
453
+ - eastus
454
+ profiles:
455
+ mode: combined
456
+ mode_combined:
457
+ entries:
458
+ - name: sql_database
459
+ filters:
460
+ tags:
461
+ env:
462
+ - prod
463
+ # Effective scope:
464
+ # 1. Discovery first keeps only resources in production-rg and eastus.
465
+ # 2. Auto-selected profiles use that global scope as-is.
466
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
467
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
468
+ # because per-profile filters only narrow the globally discovered set.
469
auth:
470
mode: managed_identity
471
@@ -457,7 +562,7 @@ Labels:
562
| resource_group | The Azure resource group. |
563
| region | The Azure region where the resource is deployed. |
564
| resource_type | The Azure resource type identifier. |
460
-| profile | The Azure Monitor profile id. |
565
+| profile | The Azure Monitor profile basename. |
566
| subscription_id | The Azure subscription identifier. |
567
| resource_uid | The unique Azure resource identifier. |
568
@@ -565,8 +670,8 @@ Check the following:
670
671
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
672
568
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
569
-- **Verify a built-in profile exists** -- List available profiles:
673
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
674
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
675
```bash
676
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
677
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_app_service.md
+119
-14
@@ -64,7 +64,7 @@ The collector has two discovery phases:
64
**Bootstrap (first run)**
65
66
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
67
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
67
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
68
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
69
- A single job can monitor multiple subscriptions.
70
@@ -166,7 +166,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
166
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
167
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
168
169
-User profile files with the same `id` as a stock profile override it.
169
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
170
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
171
172
@@ -194,8 +194,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
194
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
195
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
196
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
197
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
198
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
197
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
198
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
199
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
200
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
201
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
202
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -241,6 +242,7 @@ Controls how the collector finds candidate Azure resources.
242
##### discovery.mode_query.kql
243
244
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
245
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
246
247
The query **must** project these five columns:
248
@@ -252,6 +254,14 @@ The query **must** project these five columns:
254
| `resourceGroup` | Resource group name |
255
| `location` | Azure region |
256
257
+:::info
258
+
259
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
260
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
261
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
262
+
263
+:::
264
+
265
Example:
266
267
```
@@ -268,11 +278,67 @@ Controls how the collector decides which metric profiles to activate.
278
279
| Mode | Behavior |
280
|:-----|:---------|
271
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
272
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
273
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
281
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
282
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
283
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
284
+
285
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
286
+
287
+Filter layering:
288
+
289
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
290
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
291
+- The effective resource set for a profile is the intersection of both filter sets.
292
+- Per-profile filters never widen or bypass the global discovery scope.
293
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
294
+
295
+
296
+<a id="option-profiles-profiles-mode-auto-entries"></a>
297
+##### profiles.mode_auto.entries
298
+
299
+Each entry has:
300
+
301
+| Field | Description |
302
+|:------|:------------|
303
+| `name` | Canonical profile basename. |
304
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
305
+| `filters.regions` | Optional region narrowing for this profile. |
306
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
307
+
308
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
309
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
310
+
311
+
312
+<a id="option-profiles-profiles-mode-exact-entries"></a>
313
+##### profiles.mode_exact.entries
314
+
315
+Each entry has:
316
+
317
+| Field | Description |
318
+|:------|:------------|
319
+| `name` | Canonical profile basename. |
320
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
321
+| `filters.regions` | Optional region narrowing for this profile. |
322
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
323
+
324
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
325
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
326
+
327
+
328
+<a id="option-profiles-profiles-mode-combined-entries"></a>
329
+##### profiles.mode_combined.entries
330
+
331
+Each entry has:
332
+
333
+| Field | Description |
334
+|:------|:------------|
335
+| `name` | Canonical profile basename. |
336
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
337
+| `filters.regions` | Optional region narrowing for this profile. |
338
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
339
275
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
340
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
341
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
342
343
344
@@ -360,9 +426,48 @@ jobs:
426
profiles:
427
mode: exact
428
mode_exact:
363
- names:
364
- - sql_database
365
- - postgres_flexible
429
+ entries:
430
+ - name: sql_database
431
+ - name: postgres_flexible
432
+ auth:
433
+ mode: managed_identity
434
+
435
+```
436
+</details>
437
+
438
+###### Global and per-profile filters together
439
+
440
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
441
+
442
+<details open><summary>Config</summary>
443
+
444
+```yaml
445
+jobs:
446
+ - name: prod-databases
447
+ subscription_ids:
448
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
449
+ discovery:
450
+ mode: filters
451
+ mode_filters:
452
+ resource_groups:
453
+ - production-rg
454
+ regions:
455
+ - eastus
456
+ profiles:
457
+ mode: combined
458
+ mode_combined:
459
+ entries:
460
+ - name: sql_database
461
+ filters:
462
+ tags:
463
+ env:
464
+ - prod
465
+ # Effective scope:
466
+ # 1. Discovery first keeps only resources in production-rg and eastus.
467
+ # 2. Auto-selected profiles use that global scope as-is.
468
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
469
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
470
+ # because per-profile filters only narrow the globally discovered set.
471
auth:
472
mode: managed_identity
473
@@ -456,7 +561,7 @@ Labels:
561
| resource_group | The Azure resource group. |
562
| region | The Azure region where the resource is deployed. |
563
| resource_type | The Azure resource type identifier. |
459
-| profile | The Azure Monitor profile id. |
564
+| profile | The Azure Monitor profile basename. |
565
| subscription_id | The Azure subscription identifier. |
566
| resource_uid | The unique Azure resource identifier. |
567
@@ -580,8 +685,8 @@ Check the following:
685
686
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
687
583
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
584
-- **Verify a built-in profile exists** -- List available profiles:
688
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
689
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
690
```bash
691
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
692
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_application_gateway.md
+119
-14
@@ -62,7 +62,7 @@ The collector has two discovery phases:
62
**Bootstrap (first run)**
63
64
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
65
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
65
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
66
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
67
- A single job can monitor multiple subscriptions.
68
@@ -164,7 +164,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
164
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
165
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
166
167
-User profile files with the same `id` as a stock profile override it.
167
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
168
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
169
170
@@ -192,8 +192,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
192
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
193
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
194
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
195
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
196
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
195
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
196
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
197
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
198
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
199
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
200
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -239,6 +240,7 @@ Controls how the collector finds candidate Azure resources.
240
##### discovery.mode_query.kql
241
242
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
243
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
244
245
The query **must** project these five columns:
246
@@ -250,6 +252,14 @@ The query **must** project these five columns:
252
| `resourceGroup` | Resource group name |
253
| `location` | Azure region |
254
255
+:::info
256
+
257
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
258
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
259
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
260
+
261
+:::
262
+
263
Example:
264
265
```
@@ -266,11 +276,67 @@ Controls how the collector decides which metric profiles to activate.
276
277
| Mode | Behavior |
278
|:-----|:---------|
269
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
270
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
271
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
279
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
280
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
281
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
282
+
283
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
284
+
285
+Filter layering:
286
+
287
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
288
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
289
+- The effective resource set for a profile is the intersection of both filter sets.
290
+- Per-profile filters never widen or bypass the global discovery scope.
291
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
292
+
293
+
294
+<a id="option-profiles-profiles-mode-auto-entries"></a>
295
+##### profiles.mode_auto.entries
296
+
297
+Each entry has:
298
+
299
+| Field | Description |
300
+|:------|:------------|
301
+| `name` | Canonical profile basename. |
302
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
303
+| `filters.regions` | Optional region narrowing for this profile. |
304
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
305
+
306
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
307
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
308
+
309
+
310
+<a id="option-profiles-profiles-mode-exact-entries"></a>
311
+##### profiles.mode_exact.entries
312
+
313
+Each entry has:
314
+
315
+| Field | Description |
316
+|:------|:------------|
317
+| `name` | Canonical profile basename. |
318
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
319
+| `filters.regions` | Optional region narrowing for this profile. |
320
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
321
+
322
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
323
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
324
+
325
+
326
+<a id="option-profiles-profiles-mode-combined-entries"></a>
327
+##### profiles.mode_combined.entries
328
+
329
+Each entry has:
330
+
331
+| Field | Description |
332
+|:------|:------------|
333
+| `name` | Canonical profile basename. |
334
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
335
+| `filters.regions` | Optional region narrowing for this profile. |
336
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
337
273
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
338
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
339
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
340
341
342
@@ -358,9 +424,48 @@ jobs:
424
profiles:
425
mode: exact
426
mode_exact:
361
- names:
362
- - sql_database
363
- - postgres_flexible
427
+ entries:
428
+ - name: sql_database
429
+ - name: postgres_flexible
430
+ auth:
431
+ mode: managed_identity
432
+
433
+```
434
+</details>
435
+
436
+###### Global and per-profile filters together
437
+
438
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
439
+
440
+<details open><summary>Config</summary>
441
+
442
+```yaml
443
+jobs:
444
+ - name: prod-databases
445
+ subscription_ids:
446
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
447
+ discovery:
448
+ mode: filters
449
+ mode_filters:
450
+ resource_groups:
451
+ - production-rg
452
+ regions:
453
+ - eastus
454
+ profiles:
455
+ mode: combined
456
+ mode_combined:
457
+ entries:
458
+ - name: sql_database
459
+ filters:
460
+ tags:
461
+ env:
462
+ - prod
463
+ # Effective scope:
464
+ # 1. Discovery first keeps only resources in production-rg and eastus.
465
+ # 2. Auto-selected profiles use that global scope as-is.
466
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
467
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
468
+ # because per-profile filters only narrow the globally discovered set.
469
auth:
470
mode: managed_identity
471
@@ -453,7 +558,7 @@ Labels:
558
| resource_group | The Azure resource group. |
559
| region | The Azure region where the resource is deployed. |
560
| resource_type | The Azure resource type identifier. |
456
-| profile | The Azure Monitor profile id. |
561
+| profile | The Azure Monitor profile basename. |
562
| subscription_id | The Azure subscription identifier. |
563
| resource_uid | The unique Azure resource identifier. |
564
@@ -571,8 +676,8 @@ Check the following:
676
677
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
678
574
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
575
-- **Verify a built-in profile exists** -- List available profiles:
679
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
680
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
681
```bash
682
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
683
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_application_insights.md
+119
-14
@@ -63,7 +63,7 @@ The collector has two discovery phases:
63
**Bootstrap (first run)**
64
65
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
66
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
66
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
67
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
68
- A single job can monitor multiple subscriptions.
69
@@ -165,7 +165,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
165
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
166
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
167
168
-User profile files with the same `id` as a stock profile override it.
168
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
169
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
170
171
@@ -193,8 +193,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
193
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
194
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
195
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
196
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
197
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
196
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
197
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
198
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
199
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
200
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
201
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -240,6 +241,7 @@ Controls how the collector finds candidate Azure resources.
241
##### discovery.mode_query.kql
242
243
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
244
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
245
246
The query **must** project these five columns:
247
@@ -251,6 +253,14 @@ The query **must** project these five columns:
253
| `resourceGroup` | Resource group name |
254
| `location` | Azure region |
255
256
+:::info
257
+
258
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
259
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
260
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
261
+
262
+:::
263
+
264
Example:
265
266
```
@@ -267,11 +277,67 @@ Controls how the collector decides which metric profiles to activate.
277
278
| Mode | Behavior |
279
|:-----|:---------|
270
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
271
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
272
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
280
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
281
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
282
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
283
+
284
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
285
+
286
+Filter layering:
287
+
288
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
289
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
290
+- The effective resource set for a profile is the intersection of both filter sets.
291
+- Per-profile filters never widen or bypass the global discovery scope.
292
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
293
+
294
+
295
+<a id="option-profiles-profiles-mode-auto-entries"></a>
296
+##### profiles.mode_auto.entries
297
+
298
+Each entry has:
299
+
300
+| Field | Description |
301
+|:------|:------------|
302
+| `name` | Canonical profile basename. |
303
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
304
+| `filters.regions` | Optional region narrowing for this profile. |
305
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
306
+
307
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
308
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
309
+
310
+
311
+<a id="option-profiles-profiles-mode-exact-entries"></a>
312
+##### profiles.mode_exact.entries
313
+
314
+Each entry has:
315
+
316
+| Field | Description |
317
+|:------|:------------|
318
+| `name` | Canonical profile basename. |
319
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
320
+| `filters.regions` | Optional region narrowing for this profile. |
321
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
322
+
323
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
324
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
325
+
326
+
327
+<a id="option-profiles-profiles-mode-combined-entries"></a>
328
+##### profiles.mode_combined.entries
329
+
330
+Each entry has:
331
+
332
+| Field | Description |
333
+|:------|:------------|
334
+| `name` | Canonical profile basename. |
335
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
336
+| `filters.regions` | Optional region narrowing for this profile. |
337
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
338
274
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
339
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
340
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
341
342
343
@@ -359,9 +425,48 @@ jobs:
425
profiles:
426
mode: exact
427
mode_exact:
362
- names:
363
- - sql_database
364
- - postgres_flexible
428
+ entries:
429
+ - name: sql_database
430
+ - name: postgres_flexible
431
+ auth:
432
+ mode: managed_identity
433
+
434
+```
435
+</details>
436
+
437
+###### Global and per-profile filters together
438
+
439
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
440
+
441
+<details open><summary>Config</summary>
442
+
443
+```yaml
444
+jobs:
445
+ - name: prod-databases
446
+ subscription_ids:
447
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
448
+ discovery:
449
+ mode: filters
450
+ mode_filters:
451
+ resource_groups:
452
+ - production-rg
453
+ regions:
454
+ - eastus
455
+ profiles:
456
+ mode: combined
457
+ mode_combined:
458
+ entries:
459
+ - name: sql_database
460
+ filters:
461
+ tags:
462
+ env:
463
+ - prod
464
+ # Effective scope:
465
+ # 1. Discovery first keeps only resources in production-rg and eastus.
466
+ # 2. Auto-selected profiles use that global scope as-is.
467
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
468
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
469
+ # because per-profile filters only narrow the globally discovered set.
470
auth:
471
mode: managed_identity
472
@@ -461,7 +566,7 @@ Labels:
566
| resource_group | The Azure resource group. |
567
| region | The Azure region where the resource is deployed. |
568
| resource_type | The Azure resource type identifier. |
464
-| profile | The Azure Monitor profile id. |
569
+| profile | The Azure Monitor profile basename. |
570
| subscription_id | The Azure subscription identifier. |
571
| resource_uid | The unique Azure resource identifier. |
572
@@ -580,8 +685,8 @@ Check the following:
685
686
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
687
583
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
584
-- **Verify a built-in profile exists** -- List available profiles:
688
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
689
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
690
```bash
691
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
692
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_cache_for_redis.md
+119
-14
@@ -64,7 +64,7 @@ The collector has two discovery phases:
64
**Bootstrap (first run)**
65
66
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
67
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
67
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
68
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
69
- A single job can monitor multiple subscriptions.
70
@@ -166,7 +166,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
166
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
167
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
168
169
-User profile files with the same `id` as a stock profile override it.
169
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
170
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
171
172
@@ -194,8 +194,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
194
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
195
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
196
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
197
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
198
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
197
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
198
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
199
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
200
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
201
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
202
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -241,6 +242,7 @@ Controls how the collector finds candidate Azure resources.
242
##### discovery.mode_query.kql
243
244
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
245
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
246
247
The query **must** project these five columns:
248
@@ -252,6 +254,14 @@ The query **must** project these five columns:
254
| `resourceGroup` | Resource group name |
255
| `location` | Azure region |
256
257
+:::info
258
+
259
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
260
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
261
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
262
+
263
+:::
264
+
265
Example:
266
267
```
@@ -268,11 +278,67 @@ Controls how the collector decides which metric profiles to activate.
278
279
| Mode | Behavior |
280
|:-----|:---------|
271
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
272
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
273
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
281
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
282
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
283
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
284
+
285
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
286
+
287
+Filter layering:
288
+
289
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
290
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
291
+- The effective resource set for a profile is the intersection of both filter sets.
292
+- Per-profile filters never widen or bypass the global discovery scope.
293
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
294
+
295
+
296
+<a id="option-profiles-profiles-mode-auto-entries"></a>
297
+##### profiles.mode_auto.entries
298
+
299
+Each entry has:
300
+
301
+| Field | Description |
302
+|:------|:------------|
303
+| `name` | Canonical profile basename. |
304
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
305
+| `filters.regions` | Optional region narrowing for this profile. |
306
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
307
+
308
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
309
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
310
+
311
+
312
+<a id="option-profiles-profiles-mode-exact-entries"></a>
313
+##### profiles.mode_exact.entries
314
+
315
+Each entry has:
316
+
317
+| Field | Description |
318
+|:------|:------------|
319
+| `name` | Canonical profile basename. |
320
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
321
+| `filters.regions` | Optional region narrowing for this profile. |
322
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
323
+
324
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
325
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
326
+
327
+
328
+<a id="option-profiles-profiles-mode-combined-entries"></a>
329
+##### profiles.mode_combined.entries
330
+
331
+Each entry has:
332
+
333
+| Field | Description |
334
+|:------|:------------|
335
+| `name` | Canonical profile basename. |
336
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
337
+| `filters.regions` | Optional region narrowing for this profile. |
338
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
339
275
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
340
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
341
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
342
343
344
@@ -360,9 +426,48 @@ jobs:
426
profiles:
427
mode: exact
428
mode_exact:
363
- names:
364
- - sql_database
365
- - postgres_flexible
429
+ entries:
430
+ - name: sql_database
431
+ - name: postgres_flexible
432
+ auth:
433
+ mode: managed_identity
434
+
435
+```
436
+</details>
437
+
438
+###### Global and per-profile filters together
439
+
440
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
441
+
442
+<details open><summary>Config</summary>
443
+
444
+```yaml
445
+jobs:
446
+ - name: prod-databases
447
+ subscription_ids:
448
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
449
+ discovery:
450
+ mode: filters
451
+ mode_filters:
452
+ resource_groups:
453
+ - production-rg
454
+ regions:
455
+ - eastus
456
+ profiles:
457
+ mode: combined
458
+ mode_combined:
459
+ entries:
460
+ - name: sql_database
461
+ filters:
462
+ tags:
463
+ env:
464
+ - prod
465
+ # Effective scope:
466
+ # 1. Discovery first keeps only resources in production-rg and eastus.
467
+ # 2. Auto-selected profiles use that global scope as-is.
468
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
469
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
470
+ # because per-profile filters only narrow the globally discovered set.
471
auth:
472
mode: managed_identity
473
@@ -459,7 +564,7 @@ Labels:
564
| resource_group | The Azure resource group. |
565
| region | The Azure region where the resource is deployed. |
566
| resource_type | The Azure resource type identifier. |
462
-| profile | The Azure Monitor profile id. |
567
+| profile | The Azure Monitor profile basename. |
568
| subscription_id | The Azure subscription identifier. |
569
| resource_uid | The unique Azure resource identifier. |
570
@@ -589,8 +694,8 @@ Check the following:
694
695
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
696
592
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
593
-- **Verify a built-in profile exists** -- List available profiles:
697
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
698
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
699
```bash
700
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
701
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_cognitive_services.md
+119
-14
@@ -67,7 +67,7 @@ The collector has two discovery phases:
67
**Bootstrap (first run)**
68
69
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
70
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
70
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
71
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
72
- A single job can monitor multiple subscriptions.
73
@@ -169,7 +169,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
169
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
170
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
171
172
-User profile files with the same `id` as a stock profile override it.
172
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
173
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
174
175
@@ -197,8 +197,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
197
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
198
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
199
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
200
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
201
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
200
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
201
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
202
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
203
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
204
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
205
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -244,6 +245,7 @@ Controls how the collector finds candidate Azure resources.
245
##### discovery.mode_query.kql
246
247
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
248
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
249
250
The query **must** project these five columns:
251
@@ -255,6 +257,14 @@ The query **must** project these five columns:
257
| `resourceGroup` | Resource group name |
258
| `location` | Azure region |
259
260
+:::info
261
+
262
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
263
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
264
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
265
+
266
+:::
267
+
268
Example:
269
270
```
@@ -271,11 +281,67 @@ Controls how the collector decides which metric profiles to activate.
281
282
| Mode | Behavior |
283
|:-----|:---------|
274
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
275
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
276
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
284
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
285
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
286
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
287
+
288
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
289
+
290
+Filter layering:
291
+
292
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
293
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
294
+- The effective resource set for a profile is the intersection of both filter sets.
295
+- Per-profile filters never widen or bypass the global discovery scope.
296
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
297
+
298
+
299
+<a id="option-profiles-profiles-mode-auto-entries"></a>
300
+##### profiles.mode_auto.entries
301
+
302
+Each entry has:
303
+
304
+| Field | Description |
305
+|:------|:------------|
306
+| `name` | Canonical profile basename. |
307
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
308
+| `filters.regions` | Optional region narrowing for this profile. |
309
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
310
+
311
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
312
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
313
+
314
+
315
+<a id="option-profiles-profiles-mode-exact-entries"></a>
316
+##### profiles.mode_exact.entries
317
+
318
+Each entry has:
319
+
320
+| Field | Description |
321
+|:------|:------------|
322
+| `name` | Canonical profile basename. |
323
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
324
+| `filters.regions` | Optional region narrowing for this profile. |
325
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
326
+
327
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
328
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
329
+
330
+
331
+<a id="option-profiles-profiles-mode-combined-entries"></a>
332
+##### profiles.mode_combined.entries
333
+
334
+Each entry has:
335
+
336
+| Field | Description |
337
+|:------|:------------|
338
+| `name` | Canonical profile basename. |
339
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
340
+| `filters.regions` | Optional region narrowing for this profile. |
341
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
342
278
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
343
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
344
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
345
346
347
@@ -363,9 +429,48 @@ jobs:
429
profiles:
430
mode: exact
431
mode_exact:
366
- names:
367
- - sql_database
368
- - postgres_flexible
432
+ entries:
433
+ - name: sql_database
434
+ - name: postgres_flexible
435
+ auth:
436
+ mode: managed_identity
437
+
438
+```
439
+</details>
440
+
441
+###### Global and per-profile filters together
442
+
443
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
444
+
445
+<details open><summary>Config</summary>
446
+
447
+```yaml
448
+jobs:
449
+ - name: prod-databases
450
+ subscription_ids:
451
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
452
+ discovery:
453
+ mode: filters
454
+ mode_filters:
455
+ resource_groups:
456
+ - production-rg
457
+ regions:
458
+ - eastus
459
+ profiles:
460
+ mode: combined
461
+ mode_combined:
462
+ entries:
463
+ - name: sql_database
464
+ filters:
465
+ tags:
466
+ env:
467
+ - prod
468
+ # Effective scope:
469
+ # 1. Discovery first keeps only resources in production-rg and eastus.
470
+ # 2. Auto-selected profiles use that global scope as-is.
471
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
472
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
473
+ # because per-profile filters only narrow the globally discovered set.
474
auth:
475
mode: managed_identity
476
@@ -468,7 +573,7 @@ Labels:
573
| resource_group | The Azure resource group. |
574
| region | The Azure region where the resource is deployed. |
575
| resource_type | The Azure resource type identifier. |
471
-| profile | The Azure Monitor profile id. |
576
+| profile | The Azure Monitor profile basename. |
577
| subscription_id | The Azure subscription identifier. |
578
| resource_uid | The unique Azure resource identifier. |
579
@@ -639,8 +744,8 @@ Check the following:
744
745
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
746
642
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
643
-- **Verify a built-in profile exists** -- List available profiles:
747
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
748
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
749
```bash
750
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
751
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_container_apps.md
+119
-14
@@ -62,7 +62,7 @@ The collector has two discovery phases:
62
**Bootstrap (first run)**
63
64
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
65
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
65
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
66
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
67
- A single job can monitor multiple subscriptions.
68
@@ -164,7 +164,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
164
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
165
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
166
167
-User profile files with the same `id` as a stock profile override it.
167
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
168
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
169
170
@@ -192,8 +192,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
192
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
193
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
194
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
195
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
196
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
195
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
196
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
197
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
198
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
199
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
200
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -239,6 +240,7 @@ Controls how the collector finds candidate Azure resources.
240
##### discovery.mode_query.kql
241
242
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
243
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
244
245
The query **must** project these five columns:
246
@@ -250,6 +252,14 @@ The query **must** project these five columns:
252
| `resourceGroup` | Resource group name |
253
| `location` | Azure region |
254
255
+:::info
256
+
257
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
258
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
259
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
260
+
261
+:::
262
+
263
Example:
264
265
```
@@ -266,11 +276,67 @@ Controls how the collector decides which metric profiles to activate.
276
277
| Mode | Behavior |
278
|:-----|:---------|
269
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
270
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
271
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
279
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
280
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
281
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
282
+
283
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
284
+
285
+Filter layering:
286
+
287
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
288
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
289
+- The effective resource set for a profile is the intersection of both filter sets.
290
+- Per-profile filters never widen or bypass the global discovery scope.
291
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
292
+
293
+
294
+<a id="option-profiles-profiles-mode-auto-entries"></a>
295
+##### profiles.mode_auto.entries
296
+
297
+Each entry has:
298
+
299
+| Field | Description |
300
+|:------|:------------|
301
+| `name` | Canonical profile basename. |
302
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
303
+| `filters.regions` | Optional region narrowing for this profile. |
304
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
305
+
306
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
307
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
308
+
309
+
310
+<a id="option-profiles-profiles-mode-exact-entries"></a>
311
+##### profiles.mode_exact.entries
312
+
313
+Each entry has:
314
+
315
+| Field | Description |
316
+|:------|:------------|
317
+| `name` | Canonical profile basename. |
318
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
319
+| `filters.regions` | Optional region narrowing for this profile. |
320
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
321
+
322
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
323
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
324
+
325
+
326
+<a id="option-profiles-profiles-mode-combined-entries"></a>
327
+##### profiles.mode_combined.entries
328
+
329
+Each entry has:
330
+
331
+| Field | Description |
332
+|:------|:------------|
333
+| `name` | Canonical profile basename. |
334
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
335
+| `filters.regions` | Optional region narrowing for this profile. |
336
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
337
273
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
338
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
339
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
340
341
342
@@ -358,9 +424,48 @@ jobs:
424
profiles:
425
mode: exact
426
mode_exact:
361
- names:
362
- - sql_database
363
- - postgres_flexible
427
+ entries:
428
+ - name: sql_database
429
+ - name: postgres_flexible
430
+ auth:
431
+ mode: managed_identity
432
+
433
+```
434
+</details>
435
+
436
+###### Global and per-profile filters together
437
+
438
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
439
+
440
+<details open><summary>Config</summary>
441
+
442
+```yaml
443
+jobs:
444
+ - name: prod-databases
445
+ subscription_ids:
446
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
447
+ discovery:
448
+ mode: filters
449
+ mode_filters:
450
+ resource_groups:
451
+ - production-rg
452
+ regions:
453
+ - eastus
454
+ profiles:
455
+ mode: combined
456
+ mode_combined:
457
+ entries:
458
+ - name: sql_database
459
+ filters:
460
+ tags:
461
+ env:
462
+ - prod
463
+ # Effective scope:
464
+ # 1. Discovery first keeps only resources in production-rg and eastus.
465
+ # 2. Auto-selected profiles use that global scope as-is.
466
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
467
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
468
+ # because per-profile filters only narrow the globally discovered set.
469
auth:
470
mode: managed_identity
471
@@ -457,7 +562,7 @@ Labels:
562
| resource_group | The Azure resource group. |
563
| region | The Azure region where the resource is deployed. |
564
| resource_type | The Azure resource type identifier. |
460
-| profile | The Azure Monitor profile id. |
565
+| profile | The Azure Monitor profile basename. |
566
| subscription_id | The Azure subscription identifier. |
567
| resource_uid | The unique Azure resource identifier. |
568
@@ -577,8 +682,8 @@ Check the following:
682
683
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
684
580
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
581
-- **Verify a built-in profile exists** -- List available profiles:
685
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
686
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
687
```bash
688
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
689
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_container_instances.md
+119
-14
@@ -58,7 +58,7 @@ The collector has two discovery phases:
58
**Bootstrap (first run)**
59
60
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
61
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
61
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
62
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
63
- A single job can monitor multiple subscriptions.
64
@@ -160,7 +160,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
160
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
161
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
162
163
-User profile files with the same `id` as a stock profile override it.
163
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
164
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
165
166
@@ -188,8 +188,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
188
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
189
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
190
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
191
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
192
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
191
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
192
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
193
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
194
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
195
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
196
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -235,6 +236,7 @@ Controls how the collector finds candidate Azure resources.
236
##### discovery.mode_query.kql
237
238
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
239
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
240
241
The query **must** project these five columns:
242
@@ -246,6 +248,14 @@ The query **must** project these five columns:
248
| `resourceGroup` | Resource group name |
249
| `location` | Azure region |
250
251
+:::info
252
+
253
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
254
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
255
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
256
+
257
+:::
258
+
259
Example:
260
261
```
@@ -262,11 +272,67 @@ Controls how the collector decides which metric profiles to activate.
272
273
| Mode | Behavior |
274
|:-----|:---------|
265
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
266
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
267
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
275
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
276
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
277
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
278
+
279
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
280
+
281
+Filter layering:
282
+
283
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
284
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
285
+- The effective resource set for a profile is the intersection of both filter sets.
286
+- Per-profile filters never widen or bypass the global discovery scope.
287
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
288
+
289
+
290
+<a id="option-profiles-profiles-mode-auto-entries"></a>
291
+##### profiles.mode_auto.entries
292
+
293
+Each entry has:
294
+
295
+| Field | Description |
296
+|:------|:------------|
297
+| `name` | Canonical profile basename. |
298
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
299
+| `filters.regions` | Optional region narrowing for this profile. |
300
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
301
+
302
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
303
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
304
+
305
+
306
+<a id="option-profiles-profiles-mode-exact-entries"></a>
307
+##### profiles.mode_exact.entries
308
+
309
+Each entry has:
310
+
311
+| Field | Description |
312
+|:------|:------------|
313
+| `name` | Canonical profile basename. |
314
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
315
+| `filters.regions` | Optional region narrowing for this profile. |
316
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
317
+
318
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
319
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
320
+
321
+
322
+<a id="option-profiles-profiles-mode-combined-entries"></a>
323
+##### profiles.mode_combined.entries
324
+
325
+Each entry has:
326
+
327
+| Field | Description |
328
+|:------|:------------|
329
+| `name` | Canonical profile basename. |
330
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
331
+| `filters.regions` | Optional region narrowing for this profile. |
332
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
333
269
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
334
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
335
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
336
337
338
@@ -354,9 +420,48 @@ jobs:
420
profiles:
421
mode: exact
422
mode_exact:
357
- names:
358
- - sql_database
359
- - postgres_flexible
423
+ entries:
424
+ - name: sql_database
425
+ - name: postgres_flexible
426
+ auth:
427
+ mode: managed_identity
428
+
429
+```
430
+</details>
431
+
432
+###### Global and per-profile filters together
433
+
434
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
435
+
436
+<details open><summary>Config</summary>
437
+
438
+```yaml
439
+jobs:
440
+ - name: prod-databases
441
+ subscription_ids:
442
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
443
+ discovery:
444
+ mode: filters
445
+ mode_filters:
446
+ resource_groups:
447
+ - production-rg
448
+ regions:
449
+ - eastus
450
+ profiles:
451
+ mode: combined
452
+ mode_combined:
453
+ entries:
454
+ - name: sql_database
455
+ filters:
456
+ tags:
457
+ env:
458
+ - prod
459
+ # Effective scope:
460
+ # 1. Discovery first keeps only resources in production-rg and eastus.
461
+ # 2. Auto-selected profiles use that global scope as-is.
462
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
463
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
464
+ # because per-profile filters only narrow the globally discovered set.
465
auth:
466
mode: managed_identity
467
@@ -446,7 +551,7 @@ Labels:
551
| resource_group | The Azure resource group. |
552
| region | The Azure region where the resource is deployed. |
553
| resource_type | The Azure resource type identifier. |
449
-| profile | The Azure Monitor profile id. |
554
+| profile | The Azure Monitor profile basename. |
555
| subscription_id | The Azure subscription identifier. |
556
| resource_uid | The unique Azure resource identifier. |
557
@@ -547,8 +652,8 @@ Check the following:
652
653
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
654
550
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
551
-- **Verify a built-in profile exists** -- List available profiles:
655
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
656
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
657
```bash
658
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
659
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_container_registry.md
+119
-14
@@ -58,7 +58,7 @@ The collector has two discovery phases:
58
**Bootstrap (first run)**
59
60
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
61
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
61
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
62
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
63
- A single job can monitor multiple subscriptions.
64
@@ -160,7 +160,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
160
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
161
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
162
163
-User profile files with the same `id` as a stock profile override it.
163
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
164
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
165
166
@@ -188,8 +188,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
188
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
189
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
190
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
191
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
192
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
191
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
192
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
193
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
194
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
195
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
196
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -235,6 +236,7 @@ Controls how the collector finds candidate Azure resources.
236
##### discovery.mode_query.kql
237
238
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
239
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
240
241
The query **must** project these five columns:
242
@@ -246,6 +248,14 @@ The query **must** project these five columns:
248
| `resourceGroup` | Resource group name |
249
| `location` | Azure region |
250
251
+:::info
252
+
253
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
254
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
255
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
256
+
257
+:::
258
+
259
Example:
260
261
```
@@ -262,11 +272,67 @@ Controls how the collector decides which metric profiles to activate.
272
273
| Mode | Behavior |
274
|:-----|:---------|
265
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
266
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
267
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
275
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
276
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
277
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
278
+
279
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
280
+
281
+Filter layering:
282
+
283
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
284
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
285
+- The effective resource set for a profile is the intersection of both filter sets.
286
+- Per-profile filters never widen or bypass the global discovery scope.
287
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
288
+
289
+
290
+<a id="option-profiles-profiles-mode-auto-entries"></a>
291
+##### profiles.mode_auto.entries
292
+
293
+Each entry has:
294
+
295
+| Field | Description |
296
+|:------|:------------|
297
+| `name` | Canonical profile basename. |
298
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
299
+| `filters.regions` | Optional region narrowing for this profile. |
300
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
301
+
302
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
303
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
304
+
305
+
306
+<a id="option-profiles-profiles-mode-exact-entries"></a>
307
+##### profiles.mode_exact.entries
308
+
309
+Each entry has:
310
+
311
+| Field | Description |
312
+|:------|:------------|
313
+| `name` | Canonical profile basename. |
314
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
315
+| `filters.regions` | Optional region narrowing for this profile. |
316
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
317
+
318
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
319
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
320
+
321
+
322
+<a id="option-profiles-profiles-mode-combined-entries"></a>
323
+##### profiles.mode_combined.entries
324
+
325
+Each entry has:
326
+
327
+| Field | Description |
328
+|:------|:------------|
329
+| `name` | Canonical profile basename. |
330
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
331
+| `filters.regions` | Optional region narrowing for this profile. |
332
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
333
269
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
334
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
335
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
336
337
338
@@ -354,9 +420,48 @@ jobs:
420
profiles:
421
mode: exact
422
mode_exact:
357
- names:
358
- - sql_database
359
- - postgres_flexible
423
+ entries:
424
+ - name: sql_database
425
+ - name: postgres_flexible
426
+ auth:
427
+ mode: managed_identity
428
+
429
+```
430
+</details>
431
+
432
+###### Global and per-profile filters together
433
+
434
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
435
+
436
+<details open><summary>Config</summary>
437
+
438
+```yaml
439
+jobs:
440
+ - name: prod-databases
441
+ subscription_ids:
442
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
443
+ discovery:
444
+ mode: filters
445
+ mode_filters:
446
+ resource_groups:
447
+ - production-rg
448
+ regions:
449
+ - eastus
450
+ profiles:
451
+ mode: combined
452
+ mode_combined:
453
+ entries:
454
+ - name: sql_database
455
+ filters:
456
+ tags:
457
+ env:
458
+ - prod
459
+ # Effective scope:
460
+ # 1. Discovery first keeps only resources in production-rg and eastus.
461
+ # 2. Auto-selected profiles use that global scope as-is.
462
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
463
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
464
+ # because per-profile filters only narrow the globally discovered set.
465
auth:
466
mode: managed_identity
467
@@ -444,7 +549,7 @@ Labels:
549
| resource_group | The Azure resource group. |
550
| region | The Azure region where the resource is deployed. |
551
| resource_type | The Azure resource type identifier. |
447
-| profile | The Azure Monitor profile id. |
552
+| profile | The Azure Monitor profile basename. |
553
| subscription_id | The Azure subscription identifier. |
554
| resource_uid | The unique Azure resource identifier. |
555
@@ -547,8 +652,8 @@ Check the following:
652
653
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
654
550
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
551
-- **Verify a built-in profile exists** -- List available profiles:
655
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
656
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
657
```bash
658
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
659
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_cosmos_db_account.md
+119
-14
@@ -61,7 +61,7 @@ The collector has two discovery phases:
61
**Bootstrap (first run)**
62
63
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
64
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
64
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
65
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
66
- A single job can monitor multiple subscriptions.
67
@@ -163,7 +163,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
163
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
164
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
165
166
-User profile files with the same `id` as a stock profile override it.
166
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
167
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
168
169
@@ -191,8 +191,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
191
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
192
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
193
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
194
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
195
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
194
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
195
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
196
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
197
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
198
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
199
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -238,6 +239,7 @@ Controls how the collector finds candidate Azure resources.
239
##### discovery.mode_query.kql
240
241
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
242
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
243
244
The query **must** project these five columns:
245
@@ -249,6 +251,14 @@ The query **must** project these five columns:
251
| `resourceGroup` | Resource group name |
252
| `location` | Azure region |
253
254
+:::info
255
+
256
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
257
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
258
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
259
+
260
+:::
261
+
262
Example:
263
264
```
@@ -265,11 +275,67 @@ Controls how the collector decides which metric profiles to activate.
275
276
| Mode | Behavior |
277
|:-----|:---------|
268
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
269
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
270
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
278
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
279
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
280
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
281
+
282
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
283
+
284
+Filter layering:
285
+
286
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
287
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
288
+- The effective resource set for a profile is the intersection of both filter sets.
289
+- Per-profile filters never widen or bypass the global discovery scope.
290
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
291
+
292
+
293
+<a id="option-profiles-profiles-mode-auto-entries"></a>
294
+##### profiles.mode_auto.entries
295
+
296
+Each entry has:
297
+
298
+| Field | Description |
299
+|:------|:------------|
300
+| `name` | Canonical profile basename. |
301
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
302
+| `filters.regions` | Optional region narrowing for this profile. |
303
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
304
+
305
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
306
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
307
+
308
+
309
+<a id="option-profiles-profiles-mode-exact-entries"></a>
310
+##### profiles.mode_exact.entries
311
+
312
+Each entry has:
313
+
314
+| Field | Description |
315
+|:------|:------------|
316
+| `name` | Canonical profile basename. |
317
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
318
+| `filters.regions` | Optional region narrowing for this profile. |
319
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
320
+
321
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
322
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
323
+
324
+
325
+<a id="option-profiles-profiles-mode-combined-entries"></a>
326
+##### profiles.mode_combined.entries
327
+
328
+Each entry has:
329
+
330
+| Field | Description |
331
+|:------|:------------|
332
+| `name` | Canonical profile basename. |
333
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
334
+| `filters.regions` | Optional region narrowing for this profile. |
335
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
336
272
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
337
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
338
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
339
340
341
@@ -357,9 +423,48 @@ jobs:
423
profiles:
424
mode: exact
425
mode_exact:
360
- names:
361
- - sql_database
362
- - postgres_flexible
426
+ entries:
427
+ - name: sql_database
428
+ - name: postgres_flexible
429
+ auth:
430
+ mode: managed_identity
431
+
432
+```
433
+</details>
434
+
435
+###### Global and per-profile filters together
436
+
437
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
438
+
439
+<details open><summary>Config</summary>
440
+
441
+```yaml
442
+jobs:
443
+ - name: prod-databases
444
+ subscription_ids:
445
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
446
+ discovery:
447
+ mode: filters
448
+ mode_filters:
449
+ resource_groups:
450
+ - production-rg
451
+ regions:
452
+ - eastus
453
+ profiles:
454
+ mode: combined
455
+ mode_combined:
456
+ entries:
457
+ - name: sql_database
458
+ filters:
459
+ tags:
460
+ env:
461
+ - prod
462
+ # Effective scope:
463
+ # 1. Discovery first keeps only resources in production-rg and eastus.
464
+ # 2. Auto-selected profiles use that global scope as-is.
465
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
466
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
467
+ # because per-profile filters only narrow the globally discovered set.
468
auth:
469
mode: managed_identity
470
@@ -455,7 +560,7 @@ Labels:
560
| resource_group | The Azure resource group. |
561
| region | The Azure region where the resource is deployed. |
562
| resource_type | The Azure resource type identifier. |
458
-| profile | The Azure Monitor profile id. |
563
+| profile | The Azure Monitor profile basename. |
564
| subscription_id | The Azure subscription identifier. |
565
| resource_uid | The unique Azure resource identifier. |
566
@@ -573,8 +678,8 @@ Check the following:
678
679
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
680
576
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
577
-- **Verify a built-in profile exists** -- List available profiles:
681
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
682
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
683
```bash
684
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
685
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_data_explorer_cluster.md
+119
-14
@@ -65,7 +65,7 @@ The collector has two discovery phases:
65
**Bootstrap (first run)**
66
67
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
68
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
68
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
69
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
70
- A single job can monitor multiple subscriptions.
71
@@ -167,7 +167,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
167
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
168
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
169
170
-User profile files with the same `id` as a stock profile override it.
170
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
171
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
172
173
@@ -195,8 +195,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
195
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
196
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
197
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
198
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
199
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
198
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
199
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
200
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
201
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
202
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
203
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -242,6 +243,7 @@ Controls how the collector finds candidate Azure resources.
243
##### discovery.mode_query.kql
244
245
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
246
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
247
248
The query **must** project these five columns:
249
@@ -253,6 +255,14 @@ The query **must** project these five columns:
255
| `resourceGroup` | Resource group name |
256
| `location` | Azure region |
257
258
+:::info
259
+
260
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
261
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
262
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
263
+
264
+:::
265
+
266
Example:
267
268
```
@@ -269,11 +279,67 @@ Controls how the collector decides which metric profiles to activate.
279
280
| Mode | Behavior |
281
|:-----|:---------|
272
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
273
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
274
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
282
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
283
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
284
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
285
+
286
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
287
+
288
+Filter layering:
289
+
290
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
291
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
292
+- The effective resource set for a profile is the intersection of both filter sets.
293
+- Per-profile filters never widen or bypass the global discovery scope.
294
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
295
+
296
+
297
+<a id="option-profiles-profiles-mode-auto-entries"></a>
298
+##### profiles.mode_auto.entries
299
+
300
+Each entry has:
301
+
302
+| Field | Description |
303
+|:------|:------------|
304
+| `name` | Canonical profile basename. |
305
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
306
+| `filters.regions` | Optional region narrowing for this profile. |
307
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
308
+
309
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
310
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
311
+
312
+
313
+<a id="option-profiles-profiles-mode-exact-entries"></a>
314
+##### profiles.mode_exact.entries
315
+
316
+Each entry has:
317
+
318
+| Field | Description |
319
+|:------|:------------|
320
+| `name` | Canonical profile basename. |
321
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
322
+| `filters.regions` | Optional region narrowing for this profile. |
323
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
324
+
325
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
326
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
327
+
328
+
329
+<a id="option-profiles-profiles-mode-combined-entries"></a>
330
+##### profiles.mode_combined.entries
331
+
332
+Each entry has:
333
+
334
+| Field | Description |
335
+|:------|:------------|
336
+| `name` | Canonical profile basename. |
337
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
338
+| `filters.regions` | Optional region narrowing for this profile. |
339
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
340
276
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
341
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
342
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
343
344
345
@@ -361,9 +427,48 @@ jobs:
427
profiles:
428
mode: exact
429
mode_exact:
364
- names:
365
- - sql_database
366
- - postgres_flexible
430
+ entries:
431
+ - name: sql_database
432
+ - name: postgres_flexible
433
+ auth:
434
+ mode: managed_identity
435
+
436
+```
437
+</details>
438
+
439
+###### Global and per-profile filters together
440
+
441
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
442
+
443
+<details open><summary>Config</summary>
444
+
445
+```yaml
446
+jobs:
447
+ - name: prod-databases
448
+ subscription_ids:
449
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
450
+ discovery:
451
+ mode: filters
452
+ mode_filters:
453
+ resource_groups:
454
+ - production-rg
455
+ regions:
456
+ - eastus
457
+ profiles:
458
+ mode: combined
459
+ mode_combined:
460
+ entries:
461
+ - name: sql_database
462
+ filters:
463
+ tags:
464
+ env:
465
+ - prod
466
+ # Effective scope:
467
+ # 1. Discovery first keeps only resources in production-rg and eastus.
468
+ # 2. Auto-selected profiles use that global scope as-is.
469
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
470
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
471
+ # because per-profile filters only narrow the globally discovered set.
472
auth:
473
mode: managed_identity
474
@@ -470,7 +575,7 @@ Labels:
575
| resource_group | The Azure resource group. |
576
| region | The Azure region where the resource is deployed. |
577
| resource_type | The Azure resource type identifier. |
473
-| profile | The Azure Monitor profile id. |
578
+| profile | The Azure Monitor profile basename. |
579
| subscription_id | The Azure subscription identifier. |
580
| resource_uid | The unique Azure resource identifier. |
581
@@ -612,8 +717,8 @@ Check the following:
717
718
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
719
615
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
616
-- **Verify a built-in profile exists** -- List available profiles:
720
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
721
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
722
```bash
723
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
724
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_data_factory.md
+119
-14
@@ -63,7 +63,7 @@ The collector has two discovery phases:
63
**Bootstrap (first run)**
64
65
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
66
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
66
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
67
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
68
- A single job can monitor multiple subscriptions.
69
@@ -165,7 +165,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
165
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
166
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
167
168
-User profile files with the same `id` as a stock profile override it.
168
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
169
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
170
171
@@ -193,8 +193,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
193
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
194
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
195
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
196
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
197
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
196
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
197
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
198
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
199
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
200
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
201
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -240,6 +241,7 @@ Controls how the collector finds candidate Azure resources.
241
##### discovery.mode_query.kql
242
243
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
244
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
245
246
The query **must** project these five columns:
247
@@ -251,6 +253,14 @@ The query **must** project these five columns:
253
| `resourceGroup` | Resource group name |
254
| `location` | Azure region |
255
256
+:::info
257
+
258
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
259
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
260
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
261
+
262
+:::
263
+
264
Example:
265
266
```
@@ -267,11 +277,67 @@ Controls how the collector decides which metric profiles to activate.
277
278
| Mode | Behavior |
279
|:-----|:---------|
270
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
271
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
272
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
280
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
281
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
282
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
283
+
284
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
285
+
286
+Filter layering:
287
+
288
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
289
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
290
+- The effective resource set for a profile is the intersection of both filter sets.
291
+- Per-profile filters never widen or bypass the global discovery scope.
292
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
293
+
294
+
295
+<a id="option-profiles-profiles-mode-auto-entries"></a>
296
+##### profiles.mode_auto.entries
297
+
298
+Each entry has:
299
+
300
+| Field | Description |
301
+|:------|:------------|
302
+| `name` | Canonical profile basename. |
303
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
304
+| `filters.regions` | Optional region narrowing for this profile. |
305
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
306
+
307
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
308
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
309
+
310
+
311
+<a id="option-profiles-profiles-mode-exact-entries"></a>
312
+##### profiles.mode_exact.entries
313
+
314
+Each entry has:
315
+
316
+| Field | Description |
317
+|:------|:------------|
318
+| `name` | Canonical profile basename. |
319
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
320
+| `filters.regions` | Optional region narrowing for this profile. |
321
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
322
+
323
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
324
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
325
+
326
+
327
+<a id="option-profiles-profiles-mode-combined-entries"></a>
328
+##### profiles.mode_combined.entries
329
+
330
+Each entry has:
331
+
332
+| Field | Description |
333
+|:------|:------------|
334
+| `name` | Canonical profile basename. |
335
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
336
+| `filters.regions` | Optional region narrowing for this profile. |
337
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
338
274
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
339
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
340
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
341
342
343
@@ -359,9 +425,48 @@ jobs:
425
profiles:
426
mode: exact
427
mode_exact:
362
- names:
363
- - sql_database
364
- - postgres_flexible
428
+ entries:
429
+ - name: sql_database
430
+ - name: postgres_flexible
431
+ auth:
432
+ mode: managed_identity
433
+
434
+```
435
+</details>
436
+
437
+###### Global and per-profile filters together
438
+
439
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
440
+
441
+<details open><summary>Config</summary>
442
+
443
+```yaml
444
+jobs:
445
+ - name: prod-databases
446
+ subscription_ids:
447
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
448
+ discovery:
449
+ mode: filters
450
+ mode_filters:
451
+ resource_groups:
452
+ - production-rg
453
+ regions:
454
+ - eastus
455
+ profiles:
456
+ mode: combined
457
+ mode_combined:
458
+ entries:
459
+ - name: sql_database
460
+ filters:
461
+ tags:
462
+ env:
463
+ - prod
464
+ # Effective scope:
465
+ # 1. Discovery first keeps only resources in production-rg and eastus.
466
+ # 2. Auto-selected profiles use that global scope as-is.
467
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
468
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
469
+ # because per-profile filters only narrow the globally discovered set.
470
auth:
471
mode: managed_identity
472
@@ -473,7 +578,7 @@ Labels:
578
| resource_group | The Azure resource group. |
579
| region | The Azure region where the resource is deployed. |
580
| resource_type | The Azure resource type identifier. |
476
-| profile | The Azure Monitor profile id. |
581
+| profile | The Azure Monitor profile basename. |
582
| subscription_id | The Azure subscription identifier. |
583
| resource_uid | The unique Azure resource identifier. |
584
@@ -619,8 +724,8 @@ Check the following:
724
725
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
726
622
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
623
-- **Verify a built-in profile exists** -- List available profiles:
727
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
728
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
729
```bash
730
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
731
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_event_grid_topic.md
+119
-14
@@ -59,7 +59,7 @@ The collector has two discovery phases:
59
**Bootstrap (first run)**
60
61
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
62
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
62
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
63
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
64
- A single job can monitor multiple subscriptions.
65
@@ -161,7 +161,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
161
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
162
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
163
164
-User profile files with the same `id` as a stock profile override it.
164
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
165
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
166
167
@@ -189,8 +189,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
189
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
190
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
191
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
192
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
193
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
192
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
193
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
194
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
195
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
196
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
197
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -236,6 +237,7 @@ Controls how the collector finds candidate Azure resources.
237
##### discovery.mode_query.kql
238
239
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
240
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
241
242
The query **must** project these five columns:
243
@@ -247,6 +249,14 @@ The query **must** project these five columns:
249
| `resourceGroup` | Resource group name |
250
| `location` | Azure region |
251
252
+:::info
253
+
254
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
255
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
256
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
257
+
258
+:::
259
+
260
Example:
261
262
```
@@ -263,11 +273,67 @@ Controls how the collector decides which metric profiles to activate.
273
274
| Mode | Behavior |
275
|:-----|:---------|
266
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
267
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
268
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
276
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
277
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
278
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
279
+
280
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
281
+
282
+Filter layering:
283
+
284
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
285
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
286
+- The effective resource set for a profile is the intersection of both filter sets.
287
+- Per-profile filters never widen or bypass the global discovery scope.
288
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
289
+
290
+
291
+<a id="option-profiles-profiles-mode-auto-entries"></a>
292
+##### profiles.mode_auto.entries
293
+
294
+Each entry has:
295
+
296
+| Field | Description |
297
+|:------|:------------|
298
+| `name` | Canonical profile basename. |
299
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
300
+| `filters.regions` | Optional region narrowing for this profile. |
301
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
302
+
303
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
304
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
305
+
306
+
307
+<a id="option-profiles-profiles-mode-exact-entries"></a>
308
+##### profiles.mode_exact.entries
309
+
310
+Each entry has:
311
+
312
+| Field | Description |
313
+|:------|:------------|
314
+| `name` | Canonical profile basename. |
315
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
316
+| `filters.regions` | Optional region narrowing for this profile. |
317
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
318
+
319
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
320
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
321
+
322
+
323
+<a id="option-profiles-profiles-mode-combined-entries"></a>
324
+##### profiles.mode_combined.entries
325
+
326
+Each entry has:
327
+
328
+| Field | Description |
329
+|:------|:------------|
330
+| `name` | Canonical profile basename. |
331
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
332
+| `filters.regions` | Optional region narrowing for this profile. |
333
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
334
270
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
335
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
336
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
337
338
339
@@ -355,9 +421,48 @@ jobs:
421
profiles:
422
mode: exact
423
mode_exact:
358
- names:
359
- - sql_database
360
- - postgres_flexible
424
+ entries:
425
+ - name: sql_database
426
+ - name: postgres_flexible
427
+ auth:
428
+ mode: managed_identity
429
+
430
+```
431
+</details>
432
+
433
+###### Global and per-profile filters together
434
+
435
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
436
+
437
+<details open><summary>Config</summary>
438
+
439
+```yaml
440
+jobs:
441
+ - name: prod-databases
442
+ subscription_ids:
443
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
444
+ discovery:
445
+ mode: filters
446
+ mode_filters:
447
+ resource_groups:
448
+ - production-rg
449
+ regions:
450
+ - eastus
451
+ profiles:
452
+ mode: combined
453
+ mode_combined:
454
+ entries:
455
+ - name: sql_database
456
+ filters:
457
+ tags:
458
+ env:
459
+ - prod
460
+ # Effective scope:
461
+ # 1. Discovery first keeps only resources in production-rg and eastus.
462
+ # 2. Auto-selected profiles use that global scope as-is.
463
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
464
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
465
+ # because per-profile filters only narrow the globally discovered set.
466
auth:
467
mode: managed_identity
468
@@ -449,7 +554,7 @@ Labels:
554
| resource_group | The Azure resource group. |
555
| region | The Azure region where the resource is deployed. |
556
| resource_type | The Azure resource type identifier. |
452
-| profile | The Azure Monitor profile id. |
557
+| profile | The Azure Monitor profile basename. |
558
| subscription_id | The Azure subscription identifier. |
559
| resource_uid | The unique Azure resource identifier. |
560
@@ -553,8 +658,8 @@ Check the following:
658
659
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
660
556
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
557
-- **Verify a built-in profile exists** -- List available profiles:
661
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
662
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
663
```bash
664
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
665
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_event_hubs_namespace.md
+119
-14
@@ -62,7 +62,7 @@ The collector has two discovery phases:
62
**Bootstrap (first run)**
63
64
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
65
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
65
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
66
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
67
- A single job can monitor multiple subscriptions.
68
@@ -164,7 +164,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
164
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
165
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
166
167
-User profile files with the same `id` as a stock profile override it.
167
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
168
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
169
170
@@ -192,8 +192,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
192
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
193
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
194
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
195
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
196
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
195
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
196
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
197
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
198
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
199
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
200
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -239,6 +240,7 @@ Controls how the collector finds candidate Azure resources.
240
##### discovery.mode_query.kql
241
242
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
243
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
244
245
The query **must** project these five columns:
246
@@ -250,6 +252,14 @@ The query **must** project these five columns:
252
| `resourceGroup` | Resource group name |
253
| `location` | Azure region |
254
255
+:::info
256
+
257
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
258
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
259
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
260
+
261
+:::
262
+
263
Example:
264
265
```
@@ -266,11 +276,67 @@ Controls how the collector decides which metric profiles to activate.
276
277
| Mode | Behavior |
278
|:-----|:---------|
269
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
270
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
271
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
279
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
280
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
281
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
282
+
283
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
284
+
285
+Filter layering:
286
+
287
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
288
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
289
+- The effective resource set for a profile is the intersection of both filter sets.
290
+- Per-profile filters never widen or bypass the global discovery scope.
291
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
292
+
293
+
294
+<a id="option-profiles-profiles-mode-auto-entries"></a>
295
+##### profiles.mode_auto.entries
296
+
297
+Each entry has:
298
+
299
+| Field | Description |
300
+|:------|:------------|
301
+| `name` | Canonical profile basename. |
302
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
303
+| `filters.regions` | Optional region narrowing for this profile. |
304
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
305
+
306
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
307
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
308
+
309
+
310
+<a id="option-profiles-profiles-mode-exact-entries"></a>
311
+##### profiles.mode_exact.entries
312
+
313
+Each entry has:
314
+
315
+| Field | Description |
316
+|:------|:------------|
317
+| `name` | Canonical profile basename. |
318
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
319
+| `filters.regions` | Optional region narrowing for this profile. |
320
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
321
+
322
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
323
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
324
+
325
+
326
+<a id="option-profiles-profiles-mode-combined-entries"></a>
327
+##### profiles.mode_combined.entries
328
+
329
+Each entry has:
330
+
331
+| Field | Description |
332
+|:------|:------------|
333
+| `name` | Canonical profile basename. |
334
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
335
+| `filters.regions` | Optional region narrowing for this profile. |
336
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
337
273
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
338
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
339
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
340
341
342
@@ -358,9 +424,48 @@ jobs:
424
profiles:
425
mode: exact
426
mode_exact:
361
- names:
362
- - sql_database
363
- - postgres_flexible
427
+ entries:
428
+ - name: sql_database
429
+ - name: postgres_flexible
430
+ auth:
431
+ mode: managed_identity
432
+
433
+```
434
+</details>
435
+
436
+###### Global and per-profile filters together
437
+
438
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
439
+
440
+<details open><summary>Config</summary>
441
+
442
+```yaml
443
+jobs:
444
+ - name: prod-databases
445
+ subscription_ids:
446
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
447
+ discovery:
448
+ mode: filters
449
+ mode_filters:
450
+ resource_groups:
451
+ - production-rg
452
+ regions:
453
+ - eastus
454
+ profiles:
455
+ mode: combined
456
+ mode_combined:
457
+ entries:
458
+ - name: sql_database
459
+ filters:
460
+ tags:
461
+ env:
462
+ - prod
463
+ # Effective scope:
464
+ # 1. Discovery first keeps only resources in production-rg and eastus.
465
+ # 2. Auto-selected profiles use that global scope as-is.
466
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
467
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
468
+ # because per-profile filters only narrow the globally discovered set.
469
auth:
470
mode: managed_identity
471
@@ -456,7 +561,7 @@ Labels:
561
| resource_group | The Azure resource group. |
562
| region | The Azure region where the resource is deployed. |
563
| resource_type | The Azure resource type identifier. |
459
-| profile | The Azure Monitor profile id. |
564
+| profile | The Azure Monitor profile basename. |
565
| subscription_id | The Azure subscription identifier. |
566
| resource_uid | The unique Azure resource identifier. |
567
@@ -567,8 +672,8 @@ Check the following:
672
673
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
674
570
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
571
-- **Verify a built-in profile exists** -- List available profiles:
675
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
676
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
677
```bash
678
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
679
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_expressroute_circuit.md
+119
-14
@@ -60,7 +60,7 @@ The collector has two discovery phases:
60
**Bootstrap (first run)**
61
62
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
63
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
63
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
64
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
65
- A single job can monitor multiple subscriptions.
66
@@ -162,7 +162,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
162
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
163
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
164
165
-User profile files with the same `id` as a stock profile override it.
165
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
166
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
167
168
@@ -190,8 +190,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
190
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
191
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
192
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
193
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
194
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
193
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
194
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
195
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
196
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
197
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
198
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -237,6 +238,7 @@ Controls how the collector finds candidate Azure resources.
238
##### discovery.mode_query.kql
239
240
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
241
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
242
243
The query **must** project these five columns:
244
@@ -248,6 +250,14 @@ The query **must** project these five columns:
250
| `resourceGroup` | Resource group name |
251
| `location` | Azure region |
252
253
+:::info
254
+
255
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
256
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
257
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
258
+
259
+:::
260
+
261
Example:
262
263
```
@@ -264,11 +274,67 @@ Controls how the collector decides which metric profiles to activate.
274
275
| Mode | Behavior |
276
|:-----|:---------|
267
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
268
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
269
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
277
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
278
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
279
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
280
+
281
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
282
+
283
+Filter layering:
284
+
285
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
286
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
287
+- The effective resource set for a profile is the intersection of both filter sets.
288
+- Per-profile filters never widen or bypass the global discovery scope.
289
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
290
+
291
+
292
+<a id="option-profiles-profiles-mode-auto-entries"></a>
293
+##### profiles.mode_auto.entries
294
+
295
+Each entry has:
296
+
297
+| Field | Description |
298
+|:------|:------------|
299
+| `name` | Canonical profile basename. |
300
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
301
+| `filters.regions` | Optional region narrowing for this profile. |
302
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
303
+
304
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
305
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
306
+
307
+
308
+<a id="option-profiles-profiles-mode-exact-entries"></a>
309
+##### profiles.mode_exact.entries
310
+
311
+Each entry has:
312
+
313
+| Field | Description |
314
+|:------|:------------|
315
+| `name` | Canonical profile basename. |
316
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
317
+| `filters.regions` | Optional region narrowing for this profile. |
318
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
319
+
320
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
321
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
322
+
323
+
324
+<a id="option-profiles-profiles-mode-combined-entries"></a>
325
+##### profiles.mode_combined.entries
326
+
327
+Each entry has:
328
+
329
+| Field | Description |
330
+|:------|:------------|
331
+| `name` | Canonical profile basename. |
332
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
333
+| `filters.regions` | Optional region narrowing for this profile. |
334
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
335
271
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
336
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
337
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
338
339
340
@@ -356,9 +422,48 @@ jobs:
422
profiles:
423
mode: exact
424
mode_exact:
359
- names:
360
- - sql_database
361
- - postgres_flexible
425
+ entries:
426
+ - name: sql_database
427
+ - name: postgres_flexible
428
+ auth:
429
+ mode: managed_identity
430
+
431
+```
432
+</details>
433
+
434
+###### Global and per-profile filters together
435
+
436
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
437
+
438
+<details open><summary>Config</summary>
439
+
440
+```yaml
441
+jobs:
442
+ - name: prod-databases
443
+ subscription_ids:
444
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
445
+ discovery:
446
+ mode: filters
447
+ mode_filters:
448
+ resource_groups:
449
+ - production-rg
450
+ regions:
451
+ - eastus
452
+ profiles:
453
+ mode: combined
454
+ mode_combined:
455
+ entries:
456
+ - name: sql_database
457
+ filters:
458
+ tags:
459
+ env:
460
+ - prod
461
+ # Effective scope:
462
+ # 1. Discovery first keeps only resources in production-rg and eastus.
463
+ # 2. Auto-selected profiles use that global scope as-is.
464
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
465
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
466
+ # because per-profile filters only narrow the globally discovered set.
467
auth:
468
mode: managed_identity
469
@@ -450,7 +555,7 @@ Labels:
555
| resource_group | The Azure resource group. |
556
| region | The Azure region where the resource is deployed. |
557
| resource_type | The Azure resource type identifier. |
453
-| profile | The Azure Monitor profile id. |
558
+| profile | The Azure Monitor profile basename. |
559
| subscription_id | The Azure subscription identifier. |
560
| resource_uid | The unique Azure resource identifier. |
561
@@ -555,8 +660,8 @@ Check the following:
660
661
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
662
558
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
559
-- **Verify a built-in profile exists** -- List available profiles:
663
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
664
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
665
```bash
666
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
667
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_expressroute_gateway.md
+119
-14
@@ -60,7 +60,7 @@ The collector has two discovery phases:
60
**Bootstrap (first run)**
61
62
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
63
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
63
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
64
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
65
- A single job can monitor multiple subscriptions.
66
@@ -162,7 +162,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
162
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
163
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
164
165
-User profile files with the same `id` as a stock profile override it.
165
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
166
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
167
168
@@ -190,8 +190,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
190
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
191
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
192
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
193
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
194
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
193
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
194
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
195
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
196
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
197
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
198
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -237,6 +238,7 @@ Controls how the collector finds candidate Azure resources.
238
##### discovery.mode_query.kql
239
240
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
241
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
242
243
The query **must** project these five columns:
244
@@ -248,6 +250,14 @@ The query **must** project these five columns:
250
| `resourceGroup` | Resource group name |
251
| `location` | Azure region |
252
253
+:::info
254
+
255
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
256
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
257
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
258
+
259
+:::
260
+
261
Example:
262
263
```
@@ -264,11 +274,67 @@ Controls how the collector decides which metric profiles to activate.
274
275
| Mode | Behavior |
276
|:-----|:---------|
267
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
268
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
269
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
277
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
278
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
279
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
280
+
281
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
282
+
283
+Filter layering:
284
+
285
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
286
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
287
+- The effective resource set for a profile is the intersection of both filter sets.
288
+- Per-profile filters never widen or bypass the global discovery scope.
289
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
290
+
291
+
292
+<a id="option-profiles-profiles-mode-auto-entries"></a>
293
+##### profiles.mode_auto.entries
294
+
295
+Each entry has:
296
+
297
+| Field | Description |
298
+|:------|:------------|
299
+| `name` | Canonical profile basename. |
300
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
301
+| `filters.regions` | Optional region narrowing for this profile. |
302
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
303
+
304
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
305
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
306
+
307
+
308
+<a id="option-profiles-profiles-mode-exact-entries"></a>
309
+##### profiles.mode_exact.entries
310
+
311
+Each entry has:
312
+
313
+| Field | Description |
314
+|:------|:------------|
315
+| `name` | Canonical profile basename. |
316
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
317
+| `filters.regions` | Optional region narrowing for this profile. |
318
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
319
+
320
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
321
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
322
+
323
+
324
+<a id="option-profiles-profiles-mode-combined-entries"></a>
325
+##### profiles.mode_combined.entries
326
+
327
+Each entry has:
328
+
329
+| Field | Description |
330
+|:------|:------------|
331
+| `name` | Canonical profile basename. |
332
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
333
+| `filters.regions` | Optional region narrowing for this profile. |
334
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
335
271
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
336
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
337
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
338
339
340
@@ -356,9 +422,48 @@ jobs:
422
profiles:
423
mode: exact
424
mode_exact:
359
- names:
360
- - sql_database
361
- - postgres_flexible
425
+ entries:
426
+ - name: sql_database
427
+ - name: postgres_flexible
428
+ auth:
429
+ mode: managed_identity
430
+
431
+```
432
+</details>
433
+
434
+###### Global and per-profile filters together
435
+
436
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
437
+
438
+<details open><summary>Config</summary>
439
+
440
+```yaml
441
+jobs:
442
+ - name: prod-databases
443
+ subscription_ids:
444
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
445
+ discovery:
446
+ mode: filters
447
+ mode_filters:
448
+ resource_groups:
449
+ - production-rg
450
+ regions:
451
+ - eastus
452
+ profiles:
453
+ mode: combined
454
+ mode_combined:
455
+ entries:
456
+ - name: sql_database
457
+ filters:
458
+ tags:
459
+ env:
460
+ - prod
461
+ # Effective scope:
462
+ # 1. Discovery first keeps only resources in production-rg and eastus.
463
+ # 2. Auto-selected profiles use that global scope as-is.
464
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
465
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
466
+ # because per-profile filters only narrow the globally discovered set.
467
auth:
468
mode: managed_identity
469
@@ -449,7 +554,7 @@ Labels:
554
| resource_group | The Azure resource group. |
555
| region | The Azure region where the resource is deployed. |
556
| resource_type | The Azure resource type identifier. |
452
-| profile | The Azure Monitor profile id. |
557
+| profile | The Azure Monitor profile basename. |
558
| subscription_id | The Azure subscription identifier. |
559
| resource_uid | The unique Azure resource identifier. |
560
@@ -557,8 +662,8 @@ Check the following:
662
663
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
664
560
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
561
-- **Verify a built-in profile exists** -- List available profiles:
665
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
666
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
667
```bash
668
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
669
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_firewall.md
+119
-14
@@ -61,7 +61,7 @@ The collector has two discovery phases:
61
**Bootstrap (first run)**
62
63
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
64
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
64
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
65
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
66
- A single job can monitor multiple subscriptions.
67
@@ -163,7 +163,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
163
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
164
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
165
166
-User profile files with the same `id` as a stock profile override it.
166
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
167
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
168
169
@@ -191,8 +191,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
191
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
192
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
193
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
194
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
195
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
194
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
195
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
196
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
197
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
198
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
199
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -238,6 +239,7 @@ Controls how the collector finds candidate Azure resources.
239
##### discovery.mode_query.kql
240
241
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
242
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
243
244
The query **must** project these five columns:
245
@@ -249,6 +251,14 @@ The query **must** project these five columns:
251
| `resourceGroup` | Resource group name |
252
| `location` | Azure region |
253
254
+:::info
255
+
256
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
257
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
258
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
259
+
260
+:::
261
+
262
Example:
263
264
```
@@ -265,11 +275,67 @@ Controls how the collector decides which metric profiles to activate.
275
276
| Mode | Behavior |
277
|:-----|:---------|
268
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
269
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
270
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
278
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
279
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
280
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
281
+
282
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
283
+
284
+Filter layering:
285
+
286
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
287
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
288
+- The effective resource set for a profile is the intersection of both filter sets.
289
+- Per-profile filters never widen or bypass the global discovery scope.
290
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
291
+
292
+
293
+<a id="option-profiles-profiles-mode-auto-entries"></a>
294
+##### profiles.mode_auto.entries
295
+
296
+Each entry has:
297
+
298
+| Field | Description |
299
+|:------|:------------|
300
+| `name` | Canonical profile basename. |
301
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
302
+| `filters.regions` | Optional region narrowing for this profile. |
303
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
304
+
305
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
306
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
307
+
308
+
309
+<a id="option-profiles-profiles-mode-exact-entries"></a>
310
+##### profiles.mode_exact.entries
311
+
312
+Each entry has:
313
+
314
+| Field | Description |
315
+|:------|:------------|
316
+| `name` | Canonical profile basename. |
317
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
318
+| `filters.regions` | Optional region narrowing for this profile. |
319
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
320
+
321
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
322
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
323
+
324
+
325
+<a id="option-profiles-profiles-mode-combined-entries"></a>
326
+##### profiles.mode_combined.entries
327
+
328
+Each entry has:
329
+
330
+| Field | Description |
331
+|:------|:------------|
332
+| `name` | Canonical profile basename. |
333
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
334
+| `filters.regions` | Optional region narrowing for this profile. |
335
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
336
272
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
337
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
338
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
339
340
341
@@ -357,9 +423,48 @@ jobs:
423
profiles:
424
mode: exact
425
mode_exact:
360
- names:
361
- - sql_database
362
- - postgres_flexible
426
+ entries:
427
+ - name: sql_database
428
+ - name: postgres_flexible
429
+ auth:
430
+ mode: managed_identity
431
+
432
+```
433
+</details>
434
+
435
+###### Global and per-profile filters together
436
+
437
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
438
+
439
+<details open><summary>Config</summary>
440
+
441
+```yaml
442
+jobs:
443
+ - name: prod-databases
444
+ subscription_ids:
445
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
446
+ discovery:
447
+ mode: filters
448
+ mode_filters:
449
+ resource_groups:
450
+ - production-rg
451
+ regions:
452
+ - eastus
453
+ profiles:
454
+ mode: combined
455
+ mode_combined:
456
+ entries:
457
+ - name: sql_database
458
+ filters:
459
+ tags:
460
+ env:
461
+ - prod
462
+ # Effective scope:
463
+ # 1. Discovery first keeps only resources in production-rg and eastus.
464
+ # 2. Auto-selected profiles use that global scope as-is.
465
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
466
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
467
+ # because per-profile filters only narrow the globally discovered set.
468
auth:
469
mode: managed_identity
470
@@ -448,7 +553,7 @@ Labels:
553
| resource_group | The Azure resource group. |
554
| region | The Azure region where the resource is deployed. |
555
| resource_type | The Azure resource type identifier. |
451
-| profile | The Azure Monitor profile id. |
556
+| profile | The Azure Monitor profile basename. |
557
| subscription_id | The Azure subscription identifier. |
558
| resource_uid | The unique Azure resource identifier. |
559
@@ -553,8 +658,8 @@ Check the following:
658
659
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
660
556
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
557
-- **Verify a built-in profile exists** -- List available profiles:
661
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
662
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
663
```bash
664
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
665
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_front_door.md
+119
-14
@@ -62,7 +62,7 @@ The collector has two discovery phases:
62
**Bootstrap (first run)**
63
64
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
65
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
65
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
66
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
67
- A single job can monitor multiple subscriptions.
68
@@ -164,7 +164,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
164
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
165
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
166
167
-User profile files with the same `id` as a stock profile override it.
167
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
168
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
169
170
@@ -192,8 +192,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
192
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
193
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
194
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
195
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
196
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
195
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
196
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
197
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
198
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
199
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
200
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -239,6 +240,7 @@ Controls how the collector finds candidate Azure resources.
240
##### discovery.mode_query.kql
241
242
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
243
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
244
245
The query **must** project these five columns:
246
@@ -250,6 +252,14 @@ The query **must** project these five columns:
252
| `resourceGroup` | Resource group name |
253
| `location` | Azure region |
254
255
+:::info
256
+
257
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
258
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
259
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
260
+
261
+:::
262
+
263
Example:
264
265
```
@@ -266,11 +276,67 @@ Controls how the collector decides which metric profiles to activate.
276
277
| Mode | Behavior |
278
|:-----|:---------|
269
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
270
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
271
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
279
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
280
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
281
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
282
+
283
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
284
+
285
+Filter layering:
286
+
287
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
288
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
289
+- The effective resource set for a profile is the intersection of both filter sets.
290
+- Per-profile filters never widen or bypass the global discovery scope.
291
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
292
+
293
+
294
+<a id="option-profiles-profiles-mode-auto-entries"></a>
295
+##### profiles.mode_auto.entries
296
+
297
+Each entry has:
298
+
299
+| Field | Description |
300
+|:------|:------------|
301
+| `name` | Canonical profile basename. |
302
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
303
+| `filters.regions` | Optional region narrowing for this profile. |
304
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
305
+
306
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
307
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
308
+
309
+
310
+<a id="option-profiles-profiles-mode-exact-entries"></a>
311
+##### profiles.mode_exact.entries
312
+
313
+Each entry has:
314
+
315
+| Field | Description |
316
+|:------|:------------|
317
+| `name` | Canonical profile basename. |
318
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
319
+| `filters.regions` | Optional region narrowing for this profile. |
320
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
321
+
322
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
323
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
324
+
325
+
326
+<a id="option-profiles-profiles-mode-combined-entries"></a>
327
+##### profiles.mode_combined.entries
328
+
329
+Each entry has:
330
+
331
+| Field | Description |
332
+|:------|:------------|
333
+| `name` | Canonical profile basename. |
334
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
335
+| `filters.regions` | Optional region narrowing for this profile. |
336
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
337
273
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
338
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
339
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
340
341
342
@@ -358,9 +424,48 @@ jobs:
424
profiles:
425
mode: exact
426
mode_exact:
361
- names:
362
- - sql_database
363
- - postgres_flexible
427
+ entries:
428
+ - name: sql_database
429
+ - name: postgres_flexible
430
+ auth:
431
+ mode: managed_identity
432
+
433
+```
434
+</details>
435
+
436
+###### Global and per-profile filters together
437
+
438
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
439
+
440
+<details open><summary>Config</summary>
441
+
442
+```yaml
443
+jobs:
444
+ - name: prod-databases
445
+ subscription_ids:
446
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
447
+ discovery:
448
+ mode: filters
449
+ mode_filters:
450
+ resource_groups:
451
+ - production-rg
452
+ regions:
453
+ - eastus
454
+ profiles:
455
+ mode: combined
456
+ mode_combined:
457
+ entries:
458
+ - name: sql_database
459
+ filters:
460
+ tags:
461
+ env:
462
+ - prod
463
+ # Effective scope:
464
+ # 1. Discovery first keeps only resources in production-rg and eastus.
465
+ # 2. Auto-selected profiles use that global scope as-is.
466
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
467
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
468
+ # because per-profile filters only narrow the globally discovered set.
469
auth:
470
mode: managed_identity
471
@@ -453,7 +558,7 @@ Labels:
558
| resource_group | The Azure resource group. |
559
| region | The Azure region where the resource is deployed. |
560
| resource_type | The Azure resource type identifier. |
456
-| profile | The Azure Monitor profile id. |
561
+| profile | The Azure Monitor profile basename. |
562
| subscription_id | The Azure subscription identifier. |
563
| resource_uid | The unique Azure resource identifier. |
564
@@ -563,8 +668,8 @@ Check the following:
668
669
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
670
566
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
567
-- **Verify a built-in profile exists** -- List available profiles:
671
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
672
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
673
```bash
674
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
675
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_functions.md
+119
-14
@@ -62,7 +62,7 @@ The collector has two discovery phases:
62
**Bootstrap (first run)**
63
64
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
65
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
65
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
66
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
67
- A single job can monitor multiple subscriptions.
68
@@ -164,7 +164,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
164
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
165
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
166
167
-User profile files with the same `id` as a stock profile override it.
167
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
168
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
169
170
@@ -192,8 +192,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
192
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
193
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
194
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
195
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
196
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
195
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
196
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
197
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
198
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
199
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
200
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -239,6 +240,7 @@ Controls how the collector finds candidate Azure resources.
240
##### discovery.mode_query.kql
241
242
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
243
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
244
245
The query **must** project these five columns:
246
@@ -250,6 +252,14 @@ The query **must** project these five columns:
252
| `resourceGroup` | Resource group name |
253
| `location` | Azure region |
254
255
+:::info
256
+
257
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
258
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
259
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
260
+
261
+:::
262
+
263
Example:
264
265
```
@@ -266,11 +276,67 @@ Controls how the collector decides which metric profiles to activate.
276
277
| Mode | Behavior |
278
|:-----|:---------|
269
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
270
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
271
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
279
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
280
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
281
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
282
+
283
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
284
+
285
+Filter layering:
286
+
287
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
288
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
289
+- The effective resource set for a profile is the intersection of both filter sets.
290
+- Per-profile filters never widen or bypass the global discovery scope.
291
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
292
+
293
+
294
+<a id="option-profiles-profiles-mode-auto-entries"></a>
295
+##### profiles.mode_auto.entries
296
+
297
+Each entry has:
298
+
299
+| Field | Description |
300
+|:------|:------------|
301
+| `name` | Canonical profile basename. |
302
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
303
+| `filters.regions` | Optional region narrowing for this profile. |
304
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
305
+
306
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
307
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
308
+
309
+
310
+<a id="option-profiles-profiles-mode-exact-entries"></a>
311
+##### profiles.mode_exact.entries
312
+
313
+Each entry has:
314
+
315
+| Field | Description |
316
+|:------|:------------|
317
+| `name` | Canonical profile basename. |
318
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
319
+| `filters.regions` | Optional region narrowing for this profile. |
320
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
321
+
322
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
323
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
324
+
325
+
326
+<a id="option-profiles-profiles-mode-combined-entries"></a>
327
+##### profiles.mode_combined.entries
328
+
329
+Each entry has:
330
+
331
+| Field | Description |
332
+|:------|:------------|
333
+| `name` | Canonical profile basename. |
334
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
335
+| `filters.regions` | Optional region narrowing for this profile. |
336
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
337
273
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
338
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
339
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
340
341
342
@@ -358,9 +424,48 @@ jobs:
424
profiles:
425
mode: exact
426
mode_exact:
361
- names:
362
- - sql_database
363
- - postgres_flexible
427
+ entries:
428
+ - name: sql_database
429
+ - name: postgres_flexible
430
+ auth:
431
+ mode: managed_identity
432
+
433
+```
434
+</details>
435
+
436
+###### Global and per-profile filters together
437
+
438
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
439
+
440
+<details open><summary>Config</summary>
441
+
442
+```yaml
443
+jobs:
444
+ - name: prod-databases
445
+ subscription_ids:
446
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
447
+ discovery:
448
+ mode: filters
449
+ mode_filters:
450
+ resource_groups:
451
+ - production-rg
452
+ regions:
453
+ - eastus
454
+ profiles:
455
+ mode: combined
456
+ mode_combined:
457
+ entries:
458
+ - name: sql_database
459
+ filters:
460
+ tags:
461
+ env:
462
+ - prod
463
+ # Effective scope:
464
+ # 1. Discovery first keeps only resources in production-rg and eastus.
465
+ # 2. Auto-selected profiles use that global scope as-is.
466
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
467
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
468
+ # because per-profile filters only narrow the globally discovered set.
469
auth:
470
mode: managed_identity
471
@@ -442,7 +547,7 @@ Labels:
547
| resource_group | The Azure resource group. |
548
| region | The Azure region where the resource is deployed. |
549
| resource_type | The Azure resource type identifier. |
445
-| profile | The Azure Monitor profile id. |
550
+| profile | The Azure Monitor profile basename. |
551
| subscription_id | The Azure subscription identifier. |
552
| resource_uid | The unique Azure resource identifier. |
553
@@ -566,8 +671,8 @@ Check the following:
671
672
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
673
569
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
570
-- **Verify a built-in profile exists** -- List available profiles:
674
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
675
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
676
```bash
677
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
678
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_iot_hub.md
+119
-14
@@ -64,7 +64,7 @@ The collector has two discovery phases:
64
**Bootstrap (first run)**
65
66
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
67
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
67
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
68
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
69
- A single job can monitor multiple subscriptions.
70
@@ -166,7 +166,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
166
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
167
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
168
169
-User profile files with the same `id` as a stock profile override it.
169
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
170
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
171
172
@@ -194,8 +194,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
194
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
195
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
196
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
197
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
198
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
197
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
198
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
199
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
200
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
201
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
202
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -241,6 +242,7 @@ Controls how the collector finds candidate Azure resources.
242
##### discovery.mode_query.kql
243
244
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
245
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
246
247
The query **must** project these five columns:
248
@@ -252,6 +254,14 @@ The query **must** project these five columns:
254
| `resourceGroup` | Resource group name |
255
| `location` | Azure region |
256
257
+:::info
258
+
259
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
260
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
261
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
262
+
263
+:::
264
+
265
Example:
266
267
```
@@ -268,11 +278,67 @@ Controls how the collector decides which metric profiles to activate.
278
279
| Mode | Behavior |
280
|:-----|:---------|
271
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
272
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
273
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
281
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
282
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
283
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
284
+
285
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
286
+
287
+Filter layering:
288
+
289
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
290
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
291
+- The effective resource set for a profile is the intersection of both filter sets.
292
+- Per-profile filters never widen or bypass the global discovery scope.
293
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
294
+
295
+
296
+<a id="option-profiles-profiles-mode-auto-entries"></a>
297
+##### profiles.mode_auto.entries
298
+
299
+Each entry has:
300
+
301
+| Field | Description |
302
+|:------|:------------|
303
+| `name` | Canonical profile basename. |
304
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
305
+| `filters.regions` | Optional region narrowing for this profile. |
306
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
307
+
308
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
309
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
310
+
311
+
312
+<a id="option-profiles-profiles-mode-exact-entries"></a>
313
+##### profiles.mode_exact.entries
314
+
315
+Each entry has:
316
+
317
+| Field | Description |
318
+|:------|:------------|
319
+| `name` | Canonical profile basename. |
320
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
321
+| `filters.regions` | Optional region narrowing for this profile. |
322
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
323
+
324
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
325
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
326
+
327
+
328
+<a id="option-profiles-profiles-mode-combined-entries"></a>
329
+##### profiles.mode_combined.entries
330
+
331
+Each entry has:
332
+
333
+| Field | Description |
334
+|:------|:------------|
335
+| `name` | Canonical profile basename. |
336
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
337
+| `filters.regions` | Optional region narrowing for this profile. |
338
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
339
275
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
340
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
341
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
342
343
344
@@ -360,9 +426,48 @@ jobs:
426
profiles:
427
mode: exact
428
mode_exact:
363
- names:
364
- - sql_database
365
- - postgres_flexible
429
+ entries:
430
+ - name: sql_database
431
+ - name: postgres_flexible
432
+ auth:
433
+ mode: managed_identity
434
+
435
+```
436
+</details>
437
+
438
+###### Global and per-profile filters together
439
+
440
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
441
+
442
+<details open><summary>Config</summary>
443
+
444
+```yaml
445
+jobs:
446
+ - name: prod-databases
447
+ subscription_ids:
448
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
449
+ discovery:
450
+ mode: filters
451
+ mode_filters:
452
+ resource_groups:
453
+ - production-rg
454
+ regions:
455
+ - eastus
456
+ profiles:
457
+ mode: combined
458
+ mode_combined:
459
+ entries:
460
+ - name: sql_database
461
+ filters:
462
+ tags:
463
+ env:
464
+ - prod
465
+ # Effective scope:
466
+ # 1. Discovery first keeps only resources in production-rg and eastus.
467
+ # 2. Auto-selected profiles use that global scope as-is.
468
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
469
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
470
+ # because per-profile filters only narrow the globally discovered set.
471
auth:
472
mode: managed_identity
473
@@ -465,7 +570,7 @@ Labels:
570
| resource_group | The Azure resource group. |
571
| region | The Azure region where the resource is deployed. |
572
| resource_type | The Azure resource type identifier. |
468
-| profile | The Azure Monitor profile id. |
573
+| profile | The Azure Monitor profile basename. |
574
| subscription_id | The Azure subscription identifier. |
575
| resource_uid | The unique Azure resource identifier. |
576
@@ -602,8 +707,8 @@ Check the following:
707
708
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
709
605
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
606
-- **Verify a built-in profile exists** -- List available profiles:
710
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
711
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
712
```bash
713
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
714
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_key_vault.md
+119
-14
@@ -58,7 +58,7 @@ The collector has two discovery phases:
58
**Bootstrap (first run)**
59
60
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
61
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
61
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
62
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
63
- A single job can monitor multiple subscriptions.
64
@@ -160,7 +160,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
160
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
161
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
162
163
-User profile files with the same `id` as a stock profile override it.
163
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
164
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
165
166
@@ -188,8 +188,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
188
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
189
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
190
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
191
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
192
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
191
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
192
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
193
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
194
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
195
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
196
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -235,6 +236,7 @@ Controls how the collector finds candidate Azure resources.
236
##### discovery.mode_query.kql
237
238
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
239
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
240
241
The query **must** project these five columns:
242
@@ -246,6 +248,14 @@ The query **must** project these five columns:
248
| `resourceGroup` | Resource group name |
249
| `location` | Azure region |
250
251
+:::info
252
+
253
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
254
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
255
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
256
+
257
+:::
258
+
259
Example:
260
261
```
@@ -262,11 +272,67 @@ Controls how the collector decides which metric profiles to activate.
272
273
| Mode | Behavior |
274
|:-----|:---------|
265
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
266
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
267
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
275
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
276
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
277
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
278
+
279
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
280
+
281
+Filter layering:
282
+
283
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
284
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
285
+- The effective resource set for a profile is the intersection of both filter sets.
286
+- Per-profile filters never widen or bypass the global discovery scope.
287
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
288
+
289
+
290
+<a id="option-profiles-profiles-mode-auto-entries"></a>
291
+##### profiles.mode_auto.entries
292
+
293
+Each entry has:
294
+
295
+| Field | Description |
296
+|:------|:------------|
297
+| `name` | Canonical profile basename. |
298
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
299
+| `filters.regions` | Optional region narrowing for this profile. |
300
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
301
+
302
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
303
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
304
+
305
+
306
+<a id="option-profiles-profiles-mode-exact-entries"></a>
307
+##### profiles.mode_exact.entries
308
+
309
+Each entry has:
310
+
311
+| Field | Description |
312
+|:------|:------------|
313
+| `name` | Canonical profile basename. |
314
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
315
+| `filters.regions` | Optional region narrowing for this profile. |
316
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
317
+
318
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
319
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
320
+
321
+
322
+<a id="option-profiles-profiles-mode-combined-entries"></a>
323
+##### profiles.mode_combined.entries
324
+
325
+Each entry has:
326
+
327
+| Field | Description |
328
+|:------|:------------|
329
+| `name` | Canonical profile basename. |
330
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
331
+| `filters.regions` | Optional region narrowing for this profile. |
332
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
333
269
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
334
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
335
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
336
337
338
@@ -354,9 +420,48 @@ jobs:
420
profiles:
421
mode: exact
422
mode_exact:
357
- names:
358
- - sql_database
359
- - postgres_flexible
423
+ entries:
424
+ - name: sql_database
425
+ - name: postgres_flexible
426
+ auth:
427
+ mode: managed_identity
428
+
429
+```
430
+</details>
431
+
432
+###### Global and per-profile filters together
433
+
434
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
435
+
436
+<details open><summary>Config</summary>
437
+
438
+```yaml
439
+jobs:
440
+ - name: prod-databases
441
+ subscription_ids:
442
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
443
+ discovery:
444
+ mode: filters
445
+ mode_filters:
446
+ resource_groups:
447
+ - production-rg
448
+ regions:
449
+ - eastus
450
+ profiles:
451
+ mode: combined
452
+ mode_combined:
453
+ entries:
454
+ - name: sql_database
455
+ filters:
456
+ tags:
457
+ env:
458
+ - prod
459
+ # Effective scope:
460
+ # 1. Discovery first keeps only resources in production-rg and eastus.
461
+ # 2. Auto-selected profiles use that global scope as-is.
462
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
463
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
464
+ # because per-profile filters only narrow the globally discovered set.
465
auth:
466
mode: managed_identity
467
@@ -445,7 +550,7 @@ Labels:
550
| resource_group | The Azure resource group. |
551
| region | The Azure region where the resource is deployed. |
552
| resource_type | The Azure resource type identifier. |
448
-| profile | The Azure Monitor profile id. |
553
+| profile | The Azure Monitor profile basename. |
554
| subscription_id | The Azure subscription identifier. |
555
| resource_uid | The unique Azure resource identifier. |
556
@@ -547,8 +652,8 @@ Check the following:
652
653
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
654
550
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
551
-- **Verify a built-in profile exists** -- List available profiles:
655
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
656
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
657
```bash
658
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
659
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_kubernetes_service_cluster.md
+119
-14
@@ -59,7 +59,7 @@ The collector has two discovery phases:
59
**Bootstrap (first run)**
60
61
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
62
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
62
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
63
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
64
- A single job can monitor multiple subscriptions.
65
@@ -161,7 +161,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
161
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
162
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
163
164
-User profile files with the same `id` as a stock profile override it.
164
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
165
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
166
167
@@ -189,8 +189,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
189
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
190
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
191
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
192
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
193
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
192
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
193
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
194
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
195
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
196
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
197
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -236,6 +237,7 @@ Controls how the collector finds candidate Azure resources.
237
##### discovery.mode_query.kql
238
239
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
240
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
241
242
The query **must** project these five columns:
243
@@ -247,6 +249,14 @@ The query **must** project these five columns:
249
| `resourceGroup` | Resource group name |
250
| `location` | Azure region |
251
252
+:::info
253
+
254
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
255
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
256
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
257
+
258
+:::
259
+
260
Example:
261
262
```
@@ -263,11 +273,67 @@ Controls how the collector decides which metric profiles to activate.
273
274
| Mode | Behavior |
275
|:-----|:---------|
266
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
267
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
268
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
276
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
277
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
278
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
279
+
280
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
281
+
282
+Filter layering:
283
+
284
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
285
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
286
+- The effective resource set for a profile is the intersection of both filter sets.
287
+- Per-profile filters never widen or bypass the global discovery scope.
288
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
289
+
290
+
291
+<a id="option-profiles-profiles-mode-auto-entries"></a>
292
+##### profiles.mode_auto.entries
293
+
294
+Each entry has:
295
+
296
+| Field | Description |
297
+|:------|:------------|
298
+| `name` | Canonical profile basename. |
299
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
300
+| `filters.regions` | Optional region narrowing for this profile. |
301
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
302
+
303
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
304
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
305
+
306
+
307
+<a id="option-profiles-profiles-mode-exact-entries"></a>
308
+##### profiles.mode_exact.entries
309
+
310
+Each entry has:
311
+
312
+| Field | Description |
313
+|:------|:------------|
314
+| `name` | Canonical profile basename. |
315
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
316
+| `filters.regions` | Optional region narrowing for this profile. |
317
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
318
+
319
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
320
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
321
+
322
+
323
+<a id="option-profiles-profiles-mode-combined-entries"></a>
324
+##### profiles.mode_combined.entries
325
+
326
+Each entry has:
327
+
328
+| Field | Description |
329
+|:------|:------------|
330
+| `name` | Canonical profile basename. |
331
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
332
+| `filters.regions` | Optional region narrowing for this profile. |
333
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
334
270
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
335
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
336
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
337
338
339
@@ -355,9 +421,48 @@ jobs:
421
profiles:
422
mode: exact
423
mode_exact:
358
- names:
359
- - sql_database
360
- - postgres_flexible
424
+ entries:
425
+ - name: sql_database
426
+ - name: postgres_flexible
427
+ auth:
428
+ mode: managed_identity
429
+
430
+```
431
+</details>
432
+
433
+###### Global and per-profile filters together
434
+
435
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
436
+
437
+<details open><summary>Config</summary>
438
+
439
+```yaml
440
+jobs:
441
+ - name: prod-databases
442
+ subscription_ids:
443
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
444
+ discovery:
445
+ mode: filters
446
+ mode_filters:
447
+ resource_groups:
448
+ - production-rg
449
+ regions:
450
+ - eastus
451
+ profiles:
452
+ mode: combined
453
+ mode_combined:
454
+ entries:
455
+ - name: sql_database
456
+ filters:
457
+ tags:
458
+ env:
459
+ - prod
460
+ # Effective scope:
461
+ # 1. Discovery first keeps only resources in production-rg and eastus.
462
+ # 2. Auto-selected profiles use that global scope as-is.
463
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
464
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
465
+ # because per-profile filters only narrow the globally discovered set.
466
auth:
467
mode: managed_identity
468
@@ -455,7 +560,7 @@ Labels:
560
| resource_group | The Azure resource group. |
561
| region | The Azure region where the resource is deployed. |
562
| resource_type | The Azure resource type identifier. |
458
-| profile | The Azure Monitor profile id. |
563
+| profile | The Azure Monitor profile basename. |
564
| subscription_id | The Azure subscription identifier. |
565
| resource_uid | The unique Azure resource identifier. |
566
@@ -576,8 +681,8 @@ Check the following:
681
682
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
683
579
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
580
-- **Verify a built-in profile exists** -- List available profiles:
684
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
685
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
686
```bash
687
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
688
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_load_balancer.md
+119
-14
@@ -59,7 +59,7 @@ The collector has two discovery phases:
59
**Bootstrap (first run)**
60
61
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
62
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
62
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
63
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
64
- A single job can monitor multiple subscriptions.
65
@@ -161,7 +161,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
161
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
162
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
163
164
-User profile files with the same `id` as a stock profile override it.
164
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
165
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
166
167
@@ -189,8 +189,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
189
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
190
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
191
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
192
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
193
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
192
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
193
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
194
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
195
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
196
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
197
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -236,6 +237,7 @@ Controls how the collector finds candidate Azure resources.
237
##### discovery.mode_query.kql
238
239
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
240
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
241
242
The query **must** project these five columns:
243
@@ -247,6 +249,14 @@ The query **must** project these five columns:
249
| `resourceGroup` | Resource group name |
250
| `location` | Azure region |
251
252
+:::info
253
+
254
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
255
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
256
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
257
+
258
+:::
259
+
260
Example:
261
262
```
@@ -263,11 +273,67 @@ Controls how the collector decides which metric profiles to activate.
273
274
| Mode | Behavior |
275
|:-----|:---------|
266
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
267
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
268
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
276
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
277
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
278
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
279
+
280
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
281
+
282
+Filter layering:
283
+
284
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
285
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
286
+- The effective resource set for a profile is the intersection of both filter sets.
287
+- Per-profile filters never widen or bypass the global discovery scope.
288
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
289
+
290
+
291
+<a id="option-profiles-profiles-mode-auto-entries"></a>
292
+##### profiles.mode_auto.entries
293
+
294
+Each entry has:
295
+
296
+| Field | Description |
297
+|:------|:------------|
298
+| `name` | Canonical profile basename. |
299
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
300
+| `filters.regions` | Optional region narrowing for this profile. |
301
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
302
+
303
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
304
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
305
+
306
+
307
+<a id="option-profiles-profiles-mode-exact-entries"></a>
308
+##### profiles.mode_exact.entries
309
+
310
+Each entry has:
311
+
312
+| Field | Description |
313
+|:------|:------------|
314
+| `name` | Canonical profile basename. |
315
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
316
+| `filters.regions` | Optional region narrowing for this profile. |
317
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
318
+
319
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
320
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
321
+
322
+
323
+<a id="option-profiles-profiles-mode-combined-entries"></a>
324
+##### profiles.mode_combined.entries
325
+
326
+Each entry has:
327
+
328
+| Field | Description |
329
+|:------|:------------|
330
+| `name` | Canonical profile basename. |
331
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
332
+| `filters.regions` | Optional region narrowing for this profile. |
333
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
334
270
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
335
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
336
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
337
338
339
@@ -355,9 +421,48 @@ jobs:
421
profiles:
422
mode: exact
423
mode_exact:
358
- names:
359
- - sql_database
360
- - postgres_flexible
424
+ entries:
425
+ - name: sql_database
426
+ - name: postgres_flexible
427
+ auth:
428
+ mode: managed_identity
429
+
430
+```
431
+</details>
432
+
433
+###### Global and per-profile filters together
434
+
435
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
436
+
437
+<details open><summary>Config</summary>
438
+
439
+```yaml
440
+jobs:
441
+ - name: prod-databases
442
+ subscription_ids:
443
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
444
+ discovery:
445
+ mode: filters
446
+ mode_filters:
447
+ resource_groups:
448
+ - production-rg
449
+ regions:
450
+ - eastus
451
+ profiles:
452
+ mode: combined
453
+ mode_combined:
454
+ entries:
455
+ - name: sql_database
456
+ filters:
457
+ tags:
458
+ env:
459
+ - prod
460
+ # Effective scope:
461
+ # 1. Discovery first keeps only resources in production-rg and eastus.
462
+ # 2. Auto-selected profiles use that global scope as-is.
463
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
464
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
465
+ # because per-profile filters only narrow the globally discovered set.
466
auth:
467
mode: managed_identity
468
@@ -447,7 +552,7 @@ Labels:
552
| resource_group | The Azure resource group. |
553
| region | The Azure region where the resource is deployed. |
554
| resource_type | The Azure resource type identifier. |
450
-| profile | The Azure Monitor profile id. |
555
+| profile | The Azure Monitor profile basename. |
556
| subscription_id | The Azure subscription identifier. |
557
| resource_uid | The unique Azure resource identifier. |
558
@@ -553,8 +658,8 @@ Check the following:
658
659
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
660
556
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
557
-- **Verify a built-in profile exists** -- List available profiles:
661
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
662
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
663
```bash
664
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
665
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_log_analytics_workspace.md
+119
-14
@@ -59,7 +59,7 @@ The collector has two discovery phases:
59
**Bootstrap (first run)**
60
61
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
62
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
62
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
63
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
64
- A single job can monitor multiple subscriptions.
65
@@ -161,7 +161,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
161
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
162
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
163
164
-User profile files with the same `id` as a stock profile override it.
164
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
165
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
166
167
@@ -189,8 +189,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
189
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
190
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
191
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
192
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
193
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
192
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
193
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
194
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
195
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
196
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
197
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -236,6 +237,7 @@ Controls how the collector finds candidate Azure resources.
237
##### discovery.mode_query.kql
238
239
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
240
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
241
242
The query **must** project these five columns:
243
@@ -247,6 +249,14 @@ The query **must** project these five columns:
249
| `resourceGroup` | Resource group name |
250
| `location` | Azure region |
251
252
+:::info
253
+
254
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
255
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
256
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
257
+
258
+:::
259
+
260
Example:
261
262
```
@@ -263,11 +273,67 @@ Controls how the collector decides which metric profiles to activate.
273
274
| Mode | Behavior |
275
|:-----|:---------|
266
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
267
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
268
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
276
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
277
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
278
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
279
+
280
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
281
+
282
+Filter layering:
283
+
284
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
285
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
286
+- The effective resource set for a profile is the intersection of both filter sets.
287
+- Per-profile filters never widen or bypass the global discovery scope.
288
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
289
+
290
+
291
+<a id="option-profiles-profiles-mode-auto-entries"></a>
292
+##### profiles.mode_auto.entries
293
+
294
+Each entry has:
295
+
296
+| Field | Description |
297
+|:------|:------------|
298
+| `name` | Canonical profile basename. |
299
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
300
+| `filters.regions` | Optional region narrowing for this profile. |
301
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
302
+
303
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
304
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
305
+
306
+
307
+<a id="option-profiles-profiles-mode-exact-entries"></a>
308
+##### profiles.mode_exact.entries
309
+
310
+Each entry has:
311
+
312
+| Field | Description |
313
+|:------|:------------|
314
+| `name` | Canonical profile basename. |
315
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
316
+| `filters.regions` | Optional region narrowing for this profile. |
317
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
318
+
319
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
320
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
321
+
322
+
323
+<a id="option-profiles-profiles-mode-combined-entries"></a>
324
+##### profiles.mode_combined.entries
325
+
326
+Each entry has:
327
+
328
+| Field | Description |
329
+|:------|:------------|
330
+| `name` | Canonical profile basename. |
331
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
332
+| `filters.regions` | Optional region narrowing for this profile. |
333
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
334
270
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
335
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
336
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
337
338
339
@@ -355,9 +421,48 @@ jobs:
421
profiles:
422
mode: exact
423
mode_exact:
358
- names:
359
- - sql_database
360
- - postgres_flexible
424
+ entries:
425
+ - name: sql_database
426
+ - name: postgres_flexible
427
+ auth:
428
+ mode: managed_identity
429
+
430
+```
431
+</details>
432
+
433
+###### Global and per-profile filters together
434
+
435
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
436
+
437
+<details open><summary>Config</summary>
438
+
439
+```yaml
440
+jobs:
441
+ - name: prod-databases
442
+ subscription_ids:
443
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
444
+ discovery:
445
+ mode: filters
446
+ mode_filters:
447
+ resource_groups:
448
+ - production-rg
449
+ regions:
450
+ - eastus
451
+ profiles:
452
+ mode: combined
453
+ mode_combined:
454
+ entries:
455
+ - name: sql_database
456
+ filters:
457
+ tags:
458
+ env:
459
+ - prod
460
+ # Effective scope:
461
+ # 1. Discovery first keeps only resources in production-rg and eastus.
462
+ # 2. Auto-selected profiles use that global scope as-is.
463
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
464
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
465
+ # because per-profile filters only narrow the globally discovered set.
466
auth:
467
mode: managed_identity
468
@@ -457,7 +562,7 @@ Labels:
562
| resource_group | The Azure resource group. |
563
| region | The Azure region where the resource is deployed. |
564
| resource_type | The Azure resource type identifier. |
460
-| profile | The Azure Monitor profile id. |
565
+| profile | The Azure Monitor profile basename. |
566
| subscription_id | The Azure subscription identifier. |
567
| resource_uid | The unique Azure resource identifier. |
568
@@ -592,8 +697,8 @@ Check the following:
697
698
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
699
595
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
596
-- **Verify a built-in profile exists** -- List available profiles:
700
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
701
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
702
```bash
703
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
704
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_logic_apps_workflow.md
+119
-14
@@ -61,7 +61,7 @@ The collector has two discovery phases:
61
**Bootstrap (first run)**
62
63
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
64
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
64
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
65
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
66
- A single job can monitor multiple subscriptions.
67
@@ -163,7 +163,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
163
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
164
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
165
166
-User profile files with the same `id` as a stock profile override it.
166
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
167
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
168
169
@@ -191,8 +191,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
191
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
192
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
193
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
194
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
195
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
194
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
195
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
196
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
197
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
198
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
199
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -238,6 +239,7 @@ Controls how the collector finds candidate Azure resources.
239
##### discovery.mode_query.kql
240
241
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
242
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
243
244
The query **must** project these five columns:
245
@@ -249,6 +251,14 @@ The query **must** project these five columns:
251
| `resourceGroup` | Resource group name |
252
| `location` | Azure region |
253
254
+:::info
255
+
256
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
257
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
258
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
259
+
260
+:::
261
+
262
Example:
263
264
```
@@ -265,11 +275,67 @@ Controls how the collector decides which metric profiles to activate.
275
276
| Mode | Behavior |
277
|:-----|:---------|
268
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
269
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
270
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
278
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
279
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
280
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
281
+
282
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
283
+
284
+Filter layering:
285
+
286
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
287
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
288
+- The effective resource set for a profile is the intersection of both filter sets.
289
+- Per-profile filters never widen or bypass the global discovery scope.
290
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
291
+
292
+
293
+<a id="option-profiles-profiles-mode-auto-entries"></a>
294
+##### profiles.mode_auto.entries
295
+
296
+Each entry has:
297
+
298
+| Field | Description |
299
+|:------|:------------|
300
+| `name` | Canonical profile basename. |
301
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
302
+| `filters.regions` | Optional region narrowing for this profile. |
303
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
304
+
305
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
306
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
307
+
308
+
309
+<a id="option-profiles-profiles-mode-exact-entries"></a>
310
+##### profiles.mode_exact.entries
311
+
312
+Each entry has:
313
+
314
+| Field | Description |
315
+|:------|:------------|
316
+| `name` | Canonical profile basename. |
317
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
318
+| `filters.regions` | Optional region narrowing for this profile. |
319
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
320
+
321
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
322
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
323
+
324
+
325
+<a id="option-profiles-profiles-mode-combined-entries"></a>
326
+##### profiles.mode_combined.entries
327
+
328
+Each entry has:
329
+
330
+| Field | Description |
331
+|:------|:------------|
332
+| `name` | Canonical profile basename. |
333
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
334
+| `filters.regions` | Optional region narrowing for this profile. |
335
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
336
272
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
337
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
338
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
339
340
341
@@ -357,9 +423,48 @@ jobs:
423
profiles:
424
mode: exact
425
mode_exact:
360
- names:
361
- - sql_database
362
- - postgres_flexible
426
+ entries:
427
+ - name: sql_database
428
+ - name: postgres_flexible
429
+ auth:
430
+ mode: managed_identity
431
+
432
+```
433
+</details>
434
+
435
+###### Global and per-profile filters together
436
+
437
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
438
+
439
+<details open><summary>Config</summary>
440
+
441
+```yaml
442
+jobs:
443
+ - name: prod-databases
444
+ subscription_ids:
445
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
446
+ discovery:
447
+ mode: filters
448
+ mode_filters:
449
+ resource_groups:
450
+ - production-rg
451
+ regions:
452
+ - eastus
453
+ profiles:
454
+ mode: combined
455
+ mode_combined:
456
+ entries:
457
+ - name: sql_database
458
+ filters:
459
+ tags:
460
+ env:
461
+ - prod
462
+ # Effective scope:
463
+ # 1. Discovery first keeps only resources in production-rg and eastus.
464
+ # 2. Auto-selected profiles use that global scope as-is.
465
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
466
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
467
+ # because per-profile filters only narrow the globally discovered set.
468
auth:
469
mode: managed_identity
470
@@ -457,7 +562,7 @@ Labels:
562
| resource_group | The Azure resource group. |
563
| region | The Azure region where the resource is deployed. |
564
| resource_type | The Azure resource type identifier. |
460
-| profile | The Azure Monitor profile id. |
565
+| profile | The Azure Monitor profile basename. |
566
| subscription_id | The Azure subscription identifier. |
567
| resource_uid | The unique Azure resource identifier. |
568
@@ -568,8 +673,8 @@ Check the following:
673
674
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
675
571
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
572
-- **Verify a built-in profile exists** -- List available profiles:
676
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
677
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
678
```bash
679
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
680
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_machine_learning_workspace.md
+119
-14
@@ -64,7 +64,7 @@ The collector has two discovery phases:
64
**Bootstrap (first run)**
65
66
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
67
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
67
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
68
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
69
- A single job can monitor multiple subscriptions.
70
@@ -166,7 +166,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
166
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
167
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
168
169
-User profile files with the same `id` as a stock profile override it.
169
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
170
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
171
172
@@ -194,8 +194,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
194
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
195
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
196
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
197
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
198
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
197
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
198
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
199
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
200
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
201
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
202
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -241,6 +242,7 @@ Controls how the collector finds candidate Azure resources.
242
##### discovery.mode_query.kql
243
244
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
245
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
246
247
The query **must** project these five columns:
248
@@ -252,6 +254,14 @@ The query **must** project these five columns:
254
| `resourceGroup` | Resource group name |
255
| `location` | Azure region |
256
257
+:::info
258
+
259
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
260
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
261
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
262
+
263
+:::
264
+
265
Example:
266
267
```
@@ -268,11 +278,67 @@ Controls how the collector decides which metric profiles to activate.
278
279
| Mode | Behavior |
280
|:-----|:---------|
271
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
272
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
273
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
281
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
282
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
283
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
284
+
285
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
286
+
287
+Filter layering:
288
+
289
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
290
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
291
+- The effective resource set for a profile is the intersection of both filter sets.
292
+- Per-profile filters never widen or bypass the global discovery scope.
293
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
294
+
295
+
296
+<a id="option-profiles-profiles-mode-auto-entries"></a>
297
+##### profiles.mode_auto.entries
298
+
299
+Each entry has:
300
+
301
+| Field | Description |
302
+|:------|:------------|
303
+| `name` | Canonical profile basename. |
304
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
305
+| `filters.regions` | Optional region narrowing for this profile. |
306
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
307
+
308
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
309
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
310
+
311
+
312
+<a id="option-profiles-profiles-mode-exact-entries"></a>
313
+##### profiles.mode_exact.entries
314
+
315
+Each entry has:
316
+
317
+| Field | Description |
318
+|:------|:------------|
319
+| `name` | Canonical profile basename. |
320
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
321
+| `filters.regions` | Optional region narrowing for this profile. |
322
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
323
+
324
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
325
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
326
+
327
+
328
+<a id="option-profiles-profiles-mode-combined-entries"></a>
329
+##### profiles.mode_combined.entries
330
+
331
+Each entry has:
332
+
333
+| Field | Description |
334
+|:------|:------------|
335
+| `name` | Canonical profile basename. |
336
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
337
+| `filters.regions` | Optional region narrowing for this profile. |
338
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
339
275
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
340
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
341
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
342
343
344
@@ -360,9 +426,48 @@ jobs:
426
profiles:
427
mode: exact
428
mode_exact:
363
- names:
364
- - sql_database
365
- - postgres_flexible
429
+ entries:
430
+ - name: sql_database
431
+ - name: postgres_flexible
432
+ auth:
433
+ mode: managed_identity
434
+
435
+```
436
+</details>
437
+
438
+###### Global and per-profile filters together
439
+
440
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
441
+
442
+<details open><summary>Config</summary>
443
+
444
+```yaml
445
+jobs:
446
+ - name: prod-databases
447
+ subscription_ids:
448
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
449
+ discovery:
450
+ mode: filters
451
+ mode_filters:
452
+ resource_groups:
453
+ - production-rg
454
+ regions:
455
+ - eastus
456
+ profiles:
457
+ mode: combined
458
+ mode_combined:
459
+ entries:
460
+ - name: sql_database
461
+ filters:
462
+ tags:
463
+ env:
464
+ - prod
465
+ # Effective scope:
466
+ # 1. Discovery first keeps only resources in production-rg and eastus.
467
+ # 2. Auto-selected profiles use that global scope as-is.
468
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
469
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
470
+ # because per-profile filters only narrow the globally discovered set.
471
auth:
472
mode: managed_identity
473
@@ -463,7 +568,7 @@ Labels:
568
| resource_group | The Azure resource group. |
569
| region | The Azure region where the resource is deployed. |
570
| resource_type | The Azure resource type identifier. |
466
-| profile | The Azure Monitor profile id. |
571
+| profile | The Azure Monitor profile basename. |
572
| subscription_id | The Azure subscription identifier. |
573
| resource_uid | The unique Azure resource identifier. |
574
@@ -591,8 +696,8 @@ Check the following:
696
697
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
698
594
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
595
-- **Verify a built-in profile exists** -- List available profiles:
699
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
700
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
701
```bash
702
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
703
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_monitor.md
+119
-14
@@ -27,7 +27,7 @@ This collector provides real-time visibility into your Azure infrastructure by c
27
28
- **Multi-subscription** -- monitor resources across one or more Azure subscriptions in a single job
29
- **Automatic service detection** -- discovers resources and enables matching metric profiles without manual configuration
30
-- **38 built-in service profiles** -- covers databases, compute, networking, storage, AI, analytics, and more
30
+- **[38 built-in service profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default)** -- covers databases, compute, networking, storage, AI, analytics, and more
31
- **Flexible discovery** -- use structured filters (resource groups, regions, tags) or a custom Azure Resource Graph KQL query
32
33
@@ -55,7 +55,7 @@ The collector has two discovery phases:
55
**Bootstrap (first run)**
56
57
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
58
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
58
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
59
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
60
- A single job can monitor multiple subscriptions.
61
@@ -157,7 +157,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
157
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
158
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
159
160
-User profile files with the same `id` as a stock profile override it.
160
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
161
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
162
163
@@ -185,8 +185,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
185
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
186
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
187
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
188
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
189
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
188
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
189
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
190
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
191
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
192
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
193
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -232,6 +233,7 @@ Controls how the collector finds candidate Azure resources.
233
##### discovery.mode_query.kql
234
235
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
236
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
237
238
The query **must** project these five columns:
239
@@ -243,6 +245,14 @@ The query **must** project these five columns:
245
| `resourceGroup` | Resource group name |
246
| `location` | Azure region |
247
248
+:::info
249
+
250
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
251
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
252
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
253
+
254
+:::
255
+
256
Example:
257
258
```
@@ -259,11 +269,67 @@ Controls how the collector decides which metric profiles to activate.
269
270
| Mode | Behavior |
271
|:-----|:---------|
262
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
263
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
264
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
272
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
273
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
274
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
275
+
276
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
277
+
278
+Filter layering:
279
+
280
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
281
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
282
+- The effective resource set for a profile is the intersection of both filter sets.
283
+- Per-profile filters never widen or bypass the global discovery scope.
284
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
285
+
286
+
287
+<a id="option-profiles-profiles-mode-auto-entries"></a>
288
+##### profiles.mode_auto.entries
289
+
290
+Each entry has:
291
+
292
+| Field | Description |
293
+|:------|:------------|
294
+| `name` | Canonical profile basename. |
295
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
296
+| `filters.regions` | Optional region narrowing for this profile. |
297
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
298
266
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
299
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
300
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
301
+
302
+
303
+<a id="option-profiles-profiles-mode-exact-entries"></a>
304
+##### profiles.mode_exact.entries
305
+
306
+Each entry has:
307
+
308
+| Field | Description |
309
+|:------|:------------|
310
+| `name` | Canonical profile basename. |
311
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
312
+| `filters.regions` | Optional region narrowing for this profile. |
313
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
314
+
315
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
316
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
317
+
318
+
319
+<a id="option-profiles-profiles-mode-combined-entries"></a>
320
+##### profiles.mode_combined.entries
321
+
322
+Each entry has:
323
+
324
+| Field | Description |
325
+|:------|:------------|
326
+| `name` | Canonical profile basename. |
327
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
328
+| `filters.regions` | Optional region narrowing for this profile. |
329
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
330
+
331
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
332
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
333
334
335
@@ -351,9 +417,48 @@ jobs:
417
profiles:
418
mode: exact
419
mode_exact:
354
- names:
355
- - sql_database
356
- - postgres_flexible
420
+ entries:
421
+ - name: sql_database
422
+ - name: postgres_flexible
423
+ auth:
424
+ mode: managed_identity
425
+
426
+```
427
+</details>
428
+
429
+###### Global and per-profile filters together
430
+
431
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
432
+
433
+<details open><summary>Config</summary>
434
+
435
+```yaml
436
+jobs:
437
+ - name: prod-databases
438
+ subscription_ids:
439
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
440
+ discovery:
441
+ mode: filters
442
+ mode_filters:
443
+ resource_groups:
444
+ - production-rg
445
+ regions:
446
+ - eastus
447
+ profiles:
448
+ mode: combined
449
+ mode_combined:
450
+ entries:
451
+ - name: sql_database
452
+ filters:
453
+ tags:
454
+ env:
455
+ - prod
456
+ # Effective scope:
457
+ # 1. Discovery first keeps only resources in production-rg and eastus.
458
+ # 2. Auto-selected profiles use that global scope as-is.
459
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
460
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
461
+ # because per-profile filters only narrow the globally discovered set.
462
auth:
463
mode: managed_identity
464
@@ -512,8 +617,8 @@ Check the following:
617
618
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
619
515
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
516
-- **Verify a built-in profile exists** -- List available profiles:
620
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
621
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
622
```bash
623
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
624
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_mysql_flexible_server.md
+119
-14
@@ -64,7 +64,7 @@ The collector has two discovery phases:
64
**Bootstrap (first run)**
65
66
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
67
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
67
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
68
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
69
- A single job can monitor multiple subscriptions.
70
@@ -166,7 +166,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
166
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
167
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
168
169
-User profile files with the same `id` as a stock profile override it.
169
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
170
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
171
172
@@ -194,8 +194,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
194
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
195
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
196
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
197
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
198
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
197
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
198
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
199
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
200
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
201
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
202
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -241,6 +242,7 @@ Controls how the collector finds candidate Azure resources.
242
##### discovery.mode_query.kql
243
244
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
245
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
246
247
The query **must** project these five columns:
248
@@ -252,6 +254,14 @@ The query **must** project these five columns:
254
| `resourceGroup` | Resource group name |
255
| `location` | Azure region |
256
257
+:::info
258
+
259
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
260
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
261
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
262
+
263
+:::
264
+
265
Example:
266
267
```
@@ -268,11 +278,67 @@ Controls how the collector decides which metric profiles to activate.
278
279
| Mode | Behavior |
280
|:-----|:---------|
271
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
272
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
273
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
281
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
282
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
283
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
284
+
285
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
286
+
287
+Filter layering:
288
+
289
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
290
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
291
+- The effective resource set for a profile is the intersection of both filter sets.
292
+- Per-profile filters never widen or bypass the global discovery scope.
293
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
294
+
295
+
296
+<a id="option-profiles-profiles-mode-auto-entries"></a>
297
+##### profiles.mode_auto.entries
298
+
299
+Each entry has:
300
+
301
+| Field | Description |
302
+|:------|:------------|
303
+| `name` | Canonical profile basename. |
304
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
305
+| `filters.regions` | Optional region narrowing for this profile. |
306
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
307
+
308
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
309
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
310
+
311
+
312
+<a id="option-profiles-profiles-mode-exact-entries"></a>
313
+##### profiles.mode_exact.entries
314
+
315
+Each entry has:
316
+
317
+| Field | Description |
318
+|:------|:------------|
319
+| `name` | Canonical profile basename. |
320
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
321
+| `filters.regions` | Optional region narrowing for this profile. |
322
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
323
+
324
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
325
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
326
+
327
+
328
+<a id="option-profiles-profiles-mode-combined-entries"></a>
329
+##### profiles.mode_combined.entries
330
+
331
+Each entry has:
332
+
333
+| Field | Description |
334
+|:------|:------------|
335
+| `name` | Canonical profile basename. |
336
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
337
+| `filters.regions` | Optional region narrowing for this profile. |
338
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
339
275
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
340
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
341
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
342
343
344
@@ -360,9 +426,48 @@ jobs:
426
profiles:
427
mode: exact
428
mode_exact:
363
- names:
364
- - sql_database
365
- - postgres_flexible
429
+ entries:
430
+ - name: sql_database
431
+ - name: postgres_flexible
432
+ auth:
433
+ mode: managed_identity
434
+
435
+```
436
+</details>
437
+
438
+###### Global and per-profile filters together
439
+
440
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
441
+
442
+<details open><summary>Config</summary>
443
+
444
+```yaml
445
+jobs:
446
+ - name: prod-databases
447
+ subscription_ids:
448
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
449
+ discovery:
450
+ mode: filters
451
+ mode_filters:
452
+ resource_groups:
453
+ - production-rg
454
+ regions:
455
+ - eastus
456
+ profiles:
457
+ mode: combined
458
+ mode_combined:
459
+ entries:
460
+ - name: sql_database
461
+ filters:
462
+ tags:
463
+ env:
464
+ - prod
465
+ # Effective scope:
466
+ # 1. Discovery first keeps only resources in production-rg and eastus.
467
+ # 2. Auto-selected profiles use that global scope as-is.
468
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
469
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
470
+ # because per-profile filters only narrow the globally discovered set.
471
auth:
472
mode: managed_identity
473
@@ -467,7 +572,7 @@ Labels:
572
| resource_group | The Azure resource group. |
573
| region | The Azure region where the resource is deployed. |
574
| resource_type | The Azure resource type identifier. |
470
-| profile | The Azure Monitor profile id. |
575
+| profile | The Azure Monitor profile basename. |
576
| subscription_id | The Azure subscription identifier. |
577
| resource_uid | The unique Azure resource identifier. |
578
@@ -598,8 +703,8 @@ Check the following:
703
704
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
705
601
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
602
-- **Verify a built-in profile exists** -- List available profiles:
706
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
707
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
708
```bash
709
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
710
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_nat_gateway.md
+119
-14
@@ -59,7 +59,7 @@ The collector has two discovery phases:
59
**Bootstrap (first run)**
60
61
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
62
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
62
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
63
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
64
- A single job can monitor multiple subscriptions.
65
@@ -161,7 +161,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
161
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
162
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
163
164
-User profile files with the same `id` as a stock profile override it.
164
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
165
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
166
167
@@ -189,8 +189,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
189
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
190
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
191
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
192
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
193
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
192
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
193
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
194
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
195
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
196
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
197
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -236,6 +237,7 @@ Controls how the collector finds candidate Azure resources.
237
##### discovery.mode_query.kql
238
239
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
240
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
241
242
The query **must** project these five columns:
243
@@ -247,6 +249,14 @@ The query **must** project these five columns:
249
| `resourceGroup` | Resource group name |
250
| `location` | Azure region |
251
252
+:::info
253
+
254
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
255
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
256
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
257
+
258
+:::
259
+
260
Example:
261
262
```
@@ -263,11 +273,67 @@ Controls how the collector decides which metric profiles to activate.
273
274
| Mode | Behavior |
275
|:-----|:---------|
266
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
267
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
268
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
276
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
277
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
278
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
279
+
280
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
281
+
282
+Filter layering:
283
+
284
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
285
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
286
+- The effective resource set for a profile is the intersection of both filter sets.
287
+- Per-profile filters never widen or bypass the global discovery scope.
288
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
289
+
290
+
291
+<a id="option-profiles-profiles-mode-auto-entries"></a>
292
+##### profiles.mode_auto.entries
293
+
294
+Each entry has:
295
+
296
+| Field | Description |
297
+|:------|:------------|
298
+| `name` | Canonical profile basename. |
299
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
300
+| `filters.regions` | Optional region narrowing for this profile. |
301
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
302
+
303
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
304
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
305
+
306
+
307
+<a id="option-profiles-profiles-mode-exact-entries"></a>
308
+##### profiles.mode_exact.entries
309
+
310
+Each entry has:
311
+
312
+| Field | Description |
313
+|:------|:------------|
314
+| `name` | Canonical profile basename. |
315
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
316
+| `filters.regions` | Optional region narrowing for this profile. |
317
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
318
+
319
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
320
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
321
+
322
+
323
+<a id="option-profiles-profiles-mode-combined-entries"></a>
324
+##### profiles.mode_combined.entries
325
+
326
+Each entry has:
327
+
328
+| Field | Description |
329
+|:------|:------------|
330
+| `name` | Canonical profile basename. |
331
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
332
+| `filters.regions` | Optional region narrowing for this profile. |
333
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
334
270
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
335
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
336
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
337
338
339
@@ -355,9 +421,48 @@ jobs:
421
profiles:
422
mode: exact
423
mode_exact:
358
- names:
359
- - sql_database
360
- - postgres_flexible
424
+ entries:
425
+ - name: sql_database
426
+ - name: postgres_flexible
427
+ auth:
428
+ mode: managed_identity
429
+
430
+```
431
+</details>
432
+
433
+###### Global and per-profile filters together
434
+
435
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
436
+
437
+<details open><summary>Config</summary>
438
+
439
+```yaml
440
+jobs:
441
+ - name: prod-databases
442
+ subscription_ids:
443
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
444
+ discovery:
445
+ mode: filters
446
+ mode_filters:
447
+ resource_groups:
448
+ - production-rg
449
+ regions:
450
+ - eastus
451
+ profiles:
452
+ mode: combined
453
+ mode_combined:
454
+ entries:
455
+ - name: sql_database
456
+ filters:
457
+ tags:
458
+ env:
459
+ - prod
460
+ # Effective scope:
461
+ # 1. Discovery first keeps only resources in production-rg and eastus.
462
+ # 2. Auto-selected profiles use that global scope as-is.
463
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
464
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
465
+ # because per-profile filters only narrow the globally discovered set.
466
auth:
467
mode: managed_identity
468
@@ -447,7 +552,7 @@ Labels:
552
| resource_group | The Azure resource group. |
553
| region | The Azure region where the resource is deployed. |
554
| resource_type | The Azure resource type identifier. |
450
-| profile | The Azure Monitor profile id. |
555
+| profile | The Azure Monitor profile basename. |
556
| subscription_id | The Azure subscription identifier. |
557
| resource_uid | The unique Azure resource identifier. |
558
@@ -551,8 +656,8 @@ Check the following:
656
657
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
658
554
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
555
-- **Verify a built-in profile exists** -- List available profiles:
659
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
660
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
661
```bash
662
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
663
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_postgresql_flexible_server.md
+119
-14
@@ -64,7 +64,7 @@ The collector has two discovery phases:
64
**Bootstrap (first run)**
65
66
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
67
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
67
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
68
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
69
- A single job can monitor multiple subscriptions.
70
@@ -166,7 +166,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
166
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
167
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
168
169
-User profile files with the same `id` as a stock profile override it.
169
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
170
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
171
172
@@ -194,8 +194,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
194
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
195
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
196
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
197
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
198
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
197
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
198
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
199
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
200
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
201
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
202
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -241,6 +242,7 @@ Controls how the collector finds candidate Azure resources.
242
##### discovery.mode_query.kql
243
244
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
245
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
246
247
The query **must** project these five columns:
248
@@ -252,6 +254,14 @@ The query **must** project these five columns:
254
| `resourceGroup` | Resource group name |
255
| `location` | Azure region |
256
257
+:::info
258
+
259
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
260
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
261
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
262
+
263
+:::
264
+
265
Example:
266
267
```
@@ -268,11 +278,67 @@ Controls how the collector decides which metric profiles to activate.
278
279
| Mode | Behavior |
280
|:-----|:---------|
271
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
272
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
273
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
281
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
282
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
283
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
284
+
285
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
286
+
287
+Filter layering:
288
+
289
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
290
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
291
+- The effective resource set for a profile is the intersection of both filter sets.
292
+- Per-profile filters never widen or bypass the global discovery scope.
293
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
294
+
295
+
296
+<a id="option-profiles-profiles-mode-auto-entries"></a>
297
+##### profiles.mode_auto.entries
298
+
299
+Each entry has:
300
+
301
+| Field | Description |
302
+|:------|:------------|
303
+| `name` | Canonical profile basename. |
304
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
305
+| `filters.regions` | Optional region narrowing for this profile. |
306
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
307
+
308
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
309
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
310
+
311
+
312
+<a id="option-profiles-profiles-mode-exact-entries"></a>
313
+##### profiles.mode_exact.entries
314
+
315
+Each entry has:
316
+
317
+| Field | Description |
318
+|:------|:------------|
319
+| `name` | Canonical profile basename. |
320
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
321
+| `filters.regions` | Optional region narrowing for this profile. |
322
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
323
+
324
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
325
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
326
+
327
+
328
+<a id="option-profiles-profiles-mode-combined-entries"></a>
329
+##### profiles.mode_combined.entries
330
+
331
+Each entry has:
332
+
333
+| Field | Description |
334
+|:------|:------------|
335
+| `name` | Canonical profile basename. |
336
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
337
+| `filters.regions` | Optional region narrowing for this profile. |
338
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
339
275
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
340
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
341
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
342
343
344
@@ -360,9 +426,48 @@ jobs:
426
profiles:
427
mode: exact
428
mode_exact:
363
- names:
364
- - sql_database
365
- - postgres_flexible
429
+ entries:
430
+ - name: sql_database
431
+ - name: postgres_flexible
432
+ auth:
433
+ mode: managed_identity
434
+
435
+```
436
+</details>
437
+
438
+###### Global and per-profile filters together
439
+
440
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
441
+
442
+<details open><summary>Config</summary>
443
+
444
+```yaml
445
+jobs:
446
+ - name: prod-databases
447
+ subscription_ids:
448
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
449
+ discovery:
450
+ mode: filters
451
+ mode_filters:
452
+ resource_groups:
453
+ - production-rg
454
+ regions:
455
+ - eastus
456
+ profiles:
457
+ mode: combined
458
+ mode_combined:
459
+ entries:
460
+ - name: sql_database
461
+ filters:
462
+ tags:
463
+ env:
464
+ - prod
465
+ # Effective scope:
466
+ # 1. Discovery first keeps only resources in production-rg and eastus.
467
+ # 2. Auto-selected profiles use that global scope as-is.
468
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
469
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
470
+ # because per-profile filters only narrow the globally discovered set.
471
auth:
472
mode: managed_identity
473
@@ -467,7 +572,7 @@ Labels:
572
| resource_group | The Azure resource group. |
573
| region | The Azure region where the resource is deployed. |
574
| resource_type | The Azure resource type identifier. |
470
-| profile | The Azure Monitor profile id. |
575
+| profile | The Azure Monitor profile basename. |
576
| subscription_id | The Azure subscription identifier. |
577
| resource_uid | The unique Azure resource identifier. |
578
@@ -608,8 +713,8 @@ Check the following:
713
714
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
715
611
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
612
-- **Verify a built-in profile exists** -- List available profiles:
716
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
717
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
718
```bash
719
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
720
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_service_bus_namespace.md
+119
-14
@@ -63,7 +63,7 @@ The collector has two discovery phases:
63
**Bootstrap (first run)**
64
65
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
66
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
66
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
67
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
68
- A single job can monitor multiple subscriptions.
69
@@ -165,7 +165,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
165
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
166
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
167
168
-User profile files with the same `id` as a stock profile override it.
168
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
169
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
170
171
@@ -193,8 +193,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
193
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
194
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
195
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
196
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
197
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
196
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
197
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
198
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
199
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
200
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
201
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -240,6 +241,7 @@ Controls how the collector finds candidate Azure resources.
241
##### discovery.mode_query.kql
242
243
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
244
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
245
246
The query **must** project these five columns:
247
@@ -251,6 +253,14 @@ The query **must** project these five columns:
253
| `resourceGroup` | Resource group name |
254
| `location` | Azure region |
255
256
+:::info
257
+
258
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
259
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
260
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
261
+
262
+:::
263
+
264
Example:
265
266
```
@@ -267,11 +277,67 @@ Controls how the collector decides which metric profiles to activate.
277
278
| Mode | Behavior |
279
|:-----|:---------|
270
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
271
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
272
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
280
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
281
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
282
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
283
+
284
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
285
+
286
+Filter layering:
287
+
288
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
289
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
290
+- The effective resource set for a profile is the intersection of both filter sets.
291
+- Per-profile filters never widen or bypass the global discovery scope.
292
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
293
+
294
+
295
+<a id="option-profiles-profiles-mode-auto-entries"></a>
296
+##### profiles.mode_auto.entries
297
+
298
+Each entry has:
299
+
300
+| Field | Description |
301
+|:------|:------------|
302
+| `name` | Canonical profile basename. |
303
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
304
+| `filters.regions` | Optional region narrowing for this profile. |
305
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
306
+
307
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
308
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
309
+
310
+
311
+<a id="option-profiles-profiles-mode-exact-entries"></a>
312
+##### profiles.mode_exact.entries
313
+
314
+Each entry has:
315
+
316
+| Field | Description |
317
+|:------|:------------|
318
+| `name` | Canonical profile basename. |
319
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
320
+| `filters.regions` | Optional region narrowing for this profile. |
321
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
322
+
323
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
324
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
325
+
326
+
327
+<a id="option-profiles-profiles-mode-combined-entries"></a>
328
+##### profiles.mode_combined.entries
329
+
330
+Each entry has:
331
+
332
+| Field | Description |
333
+|:------|:------------|
334
+| `name` | Canonical profile basename. |
335
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
336
+| `filters.regions` | Optional region narrowing for this profile. |
337
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
338
274
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
339
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
340
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
341
342
343
@@ -359,9 +425,48 @@ jobs:
425
profiles:
426
mode: exact
427
mode_exact:
362
- names:
363
- - sql_database
364
- - postgres_flexible
428
+ entries:
429
+ - name: sql_database
430
+ - name: postgres_flexible
431
+ auth:
432
+ mode: managed_identity
433
+
434
+```
435
+</details>
436
+
437
+###### Global and per-profile filters together
438
+
439
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
440
+
441
+<details open><summary>Config</summary>
442
+
443
+```yaml
444
+jobs:
445
+ - name: prod-databases
446
+ subscription_ids:
447
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
448
+ discovery:
449
+ mode: filters
450
+ mode_filters:
451
+ resource_groups:
452
+ - production-rg
453
+ regions:
454
+ - eastus
455
+ profiles:
456
+ mode: combined
457
+ mode_combined:
458
+ entries:
459
+ - name: sql_database
460
+ filters:
461
+ tags:
462
+ env:
463
+ - prod
464
+ # Effective scope:
465
+ # 1. Discovery first keeps only resources in production-rg and eastus.
466
+ # 2. Auto-selected profiles use that global scope as-is.
467
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
468
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
469
+ # because per-profile filters only narrow the globally discovered set.
470
auth:
471
mode: managed_identity
472
@@ -459,7 +564,7 @@ Labels:
564
| resource_group | The Azure resource group. |
565
| region | The Azure region where the resource is deployed. |
566
| resource_type | The Azure resource type identifier. |
462
-| profile | The Azure Monitor profile id. |
567
+| profile | The Azure Monitor profile basename. |
568
| subscription_id | The Azure subscription identifier. |
569
| resource_uid | The unique Azure resource identifier. |
570
@@ -573,8 +678,8 @@ Check the following:
678
679
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
680
576
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
577
-- **Verify a built-in profile exists** -- List available profiles:
681
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
682
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
683
```bash
684
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
685
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_sql_database.md
+119
-14
@@ -62,7 +62,7 @@ The collector has two discovery phases:
62
**Bootstrap (first run)**
63
64
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
65
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
65
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
66
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
67
- A single job can monitor multiple subscriptions.
68
@@ -164,7 +164,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
164
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
165
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
166
167
-User profile files with the same `id` as a stock profile override it.
167
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
168
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
169
170
@@ -192,8 +192,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
192
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
193
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
194
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
195
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
196
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
195
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
196
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
197
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
198
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
199
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
200
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -239,6 +240,7 @@ Controls how the collector finds candidate Azure resources.
240
##### discovery.mode_query.kql
241
242
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
243
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
244
245
The query **must** project these five columns:
246
@@ -250,6 +252,14 @@ The query **must** project these five columns:
252
| `resourceGroup` | Resource group name |
253
| `location` | Azure region |
254
255
+:::info
256
+
257
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
258
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
259
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
260
+
261
+:::
262
+
263
Example:
264
265
```
@@ -266,11 +276,67 @@ Controls how the collector decides which metric profiles to activate.
276
277
| Mode | Behavior |
278
|:-----|:---------|
269
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
270
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
271
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
279
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
280
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
281
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
282
+
283
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
284
+
285
+Filter layering:
286
+
287
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
288
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
289
+- The effective resource set for a profile is the intersection of both filter sets.
290
+- Per-profile filters never widen or bypass the global discovery scope.
291
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
292
+
293
+
294
+<a id="option-profiles-profiles-mode-auto-entries"></a>
295
+##### profiles.mode_auto.entries
296
+
297
+Each entry has:
298
+
299
+| Field | Description |
300
+|:------|:------------|
301
+| `name` | Canonical profile basename. |
302
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
303
+| `filters.regions` | Optional region narrowing for this profile. |
304
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
305
+
306
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
307
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
308
+
309
+
310
+<a id="option-profiles-profiles-mode-exact-entries"></a>
311
+##### profiles.mode_exact.entries
312
+
313
+Each entry has:
314
+
315
+| Field | Description |
316
+|:------|:------------|
317
+| `name` | Canonical profile basename. |
318
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
319
+| `filters.regions` | Optional region narrowing for this profile. |
320
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
321
+
322
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
323
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
324
+
325
+
326
+<a id="option-profiles-profiles-mode-combined-entries"></a>
327
+##### profiles.mode_combined.entries
328
+
329
+Each entry has:
330
+
331
+| Field | Description |
332
+|:------|:------------|
333
+| `name` | Canonical profile basename. |
334
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
335
+| `filters.regions` | Optional region narrowing for this profile. |
336
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
337
273
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
338
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
339
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
340
341
342
@@ -358,9 +424,48 @@ jobs:
424
profiles:
425
mode: exact
426
mode_exact:
361
- names:
362
- - sql_database
363
- - postgres_flexible
427
+ entries:
428
+ - name: sql_database
429
+ - name: postgres_flexible
430
+ auth:
431
+ mode: managed_identity
432
+
433
+```
434
+</details>
435
+
436
+###### Global and per-profile filters together
437
+
438
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
439
+
440
+<details open><summary>Config</summary>
441
+
442
+```yaml
443
+jobs:
444
+ - name: prod-databases
445
+ subscription_ids:
446
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
447
+ discovery:
448
+ mode: filters
449
+ mode_filters:
450
+ resource_groups:
451
+ - production-rg
452
+ regions:
453
+ - eastus
454
+ profiles:
455
+ mode: combined
456
+ mode_combined:
457
+ entries:
458
+ - name: sql_database
459
+ filters:
460
+ tags:
461
+ env:
462
+ - prod
463
+ # Effective scope:
464
+ # 1. Discovery first keeps only resources in production-rg and eastus.
465
+ # 2. Auto-selected profiles use that global scope as-is.
466
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
467
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
468
+ # because per-profile filters only narrow the globally discovered set.
469
auth:
470
mode: managed_identity
471
@@ -465,7 +570,7 @@ Labels:
570
| resource_group | The Azure resource group. |
571
| region | The Azure region where the resource is deployed. |
572
| resource_type | The Azure resource type identifier. |
468
-| profile | The Azure Monitor profile id. |
573
+| profile | The Azure Monitor profile basename. |
574
| subscription_id | The Azure subscription identifier. |
575
| resource_uid | The unique Azure resource identifier. |
576
@@ -585,8 +690,8 @@ Check the following:
690
691
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
692
588
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
589
-- **Verify a built-in profile exists** -- List available profiles:
693
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
694
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
695
```bash
696
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
697
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_sql_elastic_pool.md
+119
-14
@@ -63,7 +63,7 @@ The collector has two discovery phases:
63
**Bootstrap (first run)**
64
65
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
66
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
66
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
67
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
68
- A single job can monitor multiple subscriptions.
69
@@ -165,7 +165,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
165
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
166
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
167
168
-User profile files with the same `id` as a stock profile override it.
168
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
169
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
170
171
@@ -193,8 +193,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
193
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
194
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
195
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
196
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
197
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
196
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
197
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
198
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
199
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
200
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
201
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -240,6 +241,7 @@ Controls how the collector finds candidate Azure resources.
241
##### discovery.mode_query.kql
242
243
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
244
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
245
246
The query **must** project these five columns:
247
@@ -251,6 +253,14 @@ The query **must** project these five columns:
253
| `resourceGroup` | Resource group name |
254
| `location` | Azure region |
255
256
+:::info
257
+
258
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
259
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
260
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
261
+
262
+:::
263
+
264
Example:
265
266
```
@@ -267,11 +277,67 @@ Controls how the collector decides which metric profiles to activate.
277
278
| Mode | Behavior |
279
|:-----|:---------|
270
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
271
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
272
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
280
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
281
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
282
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
283
+
284
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
285
+
286
+Filter layering:
287
+
288
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
289
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
290
+- The effective resource set for a profile is the intersection of both filter sets.
291
+- Per-profile filters never widen or bypass the global discovery scope.
292
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
293
+
294
+
295
+<a id="option-profiles-profiles-mode-auto-entries"></a>
296
+##### profiles.mode_auto.entries
297
+
298
+Each entry has:
299
+
300
+| Field | Description |
301
+|:------|:------------|
302
+| `name` | Canonical profile basename. |
303
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
304
+| `filters.regions` | Optional region narrowing for this profile. |
305
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
306
+
307
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
308
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
309
+
310
+
311
+<a id="option-profiles-profiles-mode-exact-entries"></a>
312
+##### profiles.mode_exact.entries
313
+
314
+Each entry has:
315
+
316
+| Field | Description |
317
+|:------|:------------|
318
+| `name` | Canonical profile basename. |
319
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
320
+| `filters.regions` | Optional region narrowing for this profile. |
321
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
322
+
323
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
324
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
325
+
326
+
327
+<a id="option-profiles-profiles-mode-combined-entries"></a>
328
+##### profiles.mode_combined.entries
329
+
330
+Each entry has:
331
+
332
+| Field | Description |
333
+|:------|:------------|
334
+| `name` | Canonical profile basename. |
335
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
336
+| `filters.regions` | Optional region narrowing for this profile. |
337
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
338
274
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
339
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
340
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
341
342
343
@@ -359,9 +425,48 @@ jobs:
425
profiles:
426
mode: exact
427
mode_exact:
362
- names:
363
- - sql_database
364
- - postgres_flexible
428
+ entries:
429
+ - name: sql_database
430
+ - name: postgres_flexible
431
+ auth:
432
+ mode: managed_identity
433
+
434
+```
435
+</details>
436
+
437
+###### Global and per-profile filters together
438
+
439
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
440
+
441
+<details open><summary>Config</summary>
442
+
443
+```yaml
444
+jobs:
445
+ - name: prod-databases
446
+ subscription_ids:
447
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
448
+ discovery:
449
+ mode: filters
450
+ mode_filters:
451
+ resource_groups:
452
+ - production-rg
453
+ regions:
454
+ - eastus
455
+ profiles:
456
+ mode: combined
457
+ mode_combined:
458
+ entries:
459
+ - name: sql_database
460
+ filters:
461
+ tags:
462
+ env:
463
+ - prod
464
+ # Effective scope:
465
+ # 1. Discovery first keeps only resources in production-rg and eastus.
466
+ # 2. Auto-selected profiles use that global scope as-is.
467
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
468
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
469
+ # because per-profile filters only narrow the globally discovered set.
470
auth:
471
mode: managed_identity
472
@@ -461,7 +566,7 @@ Labels:
566
| resource_group | The Azure resource group. |
567
| region | The Azure region where the resource is deployed. |
568
| resource_type | The Azure resource type identifier. |
464
-| profile | The Azure Monitor profile id. |
569
+| profile | The Azure Monitor profile basename. |
570
| subscription_id | The Azure subscription identifier. |
571
| resource_uid | The unique Azure resource identifier. |
572
@@ -575,8 +680,8 @@ Check the following:
680
681
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
682
578
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
579
-- **Verify a built-in profile exists** -- List available profiles:
683
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
684
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
685
```bash
686
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
687
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_sql_managed_instance.md
+119
-14
@@ -58,7 +58,7 @@ The collector has two discovery phases:
58
**Bootstrap (first run)**
59
60
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
61
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
61
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
62
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
63
- A single job can monitor multiple subscriptions.
64
@@ -160,7 +160,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
160
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
161
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
162
163
-User profile files with the same `id` as a stock profile override it.
163
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
164
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
165
166
@@ -188,8 +188,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
188
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
189
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
190
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
191
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
192
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
191
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
192
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
193
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
194
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
195
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
196
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -235,6 +236,7 @@ Controls how the collector finds candidate Azure resources.
236
##### discovery.mode_query.kql
237
238
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
239
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
240
241
The query **must** project these five columns:
242
@@ -246,6 +248,14 @@ The query **must** project these five columns:
248
| `resourceGroup` | Resource group name |
249
| `location` | Azure region |
250
251
+:::info
252
+
253
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
254
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
255
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
256
+
257
+:::
258
+
259
Example:
260
261
```
@@ -262,11 +272,67 @@ Controls how the collector decides which metric profiles to activate.
272
273
| Mode | Behavior |
274
|:-----|:---------|
265
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
266
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
267
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
275
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
276
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
277
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
278
+
279
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
280
+
281
+Filter layering:
282
+
283
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
284
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
285
+- The effective resource set for a profile is the intersection of both filter sets.
286
+- Per-profile filters never widen or bypass the global discovery scope.
287
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
288
+
289
+
290
+<a id="option-profiles-profiles-mode-auto-entries"></a>
291
+##### profiles.mode_auto.entries
292
+
293
+Each entry has:
294
+
295
+| Field | Description |
296
+|:------|:------------|
297
+| `name` | Canonical profile basename. |
298
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
299
+| `filters.regions` | Optional region narrowing for this profile. |
300
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
301
+
302
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
303
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
304
+
305
+
306
+<a id="option-profiles-profiles-mode-exact-entries"></a>
307
+##### profiles.mode_exact.entries
308
+
309
+Each entry has:
310
+
311
+| Field | Description |
312
+|:------|:------------|
313
+| `name` | Canonical profile basename. |
314
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
315
+| `filters.regions` | Optional region narrowing for this profile. |
316
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
317
+
318
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
319
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
320
+
321
+
322
+<a id="option-profiles-profiles-mode-combined-entries"></a>
323
+##### profiles.mode_combined.entries
324
+
325
+Each entry has:
326
+
327
+| Field | Description |
328
+|:------|:------------|
329
+| `name` | Canonical profile basename. |
330
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
331
+| `filters.regions` | Optional region narrowing for this profile. |
332
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
333
269
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
334
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
335
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
336
337
338
@@ -354,9 +420,48 @@ jobs:
420
profiles:
421
mode: exact
422
mode_exact:
357
- names:
358
- - sql_database
359
- - postgres_flexible
423
+ entries:
424
+ - name: sql_database
425
+ - name: postgres_flexible
426
+ auth:
427
+ mode: managed_identity
428
+
429
+```
430
+</details>
431
+
432
+###### Global and per-profile filters together
433
+
434
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
435
+
436
+<details open><summary>Config</summary>
437
+
438
+```yaml
439
+jobs:
440
+ - name: prod-databases
441
+ subscription_ids:
442
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
443
+ discovery:
444
+ mode: filters
445
+ mode_filters:
446
+ resource_groups:
447
+ - production-rg
448
+ regions:
449
+ - eastus
450
+ profiles:
451
+ mode: combined
452
+ mode_combined:
453
+ entries:
454
+ - name: sql_database
455
+ filters:
456
+ tags:
457
+ env:
458
+ - prod
459
+ # Effective scope:
460
+ # 1. Discovery first keeps only resources in production-rg and eastus.
461
+ # 2. Auto-selected profiles use that global scope as-is.
462
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
463
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
464
+ # because per-profile filters only narrow the globally discovered set.
465
auth:
466
mode: managed_identity
467
@@ -445,7 +550,7 @@ Labels:
550
| resource_group | The Azure resource group. |
551
| region | The Azure region where the resource is deployed. |
552
| resource_type | The Azure resource type identifier. |
448
-| profile | The Azure Monitor profile id. |
553
+| profile | The Azure Monitor profile basename. |
554
| subscription_id | The Azure subscription identifier. |
555
| resource_uid | The unique Azure resource identifier. |
556
@@ -548,8 +653,8 @@ Check the following:
653
654
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
655
551
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
552
-- **Verify a built-in profile exists** -- List available profiles:
656
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
657
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
658
```bash
659
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
660
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_storage_account.md
+119
-14
@@ -60,7 +60,7 @@ The collector has two discovery phases:
60
**Bootstrap (first run)**
61
62
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
63
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
63
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
64
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
65
- A single job can monitor multiple subscriptions.
66
@@ -162,7 +162,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
162
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
163
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
164
165
-User profile files with the same `id` as a stock profile override it.
165
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
166
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
167
168
@@ -190,8 +190,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
190
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
191
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
192
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
193
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
194
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
193
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
194
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
195
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
196
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
197
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
198
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -237,6 +238,7 @@ Controls how the collector finds candidate Azure resources.
238
##### discovery.mode_query.kql
239
240
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
241
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
242
243
The query **must** project these five columns:
244
@@ -248,6 +250,14 @@ The query **must** project these five columns:
250
| `resourceGroup` | Resource group name |
251
| `location` | Azure region |
252
253
+:::info
254
+
255
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
256
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
257
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
258
+
259
+:::
260
+
261
Example:
262
263
```
@@ -264,11 +274,67 @@ Controls how the collector decides which metric profiles to activate.
274
275
| Mode | Behavior |
276
|:-----|:---------|
267
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
268
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
269
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
277
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
278
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
279
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
280
+
281
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
282
+
283
+Filter layering:
284
+
285
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
286
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
287
+- The effective resource set for a profile is the intersection of both filter sets.
288
+- Per-profile filters never widen or bypass the global discovery scope.
289
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
290
+
291
+
292
+<a id="option-profiles-profiles-mode-auto-entries"></a>
293
+##### profiles.mode_auto.entries
294
+
295
+Each entry has:
296
+
297
+| Field | Description |
298
+|:------|:------------|
299
+| `name` | Canonical profile basename. |
300
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
301
+| `filters.regions` | Optional region narrowing for this profile. |
302
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
303
+
304
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
305
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
306
+
307
+
308
+<a id="option-profiles-profiles-mode-exact-entries"></a>
309
+##### profiles.mode_exact.entries
310
+
311
+Each entry has:
312
+
313
+| Field | Description |
314
+|:------|:------------|
315
+| `name` | Canonical profile basename. |
316
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
317
+| `filters.regions` | Optional region narrowing for this profile. |
318
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
319
+
320
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
321
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
322
+
323
+
324
+<a id="option-profiles-profiles-mode-combined-entries"></a>
325
+##### profiles.mode_combined.entries
326
+
327
+Each entry has:
328
+
329
+| Field | Description |
330
+|:------|:------------|
331
+| `name` | Canonical profile basename. |
332
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
333
+| `filters.regions` | Optional region narrowing for this profile. |
334
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
335
271
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
336
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
337
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
338
339
340
@@ -356,9 +422,48 @@ jobs:
422
profiles:
423
mode: exact
424
mode_exact:
359
- names:
360
- - sql_database
361
- - postgres_flexible
425
+ entries:
426
+ - name: sql_database
427
+ - name: postgres_flexible
428
+ auth:
429
+ mode: managed_identity
430
+
431
+```
432
+</details>
433
+
434
+###### Global and per-profile filters together
435
+
436
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
437
+
438
+<details open><summary>Config</summary>
439
+
440
+```yaml
441
+jobs:
442
+ - name: prod-databases
443
+ subscription_ids:
444
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
445
+ discovery:
446
+ mode: filters
447
+ mode_filters:
448
+ resource_groups:
449
+ - production-rg
450
+ regions:
451
+ - eastus
452
+ profiles:
453
+ mode: combined
454
+ mode_combined:
455
+ entries:
456
+ - name: sql_database
457
+ filters:
458
+ tags:
459
+ env:
460
+ - prod
461
+ # Effective scope:
462
+ # 1. Discovery first keeps only resources in production-rg and eastus.
463
+ # 2. Auto-selected profiles use that global scope as-is.
464
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
465
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
466
+ # because per-profile filters only narrow the globally discovered set.
467
auth:
468
mode: managed_identity
469
@@ -449,7 +554,7 @@ Labels:
554
| resource_group | The Azure resource group. |
555
| region | The Azure region where the resource is deployed. |
556
| resource_type | The Azure resource type identifier. |
452
-| profile | The Azure Monitor profile id. |
557
+| profile | The Azure Monitor profile basename. |
558
| subscription_id | The Azure subscription identifier. |
559
| resource_uid | The unique Azure resource identifier. |
560
@@ -553,8 +658,8 @@ Check the following:
658
659
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
660
556
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
557
-- **Verify a built-in profile exists** -- List available profiles:
661
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
662
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
663
```bash
664
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
665
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_stream_analytics_job.md
+119
-14
@@ -61,7 +61,7 @@ The collector has two discovery phases:
61
**Bootstrap (first run)**
62
63
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
64
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
64
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
65
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
66
- A single job can monitor multiple subscriptions.
67
@@ -163,7 +163,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
163
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
164
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
165
166
-User profile files with the same `id` as a stock profile override it.
166
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
167
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
168
169
@@ -191,8 +191,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
191
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
192
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
193
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
194
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
195
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
194
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
195
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
196
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
197
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
198
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
199
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -238,6 +239,7 @@ Controls how the collector finds candidate Azure resources.
239
##### discovery.mode_query.kql
240
241
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
242
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
243
244
The query **must** project these five columns:
245
@@ -249,6 +251,14 @@ The query **must** project these five columns:
251
| `resourceGroup` | Resource group name |
252
| `location` | Azure region |
253
254
+:::info
255
+
256
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
257
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
258
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
259
+
260
+:::
261
+
262
Example:
263
264
```
@@ -265,11 +275,67 @@ Controls how the collector decides which metric profiles to activate.
275
276
| Mode | Behavior |
277
|:-----|:---------|
268
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
269
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
270
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
278
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
279
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
280
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
281
+
282
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
283
+
284
+Filter layering:
285
+
286
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
287
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
288
+- The effective resource set for a profile is the intersection of both filter sets.
289
+- Per-profile filters never widen or bypass the global discovery scope.
290
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
291
+
292
+
293
+<a id="option-profiles-profiles-mode-auto-entries"></a>
294
+##### profiles.mode_auto.entries
295
+
296
+Each entry has:
297
+
298
+| Field | Description |
299
+|:------|:------------|
300
+| `name` | Canonical profile basename. |
301
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
302
+| `filters.regions` | Optional region narrowing for this profile. |
303
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
304
+
305
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
306
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
307
+
308
+
309
+<a id="option-profiles-profiles-mode-exact-entries"></a>
310
+##### profiles.mode_exact.entries
311
+
312
+Each entry has:
313
+
314
+| Field | Description |
315
+|:------|:------------|
316
+| `name` | Canonical profile basename. |
317
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
318
+| `filters.regions` | Optional region narrowing for this profile. |
319
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
320
+
321
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
322
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
323
+
324
+
325
+<a id="option-profiles-profiles-mode-combined-entries"></a>
326
+##### profiles.mode_combined.entries
327
+
328
+Each entry has:
329
+
330
+| Field | Description |
331
+|:------|:------------|
332
+| `name` | Canonical profile basename. |
333
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
334
+| `filters.regions` | Optional region narrowing for this profile. |
335
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
336
272
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
337
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
338
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
339
340
341
@@ -357,9 +423,48 @@ jobs:
423
profiles:
424
mode: exact
425
mode_exact:
360
- names:
361
- - sql_database
362
- - postgres_flexible
426
+ entries:
427
+ - name: sql_database
428
+ - name: postgres_flexible
429
+ auth:
430
+ mode: managed_identity
431
+
432
+```
433
+</details>
434
+
435
+###### Global and per-profile filters together
436
+
437
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
438
+
439
+<details open><summary>Config</summary>
440
+
441
+```yaml
442
+jobs:
443
+ - name: prod-databases
444
+ subscription_ids:
445
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
446
+ discovery:
447
+ mode: filters
448
+ mode_filters:
449
+ resource_groups:
450
+ - production-rg
451
+ regions:
452
+ - eastus
453
+ profiles:
454
+ mode: combined
455
+ mode_combined:
456
+ entries:
457
+ - name: sql_database
458
+ filters:
459
+ tags:
460
+ env:
461
+ - prod
462
+ # Effective scope:
463
+ # 1. Discovery first keeps only resources in production-rg and eastus.
464
+ # 2. Auto-selected profiles use that global scope as-is.
465
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
466
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
467
+ # because per-profile filters only narrow the globally discovered set.
468
auth:
469
mode: managed_identity
470
@@ -455,7 +560,7 @@ Labels:
560
| resource_group | The Azure resource group. |
561
| region | The Azure region where the resource is deployed. |
562
| resource_type | The Azure resource type identifier. |
458
-| profile | The Azure Monitor profile id. |
563
+| profile | The Azure Monitor profile basename. |
564
| subscription_id | The Azure subscription identifier. |
565
| resource_uid | The unique Azure resource identifier. |
566
@@ -563,8 +668,8 @@ Check the following:
668
669
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
670
566
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
567
-- **Verify a built-in profile exists** -- List available profiles:
671
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
672
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
673
```bash
674
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
675
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_synapse_analytics_workspace.md
+119
-14
@@ -60,7 +60,7 @@ The collector has two discovery phases:
60
**Bootstrap (first run)**
61
62
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
63
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
63
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
64
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
65
- A single job can monitor multiple subscriptions.
66
@@ -162,7 +162,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
162
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
163
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
164
165
-User profile files with the same `id` as a stock profile override it.
165
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
166
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
167
168
@@ -190,8 +190,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
190
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
191
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
192
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
193
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
194
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
193
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
194
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
195
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
196
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
197
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
198
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -237,6 +238,7 @@ Controls how the collector finds candidate Azure resources.
238
##### discovery.mode_query.kql
239
240
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
241
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
242
243
The query **must** project these five columns:
244
@@ -248,6 +250,14 @@ The query **must** project these five columns:
250
| `resourceGroup` | Resource group name |
251
| `location` | Azure region |
252
253
+:::info
254
+
255
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
256
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
257
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
258
+
259
+:::
260
+
261
Example:
262
263
```
@@ -264,11 +274,67 @@ Controls how the collector decides which metric profiles to activate.
274
275
| Mode | Behavior |
276
|:-----|:---------|
267
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
268
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
269
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
277
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
278
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
279
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
280
+
281
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
282
+
283
+Filter layering:
284
+
285
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
286
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
287
+- The effective resource set for a profile is the intersection of both filter sets.
288
+- Per-profile filters never widen or bypass the global discovery scope.
289
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
290
+
291
+
292
+<a id="option-profiles-profiles-mode-auto-entries"></a>
293
+##### profiles.mode_auto.entries
294
+
295
+Each entry has:
296
+
297
+| Field | Description |
298
+|:------|:------------|
299
+| `name` | Canonical profile basename. |
300
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
301
+| `filters.regions` | Optional region narrowing for this profile. |
302
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
303
+
304
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
305
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
306
+
307
+
308
+<a id="option-profiles-profiles-mode-exact-entries"></a>
309
+##### profiles.mode_exact.entries
310
+
311
+Each entry has:
312
+
313
+| Field | Description |
314
+|:------|:------------|
315
+| `name` | Canonical profile basename. |
316
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
317
+| `filters.regions` | Optional region narrowing for this profile. |
318
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
319
+
320
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
321
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
322
+
323
+
324
+<a id="option-profiles-profiles-mode-combined-entries"></a>
325
+##### profiles.mode_combined.entries
326
+
327
+Each entry has:
328
+
329
+| Field | Description |
330
+|:------|:------------|
331
+| `name` | Canonical profile basename. |
332
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
333
+| `filters.regions` | Optional region narrowing for this profile. |
334
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
335
271
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
336
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
337
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
338
339
340
@@ -356,9 +422,48 @@ jobs:
422
profiles:
423
mode: exact
424
mode_exact:
359
- names:
360
- - sql_database
361
- - postgres_flexible
425
+ entries:
426
+ - name: sql_database
427
+ - name: postgres_flexible
428
+ auth:
429
+ mode: managed_identity
430
+
431
+```
432
+</details>
433
+
434
+###### Global and per-profile filters together
435
+
436
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
437
+
438
+<details open><summary>Config</summary>
439
+
440
+```yaml
441
+jobs:
442
+ - name: prod-databases
443
+ subscription_ids:
444
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
445
+ discovery:
446
+ mode: filters
447
+ mode_filters:
448
+ resource_groups:
449
+ - production-rg
450
+ regions:
451
+ - eastus
452
+ profiles:
453
+ mode: combined
454
+ mode_combined:
455
+ entries:
456
+ - name: sql_database
457
+ filters:
458
+ tags:
459
+ env:
460
+ - prod
461
+ # Effective scope:
462
+ # 1. Discovery first keeps only resources in production-rg and eastus.
463
+ # 2. Auto-selected profiles use that global scope as-is.
464
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
465
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
466
+ # because per-profile filters only narrow the globally discovered set.
467
auth:
468
mode: managed_identity
469
@@ -452,7 +557,7 @@ Labels:
557
| resource_group | The Azure resource group. |
558
| region | The Azure region where the resource is deployed. |
559
| resource_type | The Azure resource type identifier. |
455
-| profile | The Azure Monitor profile id. |
560
+| profile | The Azure Monitor profile basename. |
561
| subscription_id | The Azure subscription identifier. |
562
| resource_uid | The unique Azure resource identifier. |
563
@@ -568,8 +673,8 @@ Check the following:
673
674
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
675
571
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
572
-- **Verify a built-in profile exists** -- List available profiles:
676
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
677
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
678
```bash
679
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
680
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_virtual_machine.md
+119
-14
@@ -63,7 +63,7 @@ The collector has two discovery phases:
63
**Bootstrap (first run)**
64
65
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
66
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
66
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
67
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
68
- A single job can monitor multiple subscriptions.
69
@@ -165,7 +165,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
165
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
166
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
167
168
-User profile files with the same `id` as a stock profile override it.
168
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
169
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
170
171
@@ -193,8 +193,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
193
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
194
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
195
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
196
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
197
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
196
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
197
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
198
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
199
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
200
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
201
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -240,6 +241,7 @@ Controls how the collector finds candidate Azure resources.
241
##### discovery.mode_query.kql
242
243
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
244
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
245
246
The query **must** project these five columns:
247
@@ -251,6 +253,14 @@ The query **must** project these five columns:
253
| `resourceGroup` | Resource group name |
254
| `location` | Azure region |
255
256
+:::info
257
+
258
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
259
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
260
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
261
+
262
+:::
263
+
264
Example:
265
266
```
@@ -267,11 +277,67 @@ Controls how the collector decides which metric profiles to activate.
277
278
| Mode | Behavior |
279
|:-----|:---------|
270
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
271
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
272
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
280
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
281
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
282
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
283
+
284
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
285
+
286
+Filter layering:
287
+
288
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
289
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
290
+- The effective resource set for a profile is the intersection of both filter sets.
291
+- Per-profile filters never widen or bypass the global discovery scope.
292
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
293
+
294
+
295
+<a id="option-profiles-profiles-mode-auto-entries"></a>
296
+##### profiles.mode_auto.entries
297
+
298
+Each entry has:
299
+
300
+| Field | Description |
301
+|:------|:------------|
302
+| `name` | Canonical profile basename. |
303
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
304
+| `filters.regions` | Optional region narrowing for this profile. |
305
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
306
+
307
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
308
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
309
+
310
+
311
+<a id="option-profiles-profiles-mode-exact-entries"></a>
312
+##### profiles.mode_exact.entries
313
+
314
+Each entry has:
315
+
316
+| Field | Description |
317
+|:------|:------------|
318
+| `name` | Canonical profile basename. |
319
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
320
+| `filters.regions` | Optional region narrowing for this profile. |
321
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
322
+
323
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
324
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
325
+
326
+
327
+<a id="option-profiles-profiles-mode-combined-entries"></a>
328
+##### profiles.mode_combined.entries
329
+
330
+Each entry has:
331
+
332
+| Field | Description |
333
+|:------|:------------|
334
+| `name` | Canonical profile basename. |
335
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
336
+| `filters.regions` | Optional region narrowing for this profile. |
337
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
338
274
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
339
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
340
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
341
342
343
@@ -359,9 +425,48 @@ jobs:
425
profiles:
426
mode: exact
427
mode_exact:
362
- names:
363
- - sql_database
364
- - postgres_flexible
428
+ entries:
429
+ - name: sql_database
430
+ - name: postgres_flexible
431
+ auth:
432
+ mode: managed_identity
433
+
434
+```
435
+</details>
436
+
437
+###### Global and per-profile filters together
438
+
439
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
440
+
441
+<details open><summary>Config</summary>
442
+
443
+```yaml
444
+jobs:
445
+ - name: prod-databases
446
+ subscription_ids:
447
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
448
+ discovery:
449
+ mode: filters
450
+ mode_filters:
451
+ resource_groups:
452
+ - production-rg
453
+ regions:
454
+ - eastus
455
+ profiles:
456
+ mode: combined
457
+ mode_combined:
458
+ entries:
459
+ - name: sql_database
460
+ filters:
461
+ tags:
462
+ env:
463
+ - prod
464
+ # Effective scope:
465
+ # 1. Discovery first keeps only resources in production-rg and eastus.
466
+ # 2. Auto-selected profiles use that global scope as-is.
467
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
468
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
469
+ # because per-profile filters only narrow the globally discovered set.
470
auth:
471
mode: managed_identity
472
@@ -471,7 +576,7 @@ Labels:
576
| resource_group | The Azure resource group. |
577
| region | The Azure region where the resource is deployed. |
578
| resource_type | The Azure resource type identifier. |
474
-| profile | The Azure Monitor profile id. |
579
+| profile | The Azure Monitor profile basename. |
580
| subscription_id | The Azure subscription identifier. |
581
| resource_uid | The unique Azure resource identifier. |
582
@@ -605,8 +710,8 @@ Check the following:
710
711
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
712
608
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
609
-- **Verify a built-in profile exists** -- List available profiles:
713
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
714
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
715
```bash
716
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
717
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_virtual_machine_scale_set.md
+119
-14
@@ -65,7 +65,7 @@ The collector has two discovery phases:
65
**Bootstrap (first run)**
66
67
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
68
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
68
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
69
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
70
- A single job can monitor multiple subscriptions.
71
@@ -167,7 +167,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
167
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
168
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
169
170
-User profile files with the same `id` as a stock profile override it.
170
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
171
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
172
173
@@ -195,8 +195,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
195
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
196
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
197
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
198
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
199
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
198
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
199
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
200
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
201
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
202
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
203
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -242,6 +243,7 @@ Controls how the collector finds candidate Azure resources.
243
##### discovery.mode_query.kql
244
245
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
246
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
247
248
The query **must** project these five columns:
249
@@ -253,6 +255,14 @@ The query **must** project these five columns:
255
| `resourceGroup` | Resource group name |
256
| `location` | Azure region |
257
258
+:::info
259
+
260
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
261
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
262
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
263
+
264
+:::
265
+
266
Example:
267
268
```
@@ -269,11 +279,67 @@ Controls how the collector decides which metric profiles to activate.
279
280
| Mode | Behavior |
281
|:-----|:---------|
272
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
273
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
274
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
282
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
283
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
284
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
285
+
286
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
287
+
288
+Filter layering:
289
+
290
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
291
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
292
+- The effective resource set for a profile is the intersection of both filter sets.
293
+- Per-profile filters never widen or bypass the global discovery scope.
294
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
295
+
296
+
297
+<a id="option-profiles-profiles-mode-auto-entries"></a>
298
+##### profiles.mode_auto.entries
299
+
300
+Each entry has:
301
+
302
+| Field | Description |
303
+|:------|:------------|
304
+| `name` | Canonical profile basename. |
305
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
306
+| `filters.regions` | Optional region narrowing for this profile. |
307
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
308
+
309
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
310
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
311
+
312
+
313
+<a id="option-profiles-profiles-mode-exact-entries"></a>
314
+##### profiles.mode_exact.entries
315
+
316
+Each entry has:
317
+
318
+| Field | Description |
319
+|:------|:------------|
320
+| `name` | Canonical profile basename. |
321
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
322
+| `filters.regions` | Optional region narrowing for this profile. |
323
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
324
+
325
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
326
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
327
+
328
+
329
+<a id="option-profiles-profiles-mode-combined-entries"></a>
330
+##### profiles.mode_combined.entries
331
+
332
+Each entry has:
333
+
334
+| Field | Description |
335
+|:------|:------------|
336
+| `name` | Canonical profile basename. |
337
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
338
+| `filters.regions` | Optional region narrowing for this profile. |
339
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
340
276
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
341
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
342
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
343
344
345
@@ -361,9 +427,48 @@ jobs:
427
profiles:
428
mode: exact
429
mode_exact:
364
- names:
365
- - sql_database
366
- - postgres_flexible
430
+ entries:
431
+ - name: sql_database
432
+ - name: postgres_flexible
433
+ auth:
434
+ mode: managed_identity
435
+
436
+```
437
+</details>
438
+
439
+###### Global and per-profile filters together
440
+
441
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
442
+
443
+<details open><summary>Config</summary>
444
+
445
+```yaml
446
+jobs:
447
+ - name: prod-databases
448
+ subscription_ids:
449
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
450
+ discovery:
451
+ mode: filters
452
+ mode_filters:
453
+ resource_groups:
454
+ - production-rg
455
+ regions:
456
+ - eastus
457
+ profiles:
458
+ mode: combined
459
+ mode_combined:
460
+ entries:
461
+ - name: sql_database
462
+ filters:
463
+ tags:
464
+ env:
465
+ - prod
466
+ # Effective scope:
467
+ # 1. Discovery first keeps only resources in production-rg and eastus.
468
+ # 2. Auto-selected profiles use that global scope as-is.
469
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
470
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
471
+ # because per-profile filters only narrow the globally discovered set.
472
auth:
473
mode: managed_identity
474
@@ -475,7 +580,7 @@ Labels:
580
| resource_group | The Azure resource group. |
581
| region | The Azure region where the resource is deployed. |
582
| resource_type | The Azure resource type identifier. |
478
-| profile | The Azure Monitor profile id. |
583
+| profile | The Azure Monitor profile basename. |
584
| subscription_id | The Azure subscription identifier. |
585
| resource_uid | The unique Azure resource identifier. |
586
@@ -609,8 +714,8 @@ Check the following:
714
715
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
716
612
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
613
-- **Verify a built-in profile exists** -- List available profiles:
717
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
718
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
719
```bash
720
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
721
```
src/go/plugin/go.d/collector/azure_monitor/integrations/azure_vpn_gateway.md
+119
-14
@@ -63,7 +63,7 @@ The collector has two discovery phases:
63
**Bootstrap (first run)**
64
65
- With the default `profiles.mode: auto`, the collector queries Azure Resource Graph within the configured `subscription_ids` to find candidate resources.
66
-- It matches discovered resource types against built-in profiles and automatically enables the relevant ones.
66
+- It matches discovered resource types against [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) and automatically enables the relevant ones.
67
- Discovery scope can be narrowed using `discovery.mode: filters` (resource groups, regions, tags) or replaced entirely with `discovery.mode: query` for a custom KQL query.
68
- A single job can monitor multiple subscriptions.
69
@@ -165,7 +165,7 @@ The following options can be defined globally: `update_every`, `autodetection_re
165
| Stock profiles | `/usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/` |
166
| User overrides | `/etc/netdata/go.d/azure_monitor.profiles/` |
167
168
-User profile files with the same `id` as a stock profile override it.
168
+User profile files with the same basename as a [stock profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) override it.
169
Custom profiles extend the collector's catalog -- they do not replace the discovery mechanism.
170
171
@@ -193,8 +193,9 @@ Custom profiles extend the collector's catalog -- they do not replace the discov
193
| | discovery.mode_filters.tags | Optional exact-match tag filters for `filters` mode. Keys are matched case-insensitively and values case-sensitively. | {} | no |
194
| | [discovery.mode_query.kql](#option-discovery-discovery-mode-query-kql) | Custom Azure Resource Graph KQL for `query` mode. Must project `id`, `name`, `type`, `resourceGroup`, `location`. | | no |
195
| **Profiles** | [profiles.mode](#option-profiles-profiles-mode) | How profiles are selected: `auto` (discover from resources), `exact` (explicit list), or `combined` (both). | auto | no |
196
-| | profiles.mode_exact.names | Explicit profile file basenames used by `exact` mode. Matching is case-insensitive. | [] | no |
197
-| | profiles.mode_combined.names | Explicit profile file basenames merged with auto-discovered profiles in `combined` mode. Matching is case-insensitive. | [] | no |
196
+| | [profiles.mode_auto.entries](#option-profiles-profiles-mode-auto-entries) | Optional per-profile overrides applied only to profiles that auto-activate at bootstrap. | [] | no |
197
+| | [profiles.mode_exact.entries](#option-profiles-profiles-mode-exact-entries) | Explicit profile entries used by `exact` mode. | [] | no |
198
+| | [profiles.mode_combined.entries](#option-profiles-profiles-mode-combined-entries) | Explicit profile entries merged with auto-discovered profiles in `combined` mode. | [] | no |
199
| **Limits** | limits.max_concurrency | Maximum concurrent batch queries to Azure Monitor. | 4 | no |
200
| | limits.max_batch_resources | Maximum resources per Azure Monitor batch request. | 50 | no |
201
| | limits.max_metrics_per_query | Maximum metrics per Azure Monitor batch request. | 20 | no |
@@ -240,6 +241,7 @@ Controls how the collector finds candidate Azure resources.
241
##### discovery.mode_query.kql
242
243
A raw Azure Resource Graph KQL query used when `discovery.mode` is `query`.
244
+See the [Azure Resource Graph query language documentation](https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-language) for syntax and supported operators.
245
246
The query **must** project these five columns:
247
@@ -251,6 +253,14 @@ The query **must** project these five columns:
253
| `resourceGroup` | Resource group name |
254
| `location` | Azure region |
255
256
+:::info
257
+
258
+- Returned resource `type` values should match the Azure resource types expected by the active profiles.
259
+- Resources with unsupported or non-matching types are ignored and do not activate profiles.
260
+- For the stock catalog, see [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default).
261
+
262
+:::
263
+
264
Example:
265
266
```
@@ -267,11 +277,67 @@ Controls how the collector decides which metric profiles to activate.
277
278
| Mode | Behavior |
279
|:-----|:---------|
270
-| `auto` | Discovers resource types in your subscriptions and enables matching built-in profiles automatically. This is the default. |
271
-| `exact` | Uses only the profile basenames listed under `profiles.mode_exact.names`. No auto-discovery. |
272
-| `combined` | Merges auto-discovered profiles with the basenames listed under `profiles.mode_combined.names`. |
280
+| `auto` | Discovers resource types in your subscriptions and enables matching [built-in profiles](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) automatically. This is the default. |
281
+| `exact` | Uses only the profile entries listed under `profiles.mode_exact.entries`. No auto-discovery. |
282
+| `combined` | Merges auto-discovered profiles with the explicit entries listed under `profiles.mode_combined.entries`. |
283
+
284
+Each profile entry uses `name` as the canonical profile basename. The basename is the profile filename without the `.yaml` / `.yml` suffix and must be lowercase.
285
+
286
+Filter layering:
287
+
288
+- `discovery.mode_filters.*` defines the job-wide discovery scope.
289
+- `profiles.mode_*.entries[].filters.*` narrows resources for one profile only.
290
+- The effective resource set for a profile is the intersection of both filter sets.
291
+- Per-profile filters never widen or bypass the global discovery scope.
292
+- In `discovery.mode: query`, per-profile filters can use only `resource_groups` and `regions`. If you need per-profile tag filtering there, encode it in the KQL.
293
+
294
+
295
+<a id="option-profiles-profiles-mode-auto-entries"></a>
296
+##### profiles.mode_auto.entries
297
+
298
+Each entry has:
299
+
300
+| Field | Description |
301
+|:------|:------------|
302
+| `name` | Canonical profile basename. |
303
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
304
+| `filters.regions` | Optional region narrowing for this profile. |
305
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
306
+
307
+Auto-mode entries do not activate profiles on their own. They only override filtering for profiles that were auto-selected at bootstrap.
308
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
309
+
310
+
311
+<a id="option-profiles-profiles-mode-exact-entries"></a>
312
+##### profiles.mode_exact.entries
313
+
314
+Each entry has:
315
+
316
+| Field | Description |
317
+|:------|:------------|
318
+| `name` | Canonical profile basename. |
319
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
320
+| `filters.regions` | Optional region narrowing for this profile. |
321
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
322
+
323
+Per-profile filters only narrow the globally discovered resource set. They never widen it.
324
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
325
+
326
+
327
+<a id="option-profiles-profiles-mode-combined-entries"></a>
328
+##### profiles.mode_combined.entries
329
+
330
+Each entry has:
331
+
332
+| Field | Description |
333
+|:------|:------------|
334
+| `name` | Canonical profile basename. |
335
+| `filters.resource_groups` | Optional resource-group narrowing for this profile. |
336
+| `filters.regions` | Optional region narrowing for this profile. |
337
+| `filters.tags` | Optional tag narrowing for this profile in `discovery.mode: filters`. |
338
274
-Profile basename matching is case-insensitive. A basename is the profile filename without the `.yaml` / `.yml` suffix.
339
+If an explicit `combined` entry matches an auto-selected profile, the collector keeps one runtime profile and overlays the explicit entry filters onto it.
340
+In `discovery.mode: query`, only `filters.resource_groups` and `filters.regions` apply.
341
342
343
@@ -359,9 +425,48 @@ jobs:
425
profiles:
426
mode: exact
427
mode_exact:
362
- names:
363
- - sql_database
364
- - postgres_flexible
428
+ entries:
429
+ - name: sql_database
430
+ - name: postgres_flexible
431
+ auth:
432
+ mode: managed_identity
433
+
434
+```
435
+</details>
436
+
437
+###### Global and per-profile filters together
438
+
439
+Apply a global discovery boundary to the whole job, then narrow only the SQL Database profile further with a per-profile tag filter.
440
+
441
+<details open><summary>Config</summary>
442
+
443
+```yaml
444
+jobs:
445
+ - name: prod-databases
446
+ subscription_ids:
447
+ - "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
448
+ discovery:
449
+ mode: filters
450
+ mode_filters:
451
+ resource_groups:
452
+ - production-rg
453
+ regions:
454
+ - eastus
455
+ profiles:
456
+ mode: combined
457
+ mode_combined:
458
+ entries:
459
+ - name: sql_database
460
+ filters:
461
+ tags:
462
+ env:
463
+ - prod
464
+ # Effective scope:
465
+ # 1. Discovery first keeps only resources in production-rg and eastus.
466
+ # 2. Auto-selected profiles use that global scope as-is.
467
+ # 3. The sql_database profile is narrowed further to resources tagged env=prod.
468
+ # 4. The sql_database profile cannot see resources outside production-rg/eastus,
469
+ # because per-profile filters only narrow the globally discovered set.
470
auth:
471
mode: managed_identity
472
@@ -461,7 +566,7 @@ Labels:
566
| resource_group | The Azure resource group. |
567
| region | The Azure region where the resource is deployed. |
568
| resource_type | The Azure resource type identifier. |
464
-| profile | The Azure Monitor profile id. |
569
+| profile | The Azure Monitor profile basename. |
570
| subscription_id | The Azure subscription identifier. |
571
| resource_uid | The unique Azure resource identifier. |
572
@@ -598,8 +703,8 @@ Check the following:
703
704
Profiles are matched by Azure resource type. If a resource type exists but metrics are missing:
705
601
-- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.names` or `profiles.mode_combined.names`.
602
-- **Verify a built-in profile exists** -- List available profiles:
706
+- **Check profile mode** -- Ensure `profiles.mode: auto` (default), or explicitly list the profile basename under `profiles.mode_exact.entries` or `profiles.mode_combined.entries`.
707
+- **Verify a [built-in profile](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/config/go.d/azure_monitor.profiles/default) exists** -- List available profiles:
708
```bash
709
ls /usr/lib/netdata/conf.d/go.d/azure_monitor.profiles/default/
710
```