Audited all Elasticsearch client usage across x-pack/solutions/observability/ in Kibana. Produced a comprehensive report showing which observability apps use which ES client abstractions (direct ElasticsearchClient, custom wrappers, IScopedClusterClient) and where the key client factories/types are defined.
- Searched for imports of
@elastic/elasticsearch,ElasticsearchClient,IScopedClusterClient, andClusterClientacrossx-pack/solutions/observability/. - Searched for custom wrapper patterns:
createApmEventClient,createInternalEsClient,createProfilingEsClient,createObservabilityAIAssistantAppEsClient,getTypedSearch,unwrapEsResponse. - Read key client factory files to understand abstraction layers.
plugins/apm_data_access/server/lib/helpers/create_es_client/create_apm_event_client/index.ts— APMEventClient factoryplugins/apm/server/lib/helpers/create_es_client/create_internal_es_client/index.ts— APMInternalESClientplugins/apm/server/utils/create_typed_es_client.ts— TypedSearch wrapperplugins/apm/server/lib/apm_telemetry/telemetry_client.ts— TelemetryClientplugins/profiling_data_access/common/profiling_es_client.ts— ProfilingESClient interfaceplugins/profiling_data_access/server/utils/create_profiling_es_client.ts— ProfilingESClient factoryplugins/profiling/server/utils/create_profiling_es_client.ts— Older ProfilingESClient factoryplugins/observability_ai_assistant_app/server/clients/elasticsearch/index.ts— ObservabilityAIAssistantElasticsearchClientplugins/observability_ai_assistant_app/server/clients/create_observability_ai_assistant_app_es_client.ts— Traced ES clientplugins/observability_agent_builder/server/utils/get_typed_search.ts— Agent Builder typed searchplugins/infra/server/lib/adapters/framework/kibana_framework_adapter.ts— Infra KibanaFrameworkplugins/metrics_data_access/server/lib/adapters/framework/kibana_framework_adapter.ts— Metrics KibanaFrameworkplugins/synthetics/server/lib.ts— Synthetics ES client wrapperplugins/uptime/server/legacy_uptime/lib/lib.ts— Uptime ES client wrapperplugins/observability/server/lib/annotations/create_annotations_client.ts— Annotations clientplugins/slo/server/services/get_diagnosis.ts— SLO direct ElasticsearchClient usage
| App/Plugin | Direct ElasticsearchClient |
Custom Wrapper Client | IScopedClusterClient |
|---|---|---|---|
| APM | Yes (admin ops) | APMEventClient, APMInternalESClient, TypedSearch, TelemetryClient |
No |
| APM Data Access | Yes | APMEventClient (factory) |
No |
| SLO | Primary method | None | Yes |
| Infra | Yes (alerting, routes) | KibanaFramework |
No |
| Metrics Data Access | Yes | KibanaFramework |
No |
| Synthetics | Yes | UptimeEsClient-style lib |
No |
| Uptime | Yes | UptimeEsClient-style lib |
No |
| Profiling | Yes | ProfilingESClient |
No |
| Profiling Data Access | Yes | ProfilingESClient |
Yes |
| Observability (core) | Primary method | Annotations client | No |
| Obs AI Assistant App | Yes | ObservabilityAIAssistantElasticsearchClient, Traced ES Client |
No |
| Obs Agent Builder | No | getTypedSearch |
Primary method |
| Obs Onboarding | Primary method | None | No |
- No plugin creates a raw
@elastic/elasticsearchClientdirectly — all go through Kibana'sElasticsearchClient. - APM has the most elaborate wrapper hierarchy (event routing, tier filtering, debug/inspect, unwrap).
- SLO is the simplest — bare
ElasticsearchClienteverywhere. - Profiling has a domain-specific client wrapping
esClient.transport.requestfor private_profiling/*endpoints. - Infra and Metrics Data Access share a nearly identical legacy
KibanaFrameworkadapter. - Agent Builder consistently uses
IScopedClusterClient→asCurrentUser→getTypedSearch.