feat(inputs.docker): Support swarm jobs (#16292)

This commit is contained in:
Sergio 2024-12-16 17:06:22 +01:00 committed by GitHub
parent 516b8cfbd1
commit c0b3dd489e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 63 additions and 0 deletions

View File

@ -309,6 +309,18 @@ func (d *Docker) gatherSwarmInfo(acc telegraf.Accumulator) error {
tags["service_mode"] = "global" tags["service_mode"] = "global"
fields["tasks_running"] = running[service.ID] fields["tasks_running"] = running[service.ID]
fields["tasks_desired"] = tasksNoShutdown[service.ID] fields["tasks_desired"] = tasksNoShutdown[service.ID]
} else if service.Spec.Mode.ReplicatedJob != nil {
tags["service_mode"] = "replicated_job"
fields["tasks_running"] = running[service.ID]
if service.Spec.Mode.ReplicatedJob.MaxConcurrent != nil {
fields["max_concurrent"] = *service.Spec.Mode.ReplicatedJob.MaxConcurrent
}
if service.Spec.Mode.ReplicatedJob.TotalCompletions != nil {
fields["total_completions"] = *service.Spec.Mode.ReplicatedJob.TotalCompletions
}
} else if service.Spec.Mode.GlobalJob != nil {
tags["service_mode"] = "global_job"
fields["tasks_running"] = running[service.ID]
} else { } else {
d.Log.Error("Unknown replica mode") d.Log.Error("Unknown replica mode")
} }

View File

@ -1102,6 +1102,32 @@ func TestDockerGatherSwarmInfo(t *testing.T) {
"service_mode": "global", "service_mode": "global",
}, },
) )
acc.AssertContainsTaggedFields(t,
"docker_swarm",
map[string]interface{}{
"tasks_running": int(0),
"max_concurrent": uint64(2),
"total_completions": uint64(2),
},
map[string]string{
"service_id": "rfmqydhe8cluzl9hayyrhw5ga",
"service_name": "test3",
"service_mode": "replicated_job",
},
)
acc.AssertContainsTaggedFields(t,
"docker_swarm",
map[string]interface{}{
"tasks_running": int(0),
},
map[string]string{
"service_id": "mp50lo68vqgkory4e26ts8f9d",
"service_name": "test4",
"service_mode": "global_job",
},
)
} }
func TestContainerStateFilter(t *testing.T) { func TestContainerStateFilter(t *testing.T) {

View File

@ -196,6 +196,31 @@ var serviceList = []swarm.Service{
}, },
}, },
}, },
{
ID: "rfmqydhe8cluzl9hayyrhw5ga",
Spec: swarm.ServiceSpec{
Annotations: swarm.Annotations{
Name: "test3",
},
Mode: swarm.ServiceMode{
ReplicatedJob: &swarm.ReplicatedJob{
MaxConcurrent: &two,
TotalCompletions: &two,
},
},
},
},
{
ID: "mp50lo68vqgkory4e26ts8f9d",
Spec: swarm.ServiceSpec{
Annotations: swarm.Annotations{
Name: "test4",
},
Mode: swarm.ServiceMode{
GlobalJob: &swarm.GlobalJob{},
},
},
},
} }
var taskList = []swarm.Task{ var taskList = []swarm.Task{