Back to Netdata

Schema reference

.agents/skills/integrations-lifecycle/schema-reference.md

2.11.0100.2 KB
Original Source

Schema reference

Per-field reference for JSON Schemas under integrations/schemas/. Each schema is JSON Schema Draft 7; cross-refs use ./shared.json#/$defs/... resolved by Registry(retrieve=retrieve_from_filesystem) (gen_integrations.py:163-169).

Tables below use these column conventions:

  • Field: dotted path (a.b.c[].d for nested arrays).
  • Type: JSON Schema type or $ref indication.
  • Req: yes / no / conditional (with the condition).
  • Values: enum values, regex constraints, minItems, minLength.
  • Surface: which output(s) the field affects (learn / www / in-app / alerts / stock / README / none).
  • Notes: cross-field constraints, special handling in gen_integrations.py.

If the schema declares a field but no template renders it, "Surface: none" is recorded; the field is still validated and serialized into integrations.js but never appears anywhere visible.

additionalProperties: false is NOT set on most schemas, so unknown keys pass through silently. See gotchas.md.

shared.json -- building blocks

Referenced by every other schema for common structures.

$defs.id

Single string field used in many schemas as an identifier.

FieldTypeReqValuesSurfaceNotes
idstringyesminLength: 1allURL-safe identifier; deduplication key in dedupe_integrations (gen_integrations.py:789).

$defs.instance

The "what is this thing" descriptor used by every per-integration entry.

FieldTypeReqValuesSurfaceNotes
instance.namestringyes--learn / www / in-appDisplay name. Drives slug for most types.
instance.linkstringyesURLlearn / wwwOfficial upstream site.
instance.categoriesarray<string>yeseach must match a categories.yaml idlearn / www / in-appValidated; bogus removed (gen_integrations.py:899-912). If none survive, falls back to categories.yaml entries flagged collector_default: true (:906-908).
instance.icon_filenamestringyes--learn / www / in-appPath under ${NETDATA_REPOS_DIR}/website/themes/tailwind/static/img/ (icon repo).
instance.variablesobjectnovalues: string / int / bool / numberall rendered textTriggers two-pass Jinja templating; see pipeline.md.

Do not use instance.variables or option/default text to build the short catalog description. For collector-like integrations, the Monitor Anything table description is extracted from the first sentence of the generated overview, usually overview.data_collection.metrics_description. See description-authoring.md before writing or reviewing description fields.

$defs.keywords

Search-keyword array.

FieldTypeReqValuesSurfaceNotes
keywordsarray<string>yes (in most parent schemas)--learn frontmatter, in-app searchEmitted in the <!--startmeta block as keywords: ['k1','k2'].

$defs.short_setup

Minimal "Setup" block. Alternative to full_setup for notification-style integrations.

FieldTypeReqValuesSurfaceNotes
short_setup.descriptionstringyes (when short_setup used)markdownlearn / in-appFree-form setup text.

$defs.full_setup

The standard setup block for collectors / exporters / authentication / secretstore / service_discovery.

