Source catalog
Use configure_index to maintain a profile's JSON source catalog. Hand-authored catalogs remain supported for advanced setups.
Source definition
Define each logical source with:
- stable
id - human-readable
name timeFieldtagsand optionaldescriptionfieldHintsso agents can form exact-match filtersdefaultTextFieldsfor free-text searchevidenceFieldsto elevate likely report-worthy fieldsbackenddescribing how the source is queried- optional
schemadescribing how field introspection is performed fordescribe_fieldsand other schema-dependent features
Search backends
kibana_internal_search_es- POSTs to a Kibana endpoint like
/internal/search/es - wraps the query body inside
{ "params": { "index": ..., "body": ... } } - adds
kbn-xsrf
- POSTs to a Kibana endpoint like
elasticsearch_search- POSTs the compiled Elasticsearch body directly to the configured path
Schema backends
kibana_data_views_fields: tries wildcard field-metadata endpoints, preferring/internal/data_views/_fields_for_wildcard.kibana_index_patterns_fields: tries legacy/api/index_patterns/_fields_for_wildcardand related fallbacks.elasticsearch_field_caps- GETs an Elasticsearch field capabilities endpoint such as
/<index-pattern>/_field_caps?fields=* - uses
schema.pathwhen provided or derives the default fromschema.index
- GETs an Elasticsearch field capabilities endpoint such as
Both Kibana schema backends add pattern=... from schema.index or backend.index. If all known metadata endpoints return 404, they sample fields through the configured search backend. Some deployments expose only search transport; sampling is heuristic, not authoritative, but often recovers .keyword promotion and object-path discovery.
Direct elasticsearch_field_caps failures return without that fallback.
Application log example
json
{
"id": "app_logs",
"name": "Application Logs",
"timeField": "@timestamp",
"backend": {
"kind": "kibana_internal_search_es",
"path": "/internal/search/es",
"index": "app-logs-*"
},
"schema": {
"kind": "kibana_data_views_fields",
"index": "app-logs-*"
}
}Omit schema.path here: try known Kibana metadata endpoints, then sample through search transport if all return 404.