Skip to content

Commit

Permalink
chore: Ensure presence of service_name label (grafana/phlare#745)
Browse files Browse the repository at this point in the history
* chore: Ensure presence of service_name label in grafana agent https://github.com/grafana/phlare/issues/711

fix tests

* lint

* infer service_name

* fix

* Fixes the config example

---------

Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
  • Loading branch information
korniltsev and cyriltovena authored Jun 20, 2023
1 parent f82d2a4 commit 35289b0
Show file tree
Hide file tree
Showing 10 changed files with 330 additions and 96 deletions.
2 changes: 2 additions & 0 deletions cmd/phlare/phlare.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ scrape_configs:
scrape_interval: "15s"
static_configs:
- targets: ["127.0.0.1:4100"]
labels:
service_name: "pyroscope"
3 changes: 3 additions & 0 deletions docs/sources/get-started/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,10 @@ Verify that you have installed [Docker](https://docs.docker.com/engine/install/)
scrape_interval: "15s"
static_configs:
- targets: ["127.0.0.1:4100"]
labels:
service_name: "service-demo"
```

- To use a demo file, download our [demo configuration](https://raw.githubusercontent.com/grafana/phlare/main/cmd/phlare/phlare.yaml):

```bash
Expand Down
44 changes: 37 additions & 7 deletions operations/phlare/relabeling_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,15 @@ func Test_Relabeling(t *testing.T) {
[]model.LabelSet{
{
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_scrape", ty): "true",
"__address__": "foo:1234",
"__address__": "foo:1234",
"service_name": "bar",
},
},
[]labels.Labels{
{
labels.Label{Name: "instance", Value: "foo:1234"},
labels.Label{Name: "job", Value: fmt.Sprintf("kubernetes-pods-%s-default-name", ty)},
labels.Label{Name: "service_name", Value: "bar"},
},
},
},
Expand All @@ -79,13 +81,15 @@ func Test_Relabeling(t *testing.T) {
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_scrape", ty): "true",
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port", ty): "4100",

"__address__": "foo:1234",
"__address__": "foo:1234",
"service_name": "bar",
},
},
[]labels.Labels{
{
labels.Label{Name: "instance", Value: "foo:4100"},
labels.Label{Name: "job", Value: fmt.Sprintf("kubernetes-pods-%s-default-name", ty)},
labels.Label{Name: "service_name", Value: "bar"},
},
},
},
Expand All @@ -96,13 +100,15 @@ func Test_Relabeling(t *testing.T) {
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_scrape", ty): "true",
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port", ty): "4100",

"__address__": "foo",
"__address__": "foo",
"service_name": "bar",
},
},
[]labels.Labels{
{
labels.Label{Name: "instance", Value: "foo:4100"},
labels.Label{Name: "job", Value: fmt.Sprintf("kubernetes-pods-%s-default-name", ty)},
labels.Label{Name: "service_name", Value: "bar"},
},
},
},
Expand All @@ -114,21 +120,24 @@ func Test_Relabeling(t *testing.T) {
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port_name", ty): "http2",

"__meta_kubernetes_pod_container_port_name": "http2",
"__address__": "foo:123",
"__address__": "foo:123",
"service_name": "bar",
},
{
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_scrape", ty): "true",
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port", ty): "4200",
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port_name", ty): "http2",

"__meta_kubernetes_pod_container_port_name": "http",
"__address__": "foo:123",
"__address__": "foo:123",
"service_name": "bar",
},
},
[]labels.Labels{
{
labels.Label{Name: "instance", Value: "foo:123"},
labels.Label{Name: "job", Value: fmt.Sprintf("kubernetes-pods-%s-custom-name", ty)},
labels.Label{Name: "service_name", Value: "bar"},
},
},
},
Expand All @@ -141,21 +150,42 @@ func Test_Relabeling(t *testing.T) {
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port_name", ty): "http2",

"__meta_kubernetes_pod_container_port_name": "http2",
"__address__": "foo:123",
"__address__": "foo:123",
"service_name": "bar",
},
{
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_scrape", ty): "true",
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port", ty): "4200",
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_port_name", ty): "http2",

"__meta_kubernetes_pod_container_port_name": "http",
"__address__": "foo:123",
"__address__": "foo:123",
"service_name": "bar",
},
},
[]labels.Labels{
{
labels.Label{Name: "instance", Value: "foo:4100"},
labels.Label{Name: "job", Value: fmt.Sprintf("kubernetes-pods-%s-custom-name", ty)},
labels.Label{Name: "service_name", Value: "bar"},
},
},
},
{
"service name from annotation",
[]model.LabelSet{
{
labeNameF("__meta_kubernetes_pod_annotation_profiles_grafana_com_%s_scrape", ty): "true",

"__meta_kubernetes_pod_annotation_pyroscope_io_service_name": "bar",
"__address__": "foo:123",
},
},
[]labels.Labels{
{
labels.Label{Name: "instance", Value: "foo:123"},
labels.Label{Name: "job", Value: fmt.Sprintf("kubernetes-pods-%s-default-name", ty)},
labels.Label{Name: "service_name", Value: "bar"},
},
},
},
Expand Down
24 changes: 24 additions & 0 deletions pkg/agent/profiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import (
"github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/model/relabel"

phlaremodel "github.com/grafana/phlare/pkg/model"

agentv1v1 "github.com/grafana/phlare/api/gen/proto/go/agent/v1"
"github.com/grafana/phlare/pkg/agent/scrape"
)
Expand Down Expand Up @@ -167,7 +169,12 @@ func populateLabels(lset labels.Labels, cfg ScrapeConfig) (res, orig labels.Labe
lb.Set(model.InstanceLabel, addr)
}

if serviceName := lset.Get(phlaremodel.LabelNameServiceName); serviceName == "" {
lb.Set(phlaremodel.LabelNameServiceName, inferServiceName(lset))
}

res = lb.Labels()

for _, l := range res {
// Check label values are valid, drop the target if not.
if !model.LabelValue(l.Value).IsValid() {
Expand Down Expand Up @@ -308,3 +315,20 @@ func (tg *TargetGroup) TargetsFromGroup(group *targetgroup.Group) ([]*Target, []

return targets, droppedTargets, nil
}

func inferServiceName(lset labels.Labels) string {
k8sServiceName := lset.Get(phlaremodel.LabelNameServiceNameK8s)
if k8sServiceName != "" {
return k8sServiceName
}
k8sNamespace := lset.Get("__meta_kubernetes_namespace")
k8sContainer := lset.Get("__meta_kubernetes_pod_container_name")
if k8sNamespace != "" && k8sContainer != "" {
return fmt.Sprintf("%s/%s", k8sNamespace, k8sContainer)
}
dockerContainer := lset.Get("__meta_docker_container_name")
if dockerContainer != "" {
return dockerContainer
}
return "unspecified"
}
Loading

0 comments on commit 35289b0

Please sign in to comment.