Docker

Docker

Docker is a set of platform as a service products that uses OS-level virtualization to deliver software in packages called containers.

Available solutions




Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/docker


Template App Docker

Overview

For Zabbix version: 5.0
The template to monitor Docker engine by Zabbix that work without any external scripts. Most of the metrics are collected in one go, thanks to Zabbix bulk data collection.

Template App Docker — collects metrics by polling zabbix-agent2.

This template was tested on:

  • Docker, version 19.03.5

Setup

Setup and configure zabbix-agent2 compiled with the Docker monitoring plugin.

Test availability: zabbix_get -s docker-host -k docker.info

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$DOCKER.LLD.FILTER.CONTAINER.MATCHES}

Filter of discoverable containers

.*
{$DOCKER.LLD.FILTER.CONTAINER.NOT_MATCHES}

Filter to exclude discovered containers

CHANGE_IF_NEEDED
{$DOCKER.LLD.FILTER.IMAGE.MATCHES}

Filter of discoverable images

.*
{$DOCKER.LLD.FILTER.IMAGE.NOT_MATCHES}

Filter to exclude discovered images

CHANGE_IF_NEEDED

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Images discovery

Discovery for images metrics

ZABBIX_PASSIVE docker.images.discovery

Filter:

AND

- A: {#NAME} MATCHES_REGEX {$DOCKER.LLD.FILTER.IMAGE.MATCHES}

- B: {#NAME} NOT_MATCHES_REGEX {$DOCKER.LLD.FILTER.IMAGE.NOT_MATCHES}

Containers discovery

Discovery for containers metrics

Parameter:

true - Returns all containers

false - Returns only running containers

ZABBIX_PASSIVE docker.containers.discovery[false]

Filter:

AND

- A: {#NAME} MATCHES_REGEX {$DOCKER.LLD.FILTER.CONTAINER.MATCHES}

- B: {#NAME} NOT_MATCHES_REGEX {$DOCKER.LLD.FILTER.CONTAINER.NOT_MATCHES}

Items collected

Group Name Description Type Key and additional info
Docker Docker: Ping ZABBIX_PASSIVE docker.ping

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Docker Docker: Containers total

Total number of containers on this host

DEPENDENT docker.containers.total

Preprocessing:

- JSONPATH: $.Containers

Docker Docker: Containers running

Total number of containers running on this host

DEPENDENT docker.containers.running

Preprocessing:

- JSONPATH: $.ContainersRunning

Docker Docker: Containers stopped

Total number of containers stopped on this host

DEPENDENT docker.containers.stopped

Preprocessing:

- JSONPATH: $.ContainersStopped

Docker Docker: Containers paused

Total number of containers paused on this host

DEPENDENT docker.containers.paused

Preprocessing:

- JSONPATH: $.ContainersPaused

Docker Docker: Images total

Number of images with intermediate image layers

DEPENDENT docker.images.total

Preprocessing:

- JSONPATH: $.Images

Docker Docker: Storage driver

Docker storage driver

https://docs.docker.com/storage/storagedriver/

DEPENDENT docker.driver

Preprocessing:

- JSONPATH: $.Driver

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Memory limit enabled

-

DEPENDENT docker.mem_limit.enabled

Preprocessing:

- JSONPATH: $.MemoryLimit

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Swap limit enabled

-

DEPENDENT docker.swap_limit.enabled

Preprocessing:

- JSONPATH: $.SwapLimit

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Kernel memory enabled

-

DEPENDENT docker.kernel_mem.enabled

Preprocessing:

- JSONPATH: $.KernelMemory

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Kernel memory TCP enabled

-

DEPENDENT docker.kernel_mem_tcp.enabled

Preprocessing:

- JSONPATH: $.KernelMemoryTCP

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: CPU CFS Period enabled

https://docs.docker.com/config/containers/resource_constraints/#configure-the-default-cfs-scheduler

DEPENDENT docker.cpu_cfs_period.enabled

Preprocessing:

- JSONPATH: $.CpuCfsPeriod

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: CPU CFS Quota enabled

https://docs.docker.com/config/containers/resource_constraints/#configure-the-default-cfs-scheduler

DEPENDENT docker.cpu_cfs_quota.enabled

Preprocessing:

- JSONPATH: $.CpuCfsQuota

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: CPU Shares enabled

https://docs.docker.com/config/containers/resource_constraints/#configure-the-default-cfs-scheduler

DEPENDENT docker.cpu_shares.enabled

Preprocessing:

- JSONPATH: $.CPUShares

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: CPU Set enabled

https://docs.docker.com/config/containers/resource_constraints/#configure-the-default-cfs-scheduler

DEPENDENT docker.cpu_set.enabled

Preprocessing:

- JSONPATH: $.CPUSet

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Pids limit enabled

-

DEPENDENT docker.pids_limit.enabled

Preprocessing:

- JSONPATH: $.PidsLimit

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: IPv4 Forwarding enabled

-

DEPENDENT docker.ipv4_forwarding.enabled

Preprocessing:

- JSONPATH: $.IPv4Forwarding

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Debug enabled

-

DEPENDENT docker.debug.enabled

Preprocessing:

- JSONPATH: $.Debug

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Nfd

Number of used File Descriptors

DEPENDENT docker.nfd

Preprocessing:

- JSONPATH: $.NFd

Docker Docker: OomKill disabled

-

DEPENDENT docker.oomkill.disabled

Preprocessing:

- JSONPATH: $.OomKillDisable

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Goroutines

Number of goroutines

DEPENDENT docker.goroutines

Preprocessing:

- JSONPATH: $.NGoroutines

Docker Docker: Logging driver

-

DEPENDENT docker.logging_driver

Preprocessing:

- JSONPATH: $.LoggingDriver

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Cgroup driver

-

DEPENDENT docker.cgroup_driver

Preprocessing:

- JSONPATH: $.CgroupDriver

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: NEvents listener

-

DEPENDENT docker.nevents_listener

Preprocessing:

- JSONPATH: $.NEventsListener

Docker Docker: Kernel version

-

DEPENDENT docker.kernel_version

Preprocessing:

- JSONPATH: $.KernelVersion

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Operating system

-

DEPENDENT docker.operating_system

Preprocessing:

- JSONPATH: $.OperatingSystem

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: OS type

-

DEPENDENT docker.os_type

Preprocessing:

- JSONPATH: $.OSType

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Architecture

-

DEPENDENT docker.architecture

Preprocessing:

- JSONPATH: $.Architecture

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: NCPU

-

DEPENDENT docker.ncpu

Preprocessing:

- JSONPATH: $.NCPU

Docker Docker: Memory total

-

DEPENDENT docker.mem.total

Preprocessing:

- JSONPATH: $.MemTotal

Docker Docker: Docker root dir

-

DEPENDENT docker.root_dir

Preprocessing:

- JSONPATH: $.DockerRootDir

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Name

-

DEPENDENT docker.name

Preprocessing:

- JSONPATH: $.Name

Docker Docker: Server version

-

DEPENDENT docker.server_version

Preprocessing:

- JSONPATH: $.ServerVersion

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Default runtime

-

DEPENDENT docker.default_runtime

Preprocessing:

- JSONPATH: $.DefaultRuntime

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Live restore enabled

-

DEPENDENT docker.live_restore.enabled

Preprocessing:

- JSONPATH: $.LiveRestoreEnabled

- BOOL_TO_DECIMAL

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Docker: Layers size

-

DEPENDENT docker.layers_size

Preprocessing:

- JSONPATH: $.LayersSize

Docker Docker: Images size

-

DEPENDENT docker.images_size

Preprocessing:

- JSONPATH: $.Images[*].Size.sum()

Docker Docker: Containers size

-

DEPENDENT docker.containers_size

Preprocessing:

- JSONPATH: $.Containers[*].SizeRw.sum()

Docker Docker: Volumes size

-

DEPENDENT docker.volumes_size

Preprocessing:

- JSONPATH: $.Volumes[*].UsageData.Size.sum()

Docker Docker: Images available

Number of top-level images

DEPENDENT docker.images.top_level

Preprocessing:

- JSONPATH: $.length()

Docker Image {#NAME}: Created

-

DEPENDENT docker.image.created["{#ID}"]

Preprocessing:

- JSONPATH: $[?(@.Id == "{#ID}")].Created.first()

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Image {#NAME}: Size

-

DEPENDENT docker.image.size["{#ID}"]

Preprocessing:

- JSONPATH: $[?(@.Id == "{#ID}")].Size.first()

Docker Container {#NAME}: Get stats

Get container stats based on resource usage

ZABBIX_PASSIVE docker.container_stats["{#NAME}"]
Docker Container {#NAME}: CPU total usage per second

-

DEPENDENT docker.container_stats.cpu_usage.total.rate["{#NAME}"]

Preprocessing:

- JSONPATH: $.cpu_stats.cpu_usage.total_usage

- CHANGE_PER_SECOND

- MULTIPLIER: 1.0E-9

Docker Container {#NAME}: CPU kernelmode usage per second

-

DEPENDENT docker.container_stats.cpu_usage.kernel.rate["{#NAME}"]

Preprocessing:

- JSONPATH: $.cpu_stats.cpu_usage.usage_in_kernelmode

- CHANGE_PER_SECOND

- MULTIPLIER: 1.0E-9

Docker Container {#NAME}: CPU usermode usage per second

-

DEPENDENT docker.container_stats.cpu_usage.user.rate["{#NAME}"]

Preprocessing:

- JSONPATH: $.cpu_stats.cpu_usage.usage_in_usermode

- CHANGE_PER_SECOND

- MULTIPLIER: 1.0E-9

Docker Container {#NAME}: Online CPUs

-

DEPENDENT docker.container_stats.online_cpus["{#NAME}"]

Preprocessing:

- JSONPATH: $.cpu_stats.online_cpus

Docker Container {#NAME}: Throttling periods

Number of periods with throttling active

DEPENDENT docker.container_stats.cpu_usage.throttling_periods["{#NAME}"]

Preprocessing:

- JSONPATH: $.cpu_stats.throttling_data.periods

Docker Container {#NAME}: Throttled periods

Number of periods when the container hits its throttling limit

DEPENDENT docker.container_stats.cpu_usage.throttled_periods["{#NAME}"]

Preprocessing:

- JSONPATH: $.cpu_stats.throttling_data.throttled_periods

Docker Container {#NAME}: Throttled time

Aggregate time the container was throttled for in nanoseconds

DEPENDENT docker.container_stats.cpu_usage.throttled_time["{#NAME}"]

Preprocessing:

- JSONPATH: $.cpu_stats.throttling_data.throttled_time

- MULTIPLIER: 1.0E-9

Docker Container {#NAME}: Memory usage

-

DEPENDENT docker.container_stats.memory.usage["{#NAME}"]

Preprocessing:

- JSONPATH: $.memory_stats.usage

Docker Container {#NAME}: Memory maximum usage

-

DEPENDENT docker.container_stats.memory.max_usage["{#NAME}"]

Preprocessing:

- JSONPATH: $.memory_stats.max_usage

Docker Container {#NAME}: Memory commit bytes

-

DEPENDENT docker.container_stats.memory.commit_bytes["{#NAME}"]

Preprocessing:

- JSONPATH: $.memory_stats.commitbytes

Docker Container {#NAME}: Memory commit peak bytes

-

DEPENDENT docker.container_stats.memory.commit_peak_bytes["{#NAME}"]

Preprocessing:

- JSONPATH: $.memory_stats.commitpeakbytes

Docker Container {#NAME}: Memory private working set

-

DEPENDENT docker.container_stats.memory.private_working_set["{#NAME}"]

Preprocessing:

- JSONPATH: $.memory_stats.privateworkingset

Docker Container {#NAME}: Networks bytes received per second

-

DEPENDENT docker.networks.rx_bytes["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].rx_bytes.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Networks packets received per second

-

DEPENDENT docker.networks.rx_packets["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].rx_packets.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Networks errors received per second

-

DEPENDENT docker.networks.rx_errors["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].rx_errors.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Networks incoming packets dropped per second

-

DEPENDENT docker.networks.rx_dropped["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].rx_dropped.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Networks bytes sent per second

-

DEPENDENT docker.networks.tx_bytes["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].tx_bytes.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Networks packets sent per second

-

DEPENDENT docker.networks.tx_packets["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].tx_packets.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Networks errors sent per second

-

DEPENDENT docker.networks.tx_errors["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].tx_errors.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Networks outgoing packets dropped per second

-

DEPENDENT docker.networks.tx_dropped["{#NAME}"]

Preprocessing:

- JSONPATH: $.networks[*].tx_dropped.sum()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

- CHANGE_PER_SECOND

Docker Container {#NAME}: Get info

Return low-level information about a container

ZABBIX_PASSIVE docker.container_info["{#NAME}"]
Docker Container {#NAME}: Created

-

DEPENDENT docker.container_info.created["{#NAME}"]

Preprocessing:

- JSONPATH: $.Created

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Container {#NAME}: Image

-

DEPENDENT docker.container_info.image["{#NAME}"]

Preprocessing:

- JSONPATH: $[?(@.Names[0] == "{#NAME}")].Image.first()

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Container {#NAME}: Restart count

-

DEPENDENT docker.container_info.restart_count["{#NAME}"]

Preprocessing:

- JSONPATH: $.RestartCount

Docker Container {#NAME}: Status

-

DEPENDENT docker.container_info.state.status["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.Status

- DISCARD_UNCHANGED_HEARTBEAT: 1h

Docker Container {#NAME}: Running

-

DEPENDENT docker.container_info.state.running["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.Running

- BOOL_TO_DECIMAL

Docker Container {#NAME}: Paused

-

DEPENDENT docker.container_info.state.paused["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.Paused

- BOOL_TO_DECIMAL

Docker Container {#NAME}: Restarting

-

DEPENDENT docker.container_info.state.restarting["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.Restarting

- BOOL_TO_DECIMAL

Docker Container {#NAME}: OOMKilled

-

DEPENDENT docker.container_info.state.oomkilled["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.OOMKilled

- BOOL_TO_DECIMAL

Docker Container {#NAME}: Dead

-

DEPENDENT docker.container_info.state.dead["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.Dead

- BOOL_TO_DECIMAL

Docker Container {#NAME}: Pid

-

DEPENDENT docker.container_info.state.pid["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.Pid

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Container {#NAME}: Exit code

-

DEPENDENT docker.container_info.state.exitcode["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.ExitCode

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Container {#NAME}: Error

-

DEPENDENT docker.container_info.state.error["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.Error

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Container {#NAME}: Started at

-

DEPENDENT docker.container_info.started["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.StartedAt

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Docker Container {#NAME}: Finished at

-

DEPENDENT docker.container_info.finished["{#NAME}"]

Preprocessing:

- JSONPATH: $.State.FinishedAt

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Zabbix_raw_items Docker: Get info ZABBIX_PASSIVE docker.info
Zabbix_raw_items Docker: Get containers ZABBIX_PASSIVE docker.containers
Zabbix_raw_items Docker: Get images ZABBIX_PASSIVE docker.images
Zabbix_raw_items Docker: Get data_usage ZABBIX_PASSIVE docker.data_usage

Triggers

Name Description Expression Severity Dependencies and additional info
Docker: Service is down

-

{TEMPLATE_NAME:docker.ping.last()}=0 AVERAGE

Manual close: YES

Docker: Failed to fetch info data (or no data for 30m)

Zabbix has not received data for items for the last 30 minutes

{TEMPLATE_NAME:docker.name.nodata(30m)}=1 WARNING

Manual close: YES

Depends on:

- Docker: Service is down

Docker: Version has changed (new version: {ITEM.VALUE})

Docker version has changed. Ack to close.

{TEMPLATE_NAME:docker.server_version.diff()}=1 and {TEMPLATE_NAME:docker.server_version.strlen()}>0 INFO

Manual close: YES

Container {#NAME}: Container has been stopped with error code

-

{TEMPLATE_NAME:docker.container_info.state.exitcode["{#NAME}"].last()}>0 and {Template App Docker:docker.container_info.state.running["{#NAME}"].last()}=0 AVERAGE

Manual close: YES

Container {#NAME}: An error has occurred in the container

Container {#NAME} has an error. Ack to close.

{TEMPLATE_NAME:docker.container_info.state.error["{#NAME}"].diff()}=1 and {TEMPLATE_NAME:docker.container_info.state.error["{#NAME}"].strlen()}>0 WARNING

Manual close: YES

Feedback

Please report any issues with the template at https://support.zabbix.com

You can also provide feedback, discuss the template or ask for help with it at [ZABBIX forums]().

Articles and documentation

+ Propose new article
Add your solution