FieldTypeReqValuesSurfaceNotes
full_setup.prerequisites.list[]array<obj>yesobjects with title, descriptionlearn / in-appRendered as h4 sections in setup-generic.md.
full_setup.prerequisites.list[].titlestringyes--learn / in-apph4 text.
full_setup.prerequisites.list[].descriptionstringyesmarkdownlearn / in-appbody.
full_setup.configuration.file.namestringyes--learnStock conf filename, e.g. go.d/postgres.conf.
full_setup.configuration.file.section_namestringno--learnnetdata.conf section, e.g. [plugin:proc].
full_setup.configuration.options.descriptionstringyesmarkdownlearn / in-appIntro before the options table.
full_setup.configuration.options.folding.titlestringyes--learn (clean strips)Folding section title.
full_setup.configuration.options.folding.enabledbooleanyes--learn (clean strips)Whether the section is collapsed by default.
full_setup.configuration.options.list[].namestringyes--learn / in-appOption name (e.g. dsn).
full_setup.configuration.options.list[].groupstringno--learnAdds a "Group" column when present.
full_setup.configuration.options.list[].descriptionstringyesmarkdownlearn / in-appShort description for the table cell.
full_setup.configuration.options.list[].detailed_descriptionstringnomarkdownlearn (anchor)When set, table cell becomes a link to a detailed h5 section below.
full_setup.configuration.options.list[].default_valuestring / number / boolyes--learn / in-appDefault value as displayed in the table.
full_setup.configuration.options.list[].requiredbooleanyes--learn / in-appYes/No column.
full_setup.configuration.examples.folding$ref _foldingno--learn (clean strips)Folding for the examples block.
full_setup.configuration.examples.list[].namestringyes--learn / in-appExample title.
full_setup.configuration.examples.list[].descriptionstringyesmarkdownlearn / in-appExample explanation.
full_setup.configuration.examples.list[].configstringyesYAML stringlearn / in-appRendered inside a ```yaml fence.
full_setup.configuration.examples.list[].folding$ref _folding_relaxedno--learn (clean strips)Per-example folding override. When absent, defaults to the parent examples.folding.enabled (gen_integrations.py:918-922).

$defs.troubleshooting

FieldTypeReqValuesSurfaceNotes
troubleshooting.problems.list[].namestringyes--learn / in-appRendered as h3.
troubleshooting.problems.list[].descriptionstringyesmarkdownlearn / in-appBody.

The troubleshooting.md template adds debug-mode boilerplate per plugin (e.g. python.d.plugin, go.d.plugin, charts.d.plugin); see integrations/templates/troubleshooting.md:1-86.

$defs._folding

FieldTypeReqValuesSurfaceNotes
_folding.titlestringyes--learn (clean strips)Section title.
_folding.enabledbooleanyes--learn (clean strips)Initial collapsed/expanded state.

$defs._folding_relaxed

Same as _folding but only enabled is required; title optional.

collector.json

Top-level structure: a plugin_name plus a modules: array where each module is one collector integration.

FieldTypeReqValuesSurfaceNotes
plugin_namestringyes--(cascaded into modules)Auto-copied to each module.meta.plugin_name at gen_integrations.py:381.
modulesarray<obj>yes----One entry per integration.
modules[].meta.plugin_namestringyes--id / edit_linkRedundant with top-level; both must agree (no enforcement).
modules[].meta.module_namestringyes--id / stock conf basenameMatches stock conf section / filename.
modules[].meta.monitored_instance$ref shared.instanceyes--allFull instance block; name drives slug + sidebar label.
modules[].meta.keywords$ref shared.keywordsyes--learn / in-app
modules[].meta.communitybooleanno--badge colorWhen true, badge becomes "Community" (gen_docs_integrations.py:424).
modules[].meta.related_resources.integrations.list[].plugin_namestringyes (in entry)--related-integrations panel
modules[].meta.related_resources.integrations.list[].module_namestringconditionalrequired if monitored_instance_name is set (Draft-7 dependencies at collector.json:61-63)related-integrationsSee gotchas.md for non-obvious dependency semantics.
modules[].meta.related_resources.integrations.list[].monitored_instance_namestringno--related-integrationsFor cgroups multi-instance disambiguation.
modules[].meta.info_provided_to_referring_integrations.descriptionstringyesmarkdownrendered when ANOTHER collector references this oneThe "what THIS collector says when referenced from another."
modules[].overview.data_collection.metrics_descriptionstringyesmarkdownlearn / www / Monitor Anything first-sentence sourceThe "what we collect" prose. First sentence is the catalog description and must start with an active user-facing phrase such as Monitor..., Collect..., Enrich network flows with..., or Annotate network flows with.... Do not start with setup, variables, defaults, limits, or option names.
modules[].overview.data_collection.method_descriptionstringyesmarkdownlearn / wwwThe "how we collect" prose.
modules[].overview.supported_platforms.includearray<string>yes (may be empty)platform nameslearn (overview/collector.md:12-26)Allow-list.
modules[].overview.supported_platforms.excludearray<string>yes (may be empty)platform nameslearn (overview/collector.md:12-26)Block-list.
modules[].overview.multi_instancebooleanyes--learn (overview/collector.md:28-32)Drives the multi-instance sentence.
modules[].overview.additional_permissions.descriptionstringyes (may be empty)markdownlearn (overview/collector.md:34-36)When non-empty, an extra paragraph.
modules[].overview.default_behavior.auto_detection.descriptionstringyesmarkdownlearn (overview/collector.md:46-58)
modules[].overview.default_behavior.limits.descriptionstringyesmarkdownlearn (overview/collector.md:46-58)
modules[].overview.default_behavior.performance_impact.descriptionstringyesmarkdownlearn (overview/collector.md:46-58)
modules[].setup$ref shared.full_setupyes--learn / in-appRendered through setup-generic.md (with sample-<lang>-config.md per plugin).
modules[].troubleshooting$ref shared.troubleshootingyes--learn / in-app
modules[].alerts[].namestringyes--learn alerts table
modules[].alerts[].linkstringyesURL or repo-relativelearn alerts tableDeep link to the health.d/<...>.conf definition.
modules[].alerts[].metricstringyesmetric contextlearn alerts tableMust match a metric name in metrics.scopes[].metrics[].name (NOT enforced).
modules[].alerts[].infostringyes--learn alerts tableShort alert description.
modules[].alerts[].osstringno--learn alerts tableOS filter.
modules[].metrics.folding$ref _foldingyes--learn (clean strips)Folding for the entire metrics section.
modules[].metrics.descriptionstringyesmarkdownlearnIntro to the metrics block.
modules[].metrics.availabilityarray<string>yes--metrics table column-setDefines which "availability" columns the table will have.
modules[].metrics.dynamic_context_prefixes[].prefixstringnominLength: 1taxonomyOpt-in guardrail for taxonomy.yaml context_prefix: selectors.
modules[].metrics.dynamic_context_prefixes[].reasonstringnominLength: 1taxonomyRequired explanation for each dynamic context prefix.
modules[].metrics.dynamic_collect_plugins[].pluginstringnominLength: 1taxonomyOpt-in guardrail for taxonomy.yaml collect_plugin: selectors.
modules[].metrics.dynamic_collect_plugins[].reasonstringnominLength: 1taxonomyRequired explanation for each dynamic collect-plugin selector.
modules[].metrics.scopes[].namestringyes--learn metrics tableSpecial: global is rewritten to <instance> instance at gen_integrations.py:914-916.
modules[].metrics.scopes[].descriptionstringyesmarkdownlearn metrics table
modules[].metrics.scopes[].labels[].namestringyes--learnLabel name.
modules[].metrics.scopes[].labels[].descriptionstringyes--learn
modules[].metrics.scopes[].metrics[].namestringyesmetric contextlearn metrics tableChart context (e.g. postgres.connections).
modules[].metrics.scopes[].metrics[].availabilityarray<string>nomatches parent metrics.availabilitymetrics tableDrives column ticks (metrics.md:32-37).
modules[].metrics.scopes[].metrics[].descriptionstringyes--metrics tableRendered in the Description column. For code-defined collectors, copy the chart title from collector source instead of inventing parallel prose.
modules[].metrics.scopes[].metrics[].unitstringyes--metrics table
modules[].metrics.scopes[].metrics[].chart_typestringyesenum: line, area, stacked, heatmapmetrics table
modules[].metrics.scopes[].metrics[].dimensions[].namestringyes--metrics table
modules[].functions.descriptionstringyes (when functions present)markdownlearn Live Data sectionIntro.
modules[].functions.list[].idstringyes--learnFunction id (matches the agent's Function name).
modules[].functions.list[].namestringyes--learnDisplay name.
modules[].functions.list[].descriptionstringyesmarkdownlearn
modules[].functions.list[].parameters[].idstringyes--learn parameters table
modules[].functions.list[].parameters[].namestringyes--learn parameters table
modules[].functions.list[].parameters[].descriptionstringyes--learn parameters table
modules[].functions.list[].parameters[].typestringyes--learn parameters table
modules[].functions.list[].parameters[].requiredbooleanyes--learn parameters table
modules[].functions.list[].parameters[].defaultstring / number / boolyes--learn parameters table
modules[].functions.list[].parameters[].options[].idstringyes--learn parameters tableWhen present, parameter is enum-style.
modules[].functions.list[].parameters[].options[].namestringyes--learn
modules[].functions.list[].parameters[].options[].descriptionstringno--learn
modules[].functions.list[].parameters[].options[].defaultbooleanno--learn
modules[].functions.list[].returns.descriptionstringyesmarkdownlearn
modules[].functions.list[].returns.columns[].namestringyes--learn returns table
modules[].functions.list[].returns.columns[].typestringyes--learn returns table
modules[].functions.list[].returns.columns[].unitstringyes--learn returns table
modules[].functions.list[].returns.columns[].visibilitystringnoenum: hiddenlearn returns tableWhen hidden, column is suppressed.
modules[].functions.list[].performancestringyesmarkdownlearnPerformance characteristics.
modules[].functions.list[].securitystringyesmarkdownlearnSecurity considerations.
modules[].functions.list[].availabilitystringyesmarkdownlearnWhen the function is available.
modules[].functions.list[].prerequisites.list[].titlestringyes (if prereqs present)--learnh4 text.
modules[].functions.list[].prerequisites.list[].descriptionstringyes (if prereqs present)markdownlearn
modules[].functions.list[].require_cloudbooleanno--learn functions tableYes/No column.

Required at module root: meta, overview, setup, troubleshooting, alerts, metrics (collector.json:611-618).

Required on meta: plugin_name, module_name, monitored_instance, keywords, related_resources, info_provided_to_referring_integrations (collector.json:94-101).

taxonomy_collector.json

Sibling authoring file for collector dashboard placement: <collector>/taxonomy.yaml. The schema is intentionally closed (additionalProperties: false plus x_* extension keys on core nodes). section_id: is the only accepted section reference in v1; section_path: is rejected.

FieldTypeReqValuesSurfaceNotes
taxonomy_versionintegeryes1taxonomyAuthoring schema version.
plugin_namestringyes--taxonomyMust match owning metadata.yaml.
module_namestringyes--taxonomyMust match owning metadata.yaml module.
taxonomy_optout.reasonstringconditionalminLength: 1taxonomyMutually exclusive with placements.
inline_dynamic_declarations.dynamic_context_prefixes[]array<object>noprefix, reasontaxonomyFor no-metadata plugins only. Fails when sibling metadata exists.
inline_dynamic_declarations.dynamic_collect_plugins[]array<object>noplugin, reasontaxonomyFor no-metadata plugins only.
placements[].idstringyes^[a-z0-9][a-z0-9_.-]*$taxonomyLeaf id under the target section.
placements[].section_idstringyesregistered section idtaxonomyResolved against integrations/taxonomy/sections.yaml.
placements[].titlestringyes--taxonomyMulti-node canonical title.
placements[].iconstringnoregistered icon idtaxonomyResolved against integrations/taxonomy/icons.yaml.
placements[].familiesboolean / array<string>no--taxonomyPreserved for the dashboard TOC consumer.
placements[].items[]arrayyesrecursive item treetaxonomyOrdered TOC tree; strings in structural positions own contexts.
items[].typestringconditionalowned_context, group, flatten, selector, context, grid, first_available, view_switchtaxonomyPlain strings normalize to owned_context.
owned_context.contextstringyesreal contexttaxonomyMust exist in metadata.
selector.context_prefix[]array<string>conditionaluniquetaxonomyDynamic selector; requires metadata opt-in. May narrow a declared metadata namespace, e.g. snmp.device_prof_ under declared snmp..
selector.context_prefix_exclude[]array<string>nouniquetaxonomyValid only with same-node context_prefix.
selector.collect_plugin[]array<string>conditionaluniquetaxonomyDynamic selector by _collect_plugin; requires metadata opt-in.
context.contexts[]arrayyesliteral context, unresolved object, or selector objecttaxonomyWidget references; literal references must resolve or carry unresolved.
context.chart_librarystringyesbars, d3pie, dygraph, easypiechart, gauge, groupBoxes, number, tabletaxonomyDisplay widget renderer.
context.group_by[]array<string>nouniquetaxonomyWidget grouping axes, e.g. selected, dimension, label, node, context.
context.group_by_label[]array<string>nouniquetaxonomyLabel names used when group_by includes label.
context.aggregation_methodstringnoavg, max, min, sumtaxonomyAggregation method for grouped widgets.
context.selected_dimensions[]array<string>nouniquetaxonomyExplicit dimensions to show in the widget.
context.dimensions_sortstringnonon-emptytaxonomyFE dimension sort directive, e.g. valueDesc.
context.colors[]array<string>nonon-empty stringstaxonomyRenderer color palette values.
context.layoutobjectnoleft, top, width, heighttaxonomyGrid coordinates for grid.items widgets.
context.table_columns[]array<string>nouniquetaxonomyTable widget column axes, e.g. context, dimension.
context.table_sort_by[]array<object>no{id, desc}taxonomyTable sort directives.
context.labelsobjectnostring maptaxonomyContext or dimension display labels.
context.value_range[]array<numbernull>noat least one itemtaxonomy
context.eliminate_zero_dimensionsbooleanno--taxonomyRenderer hint to hide all-zero dimensions.
context.context_items[]array<object>no{value, label}taxonomyPer-widget context item labels for selector-like UI.
context.post_group_by[]array<string>nouniquetaxonomyPost-aggregation grouping axes.
context.show_post_aggregationsbooleanno--taxonomyFE post-aggregation display toggle.
context.grouping_methodstringnonon-emptytaxonomyFE grouping-method override.
context.sparklinebooleanno--taxonomyRender compact sparkline form when supported.
rendererobjectnooverlays, url_options, toolbox_elements, x_*taxonomyRenderer-private payload envelope.
placements[].single_nodeobjectnoclosed field settaxonomySparse override block; top-level fields are multi-node defaults.

Item-kind matrix:

Item kindRequired fieldsAllowed children / referencesNotes
string shorthandstring valuenoneStructural positions only; normalizes to owned_context.
owned_contexttype, contextnoneOwns one literal context.
grouptype, id, title, itemsstructural itemsid is stable across title renames.
flattentype, id, title, itemsnon-flatten structural itemsEquivalent to legacy justGroup; nested flatten is invalid.
selectortype, id, title, one of context_prefix or collect_pluginnoneOwns the resolved selector snapshot.
contexttype, contexts, chart_librarywidget contexts referencesReferences contexts but does not own them.
gridtype, id, itemscontext, first_available, display view_switchGrid children are display-only.
first_availabletype, itemscontext, grid, display view_switchAlternatives are ordered and display-only.
view_switchtype, multi_node, single_nodeconcrete object branches except flatten or nested view_switchBranches are whole-body replacements; no string branches.

For a rich collector example with grids, table widgets, nested groups, and ownership leaves, read src/go/plugin/go.d/collector/mysql/taxonomy.yaml.

Widget contexts[] entries may be:

  • a literal context string;
  • an unresolved literal reference object: {context, unresolved: {reason, owner, expires}}, where expires is YYYY-MM-DD;
  • a selector reference object with context_prefix or collect_plugin.

Generated output adds unresolved_references[] to each placement and item that aggregates unresolved escape hatches with context, reason, owner, expires, and item_path.

taxonomy_sections.json

Schema for integrations/taxonomy/sections.yaml. Sections have stable opaque id values and parentage through parent_id. Moving a section means changing parent_id, not editing collector taxonomy.yaml files.

Required fields per section: id, title, section_order, status. Optional fields: parent_id, short_name, icon, deprecation, and x_* extensions.

taxonomy_output.json

Schema for generated integrations/taxonomy.json. The artifact contains taxonomy_schema_version, source, normalized sections, normalized placements, and opted_out_collectors. Each placement preserves the ordered item tree and includes resolved_contexts (owned contexts), referenced_contexts (display references), and unresolved_references snapshots for CI/review diffing.

agent_notification.json

Single object OR array of objects (oneOf).

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id / dedupe
meta$ref shared.instanceyes--learn / in-appmeta.name drives slug.
keywordsarray<string>yes--learn frontmatter
overview.notification_descriptionstringyesmarkdownlearn (overview/notification.md)The "what gets notified" prose.
overview.notification_limitationsstringyes (may be empty)markdownlearnWhen non-empty, rendered as ## Limitations.
global_setup.severity_filteringbooleanyes--learnSentence in setup template.
global_setup.http_proxybooleanyes--learnSentence in setup template.
setuponeOf [shared.short_setup, shared.full_setup]yes--learn / in-appRendered by setup-generic.md which handles both shapes.
troubleshooting$ref shared.troubleshootingno--learn / in-app

cloud_notification.json

Same shape as agent_notification.json minus overview (none required), with setup required.

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id
meta$ref shared.instanceyes--learn / in-app
keywordsarray<string>yes--learn frontmatter
setuponeOf [shared.short_setup, shared.full_setup]yes--learn / in-app
troubleshooting$ref shared.troubleshootingno--learn / in-app

integrations/cloud-notifications/metadata.yaml is a single file containing an ARRAY of these entries (one per notification destination).

authentication.json

Same shape as agent_notification.json with renamed overview fields for the authentication context.

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id
meta$ref shared.instanceyes--learn / in-app
keywordsarray<string>yes--learn frontmatter
overview.authentication_descriptionstringyesmarkdownlearn (overview/authentication.md)
overview.authentication_limitationsstringyes (may be empty)markdownlearn
setuponeOf [shared.short_setup, shared.full_setup]yes--learn / in-app
troubleshooting$ref shared.troubleshootingno--learn / in-app

integrations/cloud-authentication/metadata.yaml is a single file with an array of authentication-method entries.

logs.json

Single entry OR array. Required: id, meta, keywords, overview.

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id
meta$ref shared.instanceyes--learn / in-app
keywordsarray<string>yes--learn frontmatter
overview.descriptionstringyesmarkdownlearn (overview/logs.md)h1 body.
overview.visualization.descriptionstringyesmarkdownlearn## Visualization section.
overview.key_features.descriptionstringyesmarkdownlearn## Key features section.
setup.prerequisites.descriptionstringyes (when setup present)markdownlearn (setup-logs.md)

integrations/logs/metadata.yaml covers exactly three log types: systemd-journal, windows-events, OpenTelemetry.

secretstore.json

Per-backend entries.

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id
meta.kindstringyes--slugDrives slug (NOT meta.name); matches stock conf filename /etc/netdata/go.d/ss/<kind>.conf.
meta.namestringyes--learn / in-appDisplay name.
meta.linkstringyesURLlearn / www
meta.icon_filenamestringyes--learn / www / in-app
keywordsarray<string>yes--learn frontmatter
overview.descriptionstringyesmarkdownlearn (overview/secretstore.md)
overview.limitationsstringnomarkdownlearn
setup$ref shared.full_setupyes--learn / in-appRendered via setup-secretstore.md.
collector_configs.descriptionstringyesmarkdownlearn (collector_configs.md)
collector_configs.summary.operand_formatstringyes--SECRETS.md umbrella tableUsed by gen_doc_secrets_page.py to build the supported-backends table.
collector_configs.summary.example_operandstringyes--SECRETS.md umbrella tableas above
collector_configs.format.descriptionstringnomarkdownlearn
collector_configs.format.syntaxstringyes--learnE.g. ${store:<kind>:<name>:<operand>}.
collector_configs.format.parts.list[].namestringyes--learn
collector_configs.format.parts.list[].descriptionstringyes--learn
collector_configs.examples.list[].namestringyes (minItems: 1)--learn
collector_configs.examples.list[].descriptionstringyes--learn
collector_configs.examples.list[].contentstringyes--learnCode block.
collector_configs.examples.list[].languagestringnolanguage idlearnCode-fence language; defaults to text per schema description but template uses 'yaml'.
troubleshooting$ref shared.troubleshootingyes--learn / in-app

service_discovery.json

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id
meta.kindstringyes--slugDrives slug; matches discoverer registry name and stock conf filename.
meta.namestringyes--learn / in-app
meta.taglinestringyes--SD hub tableOne-liner shown in the SERVICE-DISCOVERY.md table.
meta.linkstringyesURLlearn / www
meta.icon_filenamestringyes--learn / www / in-app
keywordsarray<string>yes--learn frontmatter
overview.descriptionstringyesmarkdownlearn (overview/service_discovery.md)
overview.how_it_worksstringnomarkdownlearnh3 under Overview.
overview.limitationsstringnomarkdownlearn
setup$ref shared.full_setupyes--learn (setup-service_discovery.md)
services.descriptionstringyesmarkdownlearn
services.evaluation.descriptionstringnomarkdownlearn
services.evaluation.list[].namestringyes--learnEvaluation criterion.
services.evaluation.list[].descriptionstringyes--learn
services.template_variables.descriptionstringnomarkdownlearn
services.template_variables.list[].namestringyes (minItems: 1)--learnDiscoverer-specific template var name.
services.template_variables.list[].descriptionstringyes--learn
services.template_variables.list[].typestringno--learn
services.examples.descriptionstringnomarkdownlearn
services.examples.list[].namestringyes (minItems: 1)--learn
services.examples.list[].descriptionstringyes--learn
services.examples.list[].configstringyes--learnYAML code block.
verify.descriptionstringnomarkdownlearn
verify.checks.list[].namestringyes (minItems: 1 when verify present)--learn
verify.checks.list[].descriptionstringyes--learn
troubleshooting$ref shared.troubleshootingyes--learn / in-app

Required at entry root: id, meta, keywords, overview, setup, services, troubleshooting (service_discovery.json:237-245).

deploy.json

Top-level: ARRAY of objects (one per deploy method).

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id
meta$ref shared.instanceyes--in-app dialogmeta.categories must include a deploy.* id.
keywordsarray<string>yes--in-app search
install_descriptionstringyesmarkdownin-app dialog
methods[].methodstringyes--in-app dialogE.g. wget, curl, kubectl.
methods[].commands[].channelstring (enum)yesenum: nightly, stablein-app dialog
methods[].commands[].commandstringyes--in-app dialogMay contain custom tags {% if $showClaimingOptions %}...{% /if %}; stripped when clean=True (gen_integrations.py:982-985).
additional_infostringyesmarkdownin-app dialogMay contain custom tags.
clean_additional_infostringnomarkdownin-app dialogClean-variant override; when present, replaces additional_info in the clean_* branch (gen_integrations.py:990-992).
related_resourcesobjectyes--(TBD/empty)Currently unused.
platform_info.groupstring (enum)yesenum: include, no_include, ""in-app dialoginclude/no_include cross-ref distros.yml to filter the platform table.
platform_info.distrostringyes--in-app dialogMatches distros.yml distro field.
quick_startintegeryes--in-app "Add Nodes" dialogSort order. Negative -> hidden.

Custom tag patterns recognized in command / additional_info: {% if X %}...{% /if %}, {%...%} (regex gen_integrations.py:124). Stripped when generating clean=True outputs.

exporter.json

Same pattern as agent_notification.json with overview.exporter_description and overview.exporter_limitations.

FieldTypeReqValuesSurfaceNotes
id$ref shared.idyes--id
meta$ref shared.instanceyes--learn / in-app
keywordsarray<string>yes--learn frontmatter
overview.exporter_descriptionstringyesmarkdownlearn (overview/exporter.md)
overview.exporter_limitationsstringyes (may be empty)markdownlearnWhen non-empty, rendered as ## Limitations.
setup$ref shared.full_setupyes--learn / in-app
troubleshooting$ref shared.troubleshootingyes--learn / in-app

categories.json

Recursive tree definition.

FieldTypeReqValuesSurfaceNotes
idstringyes--category lookupDotted path, e.g. data-collection.databases.
namestringyes--navigationDisplay name.
descriptionstringyesmarkdownnavigationTooltip / overview.
childrenarray<obj>yes (may be empty)--navigationRecursive structure.
collector_defaultbooleanno--fallbackWhen true, this category is the default if a collector's declared categories are all bogus (gen_integrations.py:906-908).

distros.json

Validates .github/data/distros.yml. NOT actually enforced -- gen_integrations.py:1330 calls load_yaml without passing this schema. See gotchas.md.

Top-level keys: platform_map (CPU arch -> docker platform string), arch_order, include[] (array of platform descriptors).

Per-platform descriptor fields:

FieldTypeReqValuesSurfaceNotes
distrostringyesregex ^[a-z][a-z0-9]*$deploy platform table
versionstringyesregex ^[a-z0-9][a-z.0-9]*$deploy platform table
support_typestringyesenum: Core, Intermediate, Community, Third-Party, Unsupporteddeploy platform table
notesstringyes--deploy platform table
eol_checkbool / stringno--deploy build matrix
bundle_sentrybool / stringyes--deploy build matrix
base_imagestringno--deploy build matrix
env_prepstringno--deploy build matrix
jsonc_removalstringno--deploy build matrix
test.ebpf-coreboolno--deploy build matrix
packages.typestringno--deploy build matrix
packages.archesarray<string>no--deploy build matrix
packages.repo_distrostringno--deploy build matrix
packages.alt_linksarrayno--deploy build matrix

Required: distro, version, support_type, notes, bundle_sentry. Garbage in distros.yml produces broken platform_info tables silently.

Cross-schema notes

  • The <plugin-dir>/metadata.yaml for collectors uses one of two top-level shapes (gen_integrations.py:381):

    • Single-module -- plugin_name and modules: [<one>].
    • Multi-module -- plugin_name and modules: [<many>]. Both are validated against the same collector.json schema. The split single/multi validation in check_collector_metadata.py is dead code (see gotchas.md).
  • Schema shared.json cross-refs are resolved by Registry(retrieve=retrieve_from_filesystem) so changes to shared.json propagate to all consumers immediately.

  • additionalProperties: false is NOT set on most schemas. Unknown keys (alternative_monitored_instances, most_popular) pass through silently into integrations.js but no template renders them. See gotchas.md.

  • Validation warnings are FATAL: fail_on_warnings() (gen_integrations.py:150-160) returns 1 on any warning, causing CI to fail and aborting doc regeneration.