diff --git a/userspace/libpman/src/stats.c b/userspace/libpman/src/stats.c index 5f5b150322..815de86b90 100644 --- a/userspace/libpman/src/stats.c +++ b/userspace/libpman/src/stats.c @@ -175,7 +175,7 @@ struct metrics_v2 *pman_get_metrics_v2(uint32_t flags, uint32_t *nstats, int32_t g_state.stats[stat].type = METRIC_VALUE_TYPE_U64; g_state.stats[stat].flags = METRICS_V2_KERNEL_COUNTERS; g_state.stats[stat].unit = METRIC_VALUE_UNIT_COUNT; - g_state.stats[stat].metric_type = METRIC_VALUE_MONOTONIC; + g_state.stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; g_state.stats[stat].value.u64 = 0; strlcpy(g_state.stats[stat].name, modern_bpf_kernel_counters_stats_names[stat], METRIC_NAME_MAX); } @@ -258,19 +258,19 @@ struct metrics_v2 *pman_get_metrics_v2(uint32_t flags, uint32_t *nstats, int32_t strlcat(g_state.stats[offset].name, modern_bpf_libbpf_stats_names[RUN_CNT], sizeof(g_state.stats[offset].name)); g_state.stats[stat].flags = METRICS_V2_KERNEL_COUNTERS; g_state.stats[stat].unit = METRIC_VALUE_UNIT_COUNT; - g_state.stats[stat].metric_type = METRIC_VALUE_MONOTONIC; + g_state.stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; g_state.stats[offset].value.u64 = info.run_cnt; break; case RUN_TIME_NS: strlcat(g_state.stats[offset].name, modern_bpf_libbpf_stats_names[RUN_TIME_NS], sizeof(g_state.stats[offset].name)); g_state.stats[stat].unit = METRIC_VALUE_UNIT_TIME_NS_COUNT; - g_state.stats[stat].metric_type = METRIC_VALUE_MONOTONIC; + g_state.stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; g_state.stats[offset].value.u64 = info.run_time_ns; break; case AVG_TIME_NS: strlcat(g_state.stats[offset].name, modern_bpf_libbpf_stats_names[AVG_TIME_NS], sizeof(g_state.stats[offset].name)); g_state.stats[stat].unit = METRIC_VALUE_UNIT_TIME_NS; - g_state.stats[stat].metric_type = METRIC_VALUE_NON_MONOTONIC_CURRENT; + g_state.stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT; g_state.stats[offset].value.u64 = 0; if(info.run_cnt > 0) { @@ -278,6 +278,7 @@ struct metrics_v2 *pman_get_metrics_v2(uint32_t flags, uint32_t *nstats, int32_t } break; default: + ASSERT(false); break; } offset++; diff --git a/userspace/libscap/engine/bpf/scap_bpf.c b/userspace/libscap/engine/bpf/scap_bpf.c index 8995205cc3..60d794f39e 100644 --- a/userspace/libscap/engine/bpf/scap_bpf.c +++ b/userspace/libscap/engine/bpf/scap_bpf.c @@ -1731,7 +1731,7 @@ const struct metrics_v2* scap_bpf_get_stats_v2(struct scap_engine_handle engine, { stats[stat].type = METRIC_VALUE_TYPE_U64; stats[stat].flags = METRICS_V2_KERNEL_COUNTERS; - stats[stat].metric_type = METRIC_VALUE_MONOTONIC; + stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; stats[stat].unit = METRIC_VALUE_UNIT_COUNT; stats[stat].value.u64 = 0; strlcpy(stats[stat].name, bpf_kernel_counters_stats_names[stat], METRIC_NAME_MAX); @@ -1828,25 +1828,26 @@ const struct metrics_v2* scap_bpf_get_stats_v2(struct scap_engine_handle engine, strlcat(stats[offset].name, bpf_libbpf_stats_names[RUN_CNT], sizeof(stats[offset].name)); stats[offset].value.u64 = info.run_cnt; stats[offset].unit = METRIC_VALUE_UNIT_COUNT; - stats[offset].metric_type = METRIC_VALUE_MONOTONIC; + stats[offset].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; break; case RUN_TIME_NS: strlcat(stats[offset].name, bpf_libbpf_stats_names[RUN_TIME_NS], sizeof(stats[offset].name)); stats[offset].value.u64 = info.run_time_ns; stats[offset].unit = METRIC_VALUE_UNIT_TIME_NS_COUNT; - stats[offset].metric_type = METRIC_VALUE_MONOTONIC; + stats[offset].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; break; case AVG_TIME_NS: strlcat(stats[offset].name, bpf_libbpf_stats_names[AVG_TIME_NS], sizeof(stats[offset].name)); stats[offset].value.u64 = 0; stats[offset].unit = METRIC_VALUE_UNIT_TIME_NS; - stats[offset].metric_type = METRIC_VALUE_NON_MONOTONIC_CURRENT; + stats[offset].metric_type = METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT; if (info.run_cnt > 0) { stats[offset].value.u64 = info.run_time_ns / info.run_cnt; } break; default: + ASSERT(false); break; } offset++; diff --git a/userspace/libscap/engine/gvisor/scap_gvisor.cpp b/userspace/libscap/engine/gvisor/scap_gvisor.cpp index 5f89ebf093..19919f858d 100644 --- a/userspace/libscap/engine/gvisor/scap_gvisor.cpp +++ b/userspace/libscap/engine/gvisor/scap_gvisor.cpp @@ -434,7 +434,7 @@ const metrics_v2* engine::get_stats_v2(uint32_t flags, uint32_t* nstats, int32_t { stats[stat].type = METRIC_VALUE_TYPE_U64; stats[stat].unit = METRIC_VALUE_UNIT_COUNT; - stats[stat].metric_type = METRIC_VALUE_MONOTONIC; + stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; stats[stat].value.u64 = 0; strlcpy(stats[stat].name, gvisor_counters_stats_names[stat], METRIC_NAME_MAX); } diff --git a/userspace/libscap/engine/kmod/scap_kmod.c b/userspace/libscap/engine/kmod/scap_kmod.c index 136727efb7..aa2cdde46a 100644 --- a/userspace/libscap/engine/kmod/scap_kmod.c +++ b/userspace/libscap/engine/kmod/scap_kmod.c @@ -600,7 +600,7 @@ const struct metrics_v2* scap_kmod_get_stats_v2(struct scap_engine_handle engine stats[stat].type = METRIC_VALUE_TYPE_U64; stats[stat].flags = METRICS_V2_KERNEL_COUNTERS; stats[stat].unit = METRIC_VALUE_UNIT_COUNT; - stats[stat].metric_type = METRIC_VALUE_MONOTONIC; + stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; stats[stat].value.u64 = 0; strlcpy(stats[stat].name, kmod_kernel_counters_stats_names[stat], METRIC_NAME_MAX); } diff --git a/userspace/libscap/engine/source_plugin/source_plugin.c b/userspace/libscap/engine/source_plugin/source_plugin.c index 5853371ef4..760c7645fb 100644 --- a/userspace/libscap/engine/source_plugin/source_plugin.c +++ b/userspace/libscap/engine/source_plugin/source_plugin.c @@ -292,7 +292,7 @@ const struct metrics_v2* get_source_plugin_stats_v2(struct scap_engine_handle en stats[stat].type = METRIC_VALUE_TYPE_U64; stats[stat].value.u64 = 0; stats[stat].unit = METRIC_VALUE_UNIT_COUNT; - stats[stat].metric_type = METRIC_VALUE_MONOTONIC; + stats[stat].metric_type = METRIC_VALUE_METRIC_TYPE_MONOTONIC; strlcpy(stats[stat].name, source_plugin_counters_stats_names[stat], METRIC_NAME_MAX); } stats[N_EVTS].value.u64 = handle->m_nevts; diff --git a/userspace/libscap/metrics_v2.h b/userspace/libscap/metrics_v2.h index 6088a0a897..10f17b1958 100644 --- a/userspace/libscap/metrics_v2.h +++ b/userspace/libscap/metrics_v2.h @@ -58,6 +58,7 @@ typedef enum metrics_v2_value_type{ METRIC_VALUE_TYPE_D, METRIC_VALUE_TYPE_F, METRIC_VALUE_TYPE_I, + METRIC_VALUE_TYPE_MAX, } metrics_v2_value_type; typedef enum metrics_v2_value_unit{ @@ -72,11 +73,13 @@ typedef enum metrics_v2_value_unit{ METRIC_VALUE_UNIT_TIME_NS_COUNT, METRIC_VALUE_UNIT_TIME_S_COUNT, METRIC_VALUE_UNIT_TIME_TIMESTAMP_NS, + METRIC_VALUE_UNIT_MAX, } metrics_v2_value_unit; typedef enum metrics_v2_metric_type{ - METRIC_VALUE_MONOTONIC, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_MAX, } metrics_v2_metric_type; /*! diff --git a/userspace/libsinsp/metrics_collector.cpp b/userspace/libsinsp/metrics_collector.cpp index 413c050bf6..bacce9435b 100644 --- a/userspace/libsinsp/metrics_collector.cpp +++ b/userspace/libsinsp/metrics_collector.cpp @@ -61,6 +61,8 @@ static const char *const sinsp_stats_v2_resource_utilization_names[] = { [SINSP_STATS_V2_N_CONTAINERS] = "n_containers", }; +static_assert(sizeof(sinsp_stats_v2_resource_utilization_names) / sizeof(sinsp_stats_v2_resource_utilization_names[0]) == SINSP_MAX_STATS_V2, "sinsp_stats_v2_resource_utilization_names array size does not match expected size"); + // For simplicity, needs to stay in sync w/ typedef enum metrics_v2_value_unit // https://prometheus.io/docs/practices/naming/ or https://prometheus.io/docs/practices/naming/#base-units. static const char *const metrics_unit_name_mappings_prometheus[] = { @@ -77,11 +79,13 @@ static const char *const metrics_unit_name_mappings_prometheus[] = { [METRIC_VALUE_UNIT_TIME_TIMESTAMP_NS] = "timestamp_nanoseconds", }; +static_assert(sizeof(metrics_unit_name_mappings_prometheus) / sizeof(metrics_unit_name_mappings_prometheus[0]) == METRIC_VALUE_UNIT_MAX, "metrics_unit_name_mappings_prometheus array size does not match expected size"); + // For simplicity, needs to stay in sync w/ typedef enum metrics_v2_metric_type // https://github.com/prometheus/docs/blob/main/content/docs/instrumenting/exposition_formats.md static const char *const metrics_metric_type_name_mappings_prometheus[] = { - [METRIC_VALUE_MONOTONIC] = "counter", - [METRIC_VALUE_NON_MONOTONIC_CURRENT] = "gauge", + [METRIC_VALUE_METRIC_TYPE_MONOTONIC] = "counter", + [METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT] = "gauge", }; namespace libs::metrics { @@ -112,6 +116,8 @@ std::string metric_value_to_text(const metrics_v2& metric) case METRIC_VALUE_TYPE_I: value_text = std::to_string(metric.value.i); break; + default: + break; } return value_text; } @@ -242,6 +248,7 @@ void libs_metrics_collector::get_rss_vsz_pss_total_memory_and_open_fds(uint32_t * Get memory usage of the agent itself (referred to as calling process meaning /proc/self/) */ + // No need for scap_get_host_root since we look at the agents' own process, accessible from it's own pid namespace (if applicable) f = fopen("/proc/self/status", "r"); if(!f) { @@ -262,6 +269,7 @@ void libs_metrics_collector::get_rss_vsz_pss_total_memory_and_open_fds(uint32_t } fclose(f); + // No need for scap_get_host_root since we look at the agents' own process, accessible from it's own pid namespace (if applicable) f = fopen("/proc/self/smaps_rollup", "r"); if(!f) { @@ -283,6 +291,7 @@ void libs_metrics_collector::get_rss_vsz_pss_total_memory_and_open_fds(uint32_t * Get total host memory usage */ + // Using scap_get_host_root since we look at the memory usage of the underlying host snprintf(filepath, sizeof(filepath), "%s/proc/meminfo", scap_get_host_root()); f = fopen(filepath, "r"); if(!f) @@ -320,6 +329,7 @@ void libs_metrics_collector::get_rss_vsz_pss_total_memory_and_open_fds(uint32_t * File descriptor is a data structure used by a program to get a handle on a file */ + // Using scap_get_host_root since we look at the total open fds of the underlying host snprintf(filepath, sizeof(filepath), "%s/proc/sys/fs/file-nr", scap_get_host_root()); f = fopen(filepath, "r"); if(!f) @@ -361,6 +371,7 @@ void libs_metrics_collector::get_cpu_usage_and_total_procs(double start_time, do * /proc/uptime offers higher precision w/ 2 decimals. */ + // Using scap_get_host_root since we look at the uptime of the underlying host snprintf(filepath, sizeof(filepath), "%s/proc/uptime", scap_get_host_root()); f = fopen(filepath, "r"); if(!f) @@ -402,6 +413,7 @@ void libs_metrics_collector::get_cpu_usage_and_total_procs(double start_time, do * Get total host CPU usage (all CPUs) as percentage and retrieve number of procs currently running. */ + // Using scap_get_host_root since we look at the total CPU usage of the underlying host snprintf(filepath, sizeof(filepath), "%s/proc/stat", scap_get_host_root()); f = fopen(filepath, "r"); if(!f) @@ -447,6 +459,8 @@ uint64_t libs_metrics_collector::get_container_memory_used() const const char* filepath = getenv(SINSP_AGENT_CGROUP_MEM_PATH_ENV_VAR); if (filepath == nullptr) { + // No need for scap_get_host_root since we look at the container pid namespace (if applicable) + // Known collison for VM memory usage, but this default value is configurable filepath = "/sys/fs/cgroup/memory/memory.usage_in_bytes"; } @@ -511,35 +525,35 @@ void libs_metrics_collector::snapshot() METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_D, METRIC_VALUE_UNIT_PERC, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, cpu_usage_perc)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_RESOURCE_UTILIZATION_MEMORY_RSS], METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_MEMORY_KIBIBYTES, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, rss)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_RESOURCE_UTILIZATION_MEMORY_VSZ], METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_MEMORY_KIBIBYTES, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, vsz)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_RESOURCE_UTILIZATION_MEMORY_PSS], METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_MEMORY_KIBIBYTES, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, pss)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_RESOURCE_UTILIZATION_CONTAINER_MEMORY], METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_MEMORY_BYTES, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, container_memory_used)); // Resource utilization / load indicators of the underlying host @@ -547,28 +561,28 @@ void libs_metrics_collector::snapshot() METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_D, METRIC_VALUE_UNIT_PERC, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, host_cpu_usage_perc)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_RESOURCE_UTILIZATION_HOST_PROCS], METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, host_procs_running)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_RESOURCE_UTILIZATION_HOST_MEMORY], METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_MEMORY_KIBIBYTES, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, host_memory_used)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_RESOURCE_UTILIZATION_HOST_FDS], METRICS_V2_RESOURCE_UTILIZATION, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, host_open_fds)); } @@ -609,132 +623,132 @@ void libs_metrics_collector::snapshot() METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, n_threads)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_N_FDS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, n_fds)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_NONCACHED_FD_LOOKUPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_noncached_fd_lookups)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_CACHED_FD_LOOKUPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_cached_fd_lookups)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_FAILED_FD_LOOKUPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_failed_fd_lookups)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_ADDED_FDS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_added_fds)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_REMOVED_FDS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_removed_fds)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_STORED_EVTS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_stored_evts)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_STORE_EVTS_DROPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_store_evts_drops)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_RETRIEVED_EVTS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_retrieved_evts)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_RETRIEVE_EVTS_DROPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_retrieve_evts_drops)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_NONCACHED_THREAD_LOOKUPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_noncached_thread_lookups)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_CACHED_THREAD_LOOKUPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_cached_thread_lookups)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_FAILED_THREAD_LOOKUPS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_failed_thread_lookups)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_ADDED_THREADS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_added_threads)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_REMOVED_THREADS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_removed_threads)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_N_DROPS_FULL_THREADTABLE], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, sinsp_stats_v2->m_n_drops_full_threadtable)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_N_MISSING_CONTAINER_IMAGES], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, sinsp_stats_v2->m_n_missing_container_images)); m_metrics.emplace_back(new_metric(sinsp_stats_v2_resource_utilization_names[SINSP_STATS_V2_N_CONTAINERS], METRICS_V2_STATE_COUNTERS, METRIC_VALUE_TYPE_U32, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, sinsp_stats_v2->m_n_containers)); } } diff --git a/userspace/libsinsp/test/sinsp_metrics.ut.cpp b/userspace/libsinsp/test/sinsp_metrics.ut.cpp index 7adfeac109..049b9a67eb 100644 --- a/userspace/libsinsp/test/sinsp_metrics.ut.cpp +++ b/userspace/libsinsp/test/sinsp_metrics.ut.cpp @@ -133,35 +133,35 @@ testns_falco_kernel_release_info{raw_name="kernel_release",kernel_release="6.6.7 METRICS_V2_LIBBPF_STATS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, 76435525241UL)); fake_metrics_snapshot.emplace_back(libs_metrics_collector.new_metric("sys_enter.run_time_ns", METRICS_V2_LIBBPF_STATS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_TIME_NS_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, 16269369826392UL)); fake_metrics_snapshot.emplace_back(libs_metrics_collector.new_metric("sys_enter.avg_time_ns", METRICS_V2_LIBBPF_STATS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_TIME_NS, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, 203UL)); fake_metrics_snapshot.emplace_back(libs_metrics_collector.new_metric("n_drops", METRICS_V2_KERNEL_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, 674200UL)); fake_metrics_snapshot.emplace_back(libs_metrics_collector.new_metric("n_drops_buffer_total", METRICS_V2_KERNEL_COUNTERS, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, 5000UL)); // Simulate some derived metrics; critical for example for Falco consumer use cases @@ -169,14 +169,14 @@ testns_falco_kernel_release_info{raw_name="kernel_release",kernel_release="6.6.7 METRICS_V2_MISC, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_TIME_S_COUNT, - METRIC_VALUE_MONOTONIC, + METRIC_VALUE_METRIC_TYPE_MONOTONIC, 144UL)); fake_metrics_snapshot.emplace_back(libs_metrics_collector.new_metric("evt_rate_sec", METRICS_V2_MISC, METRIC_VALUE_TYPE_D, METRIC_VALUE_UNIT_TIME_S, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, 126065.4)); // Timestamps while they always go up should still be regarded as gauge from a Prometheus perspective @@ -185,7 +185,7 @@ testns_falco_kernel_release_info{raw_name="kernel_release",kernel_release="6.6.7 METRICS_V2_MISC, METRIC_VALUE_TYPE_U64, METRIC_VALUE_UNIT_TIME_TIMESTAMP_NS, - METRIC_VALUE_NON_MONOTONIC_CURRENT, + METRIC_VALUE_METRIC_TYPE_NON_MONOTONIC_CURRENT, 1708753667000000000UL)); for (auto& metric: fake_metrics_snapshot)