Skip to content

[Incident Management] Investigation guide frontend#217106

Merged
justinkambic merged 403 commits intoelastic:mainfrom
justinkambic:investigation-guide-frontend
May 29, 2025
Merged

[Incident Management] Investigation guide frontend#217106
justinkambic merged 403 commits intoelastic:mainfrom
justinkambic:investigation-guide-frontend

Conversation

@justinkambic
Copy link
Contributor

@justinkambic justinkambic commented Apr 3, 2025

Summary 🌹

Resolves #213024.

The frontend changes for #216377.

Depends on #216377 and #216292.

Testing these changes 🌸

This adds frontend integration with the API changes we previously merged in #216377. There is a new editor in the Rule Create/Edit Detail view, below the pre-existing field for naming the rule.

To test that this feature is working you should:

  • This is easiest to test if you have actual data that will trigger an alert in your cluster. If you need some fake data, you can use the nifty data-forge utility with a command like:
node x-pack/scripts/data_forge.js --events-per-cycle 200 --lookback now-1h --ephemeral-project-ids 10 --dataset fake_stack --install-kibana-assets --kibana-url http://localhost:5601 --event-template bad
  • Create a rule with an investigation guide specified. This is easy. Write some Markdown text into the editor and save the rule. My favorite rule for testing the feature is Custom Threshold, because it's easy to configure an alert that will fire. But this works for any rule.
image
  • After you create your rule, it should fire at some point, ideally. Using the Observability -> Alerts view, drill into the Alert Details page. There, you should find a spiffy new tab called Investigation Guide. Confirm the contents on that tab are your markdown, properly rendered.
image
  • Repeat step 1-2 as many times as you like with different rule types, if you desire.
  • Edit your rule, using the edit page or flyout.
image
  • When you save the rule you should be able to refresh the alert details page and see the modified Investigation Guide reflected in the tab.

@justinkambic justinkambic added Team:actionable-obs Formerly "obs-ux-management", responsible for SLO, o11y alerting, significant events, & synthetics. v9.1.0 labels Apr 3, 2025
@justinkambic justinkambic self-assigned this Apr 3, 2025
@justinkambic justinkambic marked this pull request as ready for review April 11, 2025 19:18
@justinkambic justinkambic requested review from a team as code owners April 11, 2025 19:18
@elasticmachine
Copy link
Contributor

Pinging @elastic/obs-ux-management-team (Team:obs-ux-management)

@justinkambic justinkambic added release_note:feature Makes this part of the condensed release notes backport:prev-minor labels Apr 11, 2025
@botelastic botelastic bot added the ci:project-deploy-observability Create an Observability project label Apr 11, 2025
@github-actions
Copy link
Contributor

🤖 GitHub comments

Expand to view the GitHub comments

Just comment with:

  • /oblt-deploy : Deploy a Kibana instance using the Observability test environments.
  • run docs-build : Re-trigger the docs validation. (use unformatted text in the comment!)

Copy link
Contributor

@jloleysens jloleysens left a comment

Choose a reason for hiding this comment

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

Addition of optional artifacts field to SO (unmapped) LGTM!

@elasticmachine
Copy link
Contributor

elasticmachine commented May 28, 2025

💛 Build succeeded, but was flaky

  • Buildkite Build
  • Commit: fb57d60
  • Kibana Serverless Image: docker.elastic.co/kibana-ci/kibana-serverless:pr-217106-fb57d607298a

Failed CI Steps

Metrics [docs]

Module Count

Fewer modules leads to a faster build time

id before after diff
apm 1921 1922 +1
discover 1301 1302 +1
infra 1515 1516 +1
ml 2402 2403 +1
monitoring 628 629 +1
observability 1298 1299 +1
slo 1169 1170 +1
synthetics 1232 1233 +1
transform 691 692 +1
triggersActionsUi 860 861 +1
uptime 772 773 +1
total +11

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
apm 2.6MB 2.6MB +2.7KB
discover 1.1MB 1.1MB +2.7KB
infra 1.2MB 1.2MB +2.7KB
ml 5.4MB 5.4MB +2.7KB
monitoring 626.6KB 629.3KB +2.7KB
observability 1.3MB 1.3MB +3.4KB
slo 982.9KB 985.6KB +2.7KB
synthetics 1.0MB 1.0MB +2.7KB
transform 619.7KB 622.4KB +2.7KB
triggersActionsUi 1.5MB 1.5MB +2.7KB
uptime 488.1KB 490.8KB +2.7KB
total +30.1KB

