diff options
Diffstat (limited to '')
-rw-r--r-- | src/collectors/cgroups.plugin/sys_fs_cgroup.c (renamed from collectors/cgroups.plugin/sys_fs_cgroup.c) | 116 |
1 files changed, 25 insertions, 91 deletions
diff --git a/collectors/cgroups.plugin/sys_fs_cgroup.c b/src/collectors/cgroups.plugin/sys_fs_cgroup.c index 705edf6f7..fd30b4acc 100644 --- a/collectors/cgroups.plugin/sys_fs_cgroup.c +++ b/src/collectors/cgroups.plugin/sys_fs_cgroup.c @@ -85,11 +85,6 @@ struct cgroups_systemd_config_setting cgroups_systemd_options[] = { { .name = NULL, .setting = SYSTEMD_CGROUP_ERR }, }; -// Shared memory with information from detected cgroups -netdata_ebpf_cgroup_shm_t shm_cgroup_ebpf = {NULL, NULL}; -int shm_fd_cgroup_ebpf = -1; -sem_t *shm_mutex_cgroup_ebpf = SEM_FAILED; - struct discovery_thread discovery_thread; @@ -255,7 +250,7 @@ void read_cgroup_plugin_configuration() { if(cgroup_update_every < localhost->rrd_update_every) cgroup_update_every = localhost->rrd_update_every; - cgroup_check_for_new_every = (int)config_get_number("plugin:cgroups", "check for new cgroups every", (long long)cgroup_check_for_new_every * (long long)cgroup_update_every); + cgroup_check_for_new_every = (int)config_get_number("plugin:cgroups", "check for new cgroups every", cgroup_check_for_new_every); if(cgroup_check_for_new_every < cgroup_update_every) cgroup_check_for_new_every = cgroup_update_every; @@ -418,6 +413,8 @@ void read_cgroup_plugin_configuration() { " !*/init.scope " // ignore init.scope " !/system.slice/run-*.scope " // ignore system.slice/run-XXXX.scope + " *user.slice/docker-*" // allow docker rootless containers + " !*user.slice*" // ignore the rest stuff in user.slice " *.scope " // we need all other *.scope for sure // ---------------------------------------------------------------- @@ -452,6 +449,7 @@ void read_cgroup_plugin_configuration() { " !/lxc.monitor* " " !/lxc.pivot " " !/lxc.payload " + " !*lxcfs.service/.control" " !/machine " " !/qemu " " !/system " @@ -474,7 +472,6 @@ void read_cgroup_plugin_configuration() { " !/system " " !/systemd " " !/user " - " !/user.slice " " !/lxc/*/* " // #2161 #2649 " !/lxc.monitor " " !/lxc.payload/*/* " @@ -526,63 +523,6 @@ void read_cgroup_plugin_configuration() { mountinfo_free_all(root); } -void netdata_cgroup_ebpf_set_values(size_t length) -{ - sem_wait(shm_mutex_cgroup_ebpf); - - shm_cgroup_ebpf.header->cgroup_max = cgroup_root_max; - shm_cgroup_ebpf.header->systemd_enabled = cgroup_enable_systemd_services | - cgroup_enable_systemd_services_detailed_memory | - cgroup_used_memory; - shm_cgroup_ebpf.header->body_length = length; - - sem_post(shm_mutex_cgroup_ebpf); -} - -void netdata_cgroup_ebpf_initialize_shm() -{ - shm_fd_cgroup_ebpf = shm_open(NETDATA_SHARED_MEMORY_EBPF_CGROUP_NAME, O_CREAT | O_RDWR, 0660); - if (shm_fd_cgroup_ebpf < 0) { - collector_error("Cannot initialize shared memory used by cgroup and eBPF, integration won't happen."); - return; - } - - size_t length = sizeof(netdata_ebpf_cgroup_shm_header_t) + cgroup_root_max * sizeof(netdata_ebpf_cgroup_shm_body_t); - if (ftruncate(shm_fd_cgroup_ebpf, length)) { - collector_error("Cannot set size for shared memory."); - goto end_init_shm; - } - - shm_cgroup_ebpf.header = (netdata_ebpf_cgroup_shm_header_t *) mmap(NULL, length, - PROT_READ | PROT_WRITE, MAP_SHARED, - shm_fd_cgroup_ebpf, 0); - - if (unlikely(MAP_FAILED == shm_cgroup_ebpf.header)) { - shm_cgroup_ebpf.header = NULL; - collector_error("Cannot map shared memory used between cgroup and eBPF, integration won't happen"); - goto end_init_shm; - } - shm_cgroup_ebpf.body = (netdata_ebpf_cgroup_shm_body_t *) ((char *)shm_cgroup_ebpf.header + - sizeof(netdata_ebpf_cgroup_shm_header_t)); - - shm_mutex_cgroup_ebpf = sem_open(NETDATA_NAMED_SEMAPHORE_EBPF_CGROUP_NAME, O_CREAT, - S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, 1); - - if (shm_mutex_cgroup_ebpf != SEM_FAILED) { - netdata_cgroup_ebpf_set_values(length); - return; - } - - collector_error("Cannot create semaphore, integration between eBPF and cgroup won't happen"); - munmap(shm_cgroup_ebpf.header, length); - shm_cgroup_ebpf.header = NULL; - -end_init_shm: - close(shm_fd_cgroup_ebpf); - shm_fd_cgroup_ebpf = -1; - shm_unlink(NETDATA_SHARED_MEMORY_EBPF_CGROUP_NAME); -} - // --------------------------------------------------------------------------------------------- static unsigned long long calc_delta(unsigned long long curr, unsigned long long prev) { @@ -1280,12 +1220,12 @@ cpu_limits2_err: static inline int update_memory_limits(struct cgroup *cg) { char **filename = &cg->filename_memory_limit; - const RRDSETVAR_ACQUIRED **chart_var = &cg->chart_var_memory_limit; + const RRDVAR_ACQUIRED **chart_var = &cg->chart_var_memory_limit; unsigned long long *value = &cg->memory_limit; if(*filename) { if(unlikely(!*chart_var)) { - *chart_var = rrdsetvar_custom_chart_variable_add_and_acquire(cg->st_mem_usage, "memory_limit"); + *chart_var = rrdvar_chart_variable_add_and_acquire(cg->st_mem_usage, "memory_limit"); if(!*chart_var) { collector_error("Cannot create cgroup %s chart variable '%s'. Will not update its limit anymore.", cg->id, "memory_limit"); freez(*filename); @@ -1301,12 +1241,13 @@ static inline int update_memory_limits(struct cgroup *cg) { *filename = NULL; } else { - rrdsetvar_custom_chart_variable_set(cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value) / (1024.0 * 1024.0)); + rrdvar_chart_variable_set( + cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value) / (1024.0 * 1024.0)); return 1; } } else { - char buffer[30 + 1]; - int ret = read_file(*filename, buffer, 30); + char buffer[32]; + int ret = read_txt_file(*filename, buffer, sizeof(buffer)); if(ret) { collector_error("Cannot refresh cgroup %s memory limit by reading '%s'. Will not update its limit anymore.", cg->id, *filename); freez(*filename); @@ -1316,11 +1257,12 @@ static inline int update_memory_limits(struct cgroup *cg) { char *s = "max\n\0"; if(strcmp(s, buffer) == 0){ *value = UINT64_MAX; - rrdsetvar_custom_chart_variable_set(cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value) / (1024.0 * 1024.0)); + rrdvar_chart_variable_set( + cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value) / (1024.0 * 1024.0)); return 1; } *value = str2ull(buffer, NULL); - rrdsetvar_custom_chart_variable_set(cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value) / (1024.0 * 1024.0)); + rrdvar_chart_variable_set(cg->st_mem_usage, *chart_var, (NETDATA_DOUBLE)(*value) / (1024.0 * 1024.0)); return 1; } } @@ -1398,7 +1340,7 @@ void update_cgroup_charts() { } if(unlikely(!cg->chart_var_cpu_limit)) { - cg->chart_var_cpu_limit = rrdsetvar_custom_chart_variable_add_and_acquire(cg->st_cpu, "cpu_limit"); + cg->chart_var_cpu_limit = rrdvar_chart_variable_add_and_acquire(cg->st_cpu, "cpu_limit"); if(!cg->chart_var_cpu_limit) { collector_error("Cannot create cgroup %s chart variable 'cpu_limit'. Will not update its limit anymore.", cg->id); if(cg->filename_cpuset_cpus) freez(cg->filename_cpuset_cpus); @@ -1428,7 +1370,7 @@ void update_cgroup_charts() { rrdset_is_obsolete___safe_from_collector_thread(cg->st_cpu_limit); cg->st_cpu_limit = NULL; } - rrdsetvar_custom_chart_variable_set(cg->st_cpu, cg->chart_var_cpu_limit, NAN); + rrdvar_chart_variable_set(cg->st_cpu, cg->chart_var_cpu_limit, NAN); } } } @@ -1592,19 +1534,6 @@ static void cgroup_main_cleanup(void *ptr) { } } - if (shm_mutex_cgroup_ebpf != SEM_FAILED) { - sem_close(shm_mutex_cgroup_ebpf); - } - - if (shm_cgroup_ebpf.header) { - shm_cgroup_ebpf.header->cgroup_root_count = 0; - munmap(shm_cgroup_ebpf.header, shm_cgroup_ebpf.header->body_length); - } - - if (shm_fd_cgroup_ebpf > 0) { - close(shm_fd_cgroup_ebpf); - } - static_thread->enabled = NETDATA_MAIN_THREAD_EXITED; } @@ -1641,8 +1570,6 @@ void *cgroups_main(void *ptr) { cgroup_read_host_total_ram(); - netdata_cgroup_ebpf_initialize_shm(); - if (uv_mutex_init(&cgroup_root_mutex)) { collector_error("CGROUP: cannot initialize mutex for the main cgroup list"); goto exit; @@ -1669,10 +1596,17 @@ void *cgroups_main(void *ptr) { // we register this only on localhost // for the other nodes, the origin server should register it - rrd_collector_started(); // this creates a collector that runs for as long as netdata runs cgroup_netdev_link_init(); - rrd_function_add(localhost, NULL, "containers-vms", 10, RRDFUNCTIONS_CGTOP_HELP, true, cgroup_function_cgroup_top, NULL); - rrd_function_add(localhost, NULL, "systemd-services", 10, RRDFUNCTIONS_CGTOP_HELP, true, cgroup_function_systemd_top, NULL); + + rrd_function_add_inline(localhost, NULL, "containers-vms", 10, + RRDFUNCTIONS_PRIORITY_DEFAULT / 2, RRDFUNCTIONS_CGTOP_HELP, + "top", HTTP_ACCESS_ANONYMOUS_DATA, + cgroup_function_cgroup_top); + + rrd_function_add_inline(localhost, NULL, "systemd-services", 10, + RRDFUNCTIONS_PRIORITY_DEFAULT / 3, RRDFUNCTIONS_SYSTEMD_SERVICES_HELP, + "top", HTTP_ACCESS_ANONYMOUS_DATA, + cgroup_function_systemd_top); heartbeat_t hb; heartbeat_init(&hb); |