mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 01:38:10 +00:00
Merge pull request #136 from nilebox/start-flag
Add a separate flag for 'start' parameter
This commit is contained in:
commit
99104cba2a
3 changed files with 16 additions and 4 deletions
|
|
@ -58,6 +58,8 @@ type PrometheusAdapter struct {
|
||||||
AdapterConfigFile string
|
AdapterConfigFile string
|
||||||
// MetricsRelistInterval is the interval at which to relist the set of available metrics
|
// MetricsRelistInterval is the interval at which to relist the set of available metrics
|
||||||
MetricsRelistInterval time.Duration
|
MetricsRelistInterval time.Duration
|
||||||
|
// MetricsMaxAge is the period to query available metrics for
|
||||||
|
MetricsMaxAge time.Duration
|
||||||
|
|
||||||
metricsConfig *adaptercfg.MetricsDiscoveryConfig
|
metricsConfig *adaptercfg.MetricsDiscoveryConfig
|
||||||
}
|
}
|
||||||
|
|
@ -105,6 +107,8 @@ func (cmd *PrometheusAdapter) addFlags() {
|
||||||
"and custom metrics API resources")
|
"and custom metrics API resources")
|
||||||
cmd.Flags().DurationVar(&cmd.MetricsRelistInterval, "metrics-relist-interval", cmd.MetricsRelistInterval, ""+
|
cmd.Flags().DurationVar(&cmd.MetricsRelistInterval, "metrics-relist-interval", cmd.MetricsRelistInterval, ""+
|
||||||
"interval at which to re-list the set of all available metrics from Prometheus")
|
"interval at which to re-list the set of all available metrics from Prometheus")
|
||||||
|
cmd.Flags().DurationVar(&cmd.MetricsMaxAge, "metrics-max-age", cmd.MetricsMaxAge, ""+
|
||||||
|
"period for which to query the set of available metrics from Prometheus")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cmd *PrometheusAdapter) loadConfig() error {
|
func (cmd *PrometheusAdapter) loadConfig() error {
|
||||||
|
|
@ -127,6 +131,10 @@ func (cmd *PrometheusAdapter) makeProvider(promClient prom.Client, stopCh <-chan
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cmd.MetricsMaxAge < cmd.MetricsRelistInterval {
|
||||||
|
return nil, fmt.Errorf("max age must not be less than relist interval")
|
||||||
|
}
|
||||||
|
|
||||||
// grab the mapper and dynamic client
|
// grab the mapper and dynamic client
|
||||||
mapper, err := cmd.RESTMapper()
|
mapper, err := cmd.RESTMapper()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -144,7 +152,7 @@ func (cmd *PrometheusAdapter) makeProvider(promClient prom.Client, stopCh <-chan
|
||||||
}
|
}
|
||||||
|
|
||||||
// construct the provider and start it
|
// construct the provider and start it
|
||||||
cmProvider, runner := cmprov.NewPrometheusProvider(mapper, dynClient, promClient, namers, cmd.MetricsRelistInterval)
|
cmProvider, runner := cmprov.NewPrometheusProvider(mapper, dynClient, promClient, namers, cmd.MetricsRelistInterval, cmd.MetricsMaxAge)
|
||||||
runner.RunUntil(stopCh)
|
runner.RunUntil(stopCh)
|
||||||
|
|
||||||
return cmProvider, nil
|
return cmProvider, nil
|
||||||
|
|
@ -195,6 +203,7 @@ func main() {
|
||||||
cmd := &PrometheusAdapter{
|
cmd := &PrometheusAdapter{
|
||||||
PrometheusURL: "https://localhost",
|
PrometheusURL: "https://localhost",
|
||||||
MetricsRelistInterval: 10 * time.Minute,
|
MetricsRelistInterval: 10 * time.Minute,
|
||||||
|
MetricsMaxAge: 20 * time.Minute,
|
||||||
}
|
}
|
||||||
cmd.Name = "prometheus-metrics-adapter"
|
cmd.Name = "prometheus-metrics-adapter"
|
||||||
cmd.addFlags()
|
cmd.addFlags()
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,10 @@ type prometheusProvider struct {
|
||||||
SeriesRegistry
|
SeriesRegistry
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPrometheusProvider(mapper apimeta.RESTMapper, kubeClient dynamic.Interface, promClient prom.Client, namers []MetricNamer, updateInterval time.Duration) (provider.CustomMetricsProvider, Runnable) {
|
func NewPrometheusProvider(mapper apimeta.RESTMapper, kubeClient dynamic.Interface, promClient prom.Client, namers []MetricNamer, updateInterval time.Duration, maxAge time.Duration) (provider.CustomMetricsProvider, Runnable) {
|
||||||
lister := &cachingMetricsLister{
|
lister := &cachingMetricsLister{
|
||||||
updateInterval: updateInterval,
|
updateInterval: updateInterval,
|
||||||
|
maxAge: maxAge,
|
||||||
promClient: promClient,
|
promClient: promClient,
|
||||||
namers: namers,
|
namers: namers,
|
||||||
|
|
||||||
|
|
@ -191,6 +192,7 @@ type cachingMetricsLister struct {
|
||||||
|
|
||||||
promClient prom.Client
|
promClient prom.Client
|
||||||
updateInterval time.Duration
|
updateInterval time.Duration
|
||||||
|
maxAge time.Duration
|
||||||
namers []MetricNamer
|
namers []MetricNamer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -212,7 +214,7 @@ type selectorSeries struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *cachingMetricsLister) updateMetrics() error {
|
func (l *cachingMetricsLister) updateMetrics() error {
|
||||||
startTime := pmodel.Now().Add(-1 * l.updateInterval)
|
startTime := pmodel.Now().Add(-1 * l.maxAge)
|
||||||
|
|
||||||
// don't do duplicate queries when it's just the matchers that change
|
// don't do duplicate queries when it's just the matchers that change
|
||||||
seriesCacheByQuery := make(map[prom.Selector][]prom.Series)
|
seriesCacheByQuery := make(map[prom.Selector][]prom.Series)
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const fakeProviderUpdateInterval = 2 * time.Second
|
const fakeProviderUpdateInterval = 2 * time.Second
|
||||||
|
const fakeProviderStartDuration = 2 * time.Second
|
||||||
|
|
||||||
func setupPrometheusProvider() (provider.CustomMetricsProvider, *fakeprom.FakePrometheusClient) {
|
func setupPrometheusProvider() (provider.CustomMetricsProvider, *fakeprom.FakePrometheusClient) {
|
||||||
fakeProm := &fakeprom.FakePrometheusClient{}
|
fakeProm := &fakeprom.FakePrometheusClient{}
|
||||||
|
|
@ -41,7 +42,7 @@ func setupPrometheusProvider() (provider.CustomMetricsProvider, *fakeprom.FakePr
|
||||||
namers, err := NamersFromConfig(cfg, restMapper())
|
namers, err := NamersFromConfig(cfg, restMapper())
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
prov, _ := NewPrometheusProvider(restMapper(), fakeKubeClient, fakeProm, namers, fakeProviderUpdateInterval)
|
prov, _ := NewPrometheusProvider(restMapper(), fakeKubeClient, fakeProm, namers, fakeProviderUpdateInterval, fakeProviderStartDuration)
|
||||||
|
|
||||||
containerSel := prom.MatchSeries("", prom.NameMatches("^container_.*"), prom.LabelNeq("container_name", "POD"), prom.LabelNeq("namespace", ""), prom.LabelNeq("pod_name", ""))
|
containerSel := prom.MatchSeries("", prom.NameMatches("^container_.*"), prom.LabelNeq("container_name", "POD"), prom.LabelNeq("namespace", ""), prom.LabelNeq("pod_name", ""))
|
||||||
namespacedSel := prom.MatchSeries("", prom.LabelNeq("namespace", ""), prom.NameNotMatches("^container_.*"))
|
namespacedSel := prom.MatchSeries("", prom.LabelNeq("namespace", ""), prom.NameNotMatches("^container_.*"))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue