Update docker library
This commit is contained in:
parent
2782c4962c
commit
c207659067
2 changed files with 30 additions and 18 deletions
46
app.py
46
app.py
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue