22#include <unordered_map>
137#if defined(__linux__)
139 std::vector<container_info> enumerate_containers_cgroup_v2();
140 std::vector<container_info> enumerate_containers_cgroup_v1();
145 uint64_t read_cgroup_value(
const std::string& path,
const std::string& key =
"")
const;
146 std::unordered_map<std::string, uint64_t> read_cgroup_stat(
const std::string& path)
const;
166 auto name() const -> std::string_view
override {
return "container"; }
167 auto collect() -> std::vector<metric>
override;
168 auto interval() const -> std::chrono::milliseconds
override {
return std::chrono::seconds(10); }
175 .description =
"Container metrics from Docker and cgroups",
179 .requires_platform_support =
true
216 const std::string& unit =
"")
const;
Pure virtual interface for metric collector plugins.
auto initialize(const config_map &config) -> bool override
Initialize plugin with configuration.
container_collector(container_collector &&)=delete
bool is_container_environment() const
std::atomic< size_t > collection_count_
auto interval() const -> std::chrono::milliseconds override
Get the collection interval for this plugin.
std::vector< container_metrics > get_last_metrics() const
~container_collector() override=default
bool collect_network_metrics_
auto get_metadata() const -> plugin_metadata override
Get plugin metadata.
std::unique_ptr< container_info_collector > collector_
std::vector< container_metrics > last_metrics_
void add_container_metrics(std::vector< metric > &metrics, const container_metrics &container)
metric create_metric(const std::string &name, double value, const container_metrics &container, const std::string &unit="") const
bool collect_blkio_metrics_
std::atomic< size_t > collection_errors_
auto name() const -> std::string_view override
Get the unique name of this plugin.
void shutdown() override
Shutdown plugin and release resources.
std::atomic< size_t > containers_found_
container_collector & operator=(const container_collector &)=delete
auto collect() -> std::vector< metric > override
Collect current metrics from this plugin.
auto get_statistics() const -> stats_map override
Get plugin statistics.
container_collector(const container_collector &)=delete
auto is_available() const -> bool override
Check if this plugin is available on the current system.
auto get_metric_types() const -> std::vector< std::string > override
Get supported metric types.
container_collector & operator=(container_collector &&)=delete
std::vector< container_info > enumerate_containers()
bool is_containerized() const
std::unordered_map< std::string, cpu_stats > prev_cpu_stats_
container_info_collector(container_info_collector &&)=delete
container_info_collector & operator=(const container_info_collector &)=delete
cgroup_version detect_cgroup_version() const
container_metrics collect_container_metrics(const container_info &info)
container_info_collector()
container_info_collector(const container_info_collector &)=delete
container_info_collector & operator=(container_info_collector &&)=delete
~container_info_collector()
cgroup_version cached_version_
Plugin interface for metric collectors.
Adapter for metric types to support interface definitions.
@ v2
Unified cgroups v2 hierarchy.
@ none
Not in a cgroup or not Linux.
std::unordered_map< std::string, double > stats_map
Type alias for statistics map.
@ system
System integration (threads, loggers, containers)
std::unordered_map< std::string, std::string > config_map
Type alias for configuration map.
@ info
Informational, no action required.
std::chrono::steady_clock::time_point timestamp
std::string container_name
std::string cgroup_path
Path to cgroup directory.
uint64_t pids_limit
Process limit (0 = unlimited)
std::string container_id
Short container ID.
double memory_usage_percent
Memory usage percentage.
std::string image_name
Image name (Docker only)
uint64_t memory_limit_bytes
Memory limit in bytes.
uint64_t memory_usage_bytes
Current memory usage in bytes.
double cpu_usage_percent
CPU utilization percentage.
uint64_t network_tx_bytes
Total bytes transmitted.
uint64_t blkio_write_bytes
Total bytes written to disk.
uint64_t blkio_read_bytes
Total bytes read from disk.
std::chrono::system_clock::time_point timestamp
uint64_t cpu_usage_ns
Total CPU time in nanoseconds.
uint64_t pids_current
Current number of processes.
uint64_t network_rx_bytes
Total bytes received.
std::string container_name
Container name (Docker only)
Basic metric structure for interface compatibility.