From 57a18d11bdf94c5bc2d0e8b79518fffcfc3fde9b Mon Sep 17 00:00:00 2001 From: Manuel de Brito Fontes Date: Thu, 31 Aug 2017 14:19:32 -0300 Subject: [PATCH] Fix nginx stats --- controllers/nginx/pkg/cmd/controller/metrics.go | 13 +++++++------ controllers/nginx/pkg/cmd/controller/nginx.go | 6 +++++- controllers/nginx/pkg/metric/collector/status.go | 8 ++++---- controllers/nginx/pkg/metric/collector/vts.go | 12 ++++++------ .../nginx/rootfs/etc/nginx/template/nginx.tmpl | 15 --------------- 5 files changed, 22 insertions(+), 32 deletions(-) diff --git a/controllers/nginx/pkg/cmd/controller/metrics.go b/controllers/nginx/pkg/cmd/controller/metrics.go index 99614cc93..ee33c6c5e 100644 --- a/controllers/nginx/pkg/cmd/controller/metrics.go +++ b/controllers/nginx/pkg/cmd/controller/metrics.go @@ -24,7 +24,7 @@ import ( ) const ( - ngxStatusPath = "/internal_nginx_status" + ngxStatusPath = "/nginx_status" ngxVtsPath = "/nginx_status/format/json" ) @@ -46,7 +46,7 @@ type statsCollector struct { namespace string watchClass string - healthPort int + port int } func (s *statsCollector) stop(sm statusModule) { @@ -63,18 +63,19 @@ func (s *statsCollector) stop(sm statusModule) { func (s *statsCollector) start(sm statusModule) { switch sm { case defaultStatusModule: - s.basic = collector.NewNginxStatus(s.namespace, s.watchClass, s.healthPort, ngxStatusPath) + s.basic = collector.NewNginxStatus(s.namespace, s.watchClass, s.port, ngxStatusPath) prometheus.Register(s.basic) break case vtsStatusModule: - s.vts = collector.NewNGINXVTSCollector(s.namespace, s.watchClass, s.healthPort, ngxVtsPath) + s.vts = collector.NewNGINXVTSCollector(s.namespace, s.watchClass, s.port, ngxVtsPath) prometheus.Register(s.vts) break } } -func newStatsCollector(ns, class, binary string, hz int) *statsCollector { +func newStatsCollector(ns, class, binary string, port int) *statsCollector { glog.Infof("starting new nginx stats collector for Ingress controller running in namespace %v (class %v)", ns, class) + glog.Infof("collector extracting information from port %v", port) pc, err := collector.NewNamedProcess(true, collector.BinaryNameMatcher{ Name: "nginx", Binary: binary, @@ -91,6 +92,6 @@ func newStatsCollector(ns, class, binary string, hz int) *statsCollector { namespace: ns, watchClass: class, process: pc, - healthPort: hz, + port: port, } } diff --git a/controllers/nginx/pkg/cmd/controller/nginx.go b/controllers/nginx/pkg/cmd/controller/nginx.go index b6b23fa3d..9608869c1 100644 --- a/controllers/nginx/pkg/cmd/controller/nginx.go +++ b/controllers/nginx/pkg/cmd/controller/nginx.go @@ -372,7 +372,11 @@ func (n *NGINXController) OverrideFlags(flags *pflag.FlagSet) { } flags.Set("ingress-class", ic) - n.stats = newStatsCollector(wc, ic, n.binary, n.ports.Health) + + h, _ := flags.GetInt("healthz-port") + n.ports.Health = h + + n.stats = newStatsCollector(wc, ic, n.binary, n.ports.Status) if n.isSSLPassthroughEnabled { if !isPortAvailable(n.ports.SSLProxy) { diff --git a/controllers/nginx/pkg/metric/collector/status.go b/controllers/nginx/pkg/metric/collector/status.go index 361838a31..f5e24221a 100644 --- a/controllers/nginx/pkg/metric/collector/status.go +++ b/controllers/nginx/pkg/metric/collector/status.go @@ -143,8 +143,8 @@ func (bit BoolToFloat64) UnmarshalJSON(data []byte) error { return nil } -func getNginxStatus(ngxHealthPort int, ngxStatusPath string) (*basicStatus, error) { - url := fmt.Sprintf("http://localhost:%v%v", ngxHealthPort, ngxStatusPath) +func getNginxStatus(port int, path string) (*basicStatus, error) { + url := fmt.Sprintf("http://localhost:%v%v", port, path) glog.V(3).Infof("start scrapping url: %v", url) data, err := httpBody(url) @@ -174,8 +174,8 @@ func httpBody(url string) ([]byte, error) { return data, nil } -func getNginxVtsMetrics(ngxHealthPort int, ngxVtsPath string) (*vts, error) { - url := fmt.Sprintf("http://localhost:%v%v", ngxHealthPort, ngxVtsPath) +func getNginxVtsMetrics(port int, path string) (*vts, error) { + url := fmt.Sprintf("http://localhost:%v%v", port, path) glog.V(3).Infof("start scrapping url: %v", url) data, err := httpBody(url) diff --git a/controllers/nginx/pkg/metric/collector/vts.go b/controllers/nginx/pkg/metric/collector/vts.go index c06e74218..f57cc4dd1 100644 --- a/controllers/nginx/pkg/metric/collector/vts.go +++ b/controllers/nginx/pkg/metric/collector/vts.go @@ -28,8 +28,8 @@ const ns = "nginx" type ( vtsCollector struct { scrapeChan chan scrapeRequest - ngxHealthPort int - ngxVtsPath string + port int + path string data *vtsData watchNamespace string ingressClass string @@ -57,12 +57,12 @@ type ( ) // NewNGINXVTSCollector returns a new prometheus collector for the VTS module -func NewNGINXVTSCollector(watchNamespace, ingressClass string, ngxHealthPort int, ngxVtsPath string) Stopable { +func NewNGINXVTSCollector(watchNamespace, ingressClass string, port int, path string) Stopable { p := vtsCollector{ scrapeChan: make(chan scrapeRequest), - ngxHealthPort: ngxHealthPort, - ngxVtsPath: ngxVtsPath, + port: port, + path: path, watchNamespace: watchNamespace, ingressClass: ingressClass, } @@ -201,7 +201,7 @@ func (p vtsCollector) Stop() { // scrapeVts scrape nginx vts metrics func (p vtsCollector) scrapeVts(ch chan<- prometheus.Metric) { - nginxMetrics, err := getNginxVtsMetrics(p.ngxHealthPort, p.ngxVtsPath) + nginxMetrics, err := getNginxVtsMetrics(p.port, p.path) if err != nil { glog.Warningf("unexpected error obtaining nginx status info: %v", err) return diff --git a/controllers/nginx/rootfs/etc/nginx/template/nginx.tmpl b/controllers/nginx/rootfs/etc/nginx/template/nginx.tmpl index eed11751f..d0b779814 100644 --- a/controllers/nginx/rootfs/etc/nginx/template/nginx.tmpl +++ b/controllers/nginx/rootfs/etc/nginx/template/nginx.tmpl @@ -407,21 +407,6 @@ http { {{ end }} } - # this location is used to extract nginx metrics - # using prometheus. - # TODO: enable extraction for vts module. - location /internal_nginx_status { - set $proxy_upstream_name "internal"; - - allow 127.0.0.1; - {{ if not $cfg.DisableIpv6 }}allow ::1;{{ end }} - deny all; - - access_log off; - stub_status on; - } - - fastcgi_param HTTP_X_Code 404; fastcgi_param HTTP_X_Format $http_accept; fastcgi_param HTTP_X_Original_URI $request_uri;