Hi all,
I’ve been tasked by my organization with rebuilding and optimizing a number of Kibana dashboards that are currently experiencing long load times. The performance issues seem to be largely due to the size of the datasets being queried as soon as the dashboards are opened.
To do this, I am looking to: Reduce redundant or duplicate queries, leverage caching where possible and minimizing the query load on underlying data streams.
For the purpose of this discussion, I have created a visual illustration of three optional approaches. Based on my research so far, it is my understanding that Option 3 (applying filters at the dashboard level) is the most efficient in terms of speed. However, it also seems to offer the least flexibility when different visualizations require unique filters. So, my best option would be some hybrid approach between Option 2 and Option 3.
That said, I still have a few open questions around how Kibana/Elastic handles filtering logic, especially in terms of filter precedence and execution. I’d greatly appreciate any input on the following:
-
When both dashboard-level filters and visualization-level filters are used, which one takes precedence? Are they merged and applied together to the data stream, or does one act as a filter on the results of the other?
-
Do visualization-specific filters run only on the events returned by the dashboard filters, or do both types of filters independently hit the data stream? Understanding this would help me optimize filter placement.
-
Is there any caching behavior at the visualization or dashboard level that we can take advantage of (e.g., shared queries between visualizations, or repeated filters being cached)?
-
Are there any performance implications of using saved searches within visualizations vs. having visualizations query the index directly?
Any advice would be very welcome!
Thanks in advance!