History

cc @justinkambic

@mgiota
Copy link
Contributor

mgiota commented May 29, 2025

Flaky test runner link here

akowalska622 pushed a commit to akowalska622/kibana that referenced this pull request May 29, 2025
## Summary

This implements some design changes for the Rule create/edit form that
are needed downstream in elastic#217106
and elastic#219019.

Once we are agreed on the implementation and ok to merge, we can go
ahead. In the meantime, we can pull these changes into the existing PRs
mentioned above so we can work on finalizing the layout as it will look,
without needing to duplicate these commits in both places.


### Updated create rule form

<img width="1236" alt="image"
src="https://github.com/user-attachments/assets/06925dfe-bd61-4f99-bdca-2cdf7bbb5f60"
/>

### Updated details tab in edit flyout

<img width="776" alt="image"
src="https://github.com/user-attachments/assets/b250a4c9-fb2d-41cd-910a-aa42b61b5a5c"
/>
@kibanamachine
Copy link
Contributor

Flaky Test Runner Stats

🟠 Some tests failed. - kibana-flaky-test-suite-runner#8308

[❌] x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/config.ts: 174/200 tests passed.

see run history

@justinkambic justinkambic merged commit 6b556d5 into elastic:main May 29, 2025
10 checks passed
@kibanamachine
Copy link
Contributor

Starting backport for target branches: 8.19

https://github.com/elastic/kibana/actions/runs/15327853248

kibanamachine added a commit to kibanamachine/kibana that referenced this pull request May 29, 2025
## Summary 🌹

Resolves elastic#213024.

The frontend changes for
[elastic#216377](elastic#216377).

Depends on elastic#216377 and elastic#216292.

## Testing these changes 🌸

This adds frontend integration with the API changes we previously merged
in elastic#216377. There is a new editor in the Rule Create/Edit Detail view,
below the pre-existing field for naming the rule.

To test that this feature is working you should:

- This is easiest to test if you have actual data that will trigger an
alert in your cluster. If you need some fake data, you can use the nifty
`data-forge` utility with a command like:
```shell
node x-pack/scripts/data_forge.js --events-per-cycle 200 --lookback now-1h --ephemeral-project-ids 10 --dataset fake_stack --install-kibana-assets --kibana-url http://localhost:5601 --event-template bad
```
- Create a rule with an investigation guide specified. This is easy.
Write some Markdown text into the editor and save the rule. My favorite
rule for testing the feature is Custom Threshold, because it's easy to
configure an alert that will fire. But this works for any rule.
<img width="1260" alt="image"
src="https://github.com/user-attachments/assets/bf9bf866-2439-456a-a700-1a93ae2e5dac"
/>

- After you create your rule, it should fire at some point, ideally.
Using the Observability -> Alerts view, drill into the Alert Details
page. There, you should find a spiffy new tab called _Investigation
Guide_. Confirm the contents on that tab are your markdown, properly
rendered.

<img width="1000" alt="image"
src="https://github.com/user-attachments/assets/bff19e48-da44-4886-bcf7-a296559c0aca"
/>

- Repeat step 1-2 as many times as you like with different rule types,
if you desire.
- Edit your rule, using the edit page or flyout.

<img width="606" alt="image"
src="https://github.com/user-attachments/assets/1a6149fe-016a-4b8c-9846-24cb2931aed3"
/>

- When you save the rule you should be able to refresh the alert details
page and see the modified Investigation Guide reflected in the tab.

---------

Co-authored-by: Panagiota Mitsopoulou <giota85@gmail.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 6b556d5)
@kibanamachine
Copy link
Contributor

💚 All backports created successfully

Status Branch Result
8.19

Note: Successful backport PRs will be merged automatically after passing CI.

Questions ?

Please refer to the Backport tool documentation

kibanamachine added a commit that referenced this pull request May 29, 2025
…221956)

# Backport

