runtime: add new command to collect metrics from Kata containers

Add a new command to collect metrics and return metrics to Prometheus.

Signed-off-by: bin liu <bin@hyper.sh>
This commit is contained in:
bin liu
2020-06-10 17:40:47 +08:00
parent 186fed2a11
commit 1b75daa00f
280 changed files with 68037 additions and 96 deletions

View File

@@ -10,11 +10,10 @@ import (
"os"
"github.com/containerd/containerd/runtime/v2/shim"
"github.com/kata-containers/kata-containers/src/runtime/containerd-shim-v2"
containerdshim "github.com/kata-containers/kata-containers/src/runtime/containerd-shim-v2"
"github.com/kata-containers/kata-containers/src/runtime/pkg/types"
)
const shim_id = "io.containerd.kata.v2"
func shimConfig(config *shim.Config) {
config.NoReaper = true
config.NoSubreaper = true
@@ -23,9 +22,9 @@ func shimConfig(config *shim.Config) {
func main() {
if len(os.Args) == 2 && os.Args[1] == "--version" {
fmt.Printf("%s containerd shim: id: %q, version: %s, commit: %v\n", project, shim_id, version, commit)
fmt.Printf("%s containerd shim: id: %q, version: %s, commit: %v\n", project, types.KataRuntimeName, version, commit)
os.Exit(0)
}
shim.Run(shim_id, containerdshim.New, shimConfig)
shim.Run(types.KataRuntimeName, containerdshim.New, shimConfig)
}

View File

@@ -0,0 +1,59 @@
// Copyright (c) 2020 Ant Financial
//
// SPDX-License-Identifier: Apache-2.0
//
package main
import (
"flag"
"net/http"
"os"
"time"
kataMonitor "github.com/kata-containers/kata-containers/src/runtime/pkg/kata-monitor"
"github.com/sirupsen/logrus"
)
var metricListenAddr = flag.String("listen-address", ":8090", "The address to listen on for HTTP requests.")
var containerdAddr = flag.String("containerd-address", "/run/containerd/containerd.sock", "Containerd address to accept client requests.")
var containerdConfig = flag.String("containerd-conf", "/etc/containerd/config.toml", "Containerd config file.")
var logLevel = flag.String("log-level", "info", "Log level of logrus(trace/debug/info/warn/error/fatal/panic).")
func main() {
flag.Parse()
// init logrus
initLog()
// create new MAgent
ma, err := kataMonitor.NewKataMonitor(*containerdAddr, *containerdConfig)
if err != nil {
panic(err)
}
// setup handlers, now only metrics is supported
http.HandleFunc("/metrics", ma.ProcessMetricsRequest)
// listening on the server
logrus.Fatal(http.ListenAndServe(*metricListenAddr, nil))
}
// initLog setup logger
func initLog() {
kataMonitorLog := logrus.WithFields(logrus.Fields{
"name": "kata-monitor",
"pid": os.Getpid(),
})
// set log level, default to warn
level, err := logrus.ParseLevel(*logLevel)
if err != nil {
level = logrus.WarnLevel
}
kataMonitorLog.Logger.SetLevel(level)
kataMonitorLog.Logger.Formatter = &logrus.TextFormatter{TimestampFormat: time.RFC3339Nano}
kataMonitor.SetLogger(kataMonitorLog)
}