Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[KOGITO-9838] Add a troubleshooting guide for remote service invocations #507

Merged
merged 3 commits into from
Sep 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions serverlessworkflow/modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
*** xref:service-orchestration/configuring-openapi-services-endpoints.adoc[Advanced Configuration]
*** xref:service-orchestration/working-with-openapi-callbacks.adoc[Callbacks]
** xref:service-orchestration/orchestration-of-grpc-services.adoc[gRPC]
** xref:service-orchestration/troubleshooting.adoc[Troubleshooting]
ricardozanini marked this conversation as resolved.
Show resolved Hide resolved
* Event Orchestration
** xref:eventing/orchestration-of-asyncapi-based-services.adoc[AsyncAPI]
** xref:eventing/event-correlation-with-workflows.adoc[Event Correlation]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ curl -X 'POST' \
----

.Example response
[source,shell]
[source,json]
----
{"id":"5ab5dcb8-5952-4730-b526-cace363774bb","workflowdata":{"symbol":"KGTO","currentPrice":75,"profit":"50%"}}
----
Expand Down Expand Up @@ -422,7 +422,7 @@ curl -X 'POST' \
----

.Example response
[source,shell]
[source,json]
----
{"id":"a80c95d6-51fd-4ca9-b689-f779929c9937","workflowdata":{"symbol":"KGTO","currentPrice":59.36,"profit":"19%"}}
----
Expand Down Expand Up @@ -469,7 +469,7 @@ curl -X 'POST' \
----

.Example response
[source,shell]
[source,json]
----
{"id":"5ab5dcb8-5952-4730-b526-cace363774bb","workflowdata":{"symbol":"KGTO","currentPrice":56.35,"profit":"13%"}}
----
Expand All @@ -481,5 +481,6 @@ Note that, in the previous example, you overwrote the property defined in the `a

* xref:service-orchestration/orchestration-of-openapi-based-services.adoc[Orchestrating the OpenAPI services]
* link:{quarkus-profiles-url}[Quarkus configuration guide]
* xref:service-orchestration/troubleshooting.adoc[]

include::../../pages/_common-content/report-issue.adoc[]
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ In a future release, {product_name} will provide support for Kubernetes Service
== Additional resources

* {configuring-openapi-services-endpoints}[Configuring OpenAPI services endpoints]
//* {camel-k-integration}[Integrating Camel K] Guide not available in DP1
* {authention-support-for-openapi-services}[Authentication for OpenAPI services in {product_name}]
* xref:service-orchestration/troubleshooting.adoc[]

include::../../pages/_common-content/report-issue.adoc[]
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
= Troubleshooting Services Orchestrations
:compat-mode!:
// Metadata:
:description: Troubleshooting Services Orchestrations
:keywords: workflow, serverless, openapi, services, json, http, tls, https
// Links:
:apache_http_client_url: https://hc.apache.org/httpcomponents-client-5.2.x/

This document describes an ongoing list of known issues while orchestrating services with workflows.

== Troubleshooting HTTP Services Invocations

The backbone of workflow orchestrations are remote HTTP services invocations, for example when using xref:service-orchestration/orchestration-of-openapi-based-services.adoc[OpenAPI functions]. Following a few steps that can be useful when troubleshooting HTTP-based functions.

=== Tracing HTTP Requests and Responses

Under the hood, {product_name} uses link:{apache_http_client_url}[Apache HTTP Client]. You can turn HTTP requests and responses tracing by setting the following property:

.Turning HTTP tracing on
[source,properties]
----
quarkus.log.category."org.apache.http".level=DEBUG
----

Reset the application so the log configuration is propagated. After that, you can find HTTP tracing in your logs.

.HTTP Request trace
[source,log,subs="attributes+"]
----
...
2023-09-25 19:00:55,242 DEBUG Executing request POST /v2/models/yolo-model/infer HTTP/1.1
...
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> POST /v2/models/yolo-model/infer HTTP/1.1 <1>
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Accept: application/json
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Type: application/json
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocid: inferencepipeline <2>
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocinstanceid: 85114b2d-9f64-496a-bf1d-d3a0760cde8e <3>
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocist: Active
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoproctype: SW
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocversion: 1.0
2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Length: 23177723
2023-09-25 19:00:55,244 DEBUG http-outgoing-0 >> Host: yolo-model-opendatahub-model.apps.trustyai.dzzt.p1.openshiftapps.com
...
----

1. The path where the client will make the HTTP invocation
2. The workflow definition id
3. The workflow instance (execution) id

In the example above, you have access to every portion of the HTTP request and can verify if something is wrong during the message creation.
For example, you can use the `kogitoprocinstanceid` header to trace this HTTP message in the logs.

For responses, you should be able to see the details below the request body:

.HTTP Response trace
[source,log,subs="attributes+"]
----
...
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "HTTP/1.1 500 Internal Server Error[\r][\n]" <1>
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-type: application/json[\r][\n]"
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "date: Mon, 25 Sep 2023 19:01:00 GMT[\r][\n]"
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-length: 186[\r][\n]"
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "set-cookie: 276e4597d7fcb3b2cba7b5f037eeacf5=5427fafade21f8e7a4ee1fa6c221cf40; path=/; HttpOnly; Secure; SameSite=None[\r][\n]"
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "[\r][\n]"
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "{"code":13, "message":"Failed to load Model due to adapter error: Error calling stat on model file: stat /models/yolo-model__isvc-1295fd6ba9/yolov5s-seg.onnx: no such file or directory"}" <2>
...
----

1. Response code returned by the server. In this example, a general server error
2. Response body containing the message body returned by the server

Having the details about the HTTP invocation enables users to do a better assessment about the behavior of a given workflow.

include::../../pages/_common-content/report-issue.adoc[]