From 16f8ed75f4360dd5453eaa6437d6e4cb7f67fa76 Mon Sep 17 00:00:00 2001 From: buffer <1045931706@qq.com> Date: Wed, 13 Jul 2022 20:05:05 +0800 Subject: [PATCH] simulator: use tiup playground to deploy `pd-simulator` (#5289) close tikv/pd#5288 simulator: use tiup playground to deploy pd-simulator. Signed-off-by: bufferflies <1045931706@qq.com> Co-authored-by: ShuNing --- tools/pd-simulator/main.go | 45 ++++++++++++++++--------- tools/pd-simulator/simulator/config.go | 1 + tools/pd-simulator/simulator/metrics.go | 18 ++++++++++ 3 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 tools/pd-simulator/simulator/metrics.go diff --git a/tools/pd-simulator/main.go b/tools/pd-simulator/main.go index 12729f7f772..496551b90b0 100644 --- a/tools/pd-simulator/main.go +++ b/tools/pd-simulator/main.go @@ -16,8 +16,8 @@ package main import ( "context" - "flag" "fmt" + "net/http" "os" "os/signal" "syscall" @@ -25,6 +25,8 @@ import ( "github.com/BurntSushi/toml" "github.com/pingcap/log" + "github.com/prometheus/client_golang/prometheus/promhttp" + flag "github.com/spf13/pflag" "github.com/tikv/pd/server" "github.com/tikv/pd/server/api" "github.com/tikv/pd/server/config" @@ -49,9 +51,12 @@ var ( regionNum = flag.Int("regionNum", 0, "regionNum of one store") storeNum = flag.Int("storeNum", 0, "storeNum") enableTransferRegionCounter = flag.Bool("enableTransferRegionCounter", false, "enableTransferRegionCounter") + statusAddress = flag.String("status-addr", "0.0.0.0:20180", "status address") ) func main() { + // ignore some undefined flag + flag.CommandLine.ParseErrorsWhitelist.UnknownFlags = true flag.Parse() simutil.InitLogger(*simLogLevel, *simLogFile) @@ -61,19 +66,6 @@ func main() { analysis.GetTransferCounter().Init(simutil.CaseConfigure.StoreNum, simutil.CaseConfigure.RegionNum) } - if *caseName == "" { - if *pdAddr != "" { - simutil.Logger.Fatal("need to specify one config name") - } - for simCase := range cases.CaseMap { - run(simCase) - } - } else { - run(*caseName) - } -} - -func run(simCase string) { simConfig := simulator.NewSimConfig(*serverLogLevel) var meta toml.MetaData var err error @@ -85,12 +77,29 @@ func run(simCase string) { if err = simConfig.Adjust(&meta); err != nil { simutil.Logger.Fatal("failed to adjust simulator configuration", zap.Error(err)) } + if len(*caseName) == 0 { + *caseName = simConfig.CaseName + } + + if *caseName == "" { + if *pdAddr != "" { + simutil.Logger.Fatal("need to specify one config name") + } + for simCase := range cases.CaseMap { + run(simCase, simConfig) + } + } else { + run(*caseName, simConfig) + } +} +func run(simCase string, simConfig *simulator.SimConfig) { if *pdAddr != "" { + go runMetrics() simStart(*pdAddr, simCase, simConfig) } else { local, clean := NewSingleServer(context.Background(), simConfig) - err = local.Run() + err := local.Run() if err != nil { simutil.Logger.Fatal("run server error", zap.Error(err)) } @@ -104,6 +113,11 @@ func run(simCase string) { } } +func runMetrics() { + http.Handle("/metrics", promhttp.Handler()) + http.ListenAndServe(*statusAddress, nil) +} + // NewSingleServer creates a pd server for simulator. func NewSingleServer(ctx context.Context, simConfig *simulator.SimConfig) (*server.Server, server.CleanupFunc) { err := simConfig.ServerConfig.SetupLogger() @@ -146,7 +160,6 @@ func simStart(pdAddr string, simCase string, simConfig *simulator.SimConfig, cle if err != nil { simutil.Logger.Fatal("simulator prepare error", zap.Error(err)) } - tickInterval := simConfig.SimTickInterval.Duration tick := time.NewTicker(tickInterval) diff --git a/tools/pd-simulator/simulator/config.go b/tools/pd-simulator/simulator/config.go index ad027a81c24..1b82a288895 100644 --- a/tools/pd-simulator/simulator/config.go +++ b/tools/pd-simulator/simulator/config.go @@ -44,6 +44,7 @@ const ( // SimConfig is the simulator configuration. type SimConfig struct { // tick + CaseName string `toml:"case-name"` SimTickInterval typeutil.Duration `toml:"sim-tick-interval"` // store StoreCapacityGB uint64 `toml:"store-capacity"` diff --git a/tools/pd-simulator/simulator/metrics.go b/tools/pd-simulator/simulator/metrics.go new file mode 100644 index 00000000000..5f06b2cbb65 --- /dev/null +++ b/tools/pd-simulator/simulator/metrics.go @@ -0,0 +1,18 @@ +package simulator + +import "github.com/prometheus/client_golang/prometheus" + +var ( + snapDuration = prometheus.NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: "tikv", + Subsystem: "raftstore", + Name: "snapshot_duration_seconds", + Help: "Bucketed histogram of processing time (s) of handled snap requests.", + Buckets: prometheus.ExponentialBuckets(0.0005, 2, 20), + }, []string{"store", "type"}) +) + +func init() { + prometheus.MustRegister(snapDuration) +}