mirror of
https://github.com/emqx/neuron.git
synced 2026-10-17 04:40:42 +08:00
feat(monitor): add disk usage metrics
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user