]> arthur.barton.de Git - netdata.git/commitdiff
added -ch option to set container host prefix for /proc and /sys #10
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Mon, 12 Oct 2015 20:56:15 +0000 (23:56 +0300)
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Mon, 12 Oct 2015 20:56:15 +0000 (23:56 +0300)
15 files changed:
src/common.c
src/common.h
src/main.c
src/proc_diskstats.c
src/proc_interrupts.c
src/proc_meminfo.c
src/proc_net_dev.c
src/proc_net_ip_vs_stats.c
src/proc_net_netstat.c
src/proc_net_rpc_nfsd.c
src/proc_net_snmp.c
src/proc_net_stat_conntrack.c
src/proc_stat.c
src/proc_sys_kernel_random_entropy_avail.c
src/proc_vmstat.c

index eba11fa719f95ff3730e128e054868e10f901327..9240e3c9768d7ca6a50a77a4180042f8cf06a1e1 100755 (executable)
@@ -14,6 +14,8 @@
 #include "log.h"
 #include "common.h"
 
+char *global_host_prefix = "";
+
 /*
 // http://stackoverflow.com/questions/7666509/hash-function-for-string
 uint32_t simple_hash(const char *name)
index 85c3071286d3c28932070c9bd11b94d599098277..6a4ac03b5a384e1261e25eec4c055f8116e27925 100755 (executable)
@@ -16,6 +16,8 @@ extern int savememory(const char *filename, void *mem, unsigned long size);
 
 extern int fd_is_valid(int fd);
 
+extern char *global_host_prefix;
+
 #ifdef __GNUC__
 // gcc branch optimization
 // #warning "Using GCC branch optimizations"
index dbf0c6742f925e4fc88b05411489e4e1aa0d0f4c..ad6fa66850bb93376c03baed99fd9c592b34d164 100755 (executable)
@@ -188,6 +188,7 @@ int main(int argc, char **argv)
                else if(strcmp(argv[i], "-u")  == 0 && (i+1) < argc) { config_set("global", "run as user",  argv[i+1]); i++; }
                else if(strcmp(argv[i], "-l")  == 0 && (i+1) < argc) { config_set("global", "history",      argv[i+1]); i++; }
                else if(strcmp(argv[i], "-t")  == 0 && (i+1) < argc) { config_set("global", "update every", argv[i+1]); i++; }
+               else if(strcmp(argv[i], "-ch") == 0 && (i+1) < argc) { config_set("global", "host access prefix", argv[i+1]); i++; }
                else if(strcmp(argv[i], "--unittest")  == 0) {
                        if(unit_test_storage()) exit(1);
                        exit(0);
@@ -215,6 +216,7 @@ int main(int argc, char **argv)
                        fprintf(stderr, "  -t UPDATE_TIMER can be from 1 to %d seconds. Default: %d.\n", UPDATE_EVERY_MAX, UPDATE_EVERY);
                        fprintf(stderr, "  -p LISTEN_PORT can be from 1 to %d. Default: %d.\n", 65535, LISTEN_PORT);
                        fprintf(stderr, "  -u USERNAME can be any system username to run as. Default: none.\n");
+                       fprintf(stderr, "  -ch path to access host /proc and /sys when running in a container. Default: empty.\n");
                        fprintf(stderr, "  -df FLAGS debug options. Default: 0x%8llx.\n", debug_flags);
                        exit(1);
                }
@@ -238,6 +240,10 @@ int main(int argc, char **argv)
 
                // --------------------------------------------------------------------
 
+               global_host_prefix = config_get("global", "host access prefix", "");
+
+               // --------------------------------------------------------------------
+
                output_log_file = config_get("global", "debug log", LOG_DIR "/debug.log");
                if(strcmp(output_log_file, "syslog") == 0) {
                        output_log_syslog = 1;
index 85fa4c8e3d1bd5fc255f7c4f70f9ffb9f13a8281..5bbd3d58c8b675f8f991bb8f52d46af0739fac8f 100755 (executable)
@@ -17,7 +17,7 @@
 
 int do_proc_diskstats(int update_every, unsigned long long dt) {
        static procfile *ff = NULL;
-       static char *path_to_get_hw_sector_size = NULL;
+       static char path_to_get_hw_sector_size[FILENAME_MAX + 1] = "";
        static int enable_new_disks = -1;
        static int do_io = -1, do_ops = -1, do_merged_ops = -1, do_iotime = -1, do_cur_ops = -1;
 
@@ -31,10 +31,18 @@ int do_proc_diskstats(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/diskstats", "filename to monitor", "/proc/diskstats"), " \t", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/diskstats");
+               ff = procfile_open(config_get("plugin:proc:/proc/diskstats", "filename to monitor", filename), " \t", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
-       if(!path_to_get_hw_sector_size) path_to_get_hw_sector_size = config_get("plugin:proc:/proc/diskstats", "path to get h/w sector size", "/sys/block/%s/queue/hw_sector_size");
+       if(!path_to_get_hw_sector_size[0]) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/sys/block/%s/queue/hw_sector_size");
+               snprintf(path_to_get_hw_sector_size, FILENAME_MAX, "%s%s", global_host_prefix, config_get("plugin:proc:/proc/diskstats", "path to get h/w sector size", filename));
+       }
 
        ff = procfile_readall(ff);
        if(!ff) return 0; // we return 0, so that we will retry to open it next time
index a2c7f4714bb7fafd24266d10b72f217769799351..6e25b8408a7f4f81c01549f3ae8d57034a54663d 100755 (executable)
@@ -31,7 +31,11 @@ int do_proc_interrupts(int update_every, unsigned long long dt) {
 
        if(do_per_core == -1) do_per_core = config_get_boolean("plugin:proc:/proc/interrupts", "interrupts per core", 0);
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/interrupts", "filename to monitor", "/proc/interrupts"), " \t", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/interrupts");
+               ff = procfile_open(config_get("plugin:proc:/proc/interrupts", "filename to monitor", filename), " \t", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index 07805e540b84efcd16e8a638a7e24cb4a74b119e..ad702687636e5381176f92642ed17a18ffa325b8 100755 (executable)
@@ -28,7 +28,11 @@ int do_proc_meminfo(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/meminfo", "filename to monitor", "/proc/meminfo"), " \t:", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/meminfo");
+               ff = procfile_open(config_get("plugin:proc:/proc/meminfo", "filename to monitor", filename), " \t:", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index c4dcd139f222a9e5898f415a60221de17eae59b6..88ab8fe9ada28dd326a17b5dd083e8848dd9bb75 100755 (executable)
@@ -15,7 +15,11 @@ int do_proc_net_dev(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/net/dev", "filename to monitor", "/proc/net/dev"), " \t,:|", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/net/dev");
+               ff = procfile_open(config_get("plugin:proc:/proc/net/dev", "filename to monitor", filename), " \t,:|", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index 1e947eb784d181b88964a7808dbb53d07cf48bda..3e46c186da74079b89509f444b2f69e42537dc1c 100755 (executable)
@@ -21,7 +21,11 @@ int do_proc_net_ip_vs_stats(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/net/ip_vs_stats", "filename to monitor", "/proc/net/ip_vs_stats"), " \t,:|", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/net/ip_vs_stats");
+               ff = procfile_open(config_get("plugin:proc:/proc/net/ip_vs_stats", "filename to monitor", filename), " \t,:|", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index c62fa93c3b3bda66eff3363e39ec930c5c385f7c..ffdc80cf3180ea0ff2414794c1ccd68627e7ce38 100755 (executable)
@@ -23,7 +23,11 @@ int do_proc_net_netstat(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/net/netstat", "filename to monitor", "/proc/net/netstat"), " \t:", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/net/netstat");
+               ff = procfile_open(config_get("plugin:proc:/proc/net/netstat", "filename to monitor", filename), " \t:", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index c3bbf14c5c49d0fd09e2a4150cc8587045c50326..a27fc2e45e24c559f0da72139fb4fa9632f1b9bd 100644 (file)
@@ -138,7 +138,11 @@ int do_proc_net_rpc_nfsd(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/net/rpc/nfsd", "filename to monitor", "/proc/net/rpc/nfsd"), " \t", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/net/rpc/nfsd");
+               ff = procfile_open(config_get("plugin:proc:/proc/net/rpc/nfsd", "filename to monitor", filename), " \t", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index 0c62b87d8cebe8d67e023b08881e6a9f1124f774..a3b5d296050b0d469cfdf970cd06f794ecf5dd12 100755 (executable)
@@ -32,7 +32,11 @@ int do_proc_net_snmp(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/net/snmp", "filename to monitor", "/proc/net/snmp"), " \t:", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/net/snmp");
+               ff = procfile_open(config_get("plugin:proc:/proc/net/snmp", "filename to monitor", filename), " \t:", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index d6b864b7bc1b8e5ee81e3d10e9e8b3f695c190c3..e3d823306208208476db61fc1a2bd27e22788e38 100755 (executable)
@@ -26,7 +26,11 @@ int do_proc_net_stat_conntrack(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/net/stat/nf_conntrack", "filename to monitor", "/proc/net/stat/nf_conntrack"), " \t:", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/net/stat/nf_conntrack");
+               ff = procfile_open(config_get("plugin:proc:/proc/net/stat/nf_conntrack", "filename to monitor", filename), " \t:", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index b836549500445f63762e502e15d0fff9c6b10c28..77599befbb8f350ee7658173dfed6715606d272b 100755 (executable)
@@ -26,7 +26,11 @@ int do_proc_stat(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/stat", "filename to monitor", "/proc/stat"), " \t:", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/stat");
+               ff = procfile_open(config_get("plugin:proc:/proc/stat", "filename to monitor", filename), " \t:", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index c3311ee40c6771b53fcf77dda6504033b77c2d37..790ee10230f71ead9604cc1368a77b1f8cc57d12 100755 (executable)
@@ -13,7 +13,11 @@ int do_proc_sys_kernel_random_entropy_avail(int update_every, unsigned long long
 
        if(dt) {} ;
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/sys/kernel/random/entropy_avail", "filename to monitor", "/proc/sys/kernel/random/entropy_avail"), "", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/sys/kernel/random/entropy_avail");
+               ff = procfile_open(config_get("plugin:proc:/proc/sys/kernel/random/entropy_avail", "filename to monitor", filename), "", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);
index 4b9337269dc383f343748aeabc0303e9383a89da..39b44a1aff4ca285bbf8c081c31b30a5d1f2cd8a 100755 (executable)
@@ -24,7 +24,11 @@ int do_proc_vmstat(int update_every, unsigned long long dt) {
 
        if(dt) {};
 
-       if(!ff) ff = procfile_open(config_get("plugin:proc:/proc/vmstat", "filename to monitor", "/proc/vmstat"), " \t:", PROCFILE_FLAG_DEFAULT);
+       if(!ff) {
+               char filename[FILENAME_MAX + 1];
+               snprintf(filename, FILENAME_MAX, "%s%s", global_host_prefix, "/proc/vmstat");
+               ff = procfile_open(config_get("plugin:proc:/proc/vmstat", "filename to monitor", filename), " \t:", PROCFILE_FLAG_DEFAULT);
+       }
        if(!ff) return 1;
 
        ff = procfile_readall(ff);