[Logs UI] Log alerts chart previews#75296
Conversation
fd0a675 to
3a1ef97
Compare
3a1ef97 to
43c8aa4
Compare
|
Pinging @elastic/logs-metrics-ui (Team:logs-metrics-ui) |
.../plugins/infra/public/components/alerting/logs/expression_editor/criterion_preview_chart.tsx
Outdated
Show resolved
Hide resolved
|
Hi Kerry, this looks great! I agree with your comment
I think we should go with to option 2. I see that the limited space is an issue. Is there a way we could decrease the time range shown in this case? Also, I'm wondering if we should set a maximum? To only show the "first" 5 in a group and add a message that there are more which are not shown in the chart.
My best proposal is to say "Log entries...2" One tiny thing, can we adjust the timestamp in the tooltip so it does not show milliseconds? I don't think we need that level of detail in this chart. |
|
@katrin-freihofner Thanks for the feedback 🙏
👌
Yep, this is easy to do. I think for the grouped scenario halving the buckets to 10 (maybe even all the way to 5) would work a lot better.
Yeah, this sounds like a good idea. With regards to which groups to show, I think it should be the case that with
Yep, this could certainly work. I agree the charts are here to find out where to set the threshold, but I still think a bit of group information is useful. Even with limiting them to 5 it roughly shows "is this going to fire more than once" (Which I guess does start treading in the "how many times will this alert fire" functionality that metrics has)
👍
👍 I'll switch this over to:
And we can reassess. |
|
@katrin-freihofner Ooo, actually one last idea (always think of them after hitting submit 😅). I could do 4 group bars, and 1 extra bar which always shows the maximum regardless of threshold comparator? |
afgomez
left a comment
There was a problem hiding this comment.
I did a first pass in the code and I clicked around. I found a small think regarding the "group by" filter, but it might be the expected behaviour.
I set up an alert with log.level == error. With no "group by" it shows some entries in the preview.

However, when I group by event.dataset, I get nothing

My guess is that in the non-grouped version, the logs belong to a document with an empty event.dataset. Should these be treated as an "unknown" group as we do in the anomaly detection?
x-pack/plugins/infra/public/pages/metrics/metrics_explorer/components/metrics.tsx
Outdated
Show resolved
Hide resolved
And the tooltip would say something like: That could work too! |
Yep, your guess is correct, those will be documents with no Edit: Also wanted to add that from a technical standpoint the data is a bit different. In the anomalies page case we're dealing with ML documents in ML indices, these documents are stored with a |
|
@afgomez @katrin-freihofner Just pushed up some changes to improve the grouped rendering based on the above conversations. I did backtrack on the idea of adding the "maximum" information no matter what, there's a fair bit of overhead adding it, and I don't think the reward is high enough 🤔 API side I also amended the date histogram to utilise extended bounds to ensure we always have a full set of buckets regardless of empty sets of data at the start / end of the range. Ungrouped: Grouped: |
|
@elasticmachine merge upstream |
x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criteria.tsx
Outdated
Show resolved
Hide resolved
| [getChartPreviewData] | ||
| ); | ||
|
|
||
| const isStacked = false; |
There was a problem hiding this comment.
I think this line can be removed
.../plugins/infra/public/components/alerting/logs/expression_editor/criterion_preview_chart.tsx
Show resolved
Hide resolved
.../plugins/infra/public/components/alerting/logs/expression_editor/criterion_preview_chart.tsx
Outdated
Show resolved
Hide resolved
.../plugins/infra/public/components/alerting/logs/expression_editor/criterion_preview_chart.tsx
Outdated
Show resolved
Hide resolved
…ng-chart-previews
…n_editor/criteria.tsx Co-authored-by: Alejandro Fernández Gómez <antarticonorte@gmail.com>
…350/kibana into 69530-logs-alerting-chart-previews
…n_editor/criterion_preview_chart.tsx Co-authored-by: Alejandro Fernández Gómez <antarticonorte@gmail.com>
…350/kibana into 69530-logs-alerting-chart-previews
💚 Build SucceededBuild metrics@kbn/optimizer bundle module count
async chunks size
page load bundle size
History
To update your PR or re-run it, just comment with: |
* Add chart previews for log threshold alerts


Summary
This PR implements #69530, which adds chart previews to log threshold alerts.
Notes
ℹ️ Prior to implementation I thought there would be a higher crossover with the metrics implementation on the UI side, and the ability to reuse a lot of chart implementation code. However, the metrics chart preview implementation is very heavily built around Metrics Explorer functionality. It doesn't make sense for us to use this, nor would it make sense for metrics to step away from it. As such I've extracted some pieces that seemed truly reusable, and placed them in the
sharedfolder (I haven't converted the metrics code to use these here), but for the most part I've used a logs centric approach. There is potentially, on the logs side, some chart code that could possibly be even more reusable and shared with the anomalies page etc, but I didn't want to go too far down that rabbit hole here 😅ℹ️ The Colour Palette code has been shifted from Metrics Explorer only, to something that can be shared.
ℹ️ The API is, for the most part, a wrapper around the executor code. It takes the same queries the executor would use, but expands the time range, and adds an inner date histogram.
ℹ️ The lookback period is the same as Metrics, which is 20 * whatever the
timeSizeis. So if 1 minute is set in the alert, chart previews show the last 20 minutes.Discussion points
groupByset. I went back and forth on which one is better. (@katrin-freihofner would love your opinion here).I'll show the two cases here (please ignore the yellow colour for the threshold annotation, they're just older screenshots):
Stacked:
This looks nice, and works well with the limited screen real estate. However, it might be a bit misleading with the threshold set. Grouped alerts fire per group, so looking at this chart when a bar is above (or below) the threshold that might imply that, just because the bar is over / under the threshold, the alert would fire, but that would only be the case if the actual portion of the bar for that group was over / under the threshold.
Not stacked:
Here it's much clearer which individual groups would fire the alert, as 1 bar = 1 grouping, it is a more accurate threshold representation imo. However, the limited space makes this a bit (a lot...) of an issue.
Another option could be to use line series, rather than bar, for the grouped scenario.
I did look at the metrics implementation for "metric threshold" alerts, but the charts there don't support displaying group by information.