Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
hpc
gekkofs
Commits
7be777ef
Verified
Commit
7be777ef
authored
Apr 23, 2022
by
Marc Vef
Browse files
statistics daemon argument changes, documentation, cmake
parent
b5907694
Changes
5
Hide whitespace changes
Inline
Side-by-side
CHANGELOG.md
View file @
7be777ef
...
...
@@ -10,18 +10,20 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### New
-
Added Stats (
[
!132
](
https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/132
)
) gathering in servers
-
Stats output can be enabled with --output-stats
<filename>
-
--enable-collection collects normal stats
-
--enable-chunkstats collects extended chunk stats
-
Added statistics gathering on daemons (
[
!132
](
https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/132
)
).
-
Stats output can be enabled with:
-
`--enable-collection`
collects normal statistics.
-
`--enable-chunkstats`
collects extended chunk statistics.
-
Statistics output to file is controlled by
`--output-stats <filename>`
-
Added Prometheus support for outputting
statistics (
[
!132
](
https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/132
)
):
-
Prometheus dependency optional and enabled at compile time with the CMake argument
`GKFS_ENABLE_PROMETHEUS`
.
-
`--enable-prometheus`
enables statistics pushing to Prometheus if statistics are enabled.
-
`--prometheus-gateway`
sets an IP and port for the Prometheus connection.
-
Added new experimental metadata backend:
Parallax (
[
!110
](
https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/110
)
).
-
Added support to use multiple metadata backends.
-
Added
`--clean-rootdir-finish`
argument to remove rootdir/metadir at the end when the daemon finishes.
-
Added Prometheus Output (
[
!132
](
https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/132
)
)
-
New option to define gateway --prometheus-gateway
<gateway:port>
-
Prometheus output is optional with "GKFS_ENABLE_PROMETHEUS"
-
--enable-prometheus creates a thread to push the metrics.
### Changed
...
...
src/common/CMakeLists.txt
View file @
7be777ef
...
...
@@ -52,18 +52,20 @@ target_sources(statistics
if
(
GKFS_ENABLE_PROMETHEUS
)
find_package
(
CURL REQUIRED
)
find_package
(
prometheus-cpp REQUIRED
)
set
(
PROMETHEUS_LIB
prometheus-cpp-pull
prometheus-cpp-push
prometheus-cpp-core
curl
)
set
(
PROMETHEUS_LINK_LIBRARIES
prometheus-cpp::pull
prometheus-cpp::push
prometheus-cpp::core
curl
)
target_include_directories
(
statistics PRIVATE
${
prometheus-cpp_INCLUDE_DIR
}
)
endif
()
target_link_libraries
(
statistics
PRIVATE
${
PROMETHEUS_LI
B
}
PRIVATE
${
PROMETHEUS_LI
NK_LIBRARIES
}
)
if
(
GKFS_ENABLE_CODE_COVERAGE
)
target_code_coverage
(
distributor AUTO
)
target_code_coverage
(
statistics AUTO
)
...
...
src/common/statistics/stats.cpp
View file @
7be777ef
...
...
@@ -82,7 +82,9 @@ Stats::setup_Prometheus(const std::string& gateway_ip,
Stats
::
Stats
(
bool
enable_chunkstats
,
bool
enable_prometheus
,
const
std
::
string
&
stats_file
,
const
std
::
string
&
prometheus_gateway
)
{
const
std
::
string
&
prometheus_gateway
)
:
enable_prometheus_
(
enable_prometheus
),
enable_chunkstats_
(
enable_chunkstats
)
{
// Init clocks
start
=
std
::
chrono
::
steady_clock
::
now
();
...
...
@@ -105,8 +107,6 @@ Stats::Stats(bool enable_chunkstats, bool enable_prometheus,
setup_Prometheus
(
prometheus_gateway
.
substr
(
0
,
pos_separator
),
prometheus_gateway
.
substr
(
pos_separator
+
1
));
#endif
enable_chunkstats_
=
enable_chunkstats
;
enable_prometheus_
=
enable_prometheus
;
if
(
!
stats_file
.
empty
()
||
enable_prometheus_
)
{
output_thread_
=
true
;
...
...
@@ -331,7 +331,7 @@ Stats::output(std::chrono::seconds d, std::string file_output) {
times
++
;
if
(
enable_chunkstats_
and
of
)
{
if
(
enable_chunkstats_
&&
of
)
{
if
(
times
%
4
==
0
)
output_map
(
of
.
value
());
}
...
...
@@ -340,7 +340,7 @@ Stats::output(std::chrono::seconds d, std::string file_output) {
gateway
->
Push
();
}
#endif
while
(
running
and
a
<
d
)
{
while
(
running
&&
a
<
d
)
{
a
+=
1s
;
std
::
this_thread
::
sleep_for
(
1s
);
}
...
...
src/daemon/daemon.cpp
View file @
7be777ef
...
...
@@ -654,40 +654,60 @@ parse_input(const cli_options& opts, const CLI::App& desc) {
GKFS_DATA
->
parallax_size_md
(
stoi
(
opts
.
parallax_size
));
}
if
(
desc
.
count
(
"--output-stats"
))
{
auto
stats_file
=
opts
.
stats_file
;
GKFS_DATA
->
stats_file
(
stats_file
);
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Stats Enabled: '{}'"
,
__func__
,
stats_file
);
}
else
{
GKFS_DATA
->
stats_file
(
""
);
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Stats Output Disabled"
,
__func__
);
}
/*
* Statistics collection arguments
*/
if
(
desc
.
count
(
"--enable-collection"
))
{
GKFS_DATA
->
enable_stats
(
true
);
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Collection Enabled"
,
__func__
);
GKFS_DATA
->
spdlogger
()
->
info
(
"{}() Statistic collection enabled"
,
__func__
);
}
if
(
desc
.
count
(
"--enable-chunkstats"
))
{
GKFS_DATA
->
enable_chunkstats
(
true
);
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() ChunkStats Enabled"
,
__func__
);
GKFS_DATA
->
spdlogger
()
->
info
(
"{}() Chunk statistic collection enabled"
,
__func__
);
}
#ifdef GKFS_ENABLE_PROMETHEUS
if
(
desc
.
count
(
"--enable-prometheus"
))
{
GKFS_DATA
->
enable_prometheus
(
true
);
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Prometheus Enabled"
,
__func__
);
if
(
GKFS_DATA
->
enable_stats
()
||
GKFS_DATA
->
enable_chunkstats
())
GKFS_DATA
->
spdlogger
()
->
info
(
"{}() Statistics output to Prometheus enabled"
,
__func__
);
else
GKFS_DATA
->
spdlogger
()
->
warn
(
"{}() Prometheus statistic output enabled but no stat collection is enabled. There will be no output to Prometheus"
,
__func__
);
}
if
(
desc
.
count
(
"--prometheus-gateway"
))
{
auto
gateway
=
opts
.
prometheus_gateway
;
GKFS_DATA
->
prometheus_gateway
(
gateway
);
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Prometheus Gateway: '{}'"
,
__func__
,
gateway
);
if
(
GKFS_DATA
->
enable_prometheus
())
GKFS_DATA
->
spdlogger
()
->
info
(
"{}() Prometheus gateway set to '{}'"
,
__func__
,
gateway
);
else
GKFS_DATA
->
spdlogger
()
->
warn
(
"{}() Prometheus gateway was set but Prometheus is disabled."
);
}
#endif
if
(
desc
.
count
(
"--output-stats"
))
{
auto
stats_file
=
opts
.
stats_file
;
GKFS_DATA
->
stats_file
(
stats_file
);
if
(
GKFS_DATA
->
enable_stats
()
||
GKFS_DATA
->
enable_chunkstats
())
GKFS_DATA
->
spdlogger
()
->
info
(
"{}() Statistics are written to file '{}'"
,
__func__
,
stats_file
);
else
GKFS_DATA
->
spdlogger
()
->
warn
(
"{}() --output-stats argument used but no stat collection is enabled. There will be no output to file '{}'"
,
__func__
,
stats_file
);
}
else
{
GKFS_DATA
->
stats_file
(
""
);
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Statistics output disabled"
,
__func__
);
}
}
/**
...
...
@@ -755,24 +775,25 @@ main(int argc, const char* argv[]) {
desc
.
add_option
(
"--parallaxsize"
,
opts
.
parallax_size
,
"parallaxdb - metadata file size in GB (default 8GB), "
"used only with new files"
);
desc
.
add_option
(
"--output-stats"
,
opts
.
stats_file
,
"Creates a thread that outputs the server stats each 10s, to the file specified"
);
desc
.
add_flag
(
"--enable-collection"
,
"Enables collection of normal stats, independent of the output-stats option"
);
"Enables collection of general statistics. "
"Output requires either the --output-stats or --enable-prometheus argument."
);
desc
.
add_flag
(
"--enable-chunkstats"
,
"Enables collection of chunkstats stats, independent of the output-stats option"
)
;
"Enables collection of data chunk statistics in I/O operations."
"Output requires either the --output-stats or --enable-prometheus argument."
);
desc
.
add_option
(
"--output-stats"
,
opts
.
stats_file
,
"Creates a thread that outputs the server stats each 10s to the specified file."
);
#ifdef GKFS_ENABLE_PROMETHEUS
desc
.
add_flag
(
"--enable-prometheus"
,
"Enables prometheus output
, enables
thread"
);
"Enables prometheus output
and a corresponding
thread
.
"
);
desc
.
add_option
(
"--prometheus-gateway"
,
opts
.
prometheus_gateway
,
"Defines the prometheus gateway
, d
efault
is
127.0.0.1:9091"
);
"Defines the prometheus gateway
<ip:port> (D
efault 127.0.0.1:9091
).
"
);
#endif
desc
.
add_flag
(
"--version"
,
"Print version and exit."
);
...
...
src/daemon/handler/srv_data.cpp
View file @
7be777ef
...
...
@@ -114,10 +114,7 @@ rpc_srv_write(hg_handle_t handle) {
"{}() path: '{}' chunk_start '{}' chunk_end '{}' chunk_n '{}' total_chunk_size '{}' bulk_size: '{}' offset: '{}'"
,
__func__
,
in
.
path
,
in
.
chunk_start
,
in
.
chunk_end
,
in
.
chunk_n
,
in
.
total_chunk_size
,
bulk_size
,
in
.
offset
);
if
(
GKFS_DATA
->
enable_stats
())
{
GKFS_DATA
->
stats
()
->
add_value_size
(
gkfs
::
utils
::
Stats
::
SizeOp
::
write_size
,
bulk_size
);
}
#ifdef GKFS_ENABLE_AGIOS
int
*
data
;
...
...
@@ -352,7 +349,13 @@ rpc_srv_write(hg_handle_t handle) {
*/
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Sending output response {}"
,
__func__
,
out
.
err
);
return
gkfs
::
rpc
::
cleanup_respond
(
&
handle
,
&
in
,
&
out
,
&
bulk_handle
);
auto
handler_ret
=
gkfs
::
rpc
::
cleanup_respond
(
&
handle
,
&
in
,
&
out
,
&
bulk_handle
);
if
(
GKFS_DATA
->
enable_stats
())
{
GKFS_DATA
->
stats
()
->
add_value_size
(
gkfs
::
utils
::
Stats
::
SizeOp
::
write_size
,
bulk_size
);
}
return
handler_ret
;
}
/**
...
...
@@ -414,10 +417,6 @@ rpc_srv_read(hg_handle_t handle) {
"{}() path: '{}' chunk_start '{}' chunk_end '{}' chunk_n '{}' total_chunk_size '{}' bulk_size: '{}' offset: '{}'"
,
__func__
,
in
.
path
,
in
.
chunk_start
,
in
.
chunk_end
,
in
.
chunk_n
,
in
.
total_chunk_size
,
bulk_size
,
in
.
offset
);
if
(
GKFS_DATA
->
enable_stats
())
{
GKFS_DATA
->
stats
()
->
add_value_size
(
gkfs
::
utils
::
Stats
::
SizeOp
::
read_size
,
bulk_size
);
}
#ifdef GKFS_ENABLE_AGIOS
int
*
data
;
...
...
@@ -619,7 +618,13 @@ rpc_srv_read(hg_handle_t handle) {
*/
GKFS_DATA
->
spdlogger
()
->
debug
(
"{}() Sending output response, err: {}"
,
__func__
,
out
.
err
);
return
gkfs
::
rpc
::
cleanup_respond
(
&
handle
,
&
in
,
&
out
,
&
bulk_handle
);
auto
handler_ret
=
gkfs
::
rpc
::
cleanup_respond
(
&
handle
,
&
in
,
&
out
,
&
bulk_handle
);
if
(
GKFS_DATA
->
enable_stats
())
{
GKFS_DATA
->
stats
()
->
add_value_size
(
gkfs
::
utils
::
Stats
::
SizeOp
::
read_size
,
bulk_size
);
}
return
handler_ret
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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