Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
What's new
4
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
gitlab-org
gitlab-exporter
Commits
9936ae38
Commit
9936ae38
authored
Jan 20, 2017
by
Ahmad Sherif
Browse files
Collect more DB tuple stats
Closes #12
parent
91eb74ad
Pipeline
#182298
passed with stage
in 1 minute
Changes
6
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Gemfile.lock
View file @
9936ae38
PATH
remote: .
specs:
gitlab-monitor (0.0.2
2
)
gitlab-monitor (0.0.2
5
)
pg (~> 0.18.4)
quantile (~> 0.2.0)
redis-namespace (~> 1.5.2)
...
...
README.md
View file @
9936ae38
...
...
@@ -13,7 +13,7 @@ frequency.
### Supported Probes
1.
Database
*
Dead
tuples
*
Per-table
tuple
stat
s
*
Slow queries
*
Blocked queries
*
Vacuum queries
...
...
config/gitlab-monitor.yml.example
View file @
9936ae38
...
...
@@ -5,8 +5,8 @@ server:
probes:
database:
multiple: true
dead_tuples_count
:
class_name: Database::
Dead
TuplesProber
tuple_stats
:
class_name: Database::TuplesProber
methods:
- probe_db
opts:
...
...
lib/gitlab_monitor/cli.rb
View file @
9936ae38
...
...
@@ -76,11 +76,11 @@ module GitLab
end
end
# Database
dead
tuples runner.
# Database tuple
stat
s runner.
#
# It will take a database connection string and print results to STDOUT
class
Database
Dead
Tuples
COMMAND_NAME
=
"db-
dead-
tuples"
.
freeze
class
DatabaseTuple
Stat
s
COMMAND_NAME
=
"db-tuple
-stat
s"
.
freeze
def
initialize
(
args
)
@options
=
options
(
args
)
...
...
@@ -106,7 +106,7 @@ module GitLab
def
run
validate!
::
GitLab
::
Monitor
::
Database
::
Dead
TuplesProber
.
new
(
connection_string:
@db_connection_string
)
::
GitLab
::
Monitor
::
Database
::
TuplesProber
.
new
(
connection_string:
@db_connection_string
)
.
probe_db
.
write_to
(
@target
)
end
...
...
@@ -451,7 +451,7 @@ module GitLab
def
self
.
commands
[
GIT
,
Database
Dead
Tuples
,
DatabaseTuple
Stat
s
,
DatabaseBlockedQueries
,
DatabaseSlowQueries
,
DatabaseVacuumQueries
,
...
...
lib/gitlab_monitor/database.rb
View file @
9936ae38
...
...
@@ -6,7 +6,7 @@ module GitLab
autoload
:BlockedQueriesProber
,
"gitlab_monitor/database/blocked_queries"
autoload
:CiBuildsProber
,
"gitlab_monitor/database/ci_builds"
autoload
:SlowQueriesProber
,
"gitlab_monitor/database/slow_queries"
autoload
:
Dead
TuplesProber
,
"gitlab_monitor/database/
dead_
tuples"
autoload
:TuplesProber
,
"gitlab_monitor/database/tuple
_stat
s"
autoload
:VacuumQueriesProber
,
"gitlab_monitor/database/vacuum_queries"
autoload
:RowCountProber
,
"gitlab_monitor/database/row_count"
end
...
...
lib/gitlab_monitor/database/
dead_
tuples.rb
→
lib/gitlab_monitor/database/tuple
_stat
s.rb
View file @
9936ae38
module
GitLab
module
Monitor
module
Database
# A helper class to collect
dead
tuple
s
stats from the database
# A helper class to collect tuple stats from the database
#
# It takes a connection string (e.g. "dbname=test port=5432")
class
Dead
TuplesCollector
<
Base
class
Tuple
Stat
sCollector
<
Base
def
run
table_names
=
connection
.
exec
(
"SELECT tablename FROM pg_tables WHERE tableowner = 'gitlab'"
).
values
.
flatten
stats
=
{}
table_names
.
each
do
|
table_name
|
result
=
connection
.
exec
(
"SELECT n_dead_tup FROM pg_stat_user_tables WHERE relname = '
#{
table_name
}
'"
)
stats
[
table_name
]
=
result
[
0
][
"n_dead_tup"
].
to_i
result
=
connection
.
exec
(
<<-
SQL
SELECT seq_tup_read, idx_tup_fetch, n_tup_ins, n_tup_upd, n_tup_del, n_tup_hot_upd, n_dead_tup
FROM pg_stat_user_tables
WHERE relname = '
#{
table_name
}
'
SQL
)
next
if
result
.
count
.
zero?
stats
[
table_name
]
=
result
[
0
]
end
stats
end
end
# Probes the DB specified by opts[:connection_string] for
dead
tu
b
le
s
stats, then converts them to metrics
class
Dead
TuplesProber
# Probes the DB specified by opts[:connection_string] for tu
p
le stats, then converts them to metrics
class
TuplesProber
def
initialize
(
opts
,
metrics:
PrometheusMetrics
.
new
)
@metrics
=
metrics
@collector
=
Dead
TuplesCollector
.
new
(
connection_string:
opts
[
:connection_string
])
@collector
=
Tuple
Stat
sCollector
.
new
(
connection_string:
opts
[
:connection_string
])
end
def
probe_db
...
...
@@ -30,8 +38,10 @@ module GitLab
result
=
@collector
.
run
result
.
each
do
|
table_name
,
dead_tuples_count
|
@metrics
.
add
(
"pg_dead_tuples"
,
dead_tuples_count
,
table_name:
table_name
)
result
.
each
do
|
table_name
,
tuple_stats
|
tuple_stats
.
each
do
|
column_name
,
value
|
@metrics
.
add
(
"pg_stat_table_
#{
column_name
}
"
,
value
.
to_s
,
table_name:
table_name
)
end
end
self
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment