Change to db_config.name for logging metrics per database
What does this MR do?
TL;DR
Basically this just changes some JSON log statement keys:
db_replica_gitlabhq_production_duration_s -> db_replica_primary_duration_s
db_primary_gitlabhq_production_duration_s -> db_primary_primary_duration_s
Details
As GitLab is planning on moving ci_*
tables to a separate database we
need to start expanding our observability/logging/metrics to allow us to
distinguish between the different databases being queried.
We had already implemented logging per database by including the
database name (ie. what Postgres calls the database) in the log
statements in
!63490 (merged) but later we
learnt this wasn't a good idea because we may want to use 2 different
Postgres servers with the same Database name (in fact that's what our
current migration plan involves). As such we need to use the name that
the GitLab application uses to distinguish between the 2 different
databases. This is the name used to configure the config/database.yml
and must be unique.
In the default case it does not have a name and Rails will call it
primary
. This has the unfortunate result that this MR will add JSON
log keys db_replica_primary_duration_s
and
db_primary_primary_duration_s
because we already use the words
primary/replica
to distinguish between our read-write primary and
read-only replicas. We plan to eventually force the
config/database.yml
to name these main
and ci
and at that time
these log statements will be a little clearer. In the meantime this is
behind a feature flag so should not bother people that aren't intending
to try and make sense of these metrics.
Screenshots or Screencasts (strongly suggested)
- "db_replica_gitlabhq_production_duration_s":0.049,
+ "db_replica_primary_duration_s":0.049,
- "db_primary_gitlabhq_production_duration_s":0.173
+ "db_primary_primary_duration_s":0.173
Does this MR meet the acceptance criteria?
Conformity
-
I have included changelog trailers, or none are needed. (Does this MR need a changelog?) -
I have added/updated documentation, or it's not needed. (Is documentation required?) -
I have properly separated EE content from FOSS, or this MR is FOSS only. (Where should EE code go?) -
I have added information for database reviewers in the MR description, or it's not needed. (Does this MR have database related changes?) -
I have self-reviewed this MR per code review guidelines. -
This MR does not harm performance, or I have asked a reviewer to help assess the performance impact. (Merge request performance guidelines) -
I have followed the style guides. -
This change is backwards compatible across updates, or this does not apply.
Availability and Testing
-
I have added/updated tests following the Testing Guide, or it's not needed. (Consider all test levels. See the Test Planning Process.) -
I have tested this MR in all supported browsers, or it's not needed. -
I have informed the Infrastructure department of a default or new setting change per definition of done, or it's not needed.
Security
Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.
-
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
Related to #334942 (closed)