diff --git a/pkg/mentix/config/ids.go b/pkg/mentix/config/ids.go index f8aed9c0dd..e3e837feb9 100644 --- a/pkg/mentix/config/ids.go +++ b/pkg/mentix/config/ids.go @@ -26,3 +26,7 @@ const ( ExporterIDWebAPI = "webapi" ExporterIDPrometheusFileSD = "prom_filesd" ) + +const ( + PropertyMetricsPath = "metrics_path" +) diff --git a/pkg/mentix/exporters/promfilesd.go b/pkg/mentix/exporters/promfilesd.go index 0479c333ff..39c2772fc3 100755 --- a/pkg/mentix/exporters/promfilesd.go +++ b/pkg/mentix/exporters/promfilesd.go @@ -110,12 +110,19 @@ func (exporter *PrometheusFileSDExporter) createScrapeConfigs() []*prometheus.Sc } func (exporter *PrometheusFileSDExporter) createScrapeConfig(site *meshdata.Site, host string, endpoint *meshdata.ServiceEndpoint) *prometheus.ScrapeConfig { + labels := map[string]string{ + "site": site.Name, + "service_type": endpoint.Type.Name, + } + + // If a metrics path was specified as a property, use that one by setting the corresponding label + if metricsPath := endpoint.GetPropertyValue(config.PropertyMetricsPath, ""); len(metricsPath) > 0 { + labels["__metrics_path__"] = metricsPath + } + return &prometheus.ScrapeConfig{ Targets: []string{host}, - Labels: map[string]string{ - "site": site.Name, - "service_type": endpoint.Type.Name, - }, + Labels: labels, } } diff --git a/pkg/mentix/meshdata/service.go b/pkg/mentix/meshdata/service.go index 4ff18ec63e..240c8b25bb 100644 --- a/pkg/mentix/meshdata/service.go +++ b/pkg/mentix/meshdata/service.go @@ -18,6 +18,8 @@ package meshdata +import "strings" + // Service represents a service managed by Mentix. type Service struct { ServiceEndpoint @@ -40,3 +42,14 @@ type ServiceEndpoint struct { IsMonitored bool Properties map[string]string } + +// GetPropertyValue performs a case-insensitive search for the given property. +func (endpoint *ServiceEndpoint) GetPropertyValue(id string, defValue string) string { + for key := range endpoint.Properties { + if strings.EqualFold(key, id) { + return endpoint.Properties[key] + } + } + + return defValue +}