Ariadne
Learn about importing the Ariadne GraphQL integration and how it captures GraphQL errors.
The Ariadne integration captures errors from the Ariadne GraphQL library, which can then be viewed in Sentry.
To get started, install sentry-sdk
from PyPI.
pip install --upgrade sentry-sdk
If you have the ariadne
package in your dependencies, the Ariadne integration will be enabled automatically when you initialize the Sentry SDK.
Configuration should happen as early as possible in your application's lifecycle.
import sentry_sdk
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for tracing.
traces_sample_rate=1.0,
# Set profiles_sample_rate to 1.0 to profile 100%
# of sampled transactions.
# We recommend adjusting this value in production.
profiles_sample_rate=1.0,
)
Create a file called app.py
with the following contents:
from ariadne import QueryType, gql, make_executable_schema
from ariadne.asgi import GraphQL
sentry_sdk.init(...) # same as above
type_defs = gql(
"""
type Query {
hello: String!
}
"""
)
query = QueryType()
@query.field("hello")
def resolve_hello(*_):
1 / 0
return "Hello!"
schema = make_executable_schema(type_defs, query)
app = GraphQL(schema, debug=True)
Make sure you have uvicorn
installed:
pip install uvicorn
And finally run your GraphQL web server with:
uvicorn app:app
Open http://127.0.0.1:8000 in your browser. You should see the GraphiQL graphical user interface.
Enter { hello }
into the query field then press the "Execute query" button. Your web app will be queried and will encounter the ZeroDivisionError
error we've snuck into the resolve_hello
resolver function.
This will create a corresponding GraphQLError
in the Issues section of sentry.io. It will take a couple of moments for the data to appear in Sentry.
The Ariadne integration can capture request and response payload for each GraphQL error that happens. Since these may contain sensitive data, the SDK needs to be initialized with the send_default_pii option set to True
.
By default, no request and response data will be attached.
sentry_sdk.init(
# same options as above
send_default_pii=True,
)
Note
Since send_default_pii
is a global SDK option, setting it to True
will affect all integrations, not just Ariadne. Please make sure to scrub sensitive data from events before enabling this option.
- ariadne: 0.20+
- Python: 3.8+
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").