Metadata-Version: 2.4
Name: plone.observability
Version: 1.0.0b15
Summary: Kubernetes-style health probes and metrics for Plone
Project-URL: Homepage, https://github.com/plone/plone.observability
Project-URL: Source, https://github.com/plone/plone.observability
Project-URL: Issues, https://github.com/plone/plone.observability/issues
Author-email: Jens Klein <jk@kleinundpartner.at>
License-Expression: GPL-2.0-only
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Plone
Classifier: Framework :: Plone :: 6.2
Classifier: Framework :: Zope
Classifier: Framework :: Zope :: 5
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.10
Requires-Dist: ofs
Requires-Dist: plone-base
Requires-Dist: products-cmfcore
Requires-Dist: zope
Requires-Dist: zope-component
Requires-Dist: zope-interface
Requires-Dist: zope-processlifetime
Provides-Extra: opentelemetry
Requires-Dist: opentelemetry-exporter-otlp; extra == 'opentelemetry'
Requires-Dist: opentelemetry-instrumentation-wsgi; extra == 'opentelemetry'
Requires-Dist: opentelemetry-sdk; extra == 'opentelemetry'
Provides-Extra: test
Requires-Dist: coverage[toml]; extra == 'test'
Requires-Dist: plone-app-testing; extra == 'test'
Requires-Dist: plone-testing; extra == 'test'
Requires-Dist: pytest; extra == 'test'
Requires-Dist: pytest-cov; extra == 'test'
Requires-Dist: pytest-plone; extra == 'test'
Description-Content-Type: text/markdown

# plone.observability

Kubernetes-style health probes, a pluggable Prometheus and JSON metrics endpoint, and optional OpenTelemetry tracing for Plone running in containers.

Plone's built-in `@@ok` view answers `OK` whether the database is reachable or not, right up until the process is too busy to answer at all.
plone.observability gives an orchestrator the real signals it needs: separate liveness, readiness, and startup probes on a dedicated port that stays answerable under load, plus a metrics endpoint your monitoring stack can scrape.

## Features

- Liveness, readiness, and startup probes on a separate HTTP port
- A pluggable `@@metrics` endpoint with Prometheus and JSON output
- Request, ZODB, and content metrics with low-cardinality labels
- Optional OpenTelemetry tracing that honors the standard `OTEL_*` environment variables
- Extensible via the Zope Component Architecture: custom health checks, metric providers, and formatters

## Installation

Add `plone.observability` to your dependencies, include its ZCML, and wire the WSGI filters.
See the [installation guide](https://plone.github.io/plone.observability/how-to/install.html) for the full steps.

```toml
[project]
dependencies = [
    "plone.observability",
]
```

```xml
<include package="plone.observability" />
```

## Documentation

Full documentation is at **<https://plone.github.io/plone.observability/>**:

- [How-to guides](https://plone.github.io/plone.observability/how-to/) — install, configure Kubernetes probes, scrape with Prometheus, enable tracing, extend via ZCA
- [Reference](https://plone.github.io/plone.observability/reference/) — configuration, health endpoints, metrics, tracing, interfaces
- [Explanation](https://plone.github.io/plone.observability/explanation/) — why three probes, why a separate port, label cardinality, tracing design

For LLM context, see [`llms.txt`](https://plone.github.io/plone.observability/llms.txt).

## License

GPL-2.0-only. See [LICENSE](LICENSE).
