Skip to content

Instrument CI parsers

Erick Bajao requested to merge eb-prometheus-monitoring-report-parsers into master

What does this MR do?

Solves #284843 (closed)

Because we are concerned with the performance of !47097 (closed) we should have additional monitoring and a feature flag in place in order to ensure the performance impact is known, monitored, and can be disabled.

As per !47097 (comment 446238654) we should add monitoring into each parser so that we can add Prometheus duration histograms for all parsers generically, with a label per parser.

Please note I only tested this up to the exported metrics level. I have not tried querying the actual metrics yet. I am assuming that Prometheus will be able to properly scrape these metrics.

Screenshots (strongly suggested)

Here are samples of exported metrics for some of the CI report parsers. Note that some parsers are executed within web requests, and some are in background jobs.

From /-/metrics:

# HELP ci_report_parser_duration_seconds Multiprocess metric
# TYPE ci_report_parser_duration_seconds histogram
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="+Inf"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.005"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.01"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.025"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.05"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.1"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.25"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.5"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="1"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="10"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="2.5"} 2
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="5"} 2
ci_report_parser_duration_seconds_count{parser="Gitlab::Ci::Parsers::Test::Junit"} 2
ci_report_parser_duration_seconds_sum{parser="Gitlab::Ci::Parsers::Test::Junit"} 0.0014790000859647989

From the sidekiq /metrics:

# HELP ci_report_parser_duration_seconds Multiprocess metric
# TYPE ci_report_parser_duration_seconds histogram
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="+Inf"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="0.005"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="0.01"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="0.025"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="0.05"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="0.1"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="0.25"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="0.5"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="1"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="10"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="2.5"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Coverage::Cobertura",le="5"} 3
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="+Inf"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.005"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.01"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.025"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.05"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.1"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.25"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="0.5"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="1"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="10"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="2.5"} 46
ci_report_parser_duration_seconds_bucket{parser="Gitlab::Ci::Parsers::Test::Junit",le="5"} 46
ci_report_parser_duration_seconds_count{parser="Gitlab::Ci::Parsers::Coverage::Cobertura"} 3
ci_report_parser_duration_seconds_count{parser="Gitlab::Ci::Parsers::Test::Junit"} 46
ci_report_parser_duration_seconds_sum{parser="Gitlab::Ci::Parsers::Coverage::Cobertura"} 0.0042989999055862427
ci_report_parser_duration_seconds_sum{parser="Gitlab::Ci::Parsers::Test::Junit"} 0.025851999409496784

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Erick Bajao

Merge request reports