@@ -12,6 +12,7 @@ import (
1212
1313 "github.com/gogo/protobuf/proto"
1414 "github.com/golang/snappy"
15+ "github.com/pkg/errors"
1516 "github.com/prometheus/client_golang/api"
1617 v1 "github.com/prometheus/client_golang/api/prometheus/v1"
1718 "github.com/prometheus/client_golang/prometheus"
@@ -61,7 +62,7 @@ func (c *LoadgenCommand) Register(app *kingpin.Application) {
6162 loadgenCommand := & LoadgenCommand {}
6263 cmd := app .Command ("loadgen" , "Simple load generator for Cortex." ).Action (loadgenCommand .run )
6364 cmd .Flag ("write-url" , "" ).
64- Required ( ).StringVar (& loadgenCommand .writeURL )
65+ Default ( "" ).StringVar (& loadgenCommand .writeURL )
6566 cmd .Flag ("active-series" , "number of active series to send" ).
6667 Default ("1000" ).IntVar (& loadgenCommand .activeSeries )
6768 cmd .Flag ("scrape-interval" , "period to send metrics" ).
@@ -74,7 +75,7 @@ func (c *LoadgenCommand) Register(app *kingpin.Application) {
7475 Default ("500ms" ).DurationVar (& loadgenCommand .writeTimeout )
7576
7677 cmd .Flag ("query-url" , "" ).
77- Required ( ).StringVar (& loadgenCommand .queryURL )
78+ Default ( "" ).StringVar (& loadgenCommand .queryURL )
7879 cmd .Flag ("query" , "query to run" ).
7980 Default ("sum(node_cpu_seconds_total)" ).StringVar (& loadgenCommand .query )
8081 cmd .Flag ("query-parallelism" , "number of queries to run in parallel" ).
@@ -89,27 +90,9 @@ func (c *LoadgenCommand) Register(app *kingpin.Application) {
8990}
9091
9192func (c * LoadgenCommand ) run (k * kingpin.ParseContext ) error {
92- writeURL , err := url .Parse (c .writeURL )
93- if err != nil {
94- return err
95- }
96-
97- writeClient , err := remote .NewWriteClient ("loadgen" , & remote.ClientConfig {
98- URL : & config.URL {URL : writeURL },
99- Timeout : model .Duration (c .writeTimeout ),
100- })
101- if err != nil {
102- return err
93+ if c .writeURL == "" && c .queryURL == "" {
94+ return errors .New ("either a -write-url or -query-url flag must be provided to run the loadgen command" )
10395 }
104- c .writeClient = writeClient
105-
106- queryClient , err := api .NewClient (api.Config {
107- Address : c .queryURL ,
108- })
109- if err != nil {
110- return err
111- }
112- c .queryClient = v1 .NewAPI (queryClient )
11396
11497 http .Handle ("/metrics" , promhttp .Handler ())
11598 go func () {
@@ -119,16 +102,49 @@ func (c *LoadgenCommand) run(k *kingpin.ParseContext) error {
119102 }
120103 }()
121104
122- c .wg .Add (c .parallelism )
123- c .wg .Add (c .queryParallelism )
105+ if c .writeURL != "" {
106+ log .Printf ("setting up write load gen:\n url=%s\n parallelism: %v\n active_series: %d\n interval: %v\n " , c .writeURL , c .parallelism , c .activeSeries , c .scrapeInterval )
107+ writeURL , err := url .Parse (c .writeURL )
108+ if err != nil {
109+ return err
110+ }
111+
112+ writeClient , err := remote .NewWriteClient ("loadgen" , & remote.ClientConfig {
113+ URL : & config.URL {URL : writeURL },
114+ Timeout : model .Duration (c .writeTimeout ),
115+ })
116+ if err != nil {
117+ return err
118+ }
119+ c .writeClient = writeClient
120+
121+ c .wg .Add (c .parallelism )
124122
125- metricsPerShard := c .activeSeries / c .parallelism
126- for i := 0 ; i < c .activeSeries ; i += metricsPerShard {
127- go c .runWriteShard (i , i + metricsPerShard )
123+ metricsPerShard := c .activeSeries / c .parallelism
124+ for i := 0 ; i < c .activeSeries ; i += metricsPerShard {
125+ go c .runWriteShard (i , i + metricsPerShard )
126+ }
127+ } else {
128+ log .Println ("write load generation is disabled, -write-url flag has not been set" )
128129 }
129130
130- for i := 0 ; i < c .queryParallelism ; i ++ {
131- go c .runQueryShard ()
131+ if c .queryURL != "" {
132+ log .Printf ("setting up query load gen:\n url=%s\n parallelism: %v\n query: %s" , c .queryURL , c .queryParallelism , c .query )
133+ queryClient , err := api .NewClient (api.Config {
134+ Address : c .queryURL ,
135+ })
136+ if err != nil {
137+ return err
138+ }
139+ c .queryClient = v1 .NewAPI (queryClient )
140+
141+ c .wg .Add (c .queryParallelism )
142+
143+ for i := 0 ; i < c .queryParallelism ; i ++ {
144+ go c .runQueryShard ()
145+ }
146+ } else {
147+ log .Println ("query load generation is disabled, -query-url flag has not been set" )
132148 }
133149
134150 c .wg .Wait ()
0 commit comments