Skip to content

Commit

Permalink
[8.x] [APM Fix missing error.culprit (#205242) (#205255)
Browse files Browse the repository at this point in the history
# Backport

This will backport the following commits from `main` to `8.x`:
- [[APM Fix missing error.culprit
(#205242)](#205242)

<!--- Backport version: 9.4.3 -->

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

<!--BACKPORT [{"author":{"name":"Carlos
Crespo","email":"[email protected]"},"sourceCommit":{"committedDate":"2024-12-30T12:50:48Z","message":"[APM
Fix missing error.culprit (#205242)\n\nfixes
[#205240](https://github.com/elastic/kibana/issues/205240)\r\n\r\n##
Summary\r\n\r\nFixes the issue where `error.culprit` is always
missing.\r\n\r\n<img width=\"800\"
alt=\"image\"\r\nsrc=\"https://github.com/user-attachments/assets/9dad6797-dd40-4206-b508-daf8d69d653d\"\r\n/>\r\n\r\n<img
width=\"800\"
alt=\"image\"\r\nsrc=\"https://github.com/user-attachments/assets/6a0ac25a-bc4b-4a26-b126-86eecbe7e769\"\r\n/>\r\n\r\n\r\n\r\n###
How to test \r\n\r\n- Run `simple_trace` synthtrace scenario\r\n- Run
the request below\r\n<details>\r\n<summary>POST
logs-apm.error-default/_doc</summary>\r\n\r\n```\r\nPOST
logs-apm.error-default/_doc\r\n{\r\n\r\n \"container\": {\r\n \"id\":
\"80cc20ecab1b57865d7aca0f66ab75a0c6ec2c51f7c53da04a8540215369c359\"\r\n
},\r\n \"kubernetes\": {\r\n \"node\": {\r\n \"name\":
\"ip-192-168-55-136.ec2.internal\"\r\n },\r\n \"pod\": {\r\n \"uid\":
\"9bbfe3dc-dace-4638-b8f5-aa6ccf435cbe\",\r\n \"name\":
\"otel-demo-green-3-cartservice-5d5ccc86dd-gcxtr\"\r\n },\r\n
\"namespace\": \"otel-demo-green-3\"\r\n },\r\n \"parent\": {\r\n
\"id\": \"f39639f56a540e0e\"\r\n },\r\n \"agent\": {\r\n \"name\":
\"opentelemetry/dotnet\",\r\n \"version\": \"1.6.0\"\r\n },\r\n
\"source\": {\r\n \"port\": 35136,\r\n \"ip\":
\"::ffff:192.168.50.132\"\r\n },\r\n \"error\": {\r\n \"exception\":
[\r\n {\r\n \"handled\": true,\r\n \"message\": \"Exception (plain,
.NET) without culprit\",\r\n \"type\": \"Grpc.Core.RpcException\"\r\n
}\r\n ],\r\n \"culprit\": \"culprit msg\", // remove to test the N/A
scenario\r\n \"id\": \"60674e9b23c8b06d83889e63ffe82c1c\", //change the
id on every run\r\n \"stack_trace\": \"Grpc.Core.RpcException:
Status(StatusCode=\\\"FailedPrecondition\\\", Detail=\\\"Can't access
cart storage. System.ApplicationException: Wasn't able to connect to
redis\\n at cartservice.cartstore.RedisCartStore.EnsureRedisConnected()
in /usr/src/app/src/cartstore/RedisCartStore.cs:line 79\\n at
cartservice.cartstore.RedisCartStore.EmptyCartAsync(String userId) in
/usr/src/app/src/cartstore/RedisCartStore.cs:line 157\\\")\\n at
cartservice.cartstore.RedisCartStore.EmptyCartAsync(String userId) in
/usr/src/app/src/cartstore/RedisCartStore.cs:line 166\\n at
cartservice.services.CartService.EmptyCart(EmptyCartRequest request,
ServerCallContext context) in
/usr/src/app/src/services/CartService.cs:line 65\",\r\n
\"grouping_key\": \"6082c58afd7fa6838ebc27eef6e04829\"\r\n },\r\n
\"message\": \"Exception (plain, .NET)\",\r\n \"url\": {\r\n \"path\":
\"/oteldemo.CartService/EmptyCart\",\r\n \"original\":
\"http://otel-demo-green-3-cartservice:8080/oteldemo.CartService/EmptyCart\",\r\n
\"scheme\": \"http\",\r\n \"port\": 8080,\r\n \"domain\":
\"otel-demo-green-3-cartservice\",\r\n \"full\":
\"http://otel-demo-green-3-cartservice:8080/oteldemo.CartService/EmptyCart\"\r\n
},\r\n \"labels\": {\r\n \"k8s_pod_ip\": \"192.168.62.174\",\r\n
\"k8s_pod_start_time\": \"2024-12-17T02:55:54Z\",\r\n
\"service_namespace\": \"opentelemetry-demo\",\r\n
\"k8s_deployment_name\": \"otel-demo-green-3-cartservice\"\r\n },\r\n
\"observer\": {\r\n \"hostname\": \"450fbf7ab701\",\r\n \"type\":
\"apm-server\",\r\n \"version\": \"8.13.2\"\r\n },\r\n \"trace\": {\r\n
\"id\": \"699f6d1039fc873191a1c983790db3a2\"\r\n },\r\n \"@timestamp\":
\"2024-12-30T10:30:00.000Z\",\r\n \"data_stream\": {\r\n \"namespace\":
\"default\",\r\n \"type\": \"logs\",\r\n \"dataset\": \"apm.error\"\r\n
},\r\n \"service\": {\r\n \"node\": {\r\n \"name\":
\"80cc20ecab1b57865d7aca0f66ab75a0c6ec2c51f7c53da04a8540215369c359\"\r\n
},\r\n \"framework\": {\r\n \"name\": \"Microsoft.AspNetCore\"\r\n
},\r\n \"name\": \"synth-node-0\",\r\n \"language\": {\r\n \"name\":
\"dotnet\"\r\n }\r\n },\r\n \"host\": {\r\n \"hostname\":
\"ip-192-168-55-136.ec2.internal\",\r\n \"name\":
\"ip-192-168-55-136.ec2.internal\"\r\n },\r\n \"client\": {\r\n
\"port\": 35136,\r\n \"ip\": \"::ffff:192.168.50.132\"\r\n },\r\n
\"http\": {\r\n \"request\": {\r\n \"method\": \"POST\"\r\n },\r\n
\"response\": {\r\n \"status_code\": 200\r\n },\r\n \"version\":
\"2\"\r\n },\r\n \"event\": {\r\n \"agent_id_status\": \"missing\",\r\n
\"ingested\": \"2024-12-18T18:04:22Z\"\r\n },\r\n \"transaction\": {\r\n
\"id\": \"f39639f56a540e0e\",\r\n \"type\": \"request\",\r\n
\"sampled\": true\r\n },\r\n \"user_agent\": {\r\n \"original\":
\"grpc-go/1.59.0\",\r\n \"name\": \"Other\",\r\n \"device\": {\r\n
\"name\": \"Other\"\r\n }\r\n },\r\n \"span\": {\r\n \"id\":
\"f39639f56a540e0e\"\r\n },\r\n \"timestamp\": {\r\n \"us\":
1704892605838000\r\n }\r\n
}\r\n```\r\n</details>","sha":"12608c3659a2aaea702c1d341bd0fab30f968056","branchLabelMapping":{"^v9.0.0$":"main","^v8.18.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","v9.0.0","backport:prev-major","Team:obs-ux-infra_services"],"title":"[APM
Fix missing
error.culprit","number":205242,"url":"https://github.com/elastic/kibana/pull/205242","mergeCommit":{"message":"[APM
Fix missing error.culprit (#205242)\n\nfixes
[#205240](https://github.com/elastic/kibana/issues/205240)\r\n\r\n##
Summary\r\n\r\nFixes the issue where `error.culprit` is always
missing.\r\n\r\n<img width=\"800\"
alt=\"image\"\r\nsrc=\"https://github.com/user-attachments/assets/9dad6797-dd40-4206-b508-daf8d69d653d\"\r\n/>\r\n\r\n<img
width=\"800\"
alt=\"image\"\r\nsrc=\"https://github.com/user-attachments/assets/6a0ac25a-bc4b-4a26-b126-86eecbe7e769\"\r\n/>\r\n\r\n\r\n\r\n###
How to test \r\n\r\n- Run `simple_trace` synthtrace scenario\r\n- Run
the request below\r\n<details>\r\n<summary>POST
logs-apm.error-default/_doc</summary>\r\n\r\n```\r\nPOST
logs-apm.error-default/_doc\r\n{\r\n\r\n \"container\": {\r\n \"id\":
\"80cc20ecab1b57865d7aca0f66ab75a0c6ec2c51f7c53da04a8540215369c359\"\r\n
},\r\n \"kubernetes\": {\r\n \"node\": {\r\n \"name\":
\"ip-192-168-55-136.ec2.internal\"\r\n },\r\n \"pod\": {\r\n \"uid\":
\"9bbfe3dc-dace-4638-b8f5-aa6ccf435cbe\",\r\n \"name\":
\"otel-demo-green-3-cartservice-5d5ccc86dd-gcxtr\"\r\n },\r\n
\"namespace\": \"otel-demo-green-3\"\r\n },\r\n \"parent\": {\r\n
\"id\": \"f39639f56a540e0e\"\r\n },\r\n \"agent\": {\r\n \"name\":
\"opentelemetry/dotnet\",\r\n \"version\": \"1.6.0\"\r\n },\r\n
\"source\": {\r\n \"port\": 35136,\r\n \"ip\":
\"::ffff:192.168.50.132\"\r\n },\r\n \"error\": {\r\n \"exception\":
[\r\n {\r\n \"handled\": true,\r\n \"message\": \"Exception (plain,
.NET) without culprit\",\r\n \"type\": \"Grpc.Core.RpcException\"\r\n
}\r\n ],\r\n \"culprit\": \"culprit msg\", // remove to test the N/A
scenario\r\n \"id\": \"60674e9b23c8b06d83889e63ffe82c1c\", //change the
id on every run\r\n \"stack_trace\": \"Grpc.Core.RpcException:
Status(StatusCode=\\\"FailedPrecondition\\\", Detail=\\\"Can't access
cart storage. System.ApplicationException: Wasn't able to connect to
redis\\n at cartservice.cartstore.RedisCartStore.EnsureRedisConnected()
in /usr/src/app/src/cartstore/RedisCartStore.cs:line 79\\n at
cartservice.cartstore.RedisCartStore.EmptyCartAsync(String userId) in
/usr/src/app/src/cartstore/RedisCartStore.cs:line 157\\\")\\n at
cartservice.cartstore.RedisCartStore.EmptyCartAsync(String userId) in
/usr/src/app/src/cartstore/RedisCartStore.cs:line 166\\n at
cartservice.services.CartService.EmptyCart(EmptyCartRequest request,
ServerCallContext context) in
/usr/src/app/src/services/CartService.cs:line 65\",\r\n
\"grouping_key\": \"6082c58afd7fa6838ebc27eef6e04829\"\r\n },\r\n
\"message\": \"Exception (plain, .NET)\",\r\n \"url\": {\r\n \"path\":
\"/oteldemo.CartService/EmptyCart\",\r\n \"original\":
\"http://otel-demo-green-3-cartservice:8080/oteldemo.CartService/EmptyCart\",\r\n
\"scheme\": \"http\",\r\n \"port\": 8080,\r\n \"domain\":
\"otel-demo-green-3-cartservice\",\r\n \"full\":
\"http://otel-demo-green-3-cartservice:8080/oteldemo.CartService/EmptyCart\"\r\n
},\r\n \"labels\": {\r\n \"k8s_pod_ip\": \"192.168.62.174\",\r\n
\"k8s_pod_start_time\": \"2024-12-17T02:55:54Z\",\r\n
\"service_namespace\": \"opentelemetry-demo\",\r\n
\"k8s_deployment_name\": \"otel-demo-green-3-cartservice\"\r\n },\r\n
\"observer\": {\r\n \"hostname\": \"450fbf7ab701\",\r\n \"type\":
\"apm-server\",\r\n \"version\": \"8.13.2\"\r\n },\r\n \"trace\": {\r\n
\"id\": \"699f6d1039fc873191a1c983790db3a2\"\r\n },\r\n \"@timestamp\":
\"2024-12-30T10:30:00.000Z\",\r\n \"data_stream\": {\r\n \"namespace\":
\"default\",\r\n \"type\": \"logs\",\r\n \"dataset\": \"apm.error\"\r\n
},\r\n \"service\": {\r\n \"node\": {\r\n \"name\":
\"80cc20ecab1b57865d7aca0f66ab75a0c6ec2c51f7c53da04a8540215369c359\"\r\n
},\r\n \"framework\": {\r\n \"name\": \"Microsoft.AspNetCore\"\r\n
},\r\n \"name\": \"synth-node-0\",\r\n \"language\": {\r\n \"name\":
\"dotnet\"\r\n }\r\n },\r\n \"host\": {\r\n \"hostname\":
\"ip-192-168-55-136.ec2.internal\",\r\n \"name\":
\"ip-192-168-55-136.ec2.internal\"\r\n },\r\n \"client\": {\r\n
\"port\": 35136,\r\n \"ip\": \"::ffff:192.168.50.132\"\r\n },\r\n
\"http\": {\r\n \"request\": {\r\n \"method\": \"POST\"\r\n },\r\n
\"response\": {\r\n \"status_code\": 200\r\n },\r\n \"version\":
\"2\"\r\n },\r\n \"event\": {\r\n \"agent_id_status\": \"missing\",\r\n
\"ingested\": \"2024-12-18T18:04:22Z\"\r\n },\r\n \"transaction\": {\r\n
\"id\": \"f39639f56a540e0e\",\r\n \"type\": \"request\",\r\n
\"sampled\": true\r\n },\r\n \"user_agent\": {\r\n \"original\":
\"grpc-go/1.59.0\",\r\n \"name\": \"Other\",\r\n \"device\": {\r\n
\"name\": \"Other\"\r\n }\r\n },\r\n \"span\": {\r\n \"id\":
\"f39639f56a540e0e\"\r\n },\r\n \"timestamp\": {\r\n \"us\":
1704892605838000\r\n }\r\n
}\r\n```\r\n</details>","sha":"12608c3659a2aaea702c1d341bd0fab30f968056"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","branchLabelMappingKey":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/205242","number":205242,"mergeCommit":{"message":"[APM
Fix missing error.culprit (#205242)\n\nfixes
[#205240](https://github.com/elastic/kibana/issues/205240)\r\n\r\n##
Summary\r\n\r\nFixes the issue where `error.culprit` is always
missing.\r\n\r\n<img width=\"800\"
alt=\"image\"\r\nsrc=\"https://github.com/user-attachments/assets/9dad6797-dd40-4206-b508-daf8d69d653d\"\r\n/>\r\n\r\n<img
width=\"800\"
alt=\"image\"\r\nsrc=\"https://github.com/user-attachments/assets/6a0ac25a-bc4b-4a26-b126-86eecbe7e769\"\r\n/>\r\n\r\n\r\n\r\n###
How to test \r\n\r\n- Run `simple_trace` synthtrace scenario\r\n- Run
the request below\r\n<details>\r\n<summary>POST
logs-apm.error-default/_doc</summary>\r\n\r\n```\r\nPOST
logs-apm.error-default/_doc\r\n{\r\n\r\n \"container\": {\r\n \"id\":
\"80cc20ecab1b57865d7aca0f66ab75a0c6ec2c51f7c53da04a8540215369c359\"\r\n
},\r\n \"kubernetes\": {\r\n \"node\": {\r\n \"name\":
\"ip-192-168-55-136.ec2.internal\"\r\n },\r\n \"pod\": {\r\n \"uid\":
\"9bbfe3dc-dace-4638-b8f5-aa6ccf435cbe\",\r\n \"name\":
\"otel-demo-green-3-cartservice-5d5ccc86dd-gcxtr\"\r\n },\r\n
\"namespace\": \"otel-demo-green-3\"\r\n },\r\n \"parent\": {\r\n
\"id\": \"f39639f56a540e0e\"\r\n },\r\n \"agent\": {\r\n \"name\":
\"opentelemetry/dotnet\",\r\n \"version\": \"1.6.0\"\r\n },\r\n
\"source\": {\r\n \"port\": 35136,\r\n \"ip\":
\"::ffff:192.168.50.132\"\r\n },\r\n \"error\": {\r\n \"exception\":
[\r\n {\r\n \"handled\": true,\r\n \"message\": \"Exception (plain,
.NET) without culprit\",\r\n \"type\": \"Grpc.Core.RpcException\"\r\n
}\r\n ],\r\n \"culprit\": \"culprit msg\", // remove to test the N/A
scenario\r\n \"id\": \"60674e9b23c8b06d83889e63ffe82c1c\", //change the
id on every run\r\n \"stack_trace\": \"Grpc.Core.RpcException:
Status(StatusCode=\\\"FailedPrecondition\\\", Detail=\\\"Can't access
cart storage. System.ApplicationException: Wasn't able to connect to
redis\\n at cartservice.cartstore.RedisCartStore.EnsureRedisConnected()
in /usr/src/app/src/cartstore/RedisCartStore.cs:line 79\\n at
cartservice.cartstore.RedisCartStore.EmptyCartAsync(String userId) in
/usr/src/app/src/cartstore/RedisCartStore.cs:line 157\\\")\\n at
cartservice.cartstore.RedisCartStore.EmptyCartAsync(String userId) in
/usr/src/app/src/cartstore/RedisCartStore.cs:line 166\\n at
cartservice.services.CartService.EmptyCart(EmptyCartRequest request,
ServerCallContext context) in
/usr/src/app/src/services/CartService.cs:line 65\",\r\n
\"grouping_key\": \"6082c58afd7fa6838ebc27eef6e04829\"\r\n },\r\n
\"message\": \"Exception (plain, .NET)\",\r\n \"url\": {\r\n \"path\":
\"/oteldemo.CartService/EmptyCart\",\r\n \"original\":
\"http://otel-demo-green-3-cartservice:8080/oteldemo.CartService/EmptyCart\",\r\n
\"scheme\": \"http\",\r\n \"port\": 8080,\r\n \"domain\":
\"otel-demo-green-3-cartservice\",\r\n \"full\":
\"http://otel-demo-green-3-cartservice:8080/oteldemo.CartService/EmptyCart\"\r\n
},\r\n \"labels\": {\r\n \"k8s_pod_ip\": \"192.168.62.174\",\r\n
\"k8s_pod_start_time\": \"2024-12-17T02:55:54Z\",\r\n
\"service_namespace\": \"opentelemetry-demo\",\r\n
\"k8s_deployment_name\": \"otel-demo-green-3-cartservice\"\r\n },\r\n
\"observer\": {\r\n \"hostname\": \"450fbf7ab701\",\r\n \"type\":
\"apm-server\",\r\n \"version\": \"8.13.2\"\r\n },\r\n \"trace\": {\r\n
\"id\": \"699f6d1039fc873191a1c983790db3a2\"\r\n },\r\n \"@timestamp\":
\"2024-12-30T10:30:00.000Z\",\r\n \"data_stream\": {\r\n \"namespace\":
\"default\",\r\n \"type\": \"logs\",\r\n \"dataset\": \"apm.error\"\r\n
},\r\n \"service\": {\r\n \"node\": {\r\n \"name\":
\"80cc20ecab1b57865d7aca0f66ab75a0c6ec2c51f7c53da04a8540215369c359\"\r\n
},\r\n \"framework\": {\r\n \"name\": \"Microsoft.AspNetCore\"\r\n
},\r\n \"name\": \"synth-node-0\",\r\n \"language\": {\r\n \"name\":
\"dotnet\"\r\n }\r\n },\r\n \"host\": {\r\n \"hostname\":
\"ip-192-168-55-136.ec2.internal\",\r\n \"name\":
\"ip-192-168-55-136.ec2.internal\"\r\n },\r\n \"client\": {\r\n
\"port\": 35136,\r\n \"ip\": \"::ffff:192.168.50.132\"\r\n },\r\n
\"http\": {\r\n \"request\": {\r\n \"method\": \"POST\"\r\n },\r\n
\"response\": {\r\n \"status_code\": 200\r\n },\r\n \"version\":
\"2\"\r\n },\r\n \"event\": {\r\n \"agent_id_status\": \"missing\",\r\n
\"ingested\": \"2024-12-18T18:04:22Z\"\r\n },\r\n \"transaction\": {\r\n
\"id\": \"f39639f56a540e0e\",\r\n \"type\": \"request\",\r\n
\"sampled\": true\r\n },\r\n \"user_agent\": {\r\n \"original\":
\"grpc-go/1.59.0\",\r\n \"name\": \"Other\",\r\n \"device\": {\r\n
\"name\": \"Other\"\r\n }\r\n },\r\n \"span\": {\r\n \"id\":
\"f39639f56a540e0e\"\r\n },\r\n \"timestamp\": {\r\n \"us\":
1704892605838000\r\n }\r\n
}\r\n```\r\n</details>","sha":"12608c3659a2aaea702c1d341bd0fab30f968056"}}]}]
BACKPORT-->

Co-authored-by: Carlos Crespo <[email protected]>
  • Loading branch information
kibanamachine and crespocarlos authored Dec 30, 2024
1 parent 2c736a7 commit 576c4ab
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
AGENT_NAME,
AGENT_VERSION,
AT_TIMESTAMP,
ERROR_CULPRIT,
ERROR_EXCEPTION,
ERROR_GROUP_ID,
ERROR_ID,
Expand Down Expand Up @@ -82,6 +83,7 @@ export async function getErrorSampleDetails({
SPAN_ID,
AGENT_VERSION,
PROCESSOR_NAME,
ERROR_CULPRIT,
ERROR_STACK_TRACE,
ERROR_EXC_MESSAGE,
ERROR_EXC_HANDLED,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,11 @@ export async function generateData({
.transaction({ transactionName: transaction.name })
.errors(
serviceGoProdInstance
.error({ message: `Error ${index}`, type: transaction.name })
.error({
message: `Error ${index}`,
type: transaction.name,
culprit: `Error culprit ${index}`,
})
.timestamp(timestamp)
)
.duration(1000)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,10 @@ export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderCon
'Error 1'
);
});

it('displays correct error culprit info', () => {
expect(errorSampleDetailsResponse.error.error.culprit).to.equal('Error culprit 1');
});
});
});

Expand Down

0 comments on commit 576c4ab

Please sign in to comment.