Integrations with External Services
Overview
To be able to effectively monitor, diagnose and troubleshoot your application stack in production, Hasura Cloud will export metrics, logs and traces to observability tools / APM vendors.
Log types
Hasura Cloud combines various Hasura GraphQL Engine server log types into a single log called the operation log. This operation log is exported via integrations to your observability tool of choice.
Various Hasura GraphQL Engine server logs are combined to generate an operation log:
http_logs
query_logs
websocket_logs
ws_server_logs
ws_connection_init_logs
An example of an exported operation log:
{
"operation_type": "query",
"request_read_time": 0.00000776,
"response_size": 443,
"execution_time": 0.254919258,
"user_role": "admin",
"hostname": "hasura-cloud",
"project_id": "6450524a-ecc2-4676-9ecb-ba6a90a13c3d",
"is_error": false,
"operation_id": "a456caf866ebcab1a592ade80f07a622652181a9",
"request_size": 100,
"user_vars": {
"x-hasura-role": "admin"
},
"client_name": "",
"ws_operation_id": "",
"parameterized_query_hash": "a456caf866ebcab1a592ade80f07a622652181a9",
"server_client_id": "",
"websocket_id": "",
"kind": "",
"query": {
"query": "query MyQuery {\n author {\n id\n }\n}\n",
"operationName": "MyQuery"
},
"instance_uid": "c9e43acf-2e09-41a7-8aa8-ddeff4e64a21",
"transport": "http",
"url": "/v1/graphql",
"operation_name": "MyQuery",
"service": "polite-muskox-52",
"request_headers": {
"referer": "https://cloud.hasura.io/",
"sec-fetch-site": "cross-site",
"origin": "https://cloud.hasura.io",
"true-client-ip": "106.51.72.39",
"CDN-Loop": "cloudflare",
"Accept-Encoding": "gzip",
"CF-Connecting-IP": "106.51.72.39",
"sec-ch-ua-mobile": "?0",
"content-type": "application/json",
"Content-Length": "100",
"X-Real-IP": "106.51.72.39",
"sec-fetch-mode": "cors",
"CF-IPCountry": "IN",
"CF-RAY": "7a08f2590e4cf45e-BOM",
"accept-language": "en-US,en;q=0.9",
"X-Request-Id": "2f1280a31e31716e4300e84550cc7eb7",
"Connection": "close",
"X-Forwarded-Proto": "https",
"CF-Visitor": "{\"scheme\":\"https\"}",
"Host": "polite-muskox-52.hasura.app",
"dnt": "1",
"accept": "*/*",
"sec-ch-ua": "\"Not A(Brand\";v=\"24\", \"Chromium\";v=\"110\"",
"sec-ch-ua-platform": "\"macOS\"",
"X-Forwarded-For": "106.51.72.39",
"X-NginX-Proxy": "true",
"sec-fetch-dest": "empty",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
},
"db_uid": "",
"error_code": "",
"time": "2023-02-28T11:51:09.116Z",
"request_id": "2f1280a31e31716e4300e84550cc7eb7"
}
Metrics
Hasura Cloud APM integrations export the following metrics:
Metric Name | Description |
---|---|
average_requests_per_minute | Average number of requests |
average_execution_time | Average request execution time |
success_rate | Success rate of requests |
active_subscriptions | Number of Active subscriptions |
websockets_open | Number of open websockets |
Traces
Hasura Cloud APM integrations export the same trace logs as Hasura GraphQL Engine. You can find more information about tracing here.
Hasura samples all trace logs and exports only 5% to your configured APM provider.
An example of an exported trace log:
{
"resourceSpans": [
{
"resource": {
"attributes": [
{
"key": "Region",
"value": {
"stringValue": "us-west"
}
}
]
},
"scopeSpans": [
{
"scope": {
"name": "hasura",
"version": "v2.19.0"
},
"spans": [
{
"traceId": "e44b8c614e0f7434b7b55c914fa71b1c",
"spanId": "d3af63b8e6191589",
"parentSpanId": "a5648ac5af5faf1f",
"name": "Postgres",
"startTimeUnixNano": "1676531420905206010",
"endTimeUnixNano": "1676531420916114926",
"status": {
"code": "STATUS_CODE_OK"
}
},
{
"traceId": "e44b8c614e0f7434b7b55c914fa71b1c",
"spanId": "a5648ac5af5faf1f",
"parentSpanId": "0d6b602bc5a7b3af",
"name": "Postgres Query for root field \"Album\"",
"startTimeUnixNano": "1676531420905131593",
"endTimeUnixNano": "1676531420916617176",
"status": {
"code": "STATUS_CODE_OK"
}
},
{
"traceId": "e44b8c614e0f7434b7b55c914fa71b1c",
"spanId": "0d6b602bc5a7b3af",
"parentSpanId": "a085bd763f8f72da",
"name": "Query",
"startTimeUnixNano": "1676531420904690968",
"endTimeUnixNano": "1676531420916671343",
"status": {
"code": "STATUS_CODE_OK"
}
},
{
"traceId": "e44b8c614e0f7434b7b55c914fa71b1c",
"spanId": "a085bd763f8f72da",
"parentSpanId": "",
"name": "/v1/graphql",
"startTimeUnixNano": "1676531420903555760",
"endTimeUnixNano": "1676531420919447135",
"status": {
"code": "STATUS_CODE_OK"
}
}
]
}
]
}
]
}
Supported integrations
Check out the following guides on how to export telemetry data from Hasura Cloud to the observability tool of your choice: