| --- | |
| title: Docker metrics collector plugins | |
| description: "Metrics plugins." | |
| keywords: "Examples, Usage, plugins, docker, documentation, user guide, metrics" | |
| --- | |
| Docker exposes internal metrics based on the Prometheus format. Metrics plugins | |
| enable accessing these metrics in a consistent way by providing a Unix | |
| socket at a predefined path where the plugin can scrape the metrics. | |
| > [!NOTE] | |
| > While the plugin interface for metrics is non-experimental, the naming of the | |
| > metrics and metric labels is still considered experimental and may change in a | |
| > future version. | |
| ## Creating a metrics plugin | |
| You must currently set `PropagatedMount` in the plugin `config.json` to | |
| `/run/docker`. This allows the plugin to receive updated mounts | |
| (the bind-mounted socket) from Docker after the plugin is already configured. | |
| ## MetricsCollector protocol | |
| Metrics plugins must register as implementing the`MetricsCollector` interface | |
| in `config.json`. | |
| On Unix platforms, the socket is located at `/run/docker/metrics.sock` in the | |
| plugin's rootfs. | |
| `MetricsCollector` must implement two endpoints: | |
| ### `MetricsCollector.StartMetrics` | |
| Signals to the plugin that the metrics socket is now available for scraping | |
| Request: | |
| ```json | |
| {} | |
| ``` | |
| The request has no payload. | |
| Response: | |
| ```json | |
| { | |
| "Err": "" | |
| } | |
| ``` | |
| If an error occurred during this request, add an error message to the `Err` field | |
| in the response. If no error then you can either send an empty response (`{}`) | |
| or an empty value for the `Err` field. Errors will only be logged. | |
| ### `MetricsCollector.StopMetrics` | |
| Signals to the plugin that the metrics socket is no longer available. | |
| This may happen when the daemon is shutting down. | |
| Request: | |
| ```json | |
| {} | |
| ``` | |
| The request has no payload. | |
| Response: | |
| ```json | |
| { | |
| "Err": "" | |
| } | |
| ``` | |
| If an error occurred during this request, add an error message to the `Err` field | |
| in the response. If no error then you can either send an empty response (`{}`) | |
| or an empty value for the `Err` field. Errors will only be logged. |