Skip to content

Commit 3986cb8

Browse files
danielnelsonotherpirate
authored andcommitted
Add docker input server version (influxdata#4035)
1 parent d7e0c3f commit 3986cb8

File tree

6 files changed

+132
-129
lines changed

6 files changed

+132
-129
lines changed

plugins/inputs/docker/README.md

Lines changed: 96 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ The docker plugin uses the Docker Engine API to gather metrics on running
44
docker containers.
55

66
The docker plugin uses the [Official Docker Client](https://github.com/moby/moby/tree/master/client)
7-
to gather stats from the [Engine API](https://docs.docker.com/engine/api/v1.20/).
8-
[Library Documentation](https://godoc.org/github.com/moby/moby/client)
7+
to gather stats from the [Engine API](https://docs.docker.com/engine/api/v1.24/).
98

109
### Configuration:
1110

12-
```
11+
```toml
1312
# Read metrics about docker containers
1413
[[inputs.docker]]
1514
## Docker Endpoint
@@ -76,15 +75,57 @@ may prefer to exclude them:
7675
```
7776

7877

79-
### Measurements & Fields:
78+
### Metrics:
8079

8180
Every effort was made to preserve the names based on the JSON response from the
8281
docker API.
8382

84-
Note that the docker_container_cpu metric may appear multiple times per collection,
85-
based on the availability of per-cpu stats on your system.
83+
- docker
84+
- tags:
85+
- unit
86+
- engine_host
87+
- server_version
88+
- fields:
89+
- n_used_file_descriptors
90+
- n_cpus
91+
- n_containers
92+
- n_containers_running
93+
- n_containers_stopped
94+
- n_containers_paused
95+
- n_images
96+
- n_goroutines
97+
- n_listener_events
98+
- memory_total
99+
- pool_blocksize
100+
101+
- docker_data
102+
- tags:
103+
- unit
104+
- engine_host
105+
- server_version
106+
- fields:
107+
- available
108+
- total
109+
- used
110+
111+
- docker_metadata
112+
- tags:
113+
- unit
114+
- engine_host
115+
- server_version
116+
- fields:
117+
- available
118+
- total
119+
- used
86120

87121
- docker_container_mem
122+
- tags:
123+
- engine_host
124+
- server_version
125+
- container_image
126+
- container_name
127+
- container_version
128+
- fields:
88129
- total_pgmafault
89130
- cache
90131
- mapped_file
@@ -119,7 +160,16 @@ based on the availability of per-cpu stats on your system.
119160
- failcnt
120161
- limit
121162
- container_id
163+
122164
- docker_container_cpu
165+
- tags:
166+
- engine_host
167+
- server_version
168+
- container_image
169+
- container_name
170+
- container_version
171+
- cpu
172+
- fields:
123173
- throttling_periods
124174
- throttling_throttled_periods
125175
- throttling_throttled_time
@@ -129,7 +179,16 @@ based on the availability of per-cpu stats on your system.
129179
- usage_total
130180
- usage_percent
131181
- container_id
182+
132183
- docker_container_net
184+
- tags:
185+
- engine_host
186+
- server_version
187+
- container_image
188+
- container_name
189+
- container_version
190+
- network
191+
- fields:
133192
- rx_dropped
134193
- rx_bytes
135194
- rx_errors
@@ -139,7 +198,16 @@ based on the availability of per-cpu stats on your system.
139198
- tx_errors
140199
- tx_bytes
141200
- container_id
201+
142202
- docker_container_blkio
203+
- tags:
204+
- engine_host
205+
- server_version
206+
- container_image
207+
- container_name
208+
- container_version
209+
- device
210+
- fields:
143211
- io_service_bytes_recursive_async
144212
- io_service_bytes_recursive_read
145213
- io_service_bytes_recursive_sync
@@ -151,118 +219,38 @@ based on the availability of per-cpu stats on your system.
151219
- io_serviced_recursive_total
152220
- io_serviced_recursive_write
153221
- container_id
154-
- docker_
155-
- n_used_file_descriptors
156-
- n_cpus
157-
- n_containers
158-
- n_containers_running
159-
- n_containers_stopped
160-
- n_containers_paused
161-
- n_images
162-
- n_goroutines
163-
- n_listener_events
164-
- memory_total
165-
- pool_blocksize
166-
- docker_data
167-
- available
168-
- total
169-
- used
170-
- docker_metadata
171-
- available
172-
- total
173-
- used
174-
- docker_swarm
175-
- tasks_desired
176-
- tasks_running
177222

178-
179-
### Tags:
180-
#### Docker Engine tags
181-
- docker (memory_total)
182-
- unit=bytes
183-
- engine_host
184-
- docker (pool_blocksize)
185-
- unit=bytes
186-
- engine_host
187-
- docker_data
188-
- unit=bytes
189-
- engine_host
190-
- docker_metadata
191-
- unit=bytes
192-
- engine_host
193-
194-
#### Docker Container tags
195-
- Tags on all containers:
223+
- docker_container_health
224+
- tags:
196225
- engine_host
226+
- server_version
197227
- container_image
198228
- container_name
199229
- container_version
200-
- docker_container_mem specific:
201-
- docker_container_cpu specific:
202-
- cpu
203-
- docker_container_net specific:
204-
- network
205-
- docker_container_blkio specific:
206-
- device
207-
- docker_container_health specific:
208-
- health_status
209-
- failing_streak
210-
- docker_swarm specific:
230+
- fields:
231+
- health_status (string)
232+
- failing_streak (integer)
233+
234+
- docker_swarm
235+
- tags:
211236
- service_id
212237
- service_name
213238
- service_mode
239+
- fields:
240+
- tasks_desired
241+
- tasks_running
214242

215243
### Example Output:
216244

217245
```
218-
% ./telegraf --config ~/ws/telegraf.conf --input-filter docker --test
219-
* Plugin: docker, Collection 1
220-
> docker n_cpus=8i 1456926671065383978
221-
> docker n_used_file_descriptors=15i 1456926671065383978
222-
> docker n_containers=7i 1456926671065383978
223-
> docker n_containers_running=7i 1456926671065383978
224-
> docker n_containers_stopped=3i 1456926671065383978
225-
> docker n_containers_paused=0i 1456926671065383978
226-
> docker n_images=152i 1456926671065383978
227-
> docker n_goroutines=36i 1456926671065383978
228-
> docker n_listener_events=0i 1456926671065383978
229-
> docker,unit=bytes memory_total=18935443456i 1456926671065383978
230-
> docker,unit=bytes pool_blocksize=65540i 1456926671065383978
231-
> docker_data,unit=bytes available=24340000000i,total=107400000000i,used=14820000000i 1456926671065383978
232-
> docker_metadata,unit=bytes available=2126999999i,total=2146999999i,used=20420000i 145692667106538
233-
> docker_container_mem,
234-
container_image=spotify/kafka,container_name=kafka \
235-
active_anon=52568064i,active_file=6926336i,cache=12038144i,fail_count=0i,\
236-
hierarchical_memory_limit=9223372036854771712i,inactive_anon=52707328i,\
237-
inactive_file=5111808i,limit=1044578304i,mapped_file=10301440i,\
238-
max_usage=140656640i,pgfault=63762i,pgmajfault=2837i,pgpgin=73355i,\
239-
pgpgout=45736i,rss=105275392i,rss_huge=4194304i,total_active_anon=52568064i,\
240-
total_active_file=6926336i,total_cache=12038144i,total_inactive_anon=52707328i,\
241-
total_inactive_file=5111808i,total_mapped_file=10301440i,total_pgfault=63762i,\
242-
total_pgmafault=0i,total_pgpgin=73355i,total_pgpgout=45736i,\
243-
total_rss=105275392i,total_rss_huge=4194304i,total_unevictable=0i,\
244-
total_writeback=0i,unevictable=0i,usage=117440512i,writeback=0i 1453409536840126713
245-
> docker_container_cpu,
246-
container_image=spotify/kafka,container_name=kafka,cpu=cpu-total \
247-
throttling_periods=0i,throttling_throttled_periods=0i,\
248-
throttling_throttled_time=0i,usage_in_kernelmode=440000000i,\
249-
usage_in_usermode=2290000000i,usage_system=84795360000000i,\
250-
usage_total=6628208865i 1453409536840126713
251-
> docker_container_cpu,
252-
container_image=spotify/kafka,container_name=kafka,cpu=cpu0 \
253-
usage_total=6628208865i 1453409536840126713
254-
> docker_container_net,\
255-
container_image=spotify/kafka,container_name=kafka,network=eth0 \
256-
rx_bytes=7468i,rx_dropped=0i,rx_errors=0i,rx_packets=94i,tx_bytes=946i,\
257-
tx_dropped=0i,tx_errors=0i,tx_packets=13i 1453409536840126713
258-
> docker_container_blkio,
259-
container_image=spotify/kafka,container_name=kafka,device=8:0 \
260-
io_service_bytes_recursive_async=80216064i,io_service_bytes_recursive_read=79925248i,\
261-
io_service_bytes_recursive_sync=77824i,io_service_bytes_recursive_total=80293888i,\
262-
io_service_bytes_recursive_write=368640i,io_serviced_recursive_async=6562i,\
263-
io_serviced_recursive_read=6492i,io_serviced_recursive_sync=37i,\
264-
io_serviced_recursive_total=6599i,io_serviced_recursive_write=107i 1453409536840126713
265-
>docker_swarm,
266-
service_id=xaup2o9krw36j2dy1mjx1arjw,service_mode=replicated,service_name=test,\
267-
tasks_desired=3,tasks_running=3 1508968160000000000
246+
docker,engine_host=debian-stretch-docker,server_version=17.09.0-ce n_containers=6i,n_containers_paused=0i,n_containers_running=1i,n_containers_stopped=5i,n_cpus=2i,n_goroutines=41i,n_images=2i,n_listener_events=0i,n_used_file_descriptors=27i 1524002041000000000
247+
docker,engine_host=debian-stretch-docker,server_version=17.09.0-ce,unit=bytes memory_total=2101661696i 1524002041000000000
248+
docker_container_mem,container_image=telegraf,container_name=zen_ritchie,container_version=unknown,engine_host=debian-stretch-docker,server_version=17.09.0-ce active_anon=8327168i,active_file=2314240i,cache=27402240i,container_id="adc4ba9593871bf2ab95f3ffde70d1b638b897bb225d21c2c9c84226a10a8cf4",hierarchical_memory_limit=9223372036854771712i,inactive_anon=0i,inactive_file=25088000i,limit=2101661696i,mapped_file=20582400i,max_usage=36646912i,pgfault=4193i,pgmajfault=214i,pgpgin=9243i,pgpgout=520i,rss=8327168i,rss_huge=0i,total_active_anon=8327168i,total_active_file=2314240i,total_cache=27402240i,total_inactive_anon=0i,total_inactive_file=25088000i,total_mapped_file=20582400i,total_pgfault=4193i,total_pgmajfault=214i,total_pgpgin=9243i,total_pgpgout=520i,total_rss=8327168i,total_rss_huge=0i,total_unevictable=0i,total_writeback=0i,unevictable=0i,usage=36528128i,usage_percent=0.4342225020025297,writeback=0i 1524002042000000000
249+
docker_container_cpu,container_image=telegraf,container_name=zen_ritchie,container_version=unknown,cpu=cpu-total,engine_host=debian-stretch-docker,server_version=17.09.0-ce container_id="adc4ba9593871bf2ab95f3ffde70d1b638b897bb225d21c2c9c84226a10a8cf4",throttling_periods=0i,throttling_throttled_periods=0i,throttling_throttled_time=0i,usage_in_kernelmode=40000000i,usage_in_usermode=100000000i,usage_percent=0,usage_system=6394210000000i,usage_total=117319068i 1524002042000000000
250+
docker_container_cpu,container_image=telegraf,container_name=zen_ritchie,container_version=unknown,cpu=cpu0,engine_host=debian-stretch-docker,server_version=17.09.0-ce container_id="adc4ba9593871bf2ab95f3ffde70d1b638b897bb225d21c2c9c84226a10a8cf4",usage_total=20825265i 1524002042000000000
251+
docker_container_cpu,container_image=telegraf,container_name=zen_ritchie,container_version=unknown,cpu=cpu1,engine_host=debian-stretch-docker,server_version=17.09.0-ce container_id="adc4ba9593871bf2ab95f3ffde70d1b638b897bb225d21c2c9c84226a10a8cf4",usage_total=96493803i 1524002042000000000
252+
docker_container_net,container_image=telegraf,container_name=zen_ritchie,container_version=unknown,engine_host=debian-stretch-docker,network=eth0,server_version=17.09.0-ce container_id="adc4ba9593871bf2ab95f3ffde70d1b638b897bb225d21c2c9c84226a10a8cf4",rx_bytes=1576i,rx_dropped=0i,rx_errors=0i,rx_packets=20i,tx_bytes=0i,tx_dropped=0i,tx_errors=0i,tx_packets=0i 1524002042000000000
253+
docker_container_blkio,container_image=telegraf,container_name=zen_ritchie,container_version=unknown,device=254:0,engine_host=debian-stretch-docker,server_version=17.09.0-ce container_id="adc4ba9593871bf2ab95f3ffde70d1b638b897bb225d21c2c9c84226a10a8cf4",io_service_bytes_recursive_async=27398144i,io_service_bytes_recursive_read=27398144i,io_service_bytes_recursive_sync=0i,io_service_bytes_recursive_total=27398144i,io_service_bytes_recursive_write=0i,io_serviced_recursive_async=529i,io_serviced_recursive_read=529i,io_serviced_recursive_sync=0i,io_serviced_recursive_total=529i,io_serviced_recursive_write=0i 1524002042000000000
254+
docker_container_health,container_image=telegraf,container_name=zen_ritchie,container_version=unknown,engine_host=debian-stretch-docker,server_version=17.09.0-ce failing_streak=0i,health_status="healthy" 1524007529000000000
255+
docker_swarm,service_id=xaup2o9krw36j2dy1mjx1arjw,service_mode=replicated,service_name=test tasks_desired=3,tasks_running=3 1508968160000000000
268256
```

plugins/inputs/docker/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
)
1313

1414
var (
15-
version string
15+
version = "1.24"
1616
defaultHeaders = map[string]string{"User-Agent": "engine-api-cli-1.0"}
1717
)
1818

plugins/inputs/docker/docker.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ type Docker struct {
5454
client Client
5555
httpClient *http.Client
5656
engine_host string
57+
serverVersion string
5758
filtersCreated bool
5859
labelFilter filter.Filter
5960
containerFilter filter.Filter
@@ -301,7 +302,14 @@ func (d *Docker) gatherInfo(acc telegraf.Accumulator) error {
301302
if err != nil {
302303
return err
303304
}
305+
304306
d.engine_host = info.Name
307+
d.serverVersion = info.ServerVersion
308+
309+
tags := map[string]string{
310+
"engine_host": d.engine_host,
311+
"server_version": d.serverVersion,
312+
}
305313

306314
fields := map[string]interface{}{
307315
"n_cpus": info.NCPU,
@@ -315,15 +323,13 @@ func (d *Docker) gatherInfo(acc telegraf.Accumulator) error {
315323
"n_listener_events": info.NEventsListener,
316324
}
317325
// Add metrics
318-
acc.AddFields("docker",
319-
fields,
320-
map[string]string{"engine_host": d.engine_host},
321-
now)
326+
acc.AddFields("docker", fields, tags, now)
322327
acc.AddFields("docker",
323328
map[string]interface{}{"memory_total": info.MemTotal},
324-
map[string]string{"unit": "bytes", "engine_host": d.engine_host},
329+
tags,
325330
now)
326331
// Get storage metrics
332+
tags["unit"] = "bytes"
327333
for _, rawData := range info.DriverStatus {
328334
// Try to convert string to int (bytes)
329335
value, err := parseSize(rawData[1])
@@ -335,7 +341,7 @@ func (d *Docker) gatherInfo(acc telegraf.Accumulator) error {
335341
// pool blocksize
336342
acc.AddFields("docker",
337343
map[string]interface{}{"pool_blocksize": value},
338-
map[string]string{"unit": "bytes", "engine_host": d.engine_host},
344+
tags,
339345
now)
340346
} else if strings.HasPrefix(name, "data_space_") {
341347
// data space
@@ -348,16 +354,10 @@ func (d *Docker) gatherInfo(acc telegraf.Accumulator) error {
348354
}
349355
}
350356
if len(dataFields) > 0 {
351-
acc.AddFields("docker_data",
352-
dataFields,
353-
map[string]string{"unit": "bytes", "engine_host": d.engine_host},
354-
now)
357+
acc.AddFields("docker_data", dataFields, tags, now)
355358
}
356359
if len(metadataFields) > 0 {
357-
acc.AddFields("docker_metadata",
358-
metadataFields,
359-
map[string]string{"unit": "bytes", "engine_host": d.engine_host},
360-
now)
360+
acc.AddFields("docker_metadata", metadataFields, tags, now)
361361
}
362362
return nil
363363
}
@@ -388,6 +388,7 @@ func (d *Docker) gatherContainer(
388388

389389
tags := map[string]string{
390390
"engine_host": d.engine_host,
391+
"server_version": d.serverVersion,
391392
"container_name": cname,
392393
"container_image": imageName,
393394
"container_version": imageVersion,

plugins/inputs/docker/docker_test.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,10 @@ func TestDockerGatherInfo(t *testing.T) {
615615
"n_images": int(199),
616616
"n_goroutines": int(39),
617617
},
618-
map[string]string{"engine_host": "absol"},
618+
map[string]string{
619+
"engine_host": "absol",
620+
"server_version": "17.09.0-ce",
621+
},
619622
)
620623

621624
acc.AssertContainsTaggedFields(t,
@@ -626,8 +629,9 @@ func TestDockerGatherInfo(t *testing.T) {
626629
"available": int64(36530000000),
627630
},
628631
map[string]string{
629-
"unit": "bytes",
630-
"engine_host": "absol",
632+
"unit": "bytes",
633+
"engine_host": "absol",
634+
"server_version": "17.09.0-ce",
631635
},
632636
)
633637
acc.AssertContainsTaggedFields(t,
@@ -648,6 +652,7 @@ func TestDockerGatherInfo(t *testing.T) {
648652
"ENVVAR7": "ENVVAR8=ENVVAR9",
649653
"label1": "test_value_1",
650654
"label2": "test_value_2",
655+
"server_version": "17.09.0-ce",
651656
},
652657
)
653658
acc.AssertContainsTaggedFields(t,
@@ -670,6 +675,7 @@ func TestDockerGatherInfo(t *testing.T) {
670675
"ENVVAR7": "ENVVAR8=ENVVAR9",
671676
"label1": "test_value_1",
672677
"label2": "test_value_2",
678+
"server_version": "17.09.0-ce",
673679
},
674680
)
675681
}

0 commit comments

Comments
 (0)