Skip to content

Commit d369b9e

Browse files
authored
System benchmarks improvements (#1340)
Adds several new functionalities to the system benchmarks: Support for k8s and tf service deployers Support for service deployer variants Support to set an external metricstore to send metrics during the benchmark Support to reindex the benchmark data to the metricstore Support custom policy_template setting
1 parent f112509 commit d369b9e

40 files changed

+1473
-607
lines changed

cmd/benchmark.go

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@
55
package cmd
66

77
import (
8+
"context"
89
"errors"
910
"fmt"
11+
"os"
1012
"strings"
1113
"time"
1214

1315
"github.com/dustin/go-humanize"
1416

1517
"github.com/elastic/elastic-package/internal/corpusgenerator"
18+
"github.com/elastic/elastic-package/internal/elasticsearch"
1619
"github.com/elastic/elastic-package/internal/install"
20+
"github.com/elastic/elastic-package/internal/logger"
1721
"github.com/elastic/elastic-package/internal/stack"
1822

1923
"github.com/spf13/cobra"
@@ -215,13 +219,19 @@ func getSystemCommand() *cobra.Command {
215219
cmd.Flags().BoolP(cobraext.BenchReindexToMetricstoreFlagName, "", false, cobraext.BenchReindexToMetricstoreFlagDescription)
216220
cmd.Flags().DurationP(cobraext.BenchMetricsIntervalFlagName, "", time.Second, cobraext.BenchMetricsIntervalFlagDescription)
217221
cmd.Flags().DurationP(cobraext.DeferCleanupFlagName, "", 0, cobraext.DeferCleanupFlagDescription)
222+
cmd.Flags().String(cobraext.VariantFlagName, "", cobraext.VariantFlagDescription)
218223

219224
return cmd
220225
}
221226

222227
func systemCommandAction(cmd *cobra.Command, args []string) error {
223228
cmd.Println("Run system benchmarks for the package")
224229

230+
variant, err := cmd.Flags().GetString(cobraext.VariantFlagName)
231+
if err != nil {
232+
return cobraext.FlagParsingError(err, cobraext.VariantFlagName)
233+
}
234+
225235
benchName, err := cmd.Flags().GetString(cobraext.BenchNameFlagName)
226236
if err != nil {
227237
return cobraext.FlagParsingError(err, cobraext.BenchNameFlagName)
@@ -271,7 +281,8 @@ func systemCommandAction(cmd *cobra.Command, args []string) error {
271281
return fmt.Errorf("can't create Kibana client: %w", err)
272282
}
273283

274-
opts := system.NewOptions(
284+
withOpts := []system.OptionFunc{
285+
system.WithVariant(variant),
275286
system.WithBenchmarkName(benchName),
276287
system.WithDeferCleanup(deferCleanup),
277288
system.WithMetricsInterval(metricsInterval),
@@ -280,8 +291,17 @@ func systemCommandAction(cmd *cobra.Command, args []string) error {
280291
system.WithESAPI(esClient.API),
281292
system.WithKibanaClient(kc),
282293
system.WithProfile(profile),
283-
)
284-
runner := system.NewSystemBenchmark(opts)
294+
}
295+
296+
esMetricsClient, err := initializeESMetricsClient(cmd.Context())
297+
if err != nil {
298+
return fmt.Errorf("can't create Elasticsearch metrics client: %w", err)
299+
}
300+
if esMetricsClient != nil {
301+
withOpts = append(withOpts, system.WithESMetricsAPI(esMetricsClient.API))
302+
}
303+
304+
runner := system.NewSystemBenchmark(system.NewOptions(withOpts...))
285305

286306
r, err := benchrunner.Run(runner)
287307
if err != nil {
@@ -293,14 +313,19 @@ func systemCommandAction(cmd *cobra.Command, args []string) error {
293313
return fmt.Errorf("system benchmark is expected to return multiple reports")
294314
}
295315

316+
reports := multiReport.Split()
317+
if len(reports) != 2 {
318+
return fmt.Errorf("system benchmark is expected to return a human an a file report")
319+
}
320+
296321
// human report will always be the first
297-
human := multiReport.Split()[0]
322+
human := reports[0]
298323
if err := reporters.WriteReportable(reporters.Output(outputs.ReportOutputSTDOUT), human); err != nil {
299324
return fmt.Errorf("error writing benchmark report: %w", err)
300325
}
301326

302327
// file report will always be the second
303-
file := multiReport.Split()[1]
328+
file := reports[1]
304329
if err := reporters.WriteReportable(reporters.Output(outputs.ReportOutputFile), file); err != nil {
305330
return fmt.Errorf("error writing benchmark report: %w", err)
306331
}
@@ -375,3 +400,30 @@ func generateDataStreamCorpusCommandAction(cmd *cobra.Command, _ []string) error
375400

376401
return nil
377402
}
403+
404+
func initializeESMetricsClient(ctx context.Context) (*elasticsearch.Client, error) {
405+
address := os.Getenv(system.ESMetricstoreHostEnv)
406+
user := os.Getenv(system.ESMetricstoreUsernameEnv)
407+
pass := os.Getenv(system.ESMetricstorePasswordEnv)
408+
cacert := os.Getenv(system.ESMetricstoreCACertificateEnv)
409+
if address == "" || user == "" || pass == "" {
410+
logger.Debugf("can't initialize metricstore, missing environment configuration")
411+
return nil, nil
412+
}
413+
414+
esClient, err := stack.NewElasticsearchClient(
415+
elasticsearch.OptionWithAddress(address),
416+
elasticsearch.OptionWithUsername(user),
417+
elasticsearch.OptionWithPassword(pass),
418+
elasticsearch.OptionWithCertificateAuthority(cacert),
419+
)
420+
if err != nil {
421+
return nil, err
422+
}
423+
424+
if err := esClient.CheckHealth(ctx); err != nil {
425+
return nil, err
426+
}
427+
428+
return esClient, nil
429+
}

cmd/service.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/elastic/elastic-package/internal/install"
1616
"github.com/elastic/elastic-package/internal/packages"
1717
"github.com/elastic/elastic-package/internal/service"
18+
"github.com/elastic/elastic-package/internal/testrunner/runners/system"
1819
)
1920

2021
const serviceLongDescription = `Use this command to boot up the service stack that can be observed with the package.
@@ -70,6 +71,7 @@ func upCommandAction(cmd *cobra.Command, args []string) error {
7071
Profile: profile,
7172
ServiceName: serviceName,
7273
PackageRootPath: packageRoot,
74+
DevDeployDir: system.DevDeployDir,
7375
DataStreamRootPath: dataStreamPath,
7476
Variant: variantFlag,
7577
})

0 commit comments

Comments
 (0)