summaryrefslogtreecommitdiffstats
path: root/src/fluent-bit/plugins/in_podman_metrics
diff options
context:
space:
mode:
Diffstat (limited to 'src/fluent-bit/plugins/in_podman_metrics')
-rw-r--r--src/fluent-bit/plugins/in_podman_metrics/CMakeLists.txt6
-rw-r--r--src/fluent-bit/plugins/in_podman_metrics/podman_metrics.c515
-rw-r--r--src/fluent-bit/plugins/in_podman_metrics/podman_metrics.h98
-rw-r--r--src/fluent-bit/plugins/in_podman_metrics/podman_metrics_config.h211
-rw-r--r--src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.c407
-rw-r--r--src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.h51
6 files changed, 0 insertions, 1288 deletions
diff --git a/src/fluent-bit/plugins/in_podman_metrics/CMakeLists.txt b/src/fluent-bit/plugins/in_podman_metrics/CMakeLists.txt
deleted file mode 100644
index 9de0e5331..000000000
--- a/src/fluent-bit/plugins/in_podman_metrics/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-set(src
- podman_metrics.c
- podman_metrics_data.c
- )
-
-FLB_PLUGIN(in_podman_metrics "${src}" "")
diff --git a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics.c b/src/fluent-bit/plugins/in_podman_metrics/podman_metrics.c
deleted file mode 100644
index df64452ff..000000000
--- a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics.c
+++ /dev/null
@@ -1,515 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-/* Fluent Bit
- * ==========
- * Copyright (C) 2015-2022 The Fluent Bit Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <fluent-bit/flb_input_plugin.h>
-#include <fluent-bit/flb_config.h>
-#include <fluent-bit/flb_metrics.h>
-#include <fluent-bit/flb_metrics_exporter.h>
-#include <fluent-bit/flb_jsmn.h>
-
-#include <monkey/mk_core/mk_list.h>
-
-#include "podman_metrics.h"
-#include "podman_metrics_config.h"
-#include "podman_metrics_data.h"
-
-/*
- * Collect information about podman containers (ID and Name) from podman configuration
- * file (default is /var/lib/containers/storage/overlay-containers/containers.json).
- * Since flb_jsmn library show JSON as a tree, search for objects with parent 0 (objects
- * that are children to root array, and in them, search for ID and name (which is also
- * an array.
- */
-static int collect_container_data(struct flb_in_metrics *ctx)
-{
- /* Buffers for reading data from JSON */
- char *buffer;
- char name[CONTAINER_NAME_SIZE];
- char id[CONTAINER_ID_SIZE];
- char image_name[IMAGE_NAME_SIZE];
- char metadata[CONTAINER_METADATA_SIZE];
- char *metadata_token_start;
- char *metadata_token_stop;
- int metadata_token_size;
-
- int array_id;
- int r, i, j;
- size_t read_bytes = 0;
- int collected_containers = 0;
- int token_len;
-
- jsmn_parser p;
- jsmntok_t t[JSON_TOKENS];
-
- flb_utils_read_file(ctx->config, &buffer, &read_bytes);
- if (!read_bytes) {
- flb_plg_warn(ctx->ins, "Failed to open %s", ctx->config);
- return -1;
- }
- buffer[read_bytes] = 0;
- flb_plg_debug(ctx->ins, "Read %zu bytes", read_bytes);
-
- jsmn_init(&p);
- r = jsmn_parse(&p, buffer, strlen(buffer), t, sizeof(t) / sizeof(t[0]));
- if (r < 0) {
- flb_plg_warn(ctx->ins, "Failed to parse JSON %d: %s", r, buffer);
- free(buffer);
- return -1;
- }
-
- flb_plg_debug(ctx->ins, "Got %d nested tokens", t[0].size);
-
- if (r < 1 || t[0].type != JSMN_ARRAY) {
- flb_plg_warn(ctx->ins, "Expected array at the json root");
- free(buffer);
- return -1;
- }
-
- for (i=0; i<r; i++) {
- if (t[i].type == JSMN_STRING) {
- if (sizeof(JSON_FIELD_ID)-1 == t[i].end - t[i].start &&
- strncmp(buffer + t[i].start, JSON_FIELD_ID, t[i].end - t[i].start) == 0) {
- token_len = t[i + 1].end - t[i + 1].start;
- strncpy(id, buffer + t[i+1].start, t[i + 1].end - t[i + 1].start);
- id[token_len] = '\0';
- flb_plg_trace(ctx->ins, "Found id %s", id);
- }
- else if (sizeof(JSON_FIELD_NAMES)-1 == t[i].end - t[i].start &&
- strncmp(buffer + t[i].start, JSON_FIELD_NAMES, t[i].end - t[i].start) == 0) {
- array_id = i + 1;
- if (t[array_id].type == JSMN_ARRAY) {
- j = array_id + 1;
- while (t[j].parent == array_id)
- {
- strncpy(name, buffer + t[j].start, t[j].end - t[j].start);
- name[t[j].end - t[j].start] = '\0';
- flb_plg_trace(ctx->ins, "Found name %s", name);
- j++;
- }
- }
- }
- else if (sizeof(JSON_FIELD_METADATA)-1 == t[i].end - t[i].start &&
- strncmp(buffer + t[i].start, JSON_FIELD_METADATA, t[i].end - t[i].start) == 0) {
- token_len = t[i + 1].end - t[i + 1].start;
- strncpy(metadata, buffer + t[i+1].start, t[i + 1].end - t[i + 1].start);
- metadata[token_len] = '\0';
-
- metadata_token_start = strstr(metadata, JSON_SUBFIELD_IMAGE_NAME);
- if (metadata_token_start) {
- metadata_token_stop = strstr(metadata_token_start + JSON_SUBFIELD_SIZE_IMAGE_NAME+1, "\\\"");
- metadata_token_size = metadata_token_stop - metadata_token_start - JSON_SUBFIELD_SIZE_IMAGE_NAME;
-
- strncpy(image_name, metadata_token_start+JSON_SUBFIELD_SIZE_IMAGE_NAME, metadata_token_size);
- image_name[metadata_token_size] = '\0';
-
- flb_plg_trace(ctx->ins, "Found image name %s", image_name);
- add_container_to_list(ctx, id, name, image_name);
- }
- else {
- flb_plg_warn(ctx->ins, "Image name was not found for %s", id);
- add_container_to_list(ctx, id, name, "unknown");
- }
- collected_containers++;
- }
- }
- }
-
- flb_plg_debug(ctx->ins, "Collected %d containers from podman config file", collected_containers);
- free(buffer);
- return collected_containers;
-}
-
-/*
- * Create structure instance based on previously found id, name and image name. Set all its values (like
- * memory or cpu to UINT64_MAX, in case it won't be found later. This function also adds this structure
- * to internal list, so it can be found by iteration later on.
- */
-static int add_container_to_list(struct flb_in_metrics *ctx, flb_sds_t id, flb_sds_t name, flb_sds_t image_name)
-{
- struct container *cnt;
- cnt = flb_malloc(sizeof(struct container));
- if (!cnt) {
- flb_errno();
- return -1;
- }
- cnt->id = flb_sds_create(id);
- cnt->name = flb_sds_create(name);
- cnt->image_name = flb_sds_create(image_name);
-
- cnt->memory_usage = UINT64_MAX;
- cnt->memory_max_usage = UINT64_MAX;
- cnt->memory_limit = UINT64_MAX;
- cnt->rss = UINT64_MAX;
- cnt->cpu_user = UINT64_MAX;
- cnt->cpu = UINT64_MAX;
-
- mk_list_init(&cnt->net_data);
-
- mk_list_add(&cnt->_head, &ctx->items);
- return 0;
-}
-
-/*
- * Iterate over container list and remove collected data
- */
-static int destroy_container_list(struct flb_in_metrics *ctx)
-{
- struct container *cnt;
- struct net_iface *iface;
- struct sysfs_path *pth;
- struct mk_list *head;
- struct mk_list *tmp;
- struct mk_list *inner_head;
- struct mk_list *inner_tmp;
-
- mk_list_foreach_safe(head, tmp, &ctx->items) {
- cnt = mk_list_entry(head, struct container, _head);
- flb_plg_debug(ctx->ins, "Destroying container data (id: %s, name: %s", cnt->id, cnt->name);
-
- flb_sds_destroy(cnt->id);
- flb_sds_destroy(cnt->name);
- flb_sds_destroy(cnt->image_name);
- mk_list_foreach_safe(inner_head, inner_tmp, &cnt->net_data) {
- iface = mk_list_entry(inner_head, struct net_iface, _head);
- flb_sds_destroy(iface->name);
- mk_list_del(&iface->_head);
- flb_free(iface);
- }
- mk_list_del(&cnt->_head);
- flb_free(cnt);
- }
-
- mk_list_foreach_safe(head, tmp, &ctx->sysfs_items) {
- pth = mk_list_entry(head, struct sysfs_path, _head);
- flb_plg_trace(ctx->ins, "Destroying sysfs data (name: %s", pth->path);
- flb_sds_destroy(pth->path);
- mk_list_del(&pth->_head);
- flb_free(pth);
- }
- return 0;
-}
-
-
-/*
- * Create counter for given metric name, using name, image name and value as counter labels. Counters
- * are created per counter name, so they are "shared" between multiple containers - counter
- * name remains the same, only labels like ID are changed.
- * This function creates counter only once per counter name - every next call only sets counter
- * value for specific labels.
- */
-static int create_counter(struct flb_in_metrics *ctx, struct cmt_counter **counter, flb_sds_t id, flb_sds_t name, flb_sds_t image_name, flb_sds_t metric_prefix,
- flb_sds_t *fields, flb_sds_t metric_name, flb_sds_t description, flb_sds_t interface, uint64_t value)
-{
- flb_sds_t *labels;
- uint64_t fvalue = value;
-
- int label_count;
- if (value == UINT64_MAX) {
- flb_plg_debug(ctx->ins, "Ignoring invalid counter for %s, %s_%s_%s", name, COUNTER_PREFIX, metric_prefix, metric_name);
- return -1;
- }
-
- if (strcmp(metric_name, COUNTER_CPU) == 0 || strcmp(metric_name, COUNTER_CPU_USER) == 0) {
- fvalue = fvalue / 1000000000;
- flb_plg_trace(ctx->ins, "Converting %s from nanoseconds to seconds (%lu -> %lu)", metric_name, value, fvalue);
-
- }
-
- if (interface == NULL) {
- labels = (char *[]){id, name, image_name};
- label_count = 3;
- }
- else {
- labels = (char *[]){id, name, image_name, interface};
- label_count = 4;
- }
-
- /* if counter was not yet created, it means that this function is called for the first time per counter type */
- if (*counter == NULL) {
- flb_plg_debug(ctx->ins, "Creating counter for %s, %s_%s_%s", name, COUNTER_PREFIX, metric_prefix, metric_name);
- *counter = cmt_counter_create(ctx->ins->cmt, COUNTER_PREFIX, metric_prefix, metric_name, description, label_count, fields);
- }
-
- /* Allow setting value that is not grater that current one (if, for example, memory usage stays exactly the same) */
- cmt_counter_allow_reset(*counter);
- flb_plg_debug(ctx->ins, "Set counter for %s, %s_%s_%s: %lu", name, COUNTER_PREFIX, metric_prefix, metric_name, fvalue);
- if (cmt_counter_set(*counter, cfl_time_now(), fvalue, label_count, labels) == -1) {
- flb_plg_warn(ctx->ins, "Failed to set counter for %s, %s_%s_%s", name, COUNTER_PREFIX, metric_prefix, metric_name);
- return -1;
- }
- return 0;
-}
-
-/*
- * Create gauge for given metric name, using name, image name and value as counter labels. Gauges
- * are created per counter name, so they are "shared" between multiple containers - counter
- * name remains the same, only labels like ID are changed.
- * This function creates gauge only once per counter name - every next call only sets gauge
- * value for specific labels.
- */
-static int create_gauge(struct flb_in_metrics *ctx, struct cmt_gauge **gauge, flb_sds_t id, flb_sds_t name, flb_sds_t image_name, flb_sds_t metric_prefix,
- flb_sds_t *fields, flb_sds_t metric_name, flb_sds_t description, flb_sds_t interface, uint64_t value)
-{
- flb_sds_t *labels;
- int label_count;
- if (value == UINT64_MAX) {
- flb_plg_debug(ctx->ins, "Ignoring invalid gauge for %s, %s_%s_%s", name, COUNTER_PREFIX, metric_prefix, metric_name);
- return -1;
- }
-
- labels = (char *[]){id, name, image_name};
- label_count = 3;
-
- /* if gauge was not yet created, it means that this function is called for the first time per counter type */
- if (*gauge == NULL) {
- flb_plg_debug(ctx->ins, "Creating gauge for %s, %s_%s_%s", name, COUNTER_PREFIX, metric_prefix, metric_name);
- *gauge = cmt_gauge_create(ctx->ins->cmt, COUNTER_PREFIX, metric_prefix, metric_name, description, label_count, fields);
- }
-
- flb_plg_debug(ctx->ins, "Set gauge for %s, %s_%s_%s: %lu", name, COUNTER_PREFIX, metric_prefix, metric_name, value);
- if (cmt_gauge_set(*gauge, cfl_time_now(), value, label_count, labels) == -1) {
- flb_plg_warn(ctx->ins, "Failed to set gauge for %s, %s_%s_%s", name, COUNTER_PREFIX, metric_prefix, metric_name);
- return -1;
- }
- return 0;
-}
-
-/*
- * Call create_counter for every counter type defined in this plugin.
- *
- * Currently supported counters are:
- * - container_memory_usage_bytes
- * - container_memory_max_usage_bytes
- * - container_memory_rss
- * - container_spec_memory_limit_bytes
- * - container_cpu_user_seconds_total
- * - container_cpu_usage_seconds_total
- * - container_network_receive_bytes_total
- * - container_network_receive_errors_total
- * - container_network_transmit_bytes_total
- * - container_network_transmit_errors_total
- */
-static int create_counters(struct flb_in_metrics *ctx)
-{
- struct container *cnt;
- struct net_iface *iface;
- struct mk_list *head;
- struct mk_list *tmp;
- struct mk_list *inner_head;
- struct mk_list *inner_tmp;
-
- mk_list_foreach_safe(head, tmp, &ctx->items)
- {
- cnt = mk_list_entry(head, struct container, _head);
- create_counter(ctx, &ctx->c_memory_usage, cnt->id, cnt->name, cnt->image_name, COUNTER_MEMORY_PREFIX, FIELDS_METRIC, COUNTER_MEMORY_USAGE,
- DESCRIPTION_MEMORY_USAGE, NULL, cnt->memory_usage);
- create_counter(ctx, &ctx->c_memory_max_usage, cnt->id, cnt->name, cnt->image_name, COUNTER_MEMORY_PREFIX, FIELDS_METRIC, COUNTER_MEMORY_MAX_USAGE,
- DESCRIPTION_MEMORY_MAX_USAGE, NULL, cnt->memory_max_usage);
- create_counter(ctx, &ctx->c_memory_limit, cnt->id, cnt->name, cnt->image_name, COUNTER_SPEC_MEMORY_PREFIX, FIELDS_METRIC, COUNTER_MEMORY_LIMIT,
- DESCRIPTION_MEMORY_LIMIT, NULL, cnt->memory_limit);
- create_gauge(ctx, &ctx->g_rss, cnt->id, cnt->name, cnt->image_name, COUNTER_MEMORY_PREFIX, FIELDS_METRIC, GAUGE_MEMORY_RSS,
- DESCRIPTION_MEMORY_RSS, NULL, cnt->rss);
- create_counter(ctx, &ctx->c_cpu_user, cnt->id, cnt->name, cnt->image_name, COUNTER_CPU_PREFIX, FIELDS_METRIC, COUNTER_CPU_USER,
- DESCRIPTION_CPU_USER, NULL, cnt->cpu_user);
- create_counter(ctx, &ctx->c_cpu, cnt->id, cnt->name, cnt->image_name, COUNTER_CPU_PREFIX, FIELDS_METRIC, COUNTER_CPU,
- DESCRIPTION_CPU, NULL, cnt->cpu);
- mk_list_foreach_safe(inner_head, inner_tmp, &cnt->net_data)
- {
- iface = mk_list_entry(inner_head, struct net_iface, _head);
- create_counter(ctx, &ctx->rx_bytes, cnt->id, cnt->name, cnt->image_name, COUNTER_NETWORK_PREFIX, FIELDS_METRIC_WITH_IFACE, COUNTER_RX_BYTES,
- DESCRIPTION_RX_BYTES, iface->name, iface->rx_bytes);
- create_counter(ctx, &ctx->rx_errors, cnt->id, cnt->name, cnt->image_name, COUNTER_NETWORK_PREFIX, FIELDS_METRIC_WITH_IFACE, COUNTER_RX_ERRORS,
- DESCRIPTION_RX_ERRORS, iface->name, iface->rx_errors);
- create_counter(ctx, &ctx->tx_bytes, cnt->id, cnt->name, cnt->image_name, COUNTER_NETWORK_PREFIX, FIELDS_METRIC_WITH_IFACE, COUNTER_TX_BYTES,
- DESCRIPTION_TX_BYTES, iface->name, iface->tx_bytes);
- create_counter(ctx, &ctx->tx_errors, cnt->id, cnt->name, cnt->image_name, COUNTER_NETWORK_PREFIX, FIELDS_METRIC_WITH_IFACE, COUNTER_TX_ERRORS,
- DESCRIPTION_TX_ERRORS, iface->name, iface->tx_errors);
- }
- }
- return 0;
-}
-
-/* Main function. Destroy (optionally) previous data, gather container data and
- * create counters.
- */
-static int scrape_metrics(struct flb_config *config, struct flb_in_metrics *ctx)
-{
- uint64_t start_ts = cfl_time_now();
- flb_plg_debug(ctx->ins, "Starting to scrape podman metrics");
- if (destroy_container_list(ctx) == -1) {
- flb_plg_error(ctx->ins, "Could not destroy previous container data");
- return -1;
- }
-
- if (collect_container_data(ctx) == -1) {
- flb_plg_error(ctx->ins, "Could not collect container ids");
- return -1;
- }
-
- if (collect_sysfs_directories(ctx, ctx->sysfs_path) == -1)
- {
- flb_plg_error(ctx->ins, "Could not collect sysfs data");
- return -1;
- }
-
- if (ctx->cgroup_version == CGROUP_V1) {
- if (fill_counters_with_sysfs_data_v1(ctx) == -1) {
- flb_plg_error(ctx->ins, "Could not collect V1 sysfs data");
- return -1;
- }
- }
- else if (ctx->cgroup_version == CGROUP_V2) {
- if (fill_counters_with_sysfs_data_v2(ctx) == -1) {
- flb_plg_error(ctx->ins, "Could not collect V2 sysfs data");
- return -1;
- }
- }
-
- if (create_counters(ctx) == -1) {
- flb_plg_error(ctx->ins, "Could not create container counters");
- return -1;
- }
-
- if (flb_input_metrics_append(ctx->ins, NULL, 0, ctx->ins->cmt) == -1) {
- flb_plg_error(ctx->ins, "Could not append metrics");
- return -1;
- }
-
- flb_plg_info(ctx->ins, "Scraping metrics took %luns", cfl_time_now() - start_ts);
- return 0;
-}
-
-/*
- * Call scrape_metrics function every `scrape interval`.
- */
-static int cb_metrics_collect_runtime(struct flb_input_instance *ins, struct flb_config *config, void *in_context)
-{
- return scrape_metrics(config, in_context);
-}
-
-/*
- * Initialize plugin, setup config file path and (optionally) scrape container
- * data (if `scrape_at_start` is set).
- */
-static int in_metrics_init(struct flb_input_instance *in, struct flb_config *config, void *data)
-{
- struct flb_in_metrics *ctx;
- int coll_fd_runtime;
-
- ctx = flb_calloc(1, sizeof(struct flb_in_metrics));
- if (!ctx) {
- return -1;
- }
- ctx->ins = in;
-
- ctx->c_memory_usage = NULL;
- ctx->c_memory_max_usage = NULL;
- ctx->g_rss = NULL;
- ctx->c_memory_limit = NULL;
- ctx->c_cpu_user = NULL;
- ctx->c_cpu = NULL;
- ctx->rx_bytes = NULL;
- ctx->rx_errors = NULL;
- ctx->tx_bytes = NULL;
- ctx->tx_errors = NULL;
-
- if (flb_input_config_map_set(in, (void *) ctx) == -1) {
- flb_free(ctx);
- return -1;
- }
-
- flb_input_set_context(in, ctx);
- coll_fd_runtime = flb_input_set_collector_time(in, cb_metrics_collect_runtime, ctx->scrape_interval, 0, config);
- if (coll_fd_runtime == -1) {
- flb_plg_error(ctx->ins, "Could not set collector for podman metrics plugin");
- return -1;
- }
- ctx->coll_fd_runtime = coll_fd_runtime;
-
- if (ctx->podman_config_path) {
- flb_plg_info(ctx->ins, "Using config file %s", ctx->podman_config_path);
- ctx->config = flb_sds_create(ctx->podman_config_path);
- }
- else {
- flb_plg_info(ctx->ins, "Using default config file %s", PODMAN_CONFIG_DEFAULT_PATH);
- ctx->config = flb_sds_create(PODMAN_CONFIG_DEFAULT_PATH);
- }
-
- if (get_cgroup_version(ctx) == CGROUP_V2) {
- flb_plg_info(ctx->ins, "Detected cgroups v2");
- ctx->cgroup_version = CGROUP_V2;
- }
- else {
- flb_plg_info(ctx->ins, "Detected cgroups v1");
- ctx->cgroup_version = CGROUP_V1;
- }
-
- mk_list_init(&ctx->items);
- mk_list_init(&ctx->sysfs_items);
-
- if (ctx->scrape_interval >= 2 && ctx->scrape_on_start) {
- flb_plg_info(ctx->ins, "Generating podman metrics (initial scrape)");
- if (scrape_metrics(config, ctx) == -1) {
- flb_plg_error(ctx->ins, "Could not start collector for podman metrics plugin");
- flb_sds_destroy(ctx->config);
- destroy_container_list(ctx);
- flb_free(ctx);
- return -1;
- }
- }
-
- flb_plg_info(ctx->ins, "Generating podman metrics");
-
- return 0;
-}
-
-/*
- * Function called at plugin exit - destroy collected container data list.
- */
-static int in_metrics_exit(void *data, struct flb_config *config)
-{
- struct flb_in_metrics *ctx = data;
-
- if (!ctx) {
- return 0;
- }
-
- flb_sds_destroy(ctx->config);
- destroy_container_list(ctx);
- flb_free(ctx);
- return 0;
-}
-
-/*
- * Function called at plugin pause.
- */
-static void in_metrics_pause(void *data, struct flb_config *config)
-{
- struct flb_in_metrics *ctx = data;
- flb_input_collector_pause(ctx->coll_fd_runtime, ctx->ins);
-}
-
-/*
- * Function called at plugin resume.
- */
-static void in_metrics_resume(void *data, struct flb_config *config)
-{
- struct flb_in_metrics *ctx = data;
- flb_input_collector_resume(ctx->coll_fd_runtime, ctx->ins);
-}
diff --git a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics.h b/src/fluent-bit/plugins/in_podman_metrics/podman_metrics.h
deleted file mode 100644
index 3b02d24ed..000000000
--- a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-/* Fluent Bit
- * ==========
- * Copyright (C) 2015-2022 The Fluent Bit Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLB_IN_PODMAN_METRICS_H
-#define FLB_IN_PODMAN_METRICS_H
-
-#include <fluent-bit/flb_info.h>
-#include <fluent-bit/flb_config.h>
-#include <fluent-bit/flb_input.h>
-#include <fluent-bit/flb_utils.h>
-#include <fluent-bit/flb_jsmn.h>
-
-#include <monkey/mk_core/mk_list.h>
-
-#include "podman_metrics_config.h"
-
-static int collect_container_data(struct flb_in_metrics *ctx);
-static int add_container_to_list(struct flb_in_metrics *ctx, flb_sds_t id, flb_sds_t name, flb_sds_t image_name);
-static int destroy_container_list(struct flb_in_metrics *ctx);
-
-static int create_counter(struct flb_in_metrics *ctx, struct cmt_counter **counter, flb_sds_t id, flb_sds_t name, flb_sds_t image_name, flb_sds_t metric_prefix,
- flb_sds_t *fieds, flb_sds_t metric_name, flb_sds_t description, flb_sds_t interface, uint64_t value);
-static int create_gauge(struct flb_in_metrics *ctx, struct cmt_gauge **gauge, flb_sds_t id, flb_sds_t name, flb_sds_t image_name, flb_sds_t metric_prefix,
- flb_sds_t *fields, flb_sds_t metric_name, flb_sds_t description, flb_sds_t interface, uint64_t value);
-static int create_counters(struct flb_in_metrics *ctx);
-
-static int scrape_metrics(struct flb_config *config, struct flb_in_metrics *ctx);
-
-static int cb_metrics_collect_runtime(struct flb_input_instance *ins, struct flb_config *config, void *in_context);
-static int in_metrics_init(struct flb_input_instance *in, struct flb_config *config, void *data);
-static int in_metrics_exit(void *data, struct flb_config *config);
-static void in_metrics_pause(void *data, struct flb_config *config);
-static void in_metrics_resume(void *data, struct flb_config *config);
-
-
-static struct flb_config_map config_map[] = {
- {
- FLB_CONFIG_MAP_TIME, "scrape_interval", "30",
- 0, FLB_TRUE, offsetof(struct flb_in_metrics, scrape_interval),
- "Scrape interval to collect the metrics of podman containers"
- "(defaults to 30s)"
- },
-
- {
- FLB_CONFIG_MAP_BOOL, "scrape_on_start", "false",
- 0, FLB_TRUE, offsetof(struct flb_in_metrics, scrape_on_start),
- "Scrape metrics upon start, useful to avoid waiting for 'scrape_interval' "
- "for the first round of metrics."
- },
- {
- FLB_CONFIG_MAP_STR, "path.config", NULL,
- 0, FLB_TRUE, offsetof(struct flb_in_metrics, podman_config_path),
- "Path to podman config file"
- },
- {
- FLB_CONFIG_MAP_STR, "path.sysfs", SYSFS_PATH,
- 0, FLB_TRUE, offsetof(struct flb_in_metrics, sysfs_path),
- "Path to sysfs subsystem directory"
- },
- {
- FLB_CONFIG_MAP_STR, "path.procfs", PROCFS_PATH,
- 0, FLB_TRUE, offsetof(struct flb_in_metrics, procfs_path),
- "Path to proc subsystem directory"
- },
-
- /* EOF */
- {0}
-};
-
-struct flb_input_plugin in_podman_metrics_plugin = {
- .name = "podman_metrics",
- .description = "Podman metrics",
- .cb_init = in_metrics_init,
- .cb_pre_run = NULL,
- .cb_flush_buf = NULL,
- .config_map = config_map,
- .cb_pause = in_metrics_pause,
- .cb_resume = in_metrics_resume,
- .cb_exit = in_metrics_exit
-};
-
-#endif
diff --git a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_config.h b/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_config.h
deleted file mode 100644
index fabdc0a8d..000000000
--- a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_config.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-/* Fluent Bit
- * ==========
- * Copyright (C) 2015-2022 The Fluent Bit Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLB_IN_PODMAN_METRICS_CONFIG_H
-#define FLB_IN_PODMAN_METRICS_CONFIG_H
-
-#include <fluent-bit/flb_info.h>
-#include <fluent-bit/flb_config.h>
-#include <fluent-bit/flb_input.h>
-#include <fluent-bit/flb_utils.h>
-#include <fluent-bit/flb_jsmn.h>
-
-#include <monkey/mk_core/mk_list.h>
-
-/* Buffers and sizes */
-#define JSON_TOKENS 2048
-#define CONTAINER_NAME_SIZE 50
-#define CONTAINER_ID_SIZE 80
-#define CONTAINER_METADATA_SIZE 512
-#define IMAGE_NAME_SIZE 512
-#define PID_BUFFER_SIZE 21
-#define SYSFS_FILE_PATH_SIZE 512
-#define PROCFS_FILE_PATH_SIZE 512
-#define CGROUP_PATH_SIZE 25
-
-/* Special paths for sysfs traversal */
-#define CURRENT_DIR "."
-#define PREV_DIR ".."
-
-/* Ignored network interfaces */
-#define VETH_INTERFACE "veth"
-
-#define JSON_FIELD_NAMES "names"
-#define JSON_FIELD_ID "id"
-#define JSON_FIELD_METADATA "metadata"
-
-#define JSON_SUBFIELD_IMAGE_NAME "image-name\\\":\\\""
-#define JSON_SUBFIELD_SIZE_IMAGE_NAME 15
-
-#define CGROUP_V2_PATH "cgroup.controllers"
-#define CGROUP_V1 1
-#define CGROUP_V2 2
-
-/* Paths in /proc subsystem */
-#define PROCFS_PATH "/proc"
-#define PROC_NET_SUFFIX "net/dev"
-
-/* Paths in /sys subsystem */
-#define SYSFS_PATH "/sys/fs/cgroup"
-#define V1_SYSFS_MEMORY "memory"
-#define V1_SYSFS_CPU "cpuacct"
-#define V1_SYSFS_SYSTEMD "systemd"
-#define SYSFS_CONTAINER_PREFIX "libpod"
-#define SYSFS_LIBPOD_PARENT "libpod_parent"
-#define SYSFS_CONMON "conmon"
-
-/* Default podman config file path, in case of not provided one */
-#define PODMAN_CONFIG_DEFAULT_PATH "/var/lib/containers/storage/overlay-containers/containers.json"
-
-/* Markers of network values in /proc/<pid>/dev/net */
-#define DEV_NET_IGNORE_LINES 2
-#define DEV_NET_NAME 0
-#define DEV_NET_RX_BYTES 1
-#define DEV_NET_RX_ERRORS 3
-#define DEV_NET_TX_BYTES 9
-#define DEV_NET_TX_ERRORS 11
-
-/* Key names in .stat files */
-#define STAT_KEY_RSS "rss"
-#define STAT_KEY_CPU "usage_usec"
-#define STAT_KEY_CPU_USER "user_usec"
-
-/* Static lists of fields in counters or gauges */
-#define FIELDS_METRIC (char*[3]){"id", "name", "image" }
-#define FIELDS_METRIC_WITH_IFACE (char*[4]){"id", "name", "image", "interface" }
-
-/* Files from sysfs containing required data (cgroups v1) */
-#define V1_SYSFS_FILE_MEMORY "memory.usage_in_bytes"
-#define V1_SYSFS_FILE_MAX_MEMORY "memory.max_usage_in_bytes"
-#define V1_SYSFS_FILE_MEMORY_STAT "memory.stat"
-#define V1_SYSFS_FILE_MEMORY_LIMIT "memory.limit_in_bytes"
-#define V1_SYSFS_FILE_CPU_USER "cpuacct.usage_user"
-#define V1_SYSFS_FILE_CPU "cpuacct.usage"
-#define V1_SYSFS_FILE_PIDS "cgroup.procs"
-
-/* Files from sysfs containing required data (cgroups v2) */
-#define V2_SYSFS_FILE_MEMORY "memory.current"
-#define V2_SYSFS_FILE_MAX_MEMORY "memory.peak"
-#define V2_SYSFS_FILE_MEMORY_STAT "memory.stat"
-#define V2_SYSFS_FILE_MEMORY_LIMIT "memory.max"
-#define V2_SYSFS_FILE_CPU_STAT "cpu.stat"
-#define V2_SYSFS_FILE_PIDS "cgroup.procs"
-#define V2_SYSFS_FILE_PIDS_ALT "containers/cgroup.procs"
-
-/* Values used to construct counters/gauges names and descriptions */
-#define COUNTER_PREFIX "container"
-
-#define COUNTER_MEMORY_PREFIX "memory"
-#define COUNTER_SPEC_MEMORY_PREFIX "spec_memory"
-#define COUNTER_MEMORY_USAGE "usage_bytes"
-#define DESCRIPTION_MEMORY_USAGE "Container memory usage in bytes"
-#define COUNTER_MEMORY_MAX_USAGE "max_usage_bytes"
-#define DESCRIPTION_MEMORY_MAX_USAGE "Container max memory usage in bytes"
-#define COUNTER_MEMORY_LIMIT "limit_bytes"
-#define DESCRIPTION_MEMORY_LIMIT "Container memory limit in bytes"
-#define GAUGE_MEMORY_RSS "rss"
-#define DESCRIPTION_MEMORY_RSS "Container RSS in bytes"
-
-#define COUNTER_CPU_PREFIX "cpu"
-#define COUNTER_CPU_USER "user_seconds_total"
-#define DESCRIPTION_CPU_USER "Container cpu usage in seconds in user mode"
-#define COUNTER_CPU "usage_seconds_total"
-#define DESCRIPTION_CPU "Container cpu usage in seconds"
-
-#define COUNTER_NETWORK_PREFIX "network"
-#define COUNTER_RX_BYTES "receive_bytes_total"
-#define DESCRIPTION_RX_BYTES "Network received bytes"
-#define COUNTER_RX_ERRORS "receive_errors_total"
-#define DESCRIPTION_RX_ERRORS "Network received errors"
-#define COUNTER_TX_BYTES "transmit_bytes_total"
-#define DESCRIPTION_TX_BYTES "Network transmited bytes"
-#define COUNTER_TX_ERRORS "transmit_errors_total"
-#define DESCRIPTION_TX_ERRORS "Network transmitedd errors"
-
-
-struct net_iface {
- flb_sds_t name;
- uint64_t rx_bytes;
- uint64_t rx_errors;
- uint64_t tx_bytes;
- uint64_t tx_errors;
- struct mk_list _head;
-};
-
-struct container {
- flb_sds_t name;
- flb_sds_t id;
- flb_sds_t image_name;
- struct mk_list _head;
-
- uint64_t memory_usage;
- uint64_t memory_max_usage;
- uint64_t memory_limit;
- uint64_t cpu;
- uint64_t cpu_user;
- uint64_t rss;
-
- struct mk_list net_data;
-};
-
-struct sysfs_path {
- flb_sds_t path;
- struct mk_list _head;
-};
-
-struct flb_in_metrics {
- /* config map options */
- int scrape_on_start;
- int scrape_interval;
- flb_sds_t podman_config_path;
-
- /* container list */
- struct mk_list items;
-
- /* sysfs path list */
- struct mk_list sysfs_items;
-
- /* counters */
- struct cmt_counter *c_memory_usage;
- struct cmt_counter *c_memory_max_usage;
- struct cmt_counter *c_memory_limit;
- struct cmt_gauge *g_rss;
- struct cmt_counter *c_cpu_user;
- struct cmt_counter *c_cpu;
- struct cmt_counter *rx_bytes;
- struct cmt_counter *rx_errors;
- struct cmt_counter *tx_bytes;
- struct cmt_counter *tx_errors;
-
- /* cgroup version used by host */
- int cgroup_version;
-
- /* podman config file path */
- flb_sds_t config;
-
- /* proc and sys paths, overwriting mostly for testing */
- flb_sds_t sysfs_path;
- flb_sds_t procfs_path;
-
- /* internal */
- int coll_fd_runtime;
- struct flb_input_instance *ins;
-};
-
-#endif
diff --git a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.c b/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.c
deleted file mode 100644
index e747fe4b8..000000000
--- a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-/* Fluent Bit
- * ==========
- * Copyright (C) 2015-2022 The Fluent Bit Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <fluent-bit/flb_input_plugin.h>
-#include <fluent-bit/flb_config.h>
-#include <fluent-bit/flb_metrics.h>
-#include <fluent-bit/flb_metrics_exporter.h>
-#include <fluent-bit/flb_jsmn.h>
-
-#include <monkey/mk_core/mk_list.h>
-
-#include "podman_metrics_data.h"
-#include "podman_metrics_config.h"
-
-/*
- * Read uint64_t value from given path. If this function fails, it
- * returns UINT64_MAX, which will be later interpeted as invalid counter value
- * (it cannot return 0, because it is a valid value for counter
- */
-uint64_t read_from_file(struct flb_in_metrics *ctx, flb_sds_t path)
-{
- int c;
- uint64_t value = UINT64_MAX;
- FILE *fp;
-
- fp = fopen(path, "r");
- if (!fp) {
- flb_plg_warn(ctx->ins, "Failed to read %s", path);
- return value;
- }
-
- c = fscanf(fp, "%lu", &value);
- fclose(fp);
- if (c != 1) {
- flb_plg_warn(ctx->ins, "Failed to read a number from %s", path);
- return value;
- }
- return value;
-}
-
-/*
- * Read uint64_t value from given path. Check for key: <VALUE> and return it.
- * If this function fails, it
- * returns UINT64_MAX, which will be later interpeted as invalid counter value
- * (it cannot return 0, because it is a valid value for counter
- */
-uint64_t read_key_value_from_file(struct flb_in_metrics *ctx, flb_sds_t path, flb_sds_t key)
-{
- uint64_t value = UINT64_MAX;
- FILE *fp;
- flb_sds_t line = NULL;
- flb_sds_t field = NULL;
- flb_sds_t line2 = NULL;
- size_t len = 0;
- ssize_t read = 0;
- int key_found = 0;
-
- fp = fopen(path, "r");
- if (!fp) {
- flb_plg_warn(ctx->ins, "Failed to read %s", path);
- return value;
- }
-
- while ((read = getline(&line, &len, fp)) != -1) {
- line2 = line;
-
- while( (field = strsep(&line2, " :")) != NULL ) {
- if( *field == '\0' ) {
- continue;
- }
- if (strcmp(field, key) == 0) {
- key_found = 1;
- continue;
- }
- if (key_found) {
- value = strtoull(field, NULL, 10);
- flb_plg_trace(ctx->ins, "Found key %s: %lu", key, value);
- fclose(fp);
- flb_free(line);
- flb_free(line2);
- return value;
- }
-
- }
- flb_free(line2);
- }
- flb_free(line);
- flb_plg_warn(ctx->ins, "%s not found in %s", key, path);
- fclose(fp);
- return value;
-}
-
-/*
- * Read uint64_t value from path previously picked from sysfs directory list.
- * If key is not NULL, it will be used to search a file instead of reading single value.
- */
-uint64_t get_data_from_sysfs(struct flb_in_metrics *ctx, flb_sds_t dir, flb_sds_t name, flb_sds_t key)
-{
- char path[SYSFS_FILE_PATH_SIZE];
- uint64_t data = UINT64_MAX;
- path[0]=0;
-
- if (dir == NULL) {
- return data;
- }
-
- snprintf(path, sizeof(path), "%s/%s", dir, name);
-
- if (key == NULL) {
- data = read_from_file(ctx, path);
- }
- else {
- data = read_key_value_from_file(ctx, path, key);
- }
- flb_plg_debug(ctx->ins, "%s: %lu", path, data);
- return data;
-}
-
-/*
- * Check if container sysfs data is pressent in previously generated list of sysfs directories.
- * For cgroups v1, use subsystem (directory, for example memory) to search full path.
- */
-int get_container_sysfs_subdirectory(struct flb_in_metrics *ctx, flb_sds_t id, flb_sds_t subsystem, flb_sds_t *path)
-{
- struct sysfs_path *pth;
- struct mk_list *head;
- struct mk_list *tmp;
-
- mk_list_foreach_safe(head, tmp, &ctx->sysfs_items) {
- pth = mk_list_entry(head, struct sysfs_path, _head);
- if (strstr(pth->path, id) != 0) {
- if (subsystem != NULL && strstr(pth->path, subsystem) == 0) {
- continue;
- }
- *path = pth->path;
- flb_plg_trace(ctx->ins, "Found path for %s: %s", id, pth->path);
- return 0;
- }
- }
- *path = NULL;
- return -1;
-}
-
-/*
-* Read data from /proc/ subsystem containing all data about network usage for pid (so, in this case,
-* for container). These fields seem to be in constant positions, so check only specific fields in each
-* row.
-*/
-int get_net_data_from_proc(struct flb_in_metrics *ctx, struct container *cnt, uint64_t pid) {
- char path[PROCFS_FILE_PATH_SIZE];
- char pid_buff[PID_BUFFER_SIZE];
-
- FILE * fp;
- flb_sds_t line = NULL;
- flb_sds_t field = NULL;
- flb_sds_t line2 = NULL;
-
- size_t len = 0;
- ssize_t read = 0;
- int curr_line = 0;
- int curr_field = 0;
-
- struct net_iface *iface;
-
- path[0]=0;
- sprintf(pid_buff, "%" PRIu64, pid);
- snprintf(path, sizeof(path), "%s/%s/%s", ctx->procfs_path, pid_buff, PROC_NET_SUFFIX);
-
- fp = fopen(path, "r");
- if (fp == NULL) {
- flb_plg_warn(ctx->ins, "Failed to open %s", path);
- return -1;
- }
-
- while ((read = getline(&line, &len, fp)) != -1) {
- line2 = line;
- if (curr_line++ <= DEV_NET_IGNORE_LINES) {
- flb_plg_trace(ctx->ins, "Ignoring line %d in %s", curr_line, path);
- continue;
- }
-
- iface = flb_malloc(sizeof(struct net_iface));
- if (!iface) {
- flb_errno();
- return -1;
- }
- iface->name = NULL;
- iface->rx_bytes = UINT64_MAX;
- iface->rx_errors = UINT64_MAX;
- iface->tx_bytes = UINT64_MAX;
- iface->tx_errors = UINT64_MAX;
-
-
- while( (field = strsep(&line2, " ")) != NULL ) {
- if( *field == '\0' ) {
- continue;
- }
- switch (curr_field++)
- {
- case DEV_NET_NAME:
- /* Remove ':' from the end of name */
- iface->name = flb_sds_create_len(field, strlen(field)-1);
- flb_plg_trace(ctx->ins, "Reading name from %s: %s", path, iface->name);
- break;
-
- case DEV_NET_RX_BYTES:
- iface->rx_bytes = strtoull(field, NULL, 10);
- flb_plg_trace(ctx->ins, "Reading rx_bytes from %s: %lu", path, iface->rx_bytes);
- break;
-
- case DEV_NET_RX_ERRORS:
- iface->rx_errors = strtoull(field, NULL, 10);
- flb_plg_trace(ctx->ins, "Reading rx_errors from %s: %lu", path, iface->rx_errors);
- break;
-
- case DEV_NET_TX_BYTES:
- iface->tx_bytes = strtoull(field, NULL, 10);
- flb_plg_trace(ctx->ins, "Reading tx_bytes from %s: %lu", path, iface->tx_bytes);
- break;
-
- case DEV_NET_TX_ERRORS:
- iface->tx_errors = strtoull(field, NULL, 10);
- flb_plg_trace(ctx->ins, "Reading tx_errors from %s: %lu", path, iface->tx_errors);
- break;
- }
- }
- flb_free(line2);
- curr_field = 0;
-
- /* Ignore virtual interfaces connected to podman containers */
- if (name_starts_with(iface->name, VETH_INTERFACE) == 0) {
- flb_plg_trace(ctx->ins, "Ignoring virtual interface %s", iface->name);
- flb_sds_destroy(iface->name);
- flb_free(iface);
- continue;
- }
- mk_list_add(&iface->_head, &cnt->net_data);
- }
-
- flb_free(line);
- fclose(fp);
- return 0;
-}
-
-/*
- * Iterate over directories in sysfs system and collect all libpod-* directories
- */
-int collect_sysfs_directories(struct flb_in_metrics *ctx, flb_sds_t name)
-{
- char path[SYSFS_FILE_PATH_SIZE];
- path[0] = 0;
- DIR *dir;
- struct dirent *entry;
- struct sysfs_path *pth;
-
- if (!(dir = opendir(name))) {
- flb_plg_warn(ctx->ins, "Failed to open %s", name);
- return -1;
- }
-
- while ((entry = readdir(dir)) != NULL) {
- if (entry->d_type == DT_DIR) {
- if (strcmp(entry->d_name, CURRENT_DIR) == 0 || strcmp(entry->d_name, PREV_DIR) == 0) {
- continue;
- }
- snprintf(path, sizeof(path), "%s/%s", name, entry->d_name);
-
- if (name_starts_with(entry->d_name, SYSFS_CONTAINER_PREFIX) == 0 &&
- strcmp(entry->d_name, SYSFS_LIBPOD_PARENT) != 0 &&
- strstr(entry->d_name, SYSFS_CONMON) == 0) {
- pth = flb_malloc(sizeof(struct sysfs_path));
- if (!pth) {
- flb_errno();
- return -1;
- }
- pth->path = flb_sds_create(path);
- flb_plg_debug(ctx->ins, "Collected sysfs directory: %s", pth->path);
- mk_list_add(&pth->_head, &ctx->sysfs_items);
- }
-
- collect_sysfs_directories(ctx, path);
- }
- }
- closedir(dir);
- return 0;
-}
-
-/*
- * Iterate over previously created container list. For each entry, generate its
- * paths in sysfs system directory. From this path, grab data about container metrics
- * and put it this entry.
- * This function is used in cgroups v1 - meaning different directories for files.
- */
-int fill_counters_with_sysfs_data_v1(struct flb_in_metrics *ctx)
-{
- uint64_t pid;
- flb_sds_t mem_path;
- flb_sds_t cpu_path;
- flb_sds_t systemd_path;
- struct container *cnt;
- struct mk_list *head;
- struct mk_list *tmp;
-
- mk_list_foreach_safe(head, tmp, &ctx->items) {
- cnt = mk_list_entry(head, struct container, _head);
-
- get_container_sysfs_subdirectory(ctx, cnt->id, V1_SYSFS_MEMORY, &mem_path);
- get_container_sysfs_subdirectory(ctx, cnt->id, V1_SYSFS_CPU, &cpu_path);
- get_container_sysfs_subdirectory(ctx, cnt->id, V1_SYSFS_SYSTEMD, &systemd_path);
-
- cnt->memory_usage = get_data_from_sysfs(ctx, mem_path, V1_SYSFS_FILE_MEMORY, NULL);
- cnt->memory_max_usage = get_data_from_sysfs(ctx, mem_path, V1_SYSFS_FILE_MAX_MEMORY, NULL);
- cnt->rss = get_data_from_sysfs(ctx, mem_path, V1_SYSFS_FILE_MEMORY_STAT, STAT_KEY_RSS);
- cnt->memory_limit = get_data_from_sysfs(ctx, mem_path, V1_SYSFS_FILE_MEMORY_LIMIT, NULL);
- cnt->cpu_user = get_data_from_sysfs(ctx, cpu_path, V1_SYSFS_FILE_CPU_USER, NULL);
- cnt->cpu = get_data_from_sysfs(ctx, cpu_path, V1_SYSFS_FILE_CPU, NULL);
- pid = get_data_from_sysfs(ctx, systemd_path, V1_SYSFS_FILE_PIDS, NULL);
- if (pid && pid != UINT64_MAX) {
- get_net_data_from_proc(ctx, cnt, pid);
- }
- else {
- flb_plg_warn(ctx->ins, "Failed to collect PID for %s", cnt->name);
- }
- }
- return 0;
-}
-
-/*
- * Iterate over previously created container list. For each entry, generate its
- * path in sysfs system directory. From this path, grab data about container metrics
- * and put it this entry.
- * This function is used in cgroups v2 - meaning same directory for all files.
- */
-int fill_counters_with_sysfs_data_v2(struct flb_in_metrics *ctx)
-{
- uint64_t pid;
- flb_sds_t path;
- struct container *cnt;
- struct mk_list *head;
- struct mk_list *tmp;
-
- mk_list_foreach_safe(head, tmp, &ctx->items) {
- cnt = mk_list_entry(head, struct container, _head);
-
- get_container_sysfs_subdirectory(ctx, cnt->id, NULL, &path);
-
- cnt->memory_usage = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_MEMORY, NULL);
- cnt->memory_max_usage = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_MAX_MEMORY, NULL);
- cnt->rss = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_MEMORY_STAT, STAT_KEY_RSS);
- cnt->memory_limit = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_MEMORY_LIMIT, NULL);
- cnt->cpu_user = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_CPU_STAT, STAT_KEY_CPU_USER);
- cnt->cpu = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_CPU_STAT, STAT_KEY_CPU);
- pid = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_PIDS, NULL);
- if (!pid || pid == UINT64_MAX) {
- pid = get_data_from_sysfs(ctx, path, V2_SYSFS_FILE_PIDS_ALT, NULL);
- }
- if (pid && pid != UINT64_MAX) {
- get_net_data_from_proc(ctx, cnt, pid);
- }
- else {
- flb_plg_warn(ctx->ins, "Failed to collect PID for %s", cnt->name);
- }
- }
- return 0;
-}
-
-/*
- * Check if flb_sds_t starts with given string
- */
-int name_starts_with(flb_sds_t s, const char *str)
-{
- size_t len = strlen(str);
- size_t flen = flb_sds_len(s);
-
- if (s == NULL || len > flen) {
- return -1;
- }
-
- return strncmp(s, str, len);
-}
-
-/*
- * Calculate which cgroup version is used on host by checing existence of
- * cgroup.controllers file (if it exists, it is V2).
- */
-int get_cgroup_version(struct flb_in_metrics *ctx)
-{
- char path[SYSFS_FILE_PATH_SIZE];
- snprintf(path, sizeof(path), "%s/%s", ctx->sysfs_path, CGROUP_V2_PATH);
- return (access(path, F_OK) == 0) ? CGROUP_V2 : CGROUP_V1;
-}
diff --git a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.h b/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.h
deleted file mode 100644
index 93fa6de00..000000000
--- a/src/fluent-bit/plugins/in_podman_metrics/podman_metrics_data.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-
-/* Fluent Bit
- * ==========
- * Copyright (C) 2015-2022 The Fluent Bit Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef FLB_IN_PODMAN_METRICS_DATA_H
-#define FLB_IN_PODMAN_METRICS_DATA_H
-
-#include <fluent-bit/flb_info.h>
-#include <fluent-bit/flb_config.h>
-#include <fluent-bit/flb_input.h>
-#include <fluent-bit/flb_utils.h>
-#include <fluent-bit/flb_jsmn.h>
-
-#include <dirent.h>
-#include <monkey/mk_core/mk_list.h>
-
-#include "podman_metrics_config.h"
-
-int destroy_counter(struct flb_in_metrics *ctx, struct cmt_counter **c);
-int destroy_gauge(struct flb_in_metrics *ctx, struct cmt_gauge **g);
-
-uint64_t read_from_file(struct flb_in_metrics *ctx, flb_sds_t path);
-uint64_t read_key_value_from_file(struct flb_in_metrics *ctx, flb_sds_t path, flb_sds_t key);
-uint64_t get_data_from_sysfs(struct flb_in_metrics *ctx, flb_sds_t dir, flb_sds_t name, flb_sds_t key);
-
-int get_container_sysfs_subdirectory(struct flb_in_metrics *ctx, flb_sds_t id, flb_sds_t subsystem, flb_sds_t *path);
-int get_net_data_from_proc(struct flb_in_metrics *ctx, struct container *cnt, uint64_t pid);
-
-int collect_sysfs_directories(struct flb_in_metrics *ctx, flb_sds_t name);
-int fill_counters_with_sysfs_data_v1(struct flb_in_metrics *ctx);
-int fill_counters_with_sysfs_data_v2(struct flb_in_metrics *ctx);
-
-int name_starts_with(flb_sds_t s, const char *str);
-int get_cgroup_version(struct flb_in_metrics *ctx);
-
-#endif