feat(monitor): add disk usage metrics

This commit is contained in:
eeff
2022-12-28 23:12:44 +08:00
parent bbb6b1f800
commit 0404ff4688
3 changed files with 38 additions and 5 deletions
+3
View File
@@ -142,6 +142,9 @@ typedef struct {
char kernel[32];
size_t mem_total_bytes;
size_t mem_used_bytes;
size_t disk_size_gibibytes;
size_t disk_used_gibibytes;
size_t disk_avail_gibibytes;
bool core_dumped;
uint64_t uptime_seconds;
size_t north_nodes;
+12 -1
View File
@@ -41,6 +41,15 @@
"# HELP mem_used_bytes Used memory in bytes\n" \
"# TYPE mem_used_bytes gauge\n" \
"mem_used_bytes %zu\n" \
"# HELP disk_size_gibibytes Disk size in gibibytes\n" \
"# TYPE disk_size_gibibytes counter\n" \
"disk_size_gibibytes %zu\n" \
"# HELP disk_used_gibibytes Used disk size in gibibytes\n" \
"# TYPE disk_used_gibibytes gauge\n" \
"disk_used_gibibytes %zu\n" \
"# HELP disk_avail_gibibytes Available disk size in gibibytes\n" \
"# TYPE disk_avail_gibibytes gauge\n" \
"disk_avail_gibibytes %zu\n" \
"# HELP core_dumped Whether there is any core dump\n" \
"# TYPE core_dumped gauge\n" \
"core_dumped %d\n" \
@@ -126,7 +135,9 @@ static inline void gen_global_metrics(const neu_metrics_t *metrics,
{
fprintf(stream, METRIC_GLOBAL_TMPL, metrics->distro, metrics->kernel,
metrics->mem_total_bytes, metrics->mem_used_bytes,
metrics->core_dumped, metrics->uptime_seconds, metrics->north_nodes,
metrics->disk_size_gibibytes, metrics->disk_used_gibibytes,
metrics->disk_avail_gibibytes, metrics->core_dumped,
metrics->uptime_seconds, metrics->north_nodes,
metrics->north_running_nodes, metrics->north_disconnected_nodes,
metrics->south_nodes, metrics->south_running_nodes,
metrics->south_disconnected_nodes);
+23 -4
View File
@@ -19,6 +19,7 @@
#include <dirent.h>
#include <pthread.h>
#include <sys/statvfs.h>
#include <unistd.h>
#include "adapter.h"
@@ -99,6 +100,19 @@ static inline size_t memory_used()
return parse_memory_fields(3);
}
static inline int disk_usage(size_t *size_p, size_t *used_p, size_t *avail_p)
{
struct statvfs buf = {};
if (0 != statvfs(".", &buf)) {
return -1;
}
*size_p = (double) buf.f_frsize * buf.f_blocks / (1 << 30);
*used_p = (double) buf.f_frsize * (buf.f_blocks - buf.f_bfree) / (1 << 30);
*avail_p = (double) buf.f_frsize * buf.f_bavail / (1 << 30);
return 0;
}
static bool has_core_dumps()
{
DIR *dp = opendir("core");
@@ -214,13 +228,18 @@ void neu_metrics_unregister_entry(const char *name)
void neu_metrics_visist(neu_metrics_cb_t cb, void *data)
{
size_t mem_used = memory_used();
size_t mem_used = memory_used();
size_t disk_size = 0, disk_used = 0, disk_avail = 0;
disk_usage(&disk_size, &disk_used, &disk_avail);
bool core_dumped = has_core_dumps();
uint64_t uptime_seconds = (neu_time_ms() - g_start_ts_) / 1000;
pthread_rwlock_rdlock(&g_metrics_mtx_);
g_metrics_.mem_used_bytes = mem_used;
g_metrics_.core_dumped = core_dumped;
g_metrics_.uptime_seconds = uptime_seconds;
g_metrics_.mem_used_bytes = mem_used;
g_metrics_.disk_size_gibibytes = disk_size;
g_metrics_.disk_used_gibibytes = disk_used;
g_metrics_.disk_avail_gibibytes = disk_avail;
g_metrics_.core_dumped = core_dumped;
g_metrics_.uptime_seconds = uptime_seconds;
g_metrics_.north_nodes = 0;
g_metrics_.north_running_nodes = 0;