TelemetryManager inside the agent container. By default, events stream to stdout for the cloud runner to forward as SSE. You can add custom exporters to forward the same events to Datadog, LangSmith, Sentry, etc.
Telemetry plugins run inside the agent container, not in the store or cloud-runner API process.
[!TIP]
Want to build a new exporter? Use the charm-telemetry-template to bootstrap your project. It includes the correct entry points and BaseTelemetryExporter setup.
1. Implement BaseTelemetryExporter
Subclass charm.core.telemetry.BaseTelemetryExporter. All abstract hook methods must be implemented (use pass for hooks you do not need):
2. Register via entry points
3. Opt in from charm.yaml
Exporters are opt-in — list the entry point names you want loaded:
CharmEmitterExporter always runs; listed plugins are added to the dispatch list.
4. Zero-Config Cloud Deployment
Unlike heavy adapters, Telemetry plugins are typically lightweight (e.g.requests, API clients). This means the Charm Cloud Runner can install them dynamically at boot time without timing out.
You do NOT need a custom_image to use a Telemetry Exporter!
- Add the package to your agent’s
requirements.txt:
- Enable it in
charm.yaml:
- Inject secrets via environment variables (e.g.
DATADOG_API_KEY) through the Store agent settings or runner env resolution — never hard-code keys incharm.yaml.
uv pip install -r requirements.txt in a fraction of a second, and your agent will start sending telemetry immediately.
5. Share with the Community
Once your telemetry exporter is working and published to PyPI, you can list it in the official Charm Store! Submit a Pull Request to the charm-community-plugin repository to add your package totelemetry/registry.json. Your integration will immediately appear on the Plugins page for other developers to discover.
