Comments (3)
I did it like this, seems to work fine
# Make a lifespan function that can do the .expose() that was previously done in the @app.on_event("startup")
@asynccontextmanager
async def lifespan(app: FastAPI):
instrumentator.expose(app)
yield
app = FastAPI(
...
lifespan=lifespan, # include the lifespan func in the FastAPI init call
)
instrumentator = Instrumentator().instrument(app) # Initialize the instrumentator
from prometheus-fastapi-instrumentator.
@NiclasLindqvist I confirm your assertion! Thank you for clearing my mistake.
Now I see what was the difference from our previous code to that on the manuals that is equivalent to your sample. One should instantiate the Instrumentator outside the lifespan
coroutine. We were doing it all at once, instantianting and pipelining the expose
method.
Maybe there is a drawback for some because the instrumentator object must be on the same scope as the coroutine. Perhaps one can solve this using FastAPI inherited state
attribute as in
app = FastAPI(lifespan=...)
app.state.instr = Instrumentator(
excluded_handlers=["/readiness", "/liveness", "/metrics"],
).instrument(app)
from prometheus-fastapi-instrumentator.
Related Issues (20)
- Not full metrics list HOT 1
- FastAPI app with many routers HOT 3
- Instrumentator middleware includes BackgroundTask duration in http request latency metrics HOT 2
- How to properly initialize modified_status when throwing exception
- Default metrics are gone when adding a custom instrumentation HOT 3
- Allow for custom dynamic labels on default metrics HOT 1
- Remove FastAPI in favor of Starlette HOT 3
- Upgrade fastapi version to support >100.0 HOT 5
- Metrics disappear when setting PROMETHEUS_MULTIPROC_DIR HOT 2
- Security Concern HOT 3
- Inprogress metrics ignore namespace and subsystem
- Setting the `PROMETHEUS_MULTIPROC_DIR` is not mentioned in the docs
- Instrument latency without streaming duration HOT 1
- Incorrect http_requests_total with multiple Middleware HOT 3
- trio / anyio support
- [TypeError("'ObjectId' object is not iterable"), TypeError('vars() argument must have __dict__ attribute')] HOT 1
- Any reason why the very similar function `reset_prometheus` is copy&pasted multiple times in your tests? HOT 1
- What are untemplated routes/requests?
- Inheritance in metric_namespace and metric_subsystem HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from prometheus-fastapi-instrumentator.