Update docker library

This commit is contained in:
Odd Stråbø 2026-03-06 21:20:08 +01:00
commit c207659067
2 changed files with 30 additions and 18 deletions

46
app.py
View file

@ -2,12 +2,19 @@ import time
from typing import Dict from typing import Dict
import docker import docker
import prometheus_client import prometheus_client
from prometheus_client.core import REGISTRY, CounterMetricFamily, InfoMetricFamily, StateSetMetricFamily from prometheus_client.core import (
REGISTRY,
CounterMetricFamily,
InfoMetricFamily,
StateSetMetricFamily,
)
from prometheus_client.registry import Collector
class ContainerCollector(object):
docker_client: docker.Client
def __init__(self, docker_client: docker.Client): class ContainerCollector(Collector):
docker_client: docker.DockerClient
def __init__(self, docker_client: docker.DockerClient):
self.docker_client = docker_client self.docker_client = docker_client
def collect(self): def collect(self):
@ -22,20 +29,25 @@ class ContainerCollector(object):
labels=["container", "device"], labels=["container", "device"],
) )
m_container_status = InfoMetricFamily("docker_container_info", "Container info.", labels=["container"]) m_container_status = InfoMetricFamily(
"docker_container_info", "Container info.", labels=["container"]
for container in self.docker_client.containers(all=True): )
container_name = container.get("Names", [""])[0].strip("/")
container_id = container.get("Id") for container in self.docker_client.containers.list(all=True):
container_status = container.get('State','').lower() container_name = container.name
container_status = container.status
m_container_status.add_metric([container_name], dict(status=container_status)) container_health = container.health
#print(container_name, container_id) m_container_status.add_metric(
stats = self.docker_client.stats(container_id, stream=False) [container_name], dict(status=container_status, health=container_health)
)
# print(container_name, container_id)
# stats = self.docker_client.stats(container_id, stream=False)
stats = container.stats(stream=False)
# print(stats) # print(stats)
for interface, ifstats in stats.get("networks", {}).items(): for interface, ifstats in stats.get("networks", {}).items():
#print(interface, ifstats) # print(interface, ifstats)
for stat, value in ifstats.items(): for stat, value in ifstats.items():
if stat in nw_counters: if stat in nw_counters:
@ -48,7 +60,7 @@ class ContainerCollector(object):
yield metric yield metric
REGISTRY.register(ContainerCollector(docker.Client())) REGISTRY.register(ContainerCollector(docker.DockerClient()))
prometheus_client.start_http_server(9101) prometheus_client.start_http_server(9101)

View file

@ -1,3 +1,3 @@
docker-py == 1.10.6 docker == 7.1.0
prometheus-client == 0.17.1 prometheus-client == 0.17.1
urllib3 >= 1.26.0, < 2.0.0 urllib3 >= 1.26.0, < 2.0.0