Skip to content

Latest commit

 

History

History
157 lines (112 loc) · 2.72 KB

File metadata and controls

157 lines (112 loc) · 2.72 KB
title summary tags
Open Telemetry
Add Open Telemetry tracing to your GraphQL server.
tracing

OpenTelemetryExtension

This extension adds tracing information that is compatible with Open Telemetry.

This extension requires additional requirements:

pip install 'strawberry-graphql[opentelemetry]'

Usage example:

import strawberry
from strawberry.extensions.tracing import OpenTelemetryExtension


@strawberry.type
class Query:
    @strawberry.field
    def hello(self) -> str:
        return "Hello, world!"


schema = strawberry.Schema(
    Query,
    extensions=[
        OpenTelemetryExtension,
    ],
)

If you are not running in an Async context then you'll need to use the sync version:

import strawberry
from strawberry.extensions.tracing import OpenTelemetryExtensionSync


@strawberry.type
class Query:
    @strawberry.field
    def hello(self) -> str:
        return "Hello, world!"


schema = strawberry.Schema(
    Query,
    extensions=[
        OpenTelemetryExtensionSync,
    ],
)

API reference:

class OpenTelemetryExtension(arg_filter=None): ...

arg_filter: Optional[ArgFilter]

A function to filter certain field arguments from being included in the tracing data.

ArgFilter = Callable[[Dict[str, Any], GraphQLResolveInfo], Dict[str, Any]]

More examples:

Using `arg_filter`
import strawberry
from strawberry.extensions.tracing import OpenTelemetryExtensionSync


@strawberry.type
class Query:
    @strawberry.field
    def hello(self) -> str:
        return "Hello, world!"


def arg_filter(kwargs, info):
    filtered_kwargs = {}
    for name, value in kwargs.items():
        # Never include any arguments called "password"
        if name == "password":
            continue
        filtered_kwargs[name] = value

    return filtered_kwargs


schema = strawberry.Schema(
    Query,
    extensions=[
        OpenTelemetryExtensionSync(
            arg_filter=arg_filter,
        ),
    ],
)
Using `tracer_provider`
import strawberry
from opentelemetry.trace import TracerProvider
from strawberry.extensions.tracing import OpenTelemetryExtension


@strawberry.type
class Query:
    @strawberry.field
    def hello(self) -> str:
        return "Hello, world!"


class MyTracerProvider(TracerProvider):
    def get_tracer(self, name, version=None, schema_url=None):
        return super().get_tracer(name, version, schema_url)


schema = strawberry.Schema(
    Query,
    extensions=[
        OpenTelemetryExtension(
            tracer_provider=MyTracerProvider(),
        ),
    ],
)