Name: docker-collectd-plugin
Owner: Clever
Description: CollectD plugin for Docker container statistics
Forked from: signalfx/docker-collectd-plugin
Created: 2017-05-04 22:53:00.0
Updated: 2017-05-04 22:53:02.0
Pushed: 2017-05-05 00:44:32.0
Size: 94
Language: Python
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
A Docker plugin for collectd using docker-py and collectd's Python plugin.
This uses the new stats API introduced by #9984 in Docker 1.5.
The following container stats are gathered for each container, with examples of some of the metric names reported:
network.usage.rx_bytes
network.usage.tx_bytes
memory.usage.total
memory.usage.limit
cpu.usage.total
cpu.usage.system
blockio.io_service_bytes_recursive-<major>-<minor>.read
blockio.io_service_bytes_recursive-<major>-<minor>.write
All metrics are reported with a plugin:docker
dimension, and the name
of the container is used for the plugin_instance
dimension.
/usr/share/collectd/docker-collectd-plugin
.sudo pip install -r
requirements.txt
.Add the following to your collectd config:
sDB "/usr/share/collectd/docker-collectd-plugin/dockerplugin.db"
Plugin python
gin python>
dulePath "/usr/share/collectd/docker-collectd-plugin"
port "dockerplugin"
odule dockerplugin>
BaseURL "unix://var/run/docker.sock"
Timeout 3
Module>
ugin>
The plugin has the ability to extract additional information about or
from the monitored container and report them as extra dimensions on your
metrics. The general syntax is via the Dimension
directive in the
Module
section:
ule dockerplugin>
.
mension "<name>" "<spec>"
dule>
Where <name>
is the name of the dimension you want to add, and
<spec>
describes how the value for this dimension should be extracted
by the plugin. You can extract:
raw:foobar
;env:ENV_VAR_NAME
;inspect:Path.In.Json
.Here are some examples:
nsion "mesos_task_id" "env:MESOS_TASK_ID"
nsion "image" "inspect:Config.Image"
nsion "foo" "raw:bar"
For inspect
, the parameter is expected to be a JSONPath matcher giving
the path to the value you're interested in within the JSON output of
docker inspect
(or /containers/<container>/json
via the remote API).
See https://github.com/kennknowles/python-jsonpath-rw for more details
about the JSONPath syntax.
The additional dimensions extracted by this docker-collectd-plugin
are
packed into the plugin_instance
dimension using the following syntax:
in_instance:value[dim1=value1,dim2=value2,...]
Because CollectD limits the size of the reported fields to 64 total
characters, trying to pack too many additional dimensions will result in
the whole constructed string from being truncated, making parsing those
additional dimensions correctly on the target metrics system impossible.
You should make sure that the total size of your plugin_instance
value, including all additional dimensions names and values, does not
exceed 64 characters.
A lot of the metrics reported by this plugin are advanced statistics you
may not necessarily need. CollectD makes it easy to filter metrics you
don't want to record or send. The first step is to define a PostCache
chain with a rule to pass the Docker CollectD plugin's metrics through a
custom filtering chain.
Plugin match_regex
in "PostCache">
ule>
<Match "regex">
Plugin "^docker$"
</Match>
<Target "jump">
Chain "FilterOutDetailedDockerStats"
</Target>
Rule>
rget "write"
ain>
Note: make sure you have exactly one <Chain "PostCache">
section;
CollectD will consider the first one it sees, and ignore any other. If
you already have a section, simply add the <Rule>
block that jumps to
the FilterOutDetailedDockerStats
sub-chain to your existing
PostCache
chain.
You can then use the following filtering chain to only allow the “basic” CPU, memory, network and block I/O metrics to go through, and drop everything else from the plugin:
in "FilterOutDetailedDockerStats">
ule "CpuUsage">
<Match "regex">
Type "^cpu.usage$"
</Match>
Target "return"
Rule>
ule "CpuPercent">
<Match "regex">
Type "^cpu.percent$"
</Match>
Target "return"
Rule>
ule "MemoryUsage">
<Match "regex">
Type "^memory.usage$"
</Match>
Target "return"
Rule>
ule "MemoryPercent">
<Match "regex">
Type "^memory.percent$"
</Match>
Target "return"
Rule>
ule "NetworkUsage">
<Match "regex">
Type "^network.usage$"
</Match>
Target "return"
Rule>
ule "BlockIO">
<Match "regex">
Type "^blkio$"
TypeInstance "^io_service_bytes_recursive*"
</Match>
Target "return"
Rule>
rget "stop"
ain>
For convenience, you'll find those configuration blocks in the example configuration file 10-docker.conf
.
docker-py
jsonpath_rw
python-dateutil