Merge remote-tracking branch 'base/master' into fix/collect-metrics-if-metrics-per-host-false
This commit is contained in:
commit
19770f5b41
2674 changed files with 371760 additions and 171868 deletions
|
|
@ -228,7 +228,7 @@ func (cm Controller) Collect(ch chan<- prometheus.Metric) {
|
|||
// SetSSLExpireTime sets the expiration time of SSL Certificates
|
||||
func (cm *Controller) SetSSLExpireTime(servers []*ingress.Server) {
|
||||
for _, s := range servers {
|
||||
if s.Hostname != "" && s.SSLCert.ExpireTime.Unix() > 0 {
|
||||
if s.Hostname != "" && s.SSLCert != nil && s.SSLCert.ExpireTime.Unix() > 0 {
|
||||
labels := make(prometheus.Labels, len(cm.labels)+1)
|
||||
for k, v := range cm.labels {
|
||||
labels[k] = v
|
||||
|
|
|
|||
|
|
@ -80,13 +80,13 @@ func TestControllerCounters(t *testing.T) {
|
|||
servers := []*ingress.Server{
|
||||
{
|
||||
Hostname: "demo",
|
||||
SSLCert: ingress.SSLCert{
|
||||
SSLCert: &ingress.SSLCert{
|
||||
ExpireTime: t1,
|
||||
},
|
||||
},
|
||||
{
|
||||
Hostname: "invalid",
|
||||
SSLCert: ingress.SSLCert{
|
||||
SSLCert: &ingress.SSLCert{
|
||||
ExpireTime: time.Unix(0, 0),
|
||||
},
|
||||
},
|
||||
|
|
@ -135,13 +135,13 @@ func TestRemoveMetrics(t *testing.T) {
|
|||
servers := []*ingress.Server{
|
||||
{
|
||||
Hostname: "demo",
|
||||
SSLCert: ingress.SSLCert{
|
||||
SSLCert: &ingress.SSLCert{
|
||||
ExpireTime: t1,
|
||||
},
|
||||
},
|
||||
{
|
||||
Hostname: "invalid",
|
||||
SSLCert: ingress.SSLCert{
|
||||
SSLCert: &ingress.SSLCert{
|
||||
ExpireTime: time.Unix(0, 0),
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import (
|
|||
"net"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
|
@ -97,7 +96,7 @@ func TestStatusCollector(t *testing.T) {
|
|||
|
||||
for _, c := range cases {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
listener, err := net.Listen("unix", nginx.StatusSocket)
|
||||
listener, err := net.Listen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
if err != nil {
|
||||
t.Fatalf("crating unix listener: %s", err)
|
||||
}
|
||||
|
|
@ -145,7 +144,6 @@ func TestStatusCollector(t *testing.T) {
|
|||
cm.Stop()
|
||||
|
||||
listener.Close()
|
||||
os.Remove(nginx.StatusSocket)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,13 @@ type Stopable interface {
|
|||
Stop()
|
||||
}
|
||||
|
||||
func newBinaryNameMatcher(name, binary string) common.MatchNamer {
|
||||
return BinaryNameMatcher{
|
||||
Name: name,
|
||||
Binary: binary,
|
||||
}
|
||||
}
|
||||
|
||||
// BinaryNameMatcher define a namer using the binary name
|
||||
type BinaryNameMatcher struct {
|
||||
Name string
|
||||
|
|
@ -97,14 +104,11 @@ func NewNGINXProcess(pod, namespace, ingressClass string) (NGINXProcessCollector
|
|||
return nil, err
|
||||
}
|
||||
|
||||
nm := BinaryNameMatcher{
|
||||
Name: name,
|
||||
Binary: binary,
|
||||
}
|
||||
nm := newBinaryNameMatcher(name, binary)
|
||||
|
||||
p := namedProcess{
|
||||
scrapeChan: make(chan scrapeRequest),
|
||||
Grouper: proc.NewGrouper(nm, true, false, false),
|
||||
Grouper: proc.NewGrouper(nm, true, false, false, false),
|
||||
fs: fs,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import (
|
|||
"io/ioutil"
|
||||
"net"
|
||||
"os"
|
||||
"syscall"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
|
|
@ -93,10 +94,17 @@ var (
|
|||
}
|
||||
)
|
||||
|
||||
// DefObjectives was removed in https://github.com/prometheus/client_golang/pull/262
|
||||
// updating the library to latest version changed the output of the metrics
|
||||
var defObjectives = map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}
|
||||
|
||||
// NewSocketCollector creates a new SocketCollector instance using
|
||||
// the ingress watch namespace and class used by the controller
|
||||
func NewSocketCollector(pod, namespace, class string, metricsPerHost bool) (*SocketCollector, error) {
|
||||
socket := "/tmp/prometheus-nginx.socket"
|
||||
// unix sockets must be unlink()ed before being used
|
||||
_ = syscall.Unlink(socket)
|
||||
|
||||
listener, err := net.Listen("unix", socket)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -169,7 +177,7 @@ func NewSocketCollector(pod, namespace, class string, metricsPerHost bool) (*Soc
|
|||
Namespace: PrometheusNamespace,
|
||||
ConstLabels: constLabels,
|
||||
},
|
||||
[]string{"ingress", "namespace", "status"},
|
||||
[]string{"ingress", "namespace", "status", "service"},
|
||||
),
|
||||
|
||||
bytesSent: prometheus.NewHistogramVec(
|
||||
|
|
@ -189,6 +197,7 @@ func NewSocketCollector(pod, namespace, class string, metricsPerHost bool) (*Soc
|
|||
Help: "Upstream service latency per Ingress",
|
||||
Namespace: PrometheusNamespace,
|
||||
ConstLabels: constLabels,
|
||||
Objectives: defObjectives,
|
||||
},
|
||||
[]string{"ingress", "namespace", "service"},
|
||||
),
|
||||
|
|
@ -243,6 +252,7 @@ func (sc *SocketCollector) handleMessage(msg []byte) {
|
|||
"namespace": stats.Namespace,
|
||||
"ingress": stats.Ingress,
|
||||
"status": stats.Status,
|
||||
"service": stats.Service,
|
||||
}
|
||||
|
||||
latencyLabels := prometheus.Labels{
|
||||
|
|
|
|||
|
|
@ -18,9 +18,12 @@ package metric
|
|||
|
||||
import (
|
||||
"os"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"k8s.io/klog"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/ingress-nginx/internal/ingress"
|
||||
"k8s.io/ingress-nginx/internal/ingress/annotations/class"
|
||||
|
|
@ -153,6 +156,11 @@ func (c *collector) Stop() {
|
|||
}
|
||||
|
||||
func (c *collector) SetSSLExpireTime(servers []*ingress.Server) {
|
||||
if !isLeader() {
|
||||
return
|
||||
}
|
||||
|
||||
klog.V(2).Infof("Updating ssl expiration metrics.")
|
||||
c.ingressController.SetSSLExpireTime(servers)
|
||||
}
|
||||
|
||||
|
|
@ -162,11 +170,30 @@ func (c *collector) SetHosts(hosts sets.String) {
|
|||
|
||||
// OnStartedLeading indicates the pod was elected as the leader
|
||||
func (c *collector) OnStartedLeading(electionID string) {
|
||||
setLeader(true)
|
||||
c.ingressController.OnStartedLeading(electionID)
|
||||
}
|
||||
|
||||
// OnStoppedLeading indicates the pod stopped being the leader
|
||||
func (c *collector) OnStoppedLeading(electionID string) {
|
||||
setLeader(false)
|
||||
c.ingressController.OnStoppedLeading(electionID)
|
||||
c.ingressController.RemoveAllSSLExpireMetrics(c.registry)
|
||||
}
|
||||
|
||||
var (
|
||||
currentLeader uint32
|
||||
)
|
||||
|
||||
func setLeader(leader bool) {
|
||||
var i uint32
|
||||
if leader {
|
||||
i = 1
|
||||
}
|
||||
|
||||
atomic.StoreUint32(¤tLeader, i)
|
||||
}
|
||||
|
||||
func isLeader() bool {
|
||||
return atomic.LoadUint32(¤tLeader) != 0
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue