summaryrefslogtreecommitdiffstats
path: root/collectors
diff options
context:
space:
mode:
authorthiagoftsm <thiagoftsm@gmail.com>2022-06-01 08:33:53 +0000
committerGitHub <noreply@github.com>2022-06-01 11:33:53 +0300
commita16fbcef1649b898617239dd108c8515618c3488 (patch)
tree981e50ebc561717cbfd2b395431ee2f059d7585e /collectors
parentd5d67cbf5a7200adefa55f05fbbb4e7009901bd6 (diff)
Fix disabled apps (ebpf.plugin) (#13044)
Diffstat (limited to 'collectors')
-rw-r--r--collectors/ebpf.plugin/ebpf.c24
-rw-r--r--collectors/ebpf.plugin/ebpf_apps.c3
-rw-r--r--collectors/ebpf.plugin/ebpf_oomkill.c9
-rw-r--r--collectors/ebpf.plugin/ebpf_process.c3
4 files changed, 37 insertions, 2 deletions
diff --git a/collectors/ebpf.plugin/ebpf.c b/collectors/ebpf.plugin/ebpf.c
index 9f411bb8bf..2b25f50a31 100644
--- a/collectors/ebpf.plugin/ebpf.c
+++ b/collectors/ebpf.plugin/ebpf.c
@@ -1083,10 +1083,32 @@ int ebpf_start_pthread_variables()
}
/**
+ * Am I collecting PIDs?
+ *
+ * Test if eBPF plugin needs to collect PID information.
+ *
+ * @return It returns 1 if at least one thread needs to collect the data, or zero otherwise.
+ */
+static inline uint32_t ebpf_am_i_collect_pids()
+{
+ uint32_t ret = 0;
+ int i;
+ for (i = 0; ebpf_modules[i].thread_name; i++) {
+ ret |= ebpf_modules[i].cgroup_charts | ebpf_modules[i].apps_charts;
+ }
+
+ return ret;
+}
+
+/**
* Allocate the vectors used for all threads.
*/
static void ebpf_allocate_common_vectors()
{
+ if (unlikely(!ebpf_am_i_collect_pids())) {
+ return;
+ }
+
all_pids = callocz((size_t)pid_max, sizeof(struct pid_stat *));
global_process_stat = callocz((size_t)ebpf_nprocs, sizeof(ebpf_process_stat_t));
}
@@ -1427,8 +1449,6 @@ void set_global_variables()
/**
* Load collector config
- *
- * @param lmode the mode that will be used for them.
*/
static inline void ebpf_load_thread_config()
{
diff --git a/collectors/ebpf.plugin/ebpf_apps.c b/collectors/ebpf.plugin/ebpf_apps.c
index abc1126422..2c65db8d11 100644
--- a/collectors/ebpf.plugin/ebpf_apps.c
+++ b/collectors/ebpf.plugin/ebpf_apps.c
@@ -1091,6 +1091,9 @@ static inline void aggregate_pid_on_target(struct target *w, struct pid_stat *p,
*/
void collect_data_for_all_processes(int tbl_pid_stats_fd)
{
+ if (unlikely(!all_pids))
+ return;
+
struct pid_stat *pids = root_of_pids; // global list of all processes running
while (pids) {
if (pids->updated_twice) {
diff --git a/collectors/ebpf.plugin/ebpf_oomkill.c b/collectors/ebpf.plugin/ebpf_oomkill.c
index f38801875c..463a329049 100644
--- a/collectors/ebpf.plugin/ebpf_oomkill.c
+++ b/collectors/ebpf.plugin/ebpf_oomkill.c
@@ -377,6 +377,15 @@ void *ebpf_oomkill_thread(void *ptr)
ebpf_module_t *em = (ebpf_module_t *)ptr;
em->maps = oomkill_maps;
+ if (unlikely(!all_pids || !em->apps_charts)) {
+ // When we are not running integration with apps, we won't fill necessary variables for this thread to run, so
+ // we need to disable it.
+ if (em->enabled)
+ info("Disabling OOMKILL thread, because apps integration is completely disabled.");
+
+ em->enabled = 0;
+ }
+
if (!em->enabled) {
goto endoomkill;
}
diff --git a/collectors/ebpf.plugin/ebpf_process.c b/collectors/ebpf.plugin/ebpf_process.c
index d61bdf66c1..f894f07076 100644
--- a/collectors/ebpf.plugin/ebpf_process.c
+++ b/collectors/ebpf.plugin/ebpf_process.c
@@ -579,6 +579,9 @@ void ebpf_process_create_apps_charts(struct ebpf_module *em, void *ptr)
*/
static void ebpf_create_apps_charts(struct target *root)
{
+ if (unlikely(!all_pids))
+ return;
+
struct target *w;
int newly_added = 0;