Commit 394e1384 authored by Matthias Käppler's avatar Matthias Käppler

Merge branch 'ab/batched-migration-metrics' into 'master'

Adding metrics for batched migrations

See merge request gitlab-org/gitlab!60101
parents 722ce31a 2d69ea6c
...@@ -62,11 +62,10 @@ module Gitlab ...@@ -62,11 +62,10 @@ module Gitlab
metric_for(:gauge_batch_size).set(base_labels, tracking_record.batch_size) metric_for(:gauge_batch_size).set(base_labels, tracking_record.batch_size)
metric_for(:gauge_sub_batch_size).set(base_labels, tracking_record.sub_batch_size) metric_for(:gauge_sub_batch_size).set(base_labels, tracking_record.sub_batch_size)
metric_for(:gauge_interval).set(base_labels, tracking_record.batched_migration.interval)
metric_for(:gauge_job_duration).set(base_labels, (tracking_record.finished_at - tracking_record.started_at).to_i)
metric_for(:counter_updated_tuples).increment(base_labels, tracking_record.batch_size) metric_for(:counter_updated_tuples).increment(base_labels, tracking_record.batch_size)
metric_for(:gauge_total_tuple_count).set(base_labels, tracking_record.batched_migration.total_tuple_count)
# Time efficiency: Ratio of duration to interval (ideal: less than, but close to 1)
efficiency = (tracking_record.finished_at - tracking_record.started_at).to_i / migration.interval.to_f
metric_for(:histogram_time_efficiency).observe(base_labels, efficiency)
if metrics = tracking_record.metrics if metrics = tracking_record.metrics
metrics['timings']&.each do |key, timings| metrics['timings']&.each do |key, timings|
...@@ -95,21 +94,27 @@ module Gitlab ...@@ -95,21 +94,27 @@ module Gitlab
:batched_migration_job_sub_batch_size, :batched_migration_job_sub_batch_size,
'Sub-batch size for a batched migration job' 'Sub-batch size for a batched migration job'
), ),
gauge_interval: Gitlab::Metrics.gauge(
:batched_migration_job_interval_seconds,
'Interval for a batched migration job'
),
gauge_job_duration: Gitlab::Metrics.gauge(
:batched_migration_job_duration_seconds,
'Duration for a batched migration job'
),
counter_updated_tuples: Gitlab::Metrics.counter( counter_updated_tuples: Gitlab::Metrics.counter(
:batched_migration_job_updated_tuples_total, :batched_migration_job_updated_tuples_total,
'Number of tuples updated by batched migration job' 'Number of tuples updated by batched migration job'
), ),
histogram_timings: Gitlab::Metrics.histogram( histogram_timings: Gitlab::Metrics.histogram(
:batched_migration_job_duration_seconds, :batched_migration_job_query_duration_seconds,
'Timings for a batched migration job', 'Query timings for a batched migration job',
{}, {},
[0.1, 0.25, 0.5, 1, 5].freeze [0.1, 0.25, 0.5, 1, 5].freeze
), ),
histogram_time_efficiency: Gitlab::Metrics.histogram( gauge_total_tuple_count: Gitlab::Metrics.gauge(
:batched_migration_job_time_efficiency, :batched_migration_total_tuple_count,
'Ratio of job duration to interval', 'Total tuple count the migration needs to touch'
{},
[0.5, 0.9, 1, 1.5, 2].freeze
) )
} }
end end
......
...@@ -68,6 +68,12 @@ RSpec.describe Gitlab::Database::BackgroundMigration::BatchedMigrationWrapper, ' ...@@ -68,6 +68,12 @@ RSpec.describe Gitlab::Database::BackgroundMigration::BatchedMigrationWrapper, '
subject subject
end end
it 'reports interval' do
expect(described_class.metrics[:gauge_interval]).to receive(:set).with(labels, job_record.batched_migration.interval)
subject
end
it 'reports updated tuples (currently based on batch_size)' do it 'reports updated tuples (currently based on batch_size)' do
expect(described_class.metrics[:counter_updated_tuples]).to receive(:increment).with(labels, job_record.batch_size) expect(described_class.metrics[:counter_updated_tuples]).to receive(:increment).with(labels, job_record.batch_size)
...@@ -89,18 +95,22 @@ RSpec.describe Gitlab::Database::BackgroundMigration::BatchedMigrationWrapper, ' ...@@ -89,18 +95,22 @@ RSpec.describe Gitlab::Database::BackgroundMigration::BatchedMigrationWrapper, '
subject subject
end end
it 'reports time efficiency' do it 'reports job duration' do
freeze_time do freeze_time do
expect(Time).to receive(:current).and_return(Time.zone.now - 5.seconds).ordered expect(Time).to receive(:current).and_return(Time.zone.now - 5.seconds).ordered
expect(Time).to receive(:current).and_return(Time.zone.now).ordered expect(Time).to receive(:current).and_return(Time.zone.now).ordered
ratio = 5 / job_record.batched_migration.interval.to_f expect(described_class.metrics[:gauge_job_duration]).to receive(:set).with(labels, 5.seconds)
expect(described_class.metrics[:histogram_time_efficiency]).to receive(:observe).with(labels, ratio)
subject subject
end end
end end
it 'reports the total tuple count for the migration' do
expect(described_class.metrics[:gauge_total_tuple_count]).to receive(:set).with(labels, job_record.batched_migration.total_tuple_count)
subject
end
end end
context 'when the migration job does not raise an error' do context 'when the migration job does not raise an error' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment