sdk-generator icon indicating copy to clipboard operation
sdk-generator copied to clipboard

Observability in the SDKs

Open rhamzeh opened this issue 9 months ago • 0 comments

Checklist

Describe the problem you'd like to have solved

As a consumer of the SDK, I would like to hook it to my dashboards to get data on several metrics, as well being able to configure proper logging and tracing

Describe the ideal solution

For each SDK, users should be able to set up and connect to their infra

  • Phase 1: Metrics
  • Phase 2: Logging
  • Phase 3: Tracing
Metrics:
  • The latency of the request, split into

    • time it took since dev called the method until they get a response
    • time it took since the sdk issued a request to the API until it got a response
    • time reported by the server (query_duration_ms header)
  • Response codes

  • Error codes and method

  • Method calls

  • [x] JS: https://github.com/openfga/js-sdk/issues/108

  • [x] Go: https://github.com/openfga/go-sdk/issues/105

  • [x] .NET: https://github.com/openfga/dotnet-sdk/issues/68

  • [x] Python: https://github.com/openfga/python-sdk/issues/93

  • [x] Java:https://github.com/openfga/java-sdk/issues/92

Logging:
  • Write logs, possibly enriched by metadata from the dev
  • Write authorization model logs, possibly enriched by metadata from the dev
  • Check logs, with the responses
  • ListObjects logs with response length
  • ListUsers logs with response length
  • Other endpoints

Q: Should we have an option to log the full response? The headers? Full response will be a problem in list objects/users

  • [ ] JS: TODO
  • [ ] Go: TODO
  • [ ] .NET: TODO
  • [ ] Python: TODO
  • [ ] Java: TODO
Tracing:
  • Full trace of a request

  • Propagate the trace ID both from their app and to the OpenFGA server so that they can follow a request from their app to FGA

  • [ ] JS: TODO

  • [ ] Go: TODO

  • [ ] .NET: TODO

  • [ ] Python: TODO

  • [ ] Java: TODO

Documentation

  • Documentation in each SDK on how to configure logging, metrics and tracing
  • Documentation in our docs on setting up tracing and connecting it to Prometheus and Grafana

Configuration

For each, SDK we need to allow the configuration of tracing, metrics and logging

For example, in the JS SDK, we may add: (note - config structure may change), based on the server config

Implementation

We will be using OpenTelemetry, e.g. open-telemetry/opentelemetry-js (for JS) or the appropriate SDK for each language: Language APIs & SDKs

Alternatives and current workarounds

No response

References

No response

Additional context

Roadmap Item: https://github.com/openfga/roadmap/issues/41

rhamzeh avatar Apr 30 '24 04:04 rhamzeh