This will backport the following commits from `main` to `8.19`:
- [[Incident Management] Investigation guide frontend
(#217106)](#217106)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Justin
Kambic","email":"jk@elastic.co"},"sourceCommit":{"committedDate":"2025-05-29T15:49:20Z","message":"[Incident
Management] Investigation guide frontend (#217106)\n\n## Summary
🌹\n\nResolves #213024.\n\nThe frontend changes
for\n[#216377](https://github.com/elastic/kibana/pull/216377).\n\nDepends
on #216377 and https://github.com/elastic/kibana/pull/216292.\n\n##
Testing these changes 🌸\n\nThis adds frontend integration with the API
changes we previously merged\nin #216377. There is a new editor in the
Rule Create/Edit Detail view,\nbelow the pre-existing field for naming
the rule.\n\nTo test that this feature is working you should:\n\n- This
is easiest to test if you have actual data that will trigger an\nalert
in your cluster. If you need some fake data, you can use the
nifty\n`data-forge` utility with a command like:\n```shell\nnode
x-pack/scripts/data_forge.js --events-per-cycle 200 --lookback now-1h
--ephemeral-project-ids 10 --dataset fake_stack --install-kibana-assets
--kibana-url http://localhost:5601 --event-template bad\n```\n- Create a
rule with an investigation guide specified. This is easy.\nWrite some
Markdown text into the editor and save the rule. My favorite\nrule for
testing the feature is Custom Threshold, because it's easy to\nconfigure
an alert that will fire. But this works for any rule.\n<img
width=\"1260\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/bf9bf866-2439-456a-a700-1a93ae2e5dac\"\n/>\n\n-
After you create your rule, it should fire at some point,
ideally.\nUsing the Observability -> Alerts view, drill into the Alert
Details\npage. There, you should find a spiffy new tab called
_Investigation\nGuide_. Confirm the contents on that tab are your
markdown, properly\nrendered.\n\n<img width=\"1000\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/bff19e48-da44-4886-bcf7-a296559c0aca\"\n/>\n\n-
Repeat step 1-2 as many times as you like with different rule types,\nif
you desire.\n- Edit your rule, using the edit page or flyout.\n\n<img
width=\"606\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/1a6149fe-016a-4b8c-9846-24cb2931aed3\"\n/>\n\n-
When you save the rule you should be able to refresh the alert
details\npage and see the modified Investigation Guide reflected in the
tab.\n\n---------\n\nCo-authored-by: Panagiota Mitsopoulou
<giota85@gmail.com>\nCo-authored-by: Elastic Machine
<elasticmachine@users.noreply.github.com>\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"6b556d593fb8a906290f00cfb55268a6a8fbed46","branchLabelMapping":{"^v9.1.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:feature","ci:project-deploy-observability","Team:obs-ux-management","backport:version","v9.1.0","v8.19.0"],"title":"[Incident
Management] Investigation guide
frontend","number":217106,"url":"https://github.com/elastic/kibana/pull/217106","mergeCommit":{"message":"[Incident
Management] Investigation guide frontend (#217106)\n\n## Summary
🌹\n\nResolves #213024.\n\nThe frontend changes
for\n[#216377](https://github.com/elastic/kibana/pull/216377).\n\nDepends
on #216377 and https://github.com/elastic/kibana/pull/216292.\n\n##
Testing these changes 🌸\n\nThis adds frontend integration with the API
changes we previously merged\nin #216377. There is a new editor in the
Rule Create/Edit Detail view,\nbelow the pre-existing field for naming
the rule.\n\nTo test that this feature is working you should:\n\n- This
is easiest to test if you have actual data that will trigger an\nalert
in your cluster. If you need some fake data, you can use the
nifty\n`data-forge` utility with a command like:\n```shell\nnode
x-pack/scripts/data_forge.js --events-per-cycle 200 --lookback now-1h
--ephemeral-project-ids 10 --dataset fake_stack --install-kibana-assets
--kibana-url http://localhost:5601 --event-template bad\n```\n- Create a
rule with an investigation guide specified. This is easy.\nWrite some
Markdown text into the editor and save the rule. My favorite\nrule for
testing the feature is Custom Threshold, because it's easy to\nconfigure
an alert that will fire. But this works for any rule.\n<img
width=\"1260\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/bf9bf866-2439-456a-a700-1a93ae2e5dac\"\n/>\n\n-
After you create your rule, it should fire at some point,
ideally.\nUsing the Observability -> Alerts view, drill into the Alert
Details\npage. There, you should find a spiffy new tab called
_Investigation\nGuide_. Confirm the contents on that tab are your
markdown, properly\nrendered.\n\n<img width=\"1000\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/bff19e48-da44-4886-bcf7-a296559c0aca\"\n/>\n\n-
Repeat step 1-2 as many times as you like with different rule types,\nif
you desire.\n- Edit your rule, using the edit page or flyout.\n\n<img
width=\"606\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/1a6149fe-016a-4b8c-9846-24cb2931aed3\"\n/>\n\n-
When you save the rule you should be able to refresh the alert
details\npage and see the modified Investigation Guide reflected in the
tab.\n\n---------\n\nCo-authored-by: Panagiota Mitsopoulou
<giota85@gmail.com>\nCo-authored-by: Elastic Machine
<elasticmachine@users.noreply.github.com>\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"6b556d593fb8a906290f00cfb55268a6a8fbed46"}},"sourceBranch":"main","suggestedTargetBranches":["8.19"],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/217106","number":217106,"mergeCommit":{"message":"[Incident
Management] Investigation guide frontend (#217106)\n\n## Summary
🌹\n\nResolves #213024.\n\nThe frontend changes
for\n[#216377](https://github.com/elastic/kibana/pull/216377).\n\nDepends
on #216377 and https://github.com/elastic/kibana/pull/216292.\n\n##
Testing these changes 🌸\n\nThis adds frontend integration with the API
changes we previously merged\nin #216377. There is a new editor in the
Rule Create/Edit Detail view,\nbelow the pre-existing field for naming
the rule.\n\nTo test that this feature is working you should:\n\n- This
is easiest to test if you have actual data that will trigger an\nalert
in your cluster. If you need some fake data, you can use the
nifty\n`data-forge` utility with a command like:\n```shell\nnode
x-pack/scripts/data_forge.js --events-per-cycle 200 --lookback now-1h
--ephemeral-project-ids 10 --dataset fake_stack --install-kibana-assets
--kibana-url http://localhost:5601 --event-template bad\n```\n- Create a
rule with an investigation guide specified. This is easy.\nWrite some
Markdown text into the editor and save the rule. My favorite\nrule for
testing the feature is Custom Threshold, because it's easy to\nconfigure
an alert that will fire. But this works for any rule.\n<img
width=\"1260\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/bf9bf866-2439-456a-a700-1a93ae2e5dac\"\n/>\n\n-
After you create your rule, it should fire at some point,
ideally.\nUsing the Observability -> Alerts view, drill into the Alert
Details\npage. There, you should find a spiffy new tab called
_Investigation\nGuide_. Confirm the contents on that tab are your
markdown, properly\nrendered.\n\n<img width=\"1000\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/bff19e48-da44-4886-bcf7-a296559c0aca\"\n/>\n\n-
Repeat step 1-2 as many times as you like with different rule types,\nif
you desire.\n- Edit your rule, using the edit page or flyout.\n\n<img
width=\"606\"
alt=\"image\"\nsrc=\"https://github.com/user-attachments/assets/1a6149fe-016a-4b8c-9846-24cb2931aed3\"\n/>\n\n-
When you save the rule you should be able to refresh the alert
details\npage and see the modified Investigation Guide reflected in the
tab.\n\n---------\n\nCo-authored-by: Panagiota Mitsopoulou
<giota85@gmail.com>\nCo-authored-by: Elastic Machine
<elasticmachine@users.noreply.github.com>\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"6b556d593fb8a906290f00cfb55268a6a8fbed46"}},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->

Co-authored-by: Justin Kambic <jk@elastic.co>
Co-authored-by: Panagiota Mitsopoulou <giota85@gmail.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
qn895 pushed a commit to qn895/kibana that referenced this pull request Jun 3, 2025
## Summary

This implements some design changes for the Rule create/edit form that
are needed downstream in elastic#217106
and elastic#219019.

Once we are agreed on the implementation and ok to merge, we can go
ahead. In the meantime, we can pull these changes into the existing PRs
mentioned above so we can work on finalizing the layout as it will look,
without needing to duplicate these commits in both places.


### Updated create rule form

<img width="1236" alt="image"
src="https://github.com/user-attachments/assets/06925dfe-bd61-4f99-bdca-2cdf7bbb5f60"
/>

### Updated details tab in edit flyout

<img width="776" alt="image"
src="https://github.com/user-attachments/assets/b250a4c9-fb2d-41cd-910a-aa42b61b5a5c"
/>
zacharyparikh pushed a commit to zacharyparikh/kibana that referenced this pull request Jun 4, 2025
## Summary 🌹

Resolves elastic#213024.

The frontend changes for
[elastic#216377](elastic#216377).

Depends on elastic#216377 and elastic#216292.

## Testing these changes 🌸

This adds frontend integration with the API changes we previously merged
in elastic#216377. There is a new editor in the Rule Create/Edit Detail view,
below the pre-existing field for naming the rule.

To test that this feature is working you should:

- This is easiest to test if you have actual data that will trigger an
alert in your cluster. If you need some fake data, you can use the nifty
`data-forge` utility with a command like:
```shell
node x-pack/scripts/data_forge.js --events-per-cycle 200 --lookback now-1h --ephemeral-project-ids 10 --dataset fake_stack --install-kibana-assets --kibana-url http://localhost:5601 --event-template bad
```
- Create a rule with an investigation guide specified. This is easy.
Write some Markdown text into the editor and save the rule. My favorite
rule for testing the feature is Custom Threshold, because it's easy to
configure an alert that will fire. But this works for any rule.
<img width="1260" alt="image"
src="https://github.com/user-attachments/assets/bf9bf866-2439-456a-a700-1a93ae2e5dac"
/>

- After you create your rule, it should fire at some point, ideally.
Using the Observability -> Alerts view, drill into the Alert Details
page. There, you should find a spiffy new tab called _Investigation
Guide_. Confirm the contents on that tab are your markdown, properly
rendered.

<img width="1000" alt="image"
src="https://github.com/user-attachments/assets/bff19e48-da44-4886-bcf7-a296559c0aca"
/>

- Repeat step 1-2 as many times as you like with different rule types,
if you desire.
- Edit your rule, using the edit page or flyout.

<img width="606" alt="image"
src="https://github.com/user-attachments/assets/1a6149fe-016a-4b8c-9846-24cb2931aed3"
/>

- When you save the rule you should be able to refresh the alert details
page and see the modified Investigation Guide reflected in the tab.

---------

Co-authored-by: Panagiota Mitsopoulou <giota85@gmail.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
nickpeihl pushed a commit to nickpeihl/kibana that referenced this pull request Jun 12, 2025
## Summary 🌹

Resolves elastic#213024.

The frontend changes for
[elastic#216377](elastic#216377).

Depends on elastic#216377 and elastic#216292.

## Testing these changes 🌸

This adds frontend integration with the API changes we previously merged
in elastic#216377. There is a new editor in the Rule Create/Edit Detail view,
below the pre-existing field for naming the rule.

To test that this feature is working you should:

- This is easiest to test if you have actual data that will trigger an
alert in your cluster. If you need some fake data, you can use the nifty
`data-forge` utility with a command like:
```shell
node x-pack/scripts/data_forge.js --events-per-cycle 200 --lookback now-1h --ephemeral-project-ids 10 --dataset fake_stack --install-kibana-assets --kibana-url http://localhost:5601 --event-template bad
```
- Create a rule with an investigation guide specified. This is easy.
Write some Markdown text into the editor and save the rule. My favorite
rule for testing the feature is Custom Threshold, because it's easy to
configure an alert that will fire. But this works for any rule.
<img width="1260" alt="image"
src="https://github.com/user-attachments/assets/bf9bf866-2439-456a-a700-1a93ae2e5dac"
/>

- After you create your rule, it should fire at some point, ideally.
Using the Observability -> Alerts view, drill into the Alert Details
page. There, you should find a spiffy new tab called _Investigation
Guide_. Confirm the contents on that tab are your markdown, properly
rendered.

<img width="1000" alt="image"
src="https://github.com/user-attachments/assets/bff19e48-da44-4886-bcf7-a296559c0aca"
/>

- Repeat step 1-2 as many times as you like with different rule types,
if you desire.
- Edit your rule, using the edit page or flyout.

<img width="606" alt="image"
src="https://github.com/user-attachments/assets/1a6149fe-016a-4b8c-9846-24cb2931aed3"
/>

- When you save the rule you should be able to refresh the alert details
page and see the modified Investigation Guide reflected in the tab.

---------

Co-authored-by: Panagiota Mitsopoulou <giota85@gmail.com>
Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:version Backport to applied version labels ci:project-deploy-observability Create an Observability project release_note:feature Makes this part of the condensed release notes Team:actionable-obs Formerly "obs-ux-management", responsible for SLO, o11y alerting, significant events, & synthetics. v8.19.0 v9.1.0

Projects

None yet

9 participants