Skip to content

Commit

Permalink
[receiver/dockerstats] Add inspect metrics (#21803)
Browse files Browse the repository at this point in the history
**Description:**

Adds 3 new metrics from the docker inspect api
* container.cpu.limit
* container.cpu.shares
* container.restart.count

Since all these metrics are collected from the inspect api, a new method
was created (`recordInspectMetrics`) where only the containerJSON
structure is passed as an argument.

**Link to tracking Issue:** #21087

**Testing:**

New metrics were added to the receiver test and expected_metrics.yaml
files.
The receiver and config tests were also adjusted to reflect the minimum
api version of 1.25

```
❯ go clean -testcache
❯ make test
go test -race -timeout 300s -parallel 4 --tags="" ./...
ok  	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver	0.508s
ok  	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver/internal/metadata	0.381s
❯ go test --tags integration ./...
ok  	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver	14.060s
ok  	github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver/internal/metadata	0.241s
```

**Documentation:**
New metrics documentation was generated using `mdatagen`

---------

Signed-off-by: Paschalis Tsilias <[email protected]>
Signed-off-by: Christian Kruse <[email protected]>
Signed-off-by: Dani Louca <[email protected]>
Signed-off-by: Jared Tan <[email protected]>
Signed-off-by: Dominik Rosiek <[email protected]>
Signed-off-by: Raphael Silva <[email protected]>
Signed-off-by: Alex Boten <[email protected]>
Signed-off-by: Pavol Loffay <[email protected]>
Signed-off-by: Juraci Paixão Kröhling <[email protected]>
Signed-off-by: Sean Porter <[email protected]>
Co-authored-by: Christian Felipe Álvarez <[email protected]>
Co-authored-by: Christian <[email protected]>
Co-authored-by: Ryan Fitzpatrick <[email protected]>
Co-authored-by: Martin Majlis <[email protected]>
Co-authored-by: Daniel Jaglowski <[email protected]>
Co-authored-by: hovavza <[email protected]>
Co-authored-by: Povilas Versockas <[email protected]>
Co-authored-by: Dmitrii Anoshin <[email protected]>
Co-authored-by: sakulali <[email protected]>
Co-authored-by: OpenTelemetry Bot <[email protected]>
Co-authored-by: Tyler Helmuth <[email protected]>
Co-authored-by: Paschalis Tsilias <[email protected]>
Co-authored-by: Juraci Paixão Kröhling <[email protected]>
Co-authored-by: Andrzej Stencel <[email protected]>
Co-authored-by: Brandon Johnson <[email protected]>
Co-authored-by: Miel Donkers <[email protected]>
Co-authored-by: bryan-aguilar <[email protected]>
Co-authored-by: Christian Kruse <[email protected]>
Co-authored-by: gord02 <[email protected]>
Co-authored-by: bagmeg <[email protected]>
Co-authored-by: Yang Song <[email protected]>
Co-authored-by: Pablo Baeyens <[email protected]>
Co-authored-by: Curtis Robert <[email protected]>
Co-authored-by: VihasMakwana <[email protected]>
Co-authored-by: Antoine Toulme <[email protected]>
Co-authored-by: Dani Louca <[email protected]>
Co-authored-by: xu0o0 <[email protected]>
Co-authored-by: David Ashpole <[email protected]>
Co-authored-by: Jared Tan <[email protected]>
Co-authored-by: Raj Nishtala <[email protected]>
Co-authored-by: Dominik Rosiek <[email protected]>
Co-authored-by: Priyanshu Raj <[email protected]>
Co-authored-by: Raphael Philipe Mendes da Silva <[email protected]>
Co-authored-by: Anthony Mirabella <[email protected]>
Co-authored-by: Yotam loewenbach <[email protected]>
Co-authored-by: Alex Boten <[email protected]>
Co-authored-by: Jina Jain <[email protected]>
Co-authored-by: Curtis Robert <[email protected]>
Co-authored-by: Abhishek Saharn <[email protected]>
Co-authored-by: Ramachandran A G <[email protected]>
Co-authored-by: Ziqi Zhao <[email protected]>
Co-authored-by: Ramachandran A G <[email protected]>
Co-authored-by: Faith Chikwekwe <[email protected]>
Co-authored-by: Daniel Kuiper <[email protected]>
Co-authored-by: ArchangelSDY <[email protected]>
Co-authored-by: Pavol Loffay <[email protected]>
Co-authored-by: Paulo Janotti <[email protected]>
Co-authored-by: Nathan Burke <[email protected]>
Co-authored-by: shalper2 <[email protected]>
Co-authored-by: 道君 <[email protected]>
Co-authored-by: Colin Desmond <[email protected]>
Co-authored-by: Mario <[email protected]>
Co-authored-by: Paulin Todev <[email protected]>
Co-authored-by: Steven Swartz <[email protected]>
Co-authored-by: Chris Parkins <[email protected]>
Co-authored-by: Frederic Branczyk <[email protected]>
Co-authored-by: Jiekun <[email protected]>
Co-authored-by: Joel <[email protected]>
Co-authored-by: Sean Porter <[email protected]>
Co-authored-by: Tigran Najaryan <[email protected]>
Co-authored-by: nzbart <[email protected]>
Co-authored-by: Pavan Krishna <[email protected]>
Co-authored-by: pszkamruk-splunk <[email protected]>
  • Loading branch information
Show file tree
Hide file tree
Showing 24 changed files with 1,534 additions and 37 deletions.
16 changes: 16 additions & 0 deletions .chloggen/add_inspect_metrics.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: breaking

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: dockerstatsreceiver

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: "Add [container.cpu.limit], [container.cpu.shares] and [container.restarts] metrics from docker container api"

# One or more tracking issues related to the change
issues: [21087]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext: It requires API version 1.25 or greater.
4 changes: 2 additions & 2 deletions receiver/dockerstatsreceiver/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func TestLoadConfig(t *testing.T) {
},

Endpoint: "http://example.com/",
DockerAPIVersion: 1.24,
DockerAPIVersion: 1.25,

ExcludedImages: []string{
"undesired-container",
Expand Down Expand Up @@ -95,5 +95,5 @@ func TestValidateErrors(t *testing.T) {
assert.Equal(t, "endpoint must be specified", component.ValidateConfig(cfg).Error())

cfg = &Config{ScraperControllerSettings: scraperhelper.ScraperControllerSettings{CollectionInterval: 1 * time.Second}, Endpoint: "someEndpoint", DockerAPIVersion: 1.21}
assert.Equal(t, "api_version must be at least 1.22", component.ValidateConfig(cfg).Error())
assert.Equal(t, "api_version must be at least 1.25", component.ValidateConfig(cfg).Error())
}
26 changes: 26 additions & 0 deletions receiver/dockerstatsreceiver/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,24 @@ Number of sectors transferred to/from disk by the group and descendant groups (O
| device_minor | Device minor number for block IO operations. | Any Str |
| operation | Type of BlockIO operation. | Any Str |
### container.cpu.limit
CPU limit set for the container.
This metric is only reported if the container has limits set with -cpus, -cpuset-cpus or -cpu-quota.
| Unit | Metric Type | Value Type |
| ---- | ----------- | ---------- |
| {cpus} | Gauge | Double |
### container.cpu.shares
CPU shares set for the container.
| Unit | Metric Type | Value Type |
| ---- | ----------- | ---------- |
| 1 | Gauge | Int |
### container.cpu.throttling_data.periods
Number of periods with throttling active.
Expand Down Expand Up @@ -698,6 +716,14 @@ It requires docker API 1.23 or higher and kernel version >= 4.3 with pids cgroup
| ---- | ----------- | ---------- | ----------------------- | --------- |
| {pids} | Sum | Int | Cumulative | false |
### container.restarts
Number of restarts for the container.
| Unit | Metric Type | Value Type | Aggregation Temporality | Monotonic |
| ---- | ----------- | ---------- | ----------------------- | --------- |
| {restarts} | Sum | Int | Cumulative | true |
### container.uptime
Time elapsed since container start time.
Expand Down
12 changes: 12 additions & 0 deletions receiver/dockerstatsreceiver/internal/metadata/generated_config.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

173 changes: 173 additions & 0 deletions receiver/dockerstatsreceiver/internal/metadata/generated_metrics.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit d7e1933

Please sign in to comment.