Skip to content

Conversation

mrodm
Copy link
Contributor

@mrodm mrodm commented Oct 20, 2025

Closes #2949

This PR allows to export dashboards in Serverless environments.

For Serverless environments, a new set of APIs from Elastic Package Manager have been used:

Author's checklist

  • Check elastic-package export dashboards in Serverless
  • Check elastic-package export dashboards in local stacks
  • Check elastic-package edit dashboards in Serverless
  • Check elastic-package edit dashboards in local stacks

Both commands require the same changes to list dashboards.

Example of usage

First step all installed packages are shown:

 $ elastic-package -C ../integrations-main/packages/nginx export dashboards 
Export Kibana dashboards
Which packages would you like to export dashboards from? (nginx-2.3.2)
  New dashboard                 
  elastic_package_registry-0.3.1
  fleet_server-1.6.0            
> nginx-2.3.2                   
  synthetics-1.4.2              
                                

enter continue • ctrl+c cancel

If the user selects a package, it will be shown all the dashboards related to that package (e.g. nginx):

 $ elastic-package -C ../integrations-main/packages/nginx export dashboards 
Export Kibana dashboards
? Which packages would you like to export dashboards from?: nginx-2.3.2
Which dashboards would you like to export?
  Use ↑↓ to navigate, space to toggle selection, enter to confirm
> [ ] [Logs Nginx] Access and error logs (ID: nginx-046212a0-a2a1-11e7-928f-5dbe6f6f5519, Type: dashboard)
  [ ] [Logs Nginx] Overview (ID: nginx-55a9e6e0-a29e-11e7-928f-5dbe6f6f5519, Type: dashboard)             
  [ ] [Metrics Nginx] Overview (ID: nginx-023d2930-f1a5-11e7-a9ef-93c69af7b129, Type: dashboard)          

enter continue • ctrl+c cancel

If the user is developing a new dashboard (and therefore not related to any package), they should choose New dashboard option, and all the dashboards available in the Serverless instance will be shown:

 $ elastic-package -C ../integrations-main/packages/nginx export dashboards 
Export Kibana dashboards
Which packages would you like to export dashboards from? (nginx-2.3.2)
> New dashboard                 
  elastic_package_registry-0.3.1
  fleet_server-1.6.0            
  nginx-2.3.2                   
  synthetics-1.4.2              
                                

enter continue • ctrl+c cancel

# After choosing "New dashboard" option

 $ epd -C ../integrations-main/packages/nginx export dashboards 
Export Kibana dashboards
? Which packages would you like to export dashboards from?: New dashboard
Which dashboards would you like to export?
  Use ↑↓ to navigate, space to toggle selection, enter to confirm
> [ ] [EPR Metrics] Overview (ID: elastic_package_registry-313c2700-099b-11ed-91b6-3b1f9c2b2771)
  [ ] [Logs Nginx] Access and error logs (ID: nginx-046212a0-a2a1-11e7-928f-5dbe6f6f5519)       
  [ ] [Logs Nginx] Overview (ID: nginx-55a9e6e0-a29e-11e7-928f-5dbe6f6f5519)                    
  [ ] [Metrics Nginx] Overview (ID: nginx-023d2930-f1a5-11e7-a9ef-93c69af7b129)                 

enter continue • ctrl+c cancel

@mrodm mrodm self-assigned this Oct 20, 2025
Use this command to download selected dashboards and other associated saved objects from Kibana. This command adjusts the downloaded saved objects according to package naming conventions (prefixes, unique IDs) and writes them locally into folders corresponding to saved object types (dashboard, visualization, map, etc.).`

newDashboardOption = "New dashboard"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Title for the option to be selected in order to show all the dashboards from the Serverless instance.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This option is shown the first one in the list.
Example:

 $ elastic-package -C ../integrations-main/packages/nginx export dashboards 
Export Kibana dashboards
Which packages would you like to export dashboards from? (nginx-2.3.2)
> New dashboard                 
  elastic_package_registry-0.3.1
  fleet_server-1.6.0            
  nginx-2.3.2                   
  synthetics-1.4.2              
                       

Comment on lines 246 to 247
func promptDashboardIDs(ctx context.Context, kibanaClient *kibana.Client) ([]string, error) {
savedDashboards, err := kibanaClient.FindDashboards(ctx)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kibana.FindDashboards has been updated in order to show all dashboards also in Serverless via the export API.

Comment on lines +124 to +130
if installedPackage == newDashboardOption {
dashboardIDs, err := promptDashboardIDs(cmd.Context(), kibanaClient)
if err != nil {
return nil, fmt.Errorf("prompt for dashboard selection failed: %w", err)
}
return dashboardIDs, nil
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Used here the same method as in local instances to show all dashboards in the selector.

This function uses kibana.FindDashboards() that has been updated in order to show all dashboards also in Serverless via the export API.

Comment on lines +56 to +58
// These fields are not expected to be part of responses from APIs
DataStream string `json:"-"`
SourcePath string `json:"-"`
Copy link
Contributor Author

@mrodm mrodm Oct 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could not find any usage of these two fields in APIs.
It looks like that they are used in test asset and they are filled programmatically.

DataStream: dsManifest.Name,

DataStream: dsManifest.Name,

SourcePath: assetPath,

If the json:"-" tag is not added to the fields, queries with this struct fail with the error of those fields being not available/undefined.

Comment on lines +36 to +46
func (c *Client) exportAllDashboards(ctx context.Context) ([]common.MapStr, error) {
logger.Debug("Export dashboards using the Kibana Saved Objects Export API")

request := ExportSavedObjectsRequest{
ExcludeExportDetails: true,
IncludeReferencesDeep: false,
Type: "dashboard",
}

return c.ExportSavedObjects(ctx, request)
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method would return all the dashboards available in the Kibana Instance.

According to the documentation, the number of assets that will be exported depend on savedObjects.maxImportExportSize setting (link):

NOTE: The savedObjects.maxImportExportSize configuration setting limits the number of saved objects which may be exported.

By default that setting is 10000 elements (savedObjects.maxImportExportSize setting):

The maximum count of saved objects that can be imported or exported. This setting exists to prevent the Kibana server from running out of memory when handling large numbers of saved objects. It is recommended to only raise this setting if you are confident your server can hold this many objects in memory. Default: 10000

@elasticmachine
Copy link
Collaborator

elasticmachine commented Oct 20, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fail to export dashboards in Serverless projects

2 participants