Commit Graph

51 Commits

Author SHA1 Message Date
GitLab Bot 7c1d6f125e Add latest changes from gitlab-org/gitlab@master 2025-07-08 15:11:55 +00:00
GitLab Bot a94f7bf955 Add latest changes from gitlab-org/gitlab@master 2025-06-20 12:12:10 +00:00
GitLab Bot b3bd59a59d Add latest changes from gitlab-org/gitlab@master 2025-06-13 00:10:47 +00:00
GitLab Bot 4c184f0a70 Add latest changes from gitlab-org/gitlab@master 2025-06-12 15:07:49 +00:00
GitLab Bot 0016ea0586 Add latest changes from gitlab-org/gitlab@master 2025-03-26 12:11:45 +00:00
GitLab Bot daa5d2d924 Add latest changes from gitlab-org/gitlab@master 2025-01-22 21:47:44 +00:00
GitLab Bot 7fe1490a58 Add latest changes from gitlab-org/gitlab@master 2022-11-29 18:09:26 +00:00
GitLab Bot 27f5b61b11 Add latest changes from gitlab-org/gitlab@master 2021-10-18 21:12:56 +00:00
GitLab Bot a8476fe0cd Add latest changes from gitlab-org/gitlab@master 2021-06-15 18:09:57 +00:00
GitLab Bot ed00b1a6a3 Add latest changes from gitlab-org/gitlab@master 2020-07-28 12:09:49 +00:00
GitLab Bot e2d4a6dedb Add latest changes from gitlab-org/gitlab@master 2020-05-14 00:07:47 +00:00
GitLab Bot cddaddb86b Add latest changes from gitlab-org/gitlab@master 2020-01-09 12:08:03 +00:00
gfyoung c858f70d07 Enable frozen string for lib/gitlab/*.rb 2018-10-22 07:00:50 +00:00
Pawel Chojnacki 7d716cc849 Convert InfluxDB to concern. Fix uninitialized metrics when metrics code is inherited. 2018-01-29 15:13:04 +01:00
Pawel Chojnacki ea6196d490 Move prometheus metrics to module. Use class instance variables for metrics and metrics cache in metrics concern 2018-01-29 15:13:04 +01:00
Pawel Chojnacki 7b75004d60 Add missing trailing newlines 2017-06-02 19:45:58 +02:00
Pawel Chojnacki b668aaf426 Split the metrics implementation to separate modules for Influx and Prometheus 2017-06-02 19:45:58 +02:00
Pawel Chojnacki c134a72cdb Move Prometheus presentation logic to PrometheusText
+ Use NullMetrics to mock metrics when unused
+ Use method_missing in NullMetrics mocking
+ Update prometheus gem to version that correctly uses transitive dependencies
+ Ensure correct folders are used in Multiprocess prometheus client tests.
+ rename Sessions controller's metric
2017-06-02 19:45:58 +02:00
Pawel Chojnacki ef9d9ddeb2 Add tests for metrics behavior 2017-06-02 19:45:58 +02:00
Pawel Chojnacki 0f4050430d Split metrics from health controller into metrics controller 2017-06-02 19:45:58 +02:00
Pawel Chojnacki c28546177e Prometheus settings 2017-06-02 19:45:57 +02:00
Pawel Chojnacki 5bc099c2de Prometheus metrics first pass
metrics wip
2017-06-02 19:45:57 +02:00
Adam Niedzielski 6bc48d0e25 Allow GitLab instance to start when InfluxDB hostname cannot be resolved
Closes #24438
2017-05-13 18:03:25 +03:00
Nick Thomas 6647542cd4 Fix Gitlab::Metrics metaprogramming magic
On initial startup with no rows in the application_settings table, the
metaprogramming call to `if enabled?` attempts to create a row. This triggers
the HTML caching path, which attempts to store metrics.

At this point, not all the methods in `Gitlab::Metrics` have been defined! Move
`current_transaction` to be defined before running the metaprogramming, to
avoid a confusing NoMethodError
2017-04-21 11:52:28 +01:00
Z.J. van de Weg 128b1eae09 Update Rubocop to ruby 2.3 2017-02-07 15:16:46 +01:00
Yorick Peterse d345591fc8
Tracking of custom events
GitLab Performance Monitoring is now able to track custom events not
directly related to application performance. These events include the
number of tags pushed, repositories created, builds registered, etc.

The use of these events is to get a better overview of how a GitLab
instance is used and how that may affect performance. For example, a
large number of Git pushes may have a negative impact on the underlying
storage engine.

Events are stored in the "events" measurement and are not prefixed with
"rails_" or "sidekiq_", this makes it easier to query events with the
same name triggered from different parts of the application. All events
being stored in the same measurement also makes it easier to downsample
data.

Currently the following events are tracked:

* Creating repositories
* Removing repositories
* Changing the default branch of a repository
* Pushing a new tag
* Removing an existing tag
* Pushing a commit (along with the branch being pushed to)
* Pushing a new branch
* Removing an existing branch
* Importing a repository (along with the URL we're importing)
* Forking a repository (along with the source/target path)
* CI builds registered (and when no build could be found)
* CI builds being updated
* Rails and Sidekiq exceptions

Fixes gitlab-org/gitlab-ce#13720
2016-08-17 10:04:04 +02:00
Paco Guzman 2dcfaa1983 Gitlab::Metrics.current_transaction needs to be public for RailsQueueDuration 2016-08-01 14:13:04 +02:00
Robert Speicher 34c083a184 Merge branch 'rubocop/enable-access-modifiers-cops' into 'master'
Enable Rubocop cops that check access modifiers

## What does this MR do?

This MR enables Rubocop cops that detect methods that should be restricted but are the part of public API because of access modifiers used improperly.

This also fixes existing offenses.

## Why was this MR needed?

Some method in our codebase are public instead of being private because it is sometimes difficult to get it right without static analysis.

## What are the relevant issue numbers?

See #17478  
Closes #17372 

See merge request !5014
2016-07-29 15:58:09 +00:00
Yorick Peterse 905f8d763a
Reduce instrumentation overhead
This reduces the overhead of the method instrumentation code primarily
by reducing the number of method calls. There are also some other small
optimisations such as not casting timing values to Floats (there's no
particular need for this), using Symbols for method call metric names,
and reducing the number of Hash lookups for instrumented methods.

The exact impact depends on the code being executed. For example, for a
method that's only called once the difference won't be very noticeable.
However, for methods that are called many times the difference can be
more significant.

For example, the loading time of a large commit
(nrclark/dummy_project@81ebdea5df)
was reduced from around 19 seconds to around 15 seconds using these
changes.
2016-07-28 16:56:17 +02:00
Grzegorz Bizon 4d9b34bb7e Fix method visibility in gitlab metrics class 2016-07-19 15:12:15 +02:00
Yorick Peterse a257d117a0
Fix setting of "action" for Grape transactions
Merely setting the "action" tag will only result in the transaction
itself containing a value for this tag. To ensure other metrics also
contain this tag we must set the action using Transaction#action=
instead.
2016-04-20 22:42:52 +02:00
Yorick Peterse 229f3ce9ce
Configuring of points per UDP packet
This allows users to configure the number of points stored in a single
UDP packet. This in turn can be used to reduce the number of UDP packets
being sent at the cost of these packets being somewhat larger.

The default setting is 1 point per packet so nothing changes for
existing users.
2016-04-19 14:35:25 +02:00
Yorick Peterse 3240ecfbef
Added ability to add custom tags to transactions
One use case for this is manually setting the "action" tag for Grape API
calls. Due to Grape running blocks there are no human readable method
names that can be used for the "action" tag, thus we have to set these
manually on a case by case basis.
2016-04-13 11:22:37 +02:00
Yorick Peterse 7eed4608fe
Fixed stubbing for Gitlab::Metrics specs
If the measure method uses Transaction.current directly the SQL
subscriber (Subscribers::ActiveRecord) will add timings of queries
triggered by DB cleaner.
2016-04-11 14:29:38 +02:00
Yorick Peterse d9110a7eca
Track call counts in Gitlab::Metrics.measure_block 2016-04-11 13:27:52 +02:00
Yorick Peterse 16926a676b
Store block timings as transaction values
This makes it easier to query, simplifies the code, and makes it
possible to figure out what transaction the data belongs to (simply
because it's now stored _in_ the transaction).

This new setup keeps track of both the real/wall time _and_ CPU time
spent in a block, both measured using milliseconds (to keep all units
the same).
2016-04-11 13:09:36 +02:00
Yorick Peterse 1af6cf28c0 Measure Ruby blocks using Gitlab::Metrics
This allows measuring of timings of arbitrary Ruby blocks, this allows
for more fine grained performance monitoring. Custom values and tags can
also be attached to a block.
2016-04-06 14:31:52 +02:00
Yorick Peterse 2367160015 Make the metrics sampler interval configurable 2016-01-13 12:29:48 +01:00
Yorick Peterse 355c341fe7 Stop tracking call stacks for instrumented views
Where a vew is called from doesn't matter as much. We already know what
action they belong to and this is more than enough information. By
removing the file/line number from the list of tags we should also be
able to reduce the number of series stored in InfluxDB.
2016-01-12 15:41:22 +01:00
Yorick Peterse 8fdc00bd4c Remove InfluxDB username/password
InfluxDB over UDP doesn't use authentication, thus there's no need for
these settings.
2016-01-06 17:49:56 +01:00
Yorick Peterse cafc784ee1 Removed tracking of hostnames for metrics
This isn't hugely useful and mostly wastes InfluxDB space. We can re-add
this whenever needed (but only once we really need it).
2015-12-31 17:55:10 +01:00
Yorick Peterse 55ed6e1c96 Cache InfluxDB settings after the first use
This ensures we don't need to load anything from either PostgreSQL or
the Rails cache whenever creating new InfluxDB connections.
2015-12-31 17:47:07 +01:00
Yorick Peterse 701e5de910 Use Gitlab::CurrentSettings for InfluxDB
This ensures we can still start up even when not connecting to a
database.
2015-12-29 15:49:12 +01:00
Yorick Peterse 620e7bb3d6 Write to InfluxDB directly via UDP
This removes the need for Sidekiq and any overhead/problems introduced
by TCP. There are a few things to take into account:

1. When writing data to InfluxDB you may still get an error if the
   server becomes unavailable during the write. Because of this we're
   catching all exceptions and just ignore them (for now).
2. Writing via UDP apparently requires the timestamp to be in
   nanoseconds. Without this data either isn't written properly.
3. Due to the restrictions on UDP buffer sizes we're writing metrics one
   by one, instead of writing all of them at once.
2015-12-29 14:53:45 +01:00
Yorick Peterse ed214a11ca Handle missing settings table for metrics
This ensures we can still boot, even when the "application_settings"
table doesn't exist.
2015-12-28 22:38:34 +01:00
Yorick Peterse 4d925f2147 Move InfluxDB settings to ApplicationSetting 2015-12-28 18:00:32 +01:00
Yorick Peterse 1be5668ae0 Added host option for InfluxDB 2015-12-28 13:14:48 +01:00
Yorick Peterse f181f05e8a Track object counts using the "allocations" Gem
This allows us to track the counts of actual classes instead of "T_XXX"
nodes. This is only enabled on CRuby as it uses CRuby specific APIs.
2015-12-17 17:25:48 +01:00
Yorick Peterse a41287d898 Only track method calls above a certain threshold
This ensures we don't end up wasting resources by tracking method calls
that only take a few microseconds. By default the threshold is 10
milliseconds but this can be changed using the gitlab.yml configuration
file.
2015-12-17 17:25:48 +01:00
Yorick Peterse 60a6a240ea Improved last_relative_application_frame timings
The previous setup wasn't exactly fast, resulting in instrumented method
calls taking about 600 times longer than non instrumented calls
(including any ActiveSupport code involved). With this commit this
slowdown has been reduced to around 185 times.
2015-12-17 17:25:48 +01:00