fix(inputs.promethes): respect selectors when scraping pods (#12278)

This commit is contained in:
Maxim Ivanov 2022-11-28 15:05:31 +00:00 committed by GitHub
parent 0e7a3c69ea
commit 55c8cfafb0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 5 deletions

View File

@ -134,7 +134,14 @@ func (p *Prometheus) Init() error {
p.NodeIP = envVarNodeIP p.NodeIP = envVarNodeIP
} }
p.Log.Infof("Using pod scrape scope at node level to get pod list using cAdvisor.")
}
if p.MonitorKubernetesPodsMethod == MonitorMethodNone {
p.MonitorKubernetesPodsMethod = MonitorMethodAnnotations
}
if p.isNodeScrapeScope || p.MonitorKubernetesPodsMethod != MonitorMethodAnnotations {
// Parse label and field selectors - will be used to filter pods after cAdvisor call // Parse label and field selectors - will be used to filter pods after cAdvisor call
var err error var err error
p.podLabelSelector, err = labels.Parse(p.KubernetesLabelSelector) p.podLabelSelector, err = labels.Parse(p.KubernetesLabelSelector)
@ -150,14 +157,9 @@ func (p *Prometheus) Init() error {
return fmt.Errorf("the field selector %s is not supported for pods", invalidSelector) return fmt.Errorf("the field selector %s is not supported for pods", invalidSelector)
} }
p.Log.Infof("Using pod scrape scope at node level to get pod list using cAdvisor.")
p.Log.Infof("Using the label selector: %v and field selector: %v", p.podLabelSelector, p.podFieldSelector) p.Log.Infof("Using the label selector: %v and field selector: %v", p.podLabelSelector, p.podFieldSelector)
} }
if p.MonitorKubernetesPodsMethod == MonitorMethodNone {
p.MonitorKubernetesPodsMethod = MonitorMethodAnnotations
}
ctx := context.Background() ctx := context.Background()
client, err := p.HTTPClientConfig.CreateClient(ctx, p.Log) client, err := p.HTTPClientConfig.CreateClient(ctx, p.Log)
if err != nil { if err != nil {

View File

@ -326,3 +326,22 @@ func TestInitConfigErrors(t *testing.T) {
expectedMessage = "the field selector spec.containerNames is not supported for pods" expectedMessage = "the field selector spec.containerNames is not supported for pods"
require.Error(t, err, expectedMessage) require.Error(t, err, expectedMessage)
} }
func TestInitConfigSelectors(t *testing.T) {
p := &Prometheus{
MetricVersion: 2,
Log: testutil.Logger{},
URLs: nil,
URLTag: "url",
MonitorPods: true,
MonitorKubernetesPodsMethod: MonitorMethodSettings,
PodScrapeInterval: 60,
KubernetesLabelSelector: "app=test",
KubernetesFieldSelector: "spec.nodeName=node-0",
}
err := p.Init()
require.NoError(t, err)
require.NotNil(t, p.podLabelSelector)
require.NotNil(t, p.podFieldSelector)
}