Skip to content

Commit

Permalink
metrics: expose cni operation metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
oilbeater committed Feb 11, 2020
1 parent ac6fb11 commit b8498a8
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 1 deletion.
4 changes: 3 additions & 1 deletion cmd/daemon/cniserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

kubeovninformer "github.com/alauda/kube-ovn/pkg/client/informers/externalversions"
"github.com/alauda/kube-ovn/pkg/daemon"
"github.com/prometheus/client_golang/prometheus/promhttp"
kubeinformers "k8s.io/client-go/informers"
"k8s.io/klog"
"k8s.io/sample-controller/pkg/signals"
Expand Down Expand Up @@ -46,7 +47,8 @@ func main() {
kubeovnInformerFactory.Start(stopCh)
go ctl.Run(stopCh)
go func() {
klog.Fatal(http.ListenAndServe(fmt.Sprintf("localhost:%d", config.PprofPort), nil))
http.Handle("/metrics", promhttp.Handler())
klog.Fatal(http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", config.PprofPort), nil))
}()
daemon.RunServer(config)
}
16 changes: 16 additions & 0 deletions dist/monitoring/cni-monitor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: kube-ovn-cni
namespace: monitoring
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
interval: 15s
port: metrics
namespaceSelector:
matchNames:
- kube-system
selector:
matchLabels:
app: kube-ovn-cni
21 changes: 21 additions & 0 deletions pkg/daemon/metrics.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package daemon

import "github.com/prometheus/client_golang/prometheus"

var (
nodeName = ""
cniOperationHistogram = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "cni_op_latency_second",
Help: "the latency second for cni operations",
Buckets: []float64{.1, .25, .5, 1, 2, 4, 8, 16, 32, 64, 128, 256},
}, []string{
"node_name",
"method",
"status_code",
})
)

func init() {
prometheus.MustRegister(cniOperationHistogram)
}
5 changes: 5 additions & 0 deletions pkg/daemon/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ var responseLogString = "[%s] Outgoing response %s %s with %d status code in %vm

// RunServer runs the cniserver
func RunServer(config *Configuration) {
nodeName = config.NodeName
csh := createCniServerHandler(config)
server := http.Server{
Handler: createHandler(csh),
Expand Down Expand Up @@ -62,6 +63,10 @@ func requestAndResponseLogger(request *restful.Request, response *restful.Respon
start := time.Now()
chain.ProcessFilter(request, response)
elapsed := float64((time.Since(start)) / time.Millisecond)
cniOperationHistogram.WithLabelValues(
nodeName,
getRequestURI(request),
fmt.Sprintf("%d", response.StatusCode())).Observe(elapsed / 1000)
klog.Infof(formatResponseLog(response, request, elapsed))
}

Expand Down
14 changes: 14 additions & 0 deletions yamls/kube-ovn.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -302,3 +302,17 @@ spec:
ports:
- port: 10660
name: metrics
---
kind: Service
apiVersion: v1
metadata:
name: kube-ovn-cni
namespace: kube-system
labels:
app: kube-ovn-cni
spec:
selector:
app: kube-ovn-cni
ports:
- port: 10665
name: metrics

0 comments on commit b8498a8

Please sign in to comment.