PyMongo
The logfire.instrument_pymongo()
method will create a span for every operation performed using your PyMongo clients.
Also works with Motor... 🚗
This integration also works with motor
, the asynchronous driver for MongoDB.
Installation¶
Install logfire
with the pymongo
extra:
pip install 'logfire[pymongo]'
uv add 'logfire[pymongo]'
rye add logfire -E pymongo
poetry add 'logfire[pymongo]'
Usage¶
The following example demonstrates how to use Logfire with PyMongo.
Run Mongo on Docker (Optional)¶
If you already have a MongoDB instance running, you can skip this step. Otherwise, you can start MongoDB using Docker with the following command:
docker run --name mongo -p 27017:27017 -d mongo:latest
Run the Python script¶
The following script connects to a MongoDB database, inserts a document, and queries it:
import logfire
from pymongo import MongoClient
logfire.configure()
logfire.instrument_pymongo()
client = MongoClient()
db = client["database"]
collection = db["collection"]
collection.insert_one({"name": "MongoDB"})
collection.find_one()
import asyncio
import logfire
from motor.motor_asyncio import AsyncIOMotorClient
logfire.configure()
logfire.instrument_pymongo()
async def main():
client = AsyncIOMotorClient()
db = client["database"]
collection = db["collection"]
await collection.insert_one({"name": "MongoDB"})
await collection.find_one()
asyncio.run(main())
Info
You can pass capture_statement=True
to logfire.instrument_pymongo()
to capture the queries.
By default, it is set to False
to avoid capturing sensitive information.
The keyword arguments of logfire.instrument_pymongo()
are passed to the PymongoInstrumentor().instrument()
method of the OpenTelemetry pymongo Instrumentation package, read more about it here.
API Reference¶
instrument_pymongo ¶
instrument_pymongo(
capture_statement: bool = False,
request_hook: (
Callable[[Span, CommandStartedEvent], None] | None
) = None,
response_hook: (
Callable[[Span, CommandSucceededEvent], None] | None
) = None,
failed_hook: (
Callable[[Span, CommandFailedEvent], None] | None
) = None,
**kwargs: Any,
) -> None
Instrument the pymongo
module so that spans are automatically created for each operation.
Uses the
OpenTelemetry pymongo Instrumentation
library, specifically PymongoInstrumentor().instrument()
, to which it passes **kwargs
.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
|
bool
|
Set to |
False
|
|
Callable[[Span, CommandStartedEvent], None] | None
|
A function called when a command is sent to the server. |
None
|
|
Callable[[Span, CommandSucceededEvent], None] | None
|
A function that is called when a command is successfully completed. |
None
|
|
Callable[[Span, CommandFailedEvent], None] | None
|
A function that is called when a command fails. |
None
|
|
Any
|
Additional keyword arguments to pass to the OpenTelemetry |
{}
|