From 240d68765c53c5f146fedb2af85789382c741910 Mon Sep 17 00:00:00 2001 From: Chris Baker Date: Mon, 17 Jun 2019 16:52:49 +0000 Subject: [PATCH 1/4] metrics: add namespace label to allocation metrics --- client/allocrunner/taskrunner/task_runner.go | 7 +++ .../taskrunner/task_runner_test.go | 48 +++++++++++++++++++ nomad/leader.go | 4 ++ 3 files changed, 59 insertions(+) diff --git a/client/allocrunner/taskrunner/task_runner.go b/client/allocrunner/taskrunner/task_runner.go index 352815654651..bda94a3c88eb 100644 --- a/client/allocrunner/taskrunner/task_runner.go +++ b/client/allocrunner/taskrunner/task_runner.go @@ -364,6 +364,13 @@ func (tr *TaskRunner) initLabels() { }, } + if tr.alloc.Namespace != "" { + tr.baseLabels = append(tr.baseLabels, metrics.Label{ + Name: "namespace", + Value: tr.alloc.Namespace, + }) + } + if tr.alloc.Job.ParentID != "" { tr.baseLabels = append(tr.baseLabels, metrics.Label{ Name: "parent_id", diff --git a/client/allocrunner/taskrunner/task_runner_test.go b/client/allocrunner/taskrunner/task_runner_test.go index b3506d1b36c0..1d7b80aaa868 100644 --- a/client/allocrunner/taskrunner/task_runner_test.go +++ b/client/allocrunner/taskrunner/task_runner_test.go @@ -2021,3 +2021,51 @@ func testWaitForTaskToStart(t *testing.T, tr *TaskRunner) { require.NoError(t, err) }) } + +// TestTaskRunner_BaseLabels tests that the base labels for the task metrics +// are set appropriately. +func TestTaskRunner_BaseLabels(t *testing.T) { + t.Parallel() + require := require.New(t) + + alloc := mock.BatchAlloc() + alloc.Namespace = "not-default" + task := alloc.Job.TaskGroups[0].Tasks[0] + task.Driver = "raw_exec" + task.Config = map[string]interface{}{ + "command": "whoami", + } + + config, cleanup := testTaskRunnerConfig(t, alloc, task.Name) + + tr, err := NewTaskRunner(config) + require.NoError(err) + defer cleanup() + + var foundJob, foundGroup, foundTask, foundAlloc, foundNamespace bool + for _, e := range tr.baseLabels { + switch e.Name { + case "job": + require.Equal(e.Value, alloc.Job.Name) + foundJob = true + case "task_group": + require.Equal(e.Value, alloc.TaskGroup) + foundGroup = true + case "task": + require.Equal(e.Value, task.Name) + foundTask = true + case "alloc_id": + require.Equal(e.Value, alloc.ID) + foundAlloc = true + case "namespace": + require.Equal(e.Value, alloc.Namespace) + foundNamespace = true + } + } + require.True(foundJob) + require.True(foundGroup) + require.True(foundAlloc) + require.True(foundTask) + require.True(foundNamespace) +} + diff --git a/nomad/leader.go b/nomad/leader.go index 6a27c78dd933..0b08fc60cc9d 100644 --- a/nomad/leader.go +++ b/nomad/leader.go @@ -657,6 +657,10 @@ func (s *Server) iterateJobSummaryMetrics(summary *structs.JobSummary) { Name: "task_group", Value: name, }, + { + Name: "namespace", + Value: summary.Namespace, + }, } if strings.Contains(summary.JobID, "/dispatch-") { From 7050e14eb5af2b12d09639ef47884805a9d14a52 Mon Sep 17 00:00:00 2001 From: Chris Baker Date: Tue, 18 Jun 2019 14:00:57 +0000 Subject: [PATCH 2/4] formatting and clarity --- client/allocrunner/taskrunner/task_runner.go | 9 ++---- .../taskrunner/task_runner_test.go | 31 +++++-------------- 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/client/allocrunner/taskrunner/task_runner.go b/client/allocrunner/taskrunner/task_runner.go index bda94a3c88eb..b71c3bd4df87 100644 --- a/client/allocrunner/taskrunner/task_runner.go +++ b/client/allocrunner/taskrunner/task_runner.go @@ -362,13 +362,10 @@ func (tr *TaskRunner) initLabels() { Name: "task", Value: tr.taskName, }, - } - - if tr.alloc.Namespace != "" { - tr.baseLabels = append(tr.baseLabels, metrics.Label{ - Name: "namespace", + { + Name: "namespace", Value: tr.alloc.Namespace, - }) + }, } if tr.alloc.Job.ParentID != "" { diff --git a/client/allocrunner/taskrunner/task_runner_test.go b/client/allocrunner/taskrunner/task_runner_test.go index 1d7b80aaa868..c03d547e04f0 100644 --- a/client/allocrunner/taskrunner/task_runner_test.go +++ b/client/allocrunner/taskrunner/task_runner_test.go @@ -2042,30 +2042,13 @@ func TestTaskRunner_BaseLabels(t *testing.T) { require.NoError(err) defer cleanup() - var foundJob, foundGroup, foundTask, foundAlloc, foundNamespace bool + labels := map[string]string{} for _, e := range tr.baseLabels { - switch e.Name { - case "job": - require.Equal(e.Value, alloc.Job.Name) - foundJob = true - case "task_group": - require.Equal(e.Value, alloc.TaskGroup) - foundGroup = true - case "task": - require.Equal(e.Value, task.Name) - foundTask = true - case "alloc_id": - require.Equal(e.Value, alloc.ID) - foundAlloc = true - case "namespace": - require.Equal(e.Value, alloc.Namespace) - foundNamespace = true - } + labels[e.Name] = e.Value } - require.True(foundJob) - require.True(foundGroup) - require.True(foundAlloc) - require.True(foundTask) - require.True(foundNamespace) + require.Equal(alloc.Job.Name, labels["job"]) + require.Equal(alloc.TaskGroup, labels["task_group"]) + require.Equal(task.Name, labels["task"]) + require.Equal(alloc.ID, labels["alloc_id"]) + require.Equal(alloc.Namespace, labels["namespace"]) } - From 03500494b2c9b472d92da626d5a3cd26056b5fe1 Mon Sep 17 00:00:00 2001 From: Chris Baker Date: Tue, 18 Jun 2019 14:15:25 +0000 Subject: [PATCH 3/4] cleanup test --- client/allocrunner/taskrunner/task_runner_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/allocrunner/taskrunner/task_runner_test.go b/client/allocrunner/taskrunner/task_runner_test.go index c03d547e04f0..8a6ab8cf50cb 100644 --- a/client/allocrunner/taskrunner/task_runner_test.go +++ b/client/allocrunner/taskrunner/task_runner_test.go @@ -2037,10 +2037,10 @@ func TestTaskRunner_BaseLabels(t *testing.T) { } config, cleanup := testTaskRunnerConfig(t, alloc, task.Name) + defer cleanup() tr, err := NewTaskRunner(config) require.NoError(err) - defer cleanup() labels := map[string]string{} for _, e := range tr.baseLabels { From 80fa207ced1dfbe9db1fa60ea25f4ac4be8939c4 Mon Sep 17 00:00:00 2001 From: Chris Baker Date: Tue, 18 Jun 2019 14:16:49 +0000 Subject: [PATCH 4/4] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1df1453a187..cb0f67ad7bac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ IMPROVEMENTS: * api: use region from job hcl when not provided as query parameter in job registration and plan endpoints [[GH-5664](https://github.com/hashicorp/nomad/pull/5664)] +* metrics: add namespace label as appropriate to metrics [[GH-5847](https://github.com/hashicorp/nomad/issues/5847)] BUG FIXES: