Saved Objects Examples¶
Saved Objects are Kibana’s core entities representing dashboards, visualizations, index patterns, and other configuration items. This section demonstrates how to manage them programmatically.
Saved Objects Examples
Overview¶
Learn how to:
Create saved objects with and without IDs
Retrieve and update saved objects
Handle version control
Work with space-scoped objects
Manage object lifecycle
Example File¶
saved_objects_management.py¶
Purpose: Comprehensive saved objects management
What You’ll Learn:
CRUD operations for saved objects
Optimistic concurrency control with versions
Space-scoped object management
Error handling patterns
Bulk operations
What Are Saved Objects?¶
Saved objects store Kibana configuration and user-created content:
Dashboards - Dashboard layouts and configurations
Visualizations - Charts, graphs, and visual elements
Index Patterns - Elasticsearch index configurations
Searches - Saved search queries
Config - Kibana configuration settings
Basic Operations¶
Create¶
# Auto-generated ID
viz = client.saved_objects.create(
type="visualization",
attributes={
"title": "My Visualization",
"visState": "{}",
"uiStateJSON": "{}",
"description": "Created via API",
"version": 1,
"kibanaSavedObjectMeta": {"searchSourceJSON": "{}"}
}
)
# Specific ID
viz = client.saved_objects.create(
type="visualization",
id="my-viz-id",
attributes={...}
)
Read¶
obj = client.saved_objects.get(
type="visualization",
id="my-viz-id"
)
print(obj.body["attributes"]["title"])
Update¶
updated = client.saved_objects.update(
type="visualization",
id="my-viz-id",
attributes={"title": "Updated Title"}
)
Delete¶
client.saved_objects.delete(
type="visualization",
id="my-viz-id"
)
Version Control¶
Saved objects support optimistic concurrency:
# Get current version
obj = client.saved_objects.get(type="visualization", id="my-viz")
current_version = obj.body["version"]
# Update with version check
updated = client.saved_objects.update(
type="visualization",
id="my-viz",
attributes={"title": "New Title"},
version=current_version # Fails if modified
)
Space-Scoped Objects¶
Create objects in specific spaces:
# Method 1: space_id parameter
viz = client.saved_objects.create(
type="visualization",
attributes={...},
space_id="marketing-team"
)
# Method 2: Space-scoped client
marketing_client = client.space("marketing-team")
viz = marketing_client.saved_objects.create(
type="visualization",
attributes={...}
)
Common Object Types¶
Visualization¶
attributes = {
"title": "Sales Chart",
"visState": json.dumps({"type": "line", "params": {}}),
"uiStateJSON": "{}",
"description": "Monthly sales visualization",
"version": 1,
"kibanaSavedObjectMeta": {
"searchSourceJSON": json.dumps({"query": "", "filter": []})
}
}
Dashboard¶
attributes = {
"title": "Sales Dashboard",
"description": "Overview of sales metrics",
"panelsJSON": "[]",
"optionsJSON": "{}",
"version": 1,
"timeRestore": False,
"kibanaSavedObjectMeta": {"searchSourceJSON": "{}"}
}
Index Pattern¶
attributes = {
"title": "logs-*",
"timeFieldName": "@timestamp",
"fields": "[]",
"fieldFormatMap": "{}"
}
Error Handling¶
from kibana.exceptions import ConflictError, NotFoundError
try:
obj = client.saved_objects.create(
type="visualization",
id="my-viz",
attributes={...}
)
except ConflictError:
print("Object with this ID already exists")
try:
obj = client.saved_objects.get(type="visualization", id="nonexistent")
except NotFoundError:
print("Object not found")
try:
updated = client.saved_objects.update(
type="visualization",
id="my-viz",
attributes={...},
version=old_version
)
except ConflictError:
print("Version conflict - object was modified")
Best Practices¶
Use auto-generated IDs unless you need specific IDs
Include version for updates to prevent conflicts
Validate attributes before creating objects
Clean up test objects
Use spaces for multi-tenancy
Next Steps¶
Management Example - Full CRUD operations