all charts have now options in config file
Costa Tsaousis (ktsaou) committed
Apr 27, 2014 at 07:09 UTC
edb81eff27048b5f390ce3a52158aad554ae6be6
1 file changed
+379
-280
netdata.c
+379
-280
@@ -3765,6 +3765,16 @@ int do_proc_net_netstat() {
3765
// /proc/net/stat/nf_conntrack processor
3766
3767
int do_proc_net_stat_conntrack() {
3768
+ static int do_sockets = -1, do_new = -1, do_changes = -1, do_expect = -1, do_search = -1, do_errors = -1;
3769
+
3770
+ if(do_sockets == -1) do_sockets = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connections", 1);
3771
+ if(do_new == -1) do_new = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter new connections", 1);
3772
+ if(do_changes == -1) do_changes = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connection changes", 1);
3773
+ if(do_expect == -1) do_expect = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connection expectations", 1);
3774
+ if(do_search == -1) do_search = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter connection searches", 1);
3775
+ if(do_errors == -1) do_errors = config_get_boolean("plugin:proc:/proc/net/stat/nf_conntrack", "netfilter errors", 1);
3776
+
3777
+
3778
char buffer[MAX_PROC_NET_STAT_CONNTRACK_LINE+1] = "";
3779
3780
FILE *fp = fopen("/proc/net/stat/nf_conntrack", "r");
@@ -3813,109 +3823,123 @@ int do_proc_net_stat_conntrack() {
3823
}
3824
fclose(fp);
3825
3826
+ RRD_STATS *st;
3827
+
3828
// --------------------------------------------------------------------
3829
3818
- RRD_STATS *st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".sockets");
3819
- if(!st) {
3820
- st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "sockets", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connections", "active connections", 1000);
3830
+ if(do_sockets) {
3831
+ st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".sockets");
3832
+ if(!st) {
3833
+ st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "sockets", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connections", "active connections", 1000);
3834
3822
- rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
3823
- }
3824
- else rrd_stats_next(st);
3835
+ rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
3836
+ }
3837
+ else rrd_stats_next(st);
3838
3826
- rrd_stats_dimension_set(st, "connections", &aentries, NULL);
3827
- rrd_stats_done(st);
3839
+ rrd_stats_dimension_set(st, "connections", &aentries, NULL);
3840
+ rrd_stats_done(st);
3841
+ }
3842
3843
// --------------------------------------------------------------------
3844
3831
- st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".new");
3832
- if(!st) {
3833
- st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "new", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter New Connections", "connections/s", 1001);
3845
+ if(do_new) {
3846
+ st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".new");
3847
+ if(!st) {
3848
+ st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "new", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter New Connections", "connections/s", 1001);
3849
3835
- rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3836
- rrd_stats_dimension_add(st, "ignore", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3837
- rrd_stats_dimension_add(st, "invalid", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3838
- }
3839
- else rrd_stats_next(st);
3850
+ rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3851
+ rrd_stats_dimension_add(st, "ignore", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3852
+ rrd_stats_dimension_add(st, "invalid", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3853
+ }
3854
+ else rrd_stats_next(st);
3855
3841
- rrd_stats_dimension_set(st, "new", &anew, NULL);
3842
- rrd_stats_dimension_set(st, "ignore", &aignore, NULL);
3843
- rrd_stats_dimension_set(st, "invalid", &ainvalid, NULL);
3844
- rrd_stats_done(st);
3856
+ rrd_stats_dimension_set(st, "new", &anew, NULL);
3857
+ rrd_stats_dimension_set(st, "ignore", &aignore, NULL);
3858
+ rrd_stats_dimension_set(st, "invalid", &ainvalid, NULL);
3859
+ rrd_stats_done(st);
3860
+ }
3861
3862
// --------------------------------------------------------------------
3863
3848
- st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".changes");
3849
- if(!st) {
3850
- st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "changes", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Changes", "changes/s", 1002);
3851
- st->isdetail = 1;
3864
+ if(do_changes) {
3865
+ st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".changes");
3866
+ if(!st) {
3867
+ st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "changes", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Changes", "changes/s", 1002);
3868
+ st->isdetail = 1;
3869
3853
- rrd_stats_dimension_add(st, "inserted", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3854
- rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3855
- rrd_stats_dimension_add(st, "delete_list", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3856
- }
3857
- else rrd_stats_next(st);
3870
+ rrd_stats_dimension_add(st, "inserted", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3871
+ rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3872
+ rrd_stats_dimension_add(st, "delete_list", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3873
+ }
3874
+ else rrd_stats_next(st);
3875
3859
- rrd_stats_dimension_set(st, "inserted", &ainsert, NULL);
3860
- rrd_stats_dimension_set(st, "deleted", &adelete, NULL);
3861
- rrd_stats_dimension_set(st, "delete_list", &adelete_list, NULL);
3862
- rrd_stats_done(st);
3876
+ rrd_stats_dimension_set(st, "inserted", &ainsert, NULL);
3877
+ rrd_stats_dimension_set(st, "deleted", &adelete, NULL);
3878
+ rrd_stats_dimension_set(st, "delete_list", &adelete_list, NULL);
3879
+ rrd_stats_done(st);
3880
+ }
3881
3882
// --------------------------------------------------------------------
3883
3866
- st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".expect");
3867
- if(!st) {
3868
- st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "expect", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Expectations", "expectations/s", 1003);
3869
- st->isdetail = 1;
3884
+ if(do_expect) {
3885
+ st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".expect");
3886
+ if(!st) {
3887
+ st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "expect", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Expectations", "expectations/s", 1003);
3888
+ st->isdetail = 1;
3889
3871
- rrd_stats_dimension_add(st, "created", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3872
- rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3873
- rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3874
- }
3875
- else rrd_stats_next(st);
3890
+ rrd_stats_dimension_add(st, "created", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3891
+ rrd_stats_dimension_add(st, "deleted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3892
+ rrd_stats_dimension_add(st, "new", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3893
+ }
3894
+ else rrd_stats_next(st);
3895
3877
- rrd_stats_dimension_set(st, "created", &aexpect_create, NULL);
3878
- rrd_stats_dimension_set(st, "deleted", &aexpect_delete, NULL);
3879
- rrd_stats_dimension_set(st, "new", &aexpect_new, NULL);
3880
- rrd_stats_done(st);
3896
+ rrd_stats_dimension_set(st, "created", &aexpect_create, NULL);
3897
+ rrd_stats_dimension_set(st, "deleted", &aexpect_delete, NULL);
3898
+ rrd_stats_dimension_set(st, "new", &aexpect_new, NULL);
3899
+ rrd_stats_done(st);
3900
+ }
3901
3902
// --------------------------------------------------------------------
3903
3884
- st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".search");
3885
- if(!st) {
3886
- st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "search", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Searches", "searches/s", 1010);
3887
- st->isdetail = 1;
3904
+ if(do_search) {
3905
+ st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".search");
3906
+ if(!st) {
3907
+ st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "search", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Connection Searches", "searches/s", 1010);
3908
+ st->isdetail = 1;
3909
3889
- rrd_stats_dimension_add(st, "searched", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3890
- rrd_stats_dimension_add(st, "restarted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3891
- rrd_stats_dimension_add(st, "found", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3892
- }
3893
- else rrd_stats_next(st);
3910
+ rrd_stats_dimension_add(st, "searched", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3911
+ rrd_stats_dimension_add(st, "restarted", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3912
+ rrd_stats_dimension_add(st, "found", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3913
+ }
3914
+ else rrd_stats_next(st);
3915
3895
- rrd_stats_dimension_set(st, "searched", &asearched, NULL);
3896
- rrd_stats_dimension_set(st, "restarted", &asearch_restart, NULL);
3897
- rrd_stats_dimension_set(st, "found", &afound, NULL);
3898
- rrd_stats_done(st);
3916
+ rrd_stats_dimension_set(st, "searched", &asearched, NULL);
3917
+ rrd_stats_dimension_set(st, "restarted", &asearch_restart, NULL);
3918
+ rrd_stats_dimension_set(st, "found", &afound, NULL);
3919
+ rrd_stats_done(st);
3920
+ }
3921
3922
// --------------------------------------------------------------------
3923
3902
- st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".errors");
3903
- if(!st) {
3904
- st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "errors", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Errors", "events/s", 1005);
3905
- st->isdetail = 1;
3924
+ if(do_errors) {
3925
+ st = rrd_stats_find(RRD_TYPE_NET_STAT_CONNTRACK ".errors");
3926
+ if(!st) {
3927
+ st = rrd_stats_create(RRD_TYPE_NET_STAT_CONNTRACK, "errors", NULL, RRD_TYPE_NET_STAT_CONNTRACK, "Netfilter Errors", "events/s", 1005);
3928
+ st->isdetail = 1;
3929
3907
- rrd_stats_dimension_add(st, "icmp_error", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3908
- rrd_stats_dimension_add(st, "insert_failed", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3909
- rrd_stats_dimension_add(st, "drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3910
- rrd_stats_dimension_add(st, "early_drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3911
- }
3912
- else rrd_stats_next(st);
3930
+ rrd_stats_dimension_add(st, "icmp_error", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3931
+ rrd_stats_dimension_add(st, "insert_failed", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3932
+ rrd_stats_dimension_add(st, "drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3933
+ rrd_stats_dimension_add(st, "early_drop", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3934
+ }
3935
+ else rrd_stats_next(st);
3936
3914
- rrd_stats_dimension_set(st, "icmp_error", &aicmp_error, NULL);
3915
- rrd_stats_dimension_set(st, "insert_failed", &ainsert_failed, NULL);
3916
- rrd_stats_dimension_set(st, "drop", &adrop, NULL);
3917
- rrd_stats_dimension_set(st, "early_drop", &aearly_drop, NULL);
3918
- rrd_stats_done(st);
3937
+ rrd_stats_dimension_set(st, "icmp_error", &aicmp_error, NULL);
3938
+ rrd_stats_dimension_set(st, "insert_failed", &ainsert_failed, NULL);
3939
+ rrd_stats_dimension_set(st, "drop", &adrop, NULL);
3940
+ rrd_stats_dimension_set(st, "early_drop", &aearly_drop, NULL);
3941
+ rrd_stats_done(st);
3942
+ }
3943
3944
return 0;
3945
}
@@ -3924,6 +3948,12 @@ int do_proc_net_stat_conntrack() {
3948
// /proc/net/ip_vs_stats processor
3949
3950
int do_proc_net_ip_vs_stats() {
3951
+ static int do_bandwidth = -1, do_sockets = -1, do_packets = -1;
3952
+
3953
+ if(do_bandwidth == -1) do_bandwidth = config_get_boolean("plugin:proc:/proc/net/ip_vs_stats", "IPVS bandwidth", 1);
3954
+ if(do_sockets == -1) do_sockets = config_get_boolean("plugin:proc:/proc/net/ip_vs_stats", "IPVS connections", 1);
3955
+ if(do_packets == -1) do_packets = config_get_boolean("plugin:proc:/proc/net/ip_vs_stats", "IPVS packets", 1);
3956
+
3957
char buffer[MAX_PROC_NET_IPVS_LINE+1] = "";
3958
3959
FILE *fp = fopen("/proc/net/ip_vs_stats", "r");
@@ -3963,53 +3993,70 @@ int do_proc_net_ip_vs_stats() {
3993
3994
fclose(fp);
3995
3996
+ RRD_STATS *st;
3997
+
3998
// --------------------------------------------------------------------
3999
3968
- RRD_STATS *st = rrd_stats_find(RRD_TYPE_NET_IPVS ".sockets");
3969
- if(!st) {
3970
- st = rrd_stats_create(RRD_TYPE_NET_IPVS, "sockets", NULL, RRD_TYPE_NET_IPVS, "IPVS New Connections", "connections/s", 1001);
4000
+ if(do_sockets) {
4001
+ st = rrd_stats_find(RRD_TYPE_NET_IPVS ".sockets");
4002
+ if(!st) {
4003
+ st = rrd_stats_create(RRD_TYPE_NET_IPVS, "sockets", NULL, RRD_TYPE_NET_IPVS, "IPVS New Connections", "connections/s", 1001);
4004
3972
- rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3973
- }
3974
- else rrd_stats_next(st);
4005
+ rrd_stats_dimension_add(st, "connections", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4006
+ }
4007
+ else rrd_stats_next(st);
4008
3976
- rrd_stats_dimension_set(st, "connections", &entries, NULL);
3977
- rrd_stats_done(st);
4009
+ rrd_stats_dimension_set(st, "connections", &entries, NULL);
4010
+ rrd_stats_done(st);
4011
+ }
4012
4013
// --------------------------------------------------------------------
4014
3981
- st = rrd_stats_find(RRD_TYPE_NET_IPVS ".packets");
3982
- if(!st) {
3983
- st = rrd_stats_create(RRD_TYPE_NET_IPVS, "packets", NULL, RRD_TYPE_NET_IPVS, "IPVS Packets", "packets/s", 1002);
4015
+ if(do_packets) {
4016
+ st = rrd_stats_find(RRD_TYPE_NET_IPVS ".packets");
4017
+ if(!st) {
4018
+ st = rrd_stats_create(RRD_TYPE_NET_IPVS, "packets", NULL, RRD_TYPE_NET_IPVS, "IPVS Packets", "packets/s", 1002);
4019
3985
- rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3986
- rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
3987
- }
3988
- else rrd_stats_next(st);
4020
+ rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4021
+ rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4022
+ }
4023
+ else rrd_stats_next(st);
4024
3990
- rrd_stats_dimension_set(st, "received", &InPackets, NULL);
3991
- rrd_stats_dimension_set(st, "sent", &OutPackets, NULL);
3992
- rrd_stats_done(st);
4025
+ rrd_stats_dimension_set(st, "received", &InPackets, NULL);
4026
+ rrd_stats_dimension_set(st, "sent", &OutPackets, NULL);
4027
+ rrd_stats_done(st);
4028
+ }
4029
4030
// --------------------------------------------------------------------
4031
3996
- st = rrd_stats_find(RRD_TYPE_NET_IPVS ".net");
3997
- if(!st) {
3998
- st = rrd_stats_create(RRD_TYPE_NET_IPVS, "net", NULL, RRD_TYPE_NET_IPVS, "IPVS Bandwidth", "kilobits/s", 1000);
4032
+ if(do_bandwidth) {
4033
+ st = rrd_stats_find(RRD_TYPE_NET_IPVS ".net");
4034
+ if(!st) {
4035
+ st = rrd_stats_create(RRD_TYPE_NET_IPVS, "net", NULL, RRD_TYPE_NET_IPVS, "IPVS Bandwidth", "kilobits/s", 1000);
4036
4000
- rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4001
- rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4002
- }
4003
- else rrd_stats_next(st);
4037
+ rrd_stats_dimension_add(st, "received", NULL, sizeof(unsigned long long), 0, 8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4038
+ rrd_stats_dimension_add(st, "sent", NULL, sizeof(unsigned long long), 0, -8, 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4039
+ }
4040
+ else rrd_stats_next(st);
4041
4005
- rrd_stats_dimension_set(st, "received", &InBytes, NULL);
4006
- rrd_stats_dimension_set(st, "sent", &OutBytes, NULL);
4007
- rrd_stats_done(st);
4042
+ rrd_stats_dimension_set(st, "received", &InBytes, NULL);
4043
+ rrd_stats_dimension_set(st, "sent", &OutBytes, NULL);
4044
+ rrd_stats_done(st);
4045
+ }
4046
4047
return 0;
4048
}
4049
4050
int do_proc_stat() {
4051
+ static int do_cpu = -1, do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_processes = -1;
4052
+
4053
+ if(do_cpu == -1) do_cpu = config_get_boolean("plugin:proc:/proc/stat", "cpu utilization", 1);
4054
+ if(do_cpu_cores == -1) do_cpu_cores = config_get_boolean("plugin:proc:/proc/stat", "per cpu core utilization", 1);
4055
+ if(do_interrupts == -1) do_interrupts = config_get_boolean("plugin:proc:/proc/stat", "cpu interrupts", 1);
4056
+ if(do_context == -1) do_context = config_get_boolean("plugin:proc:/proc/stat", "context switches", 1);
4057
+ if(do_forks == -1) do_forks = config_get_boolean("plugin:proc:/proc/stat", "processes started", 1);
4058
+ if(do_processes == -1) do_processes = config_get_boolean("plugin:proc:/proc/stat", "processes running", 1);
4059
+
4060
char buffer[MAX_PROC_STAT_LINE+1] = "";
4061
4062
FILE *fp = fopen("/proc/stat", "r");
@@ -4019,6 +4066,7 @@ int do_proc_stat() {
4066
}
4067
4068
unsigned long long processes = 0, running = 0 , blocked = 0;
4069
+ RRD_STATS *st;
4070
4071
for(;1;) {
4072
char *p = fgets(buffer, MAX_PROC_STAT_LINE, fp);
@@ -4037,45 +4085,49 @@ int do_proc_stat() {
4085
char *title = "Core utilization";
4086
char *type = RRD_TYPE_STAT;
4087
long priority = 1000;
4088
+ int isthistotal = 0;
4089
if(strcmp(id, "cpu") == 0) {
4090
+ isthistotal = 1;
4091
title = "Total CPU utilization";
4092
type = "system";
4093
priority = 100;
4094
}
4095
4046
- RRD_STATS *st = rrd_stats_find_bytype(type, id);
4047
- if(!st) {
4048
- st = rrd_stats_create(type, id, NULL, "cpu", title, "percentage", priority);
4049
-
4050
- long multiplier = 1;
4051
- long divisor = 1; // sysconf(_SC_CLK_TCK);
4052
-
4053
- rrd_stats_dimension_add(st, "guest_nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4054
- rrd_stats_dimension_add(st, "guest", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4055
- rrd_stats_dimension_add(st, "steal", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4056
- rrd_stats_dimension_add(st, "softirq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4057
- rrd_stats_dimension_add(st, "irq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4058
- rrd_stats_dimension_add(st, "user", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4059
- rrd_stats_dimension_add(st, "system", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4060
- rrd_stats_dimension_add(st, "nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4061
- rrd_stats_dimension_add(st, "iowait", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4062
-
4063
- rrd_stats_dimension_add(st, "idle", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4064
- rrd_stats_dimension_hide(st, "idle");
4065
- }
4066
- else rrd_stats_next(st);
4096
+ if((isthistotal && do_cpu) || (!isthistotal && do_cpu_cores)) {
4097
+ st = rrd_stats_find_bytype(type, id);
4098
+ if(!st) {
4099
+ st = rrd_stats_create(type, id, NULL, "cpu", title, "percentage", priority);
4100
+
4101
+ long multiplier = 1;
4102
+ long divisor = 1; // sysconf(_SC_CLK_TCK);
4103
+
4104
+ rrd_stats_dimension_add(st, "guest_nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4105
+ rrd_stats_dimension_add(st, "guest", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4106
+ rrd_stats_dimension_add(st, "steal", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4107
+ rrd_stats_dimension_add(st, "softirq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4108
+ rrd_stats_dimension_add(st, "irq", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4109
+ rrd_stats_dimension_add(st, "user", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4110
+ rrd_stats_dimension_add(st, "system", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4111
+ rrd_stats_dimension_add(st, "nice", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4112
+ rrd_stats_dimension_add(st, "iowait", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4113
+
4114
+ rrd_stats_dimension_add(st, "idle", NULL, sizeof(unsigned long long), 0, multiplier, divisor, RRD_DIMENSION_PCENT_OVER_DIFF_TOTAL, NULL);
4115
+ rrd_stats_dimension_hide(st, "idle");
4116
+ }
4117
+ else rrd_stats_next(st);
4118
4068
- rrd_stats_dimension_set(st, "user", &user, NULL);
4069
- rrd_stats_dimension_set(st, "nice", &nice, NULL);
4070
- rrd_stats_dimension_set(st, "system", &system, NULL);
4071
- rrd_stats_dimension_set(st, "idle", &idle, NULL);
4072
- rrd_stats_dimension_set(st, "iowait", &iowait, NULL);
4073
- rrd_stats_dimension_set(st, "irq", &irq, NULL);
4074
- rrd_stats_dimension_set(st, "softirq", &softirq, NULL);
4075
- rrd_stats_dimension_set(st, "steal", &steal, NULL);
4076
- rrd_stats_dimension_set(st, "guest", &guest, NULL);
4077
- rrd_stats_dimension_set(st, "guest_nice", &guest_nice, NULL);
4078
- rrd_stats_done(st);
4119
+ rrd_stats_dimension_set(st, "user", &user, NULL);
4120
+ rrd_stats_dimension_set(st, "nice", &nice, NULL);
4121
+ rrd_stats_dimension_set(st, "system", &system, NULL);
4122
+ rrd_stats_dimension_set(st, "idle", &idle, NULL);
4123
+ rrd_stats_dimension_set(st, "iowait", &iowait, NULL);
4124
+ rrd_stats_dimension_set(st, "irq", &irq, NULL);
4125
+ rrd_stats_dimension_set(st, "softirq", &softirq, NULL);
4126
+ rrd_stats_dimension_set(st, "steal", &steal, NULL);
4127
+ rrd_stats_dimension_set(st, "guest", &guest, NULL);
4128
+ rrd_stats_dimension_set(st, "guest_nice", &guest_nice, NULL);
4129
+ rrd_stats_done(st);
4130
+ }
4131
}
4132
else if(strncmp(p, "intr ", 5) == 0) {
4133
char id[MAX_PROC_STAT_NAME + 1];
@@ -4088,17 +4140,19 @@ int do_proc_stat() {
4140
4141
// --------------------------------------------------------------------
4142
4091
- RRD_STATS *st = rrd_stats_find_bytype("system", id);
4092
- if(!st) {
4093
- st = rrd_stats_create("system", id, NULL, "cpu", "CPU Interrupts", "interrupts/s", 900);
4094
- st->isdetail = 1;
4143
+ if(do_interrupts) {
4144
+ st = rrd_stats_find_bytype("system", id);
4145
+ if(!st) {
4146
+ st = rrd_stats_create("system", id, NULL, "cpu", "CPU Interrupts", "interrupts/s", 900);
4147
+ st->isdetail = 1;
4148
4096
- rrd_stats_dimension_add(st, "interrupts", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4097
- }
4098
- else rrd_stats_next(st);
4149
+ rrd_stats_dimension_add(st, "interrupts", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4150
+ }
4151
+ else rrd_stats_next(st);
4152
4100
- rrd_stats_dimension_set(st, "interrupts", &value, NULL);
4101
- rrd_stats_done(st);
4153
+ rrd_stats_dimension_set(st, "interrupts", &value, NULL);
4154
+ rrd_stats_done(st);
4155
+ }
4156
}
4157
else if(strncmp(p, "ctxt ", 5) == 0) {
4158
char id[MAX_PROC_STAT_NAME + 1] = "";
@@ -4111,16 +4165,18 @@ int do_proc_stat() {
4165
4166
// --------------------------------------------------------------------
4167
4114
- RRD_STATS *st = rrd_stats_find_bytype("system", id);
4115
- if(!st) {
4116
- st = rrd_stats_create("system", id, NULL, "cpu", "CPU Context Switches", "context switches/s", 800);
4168
+ if(do_context) {
4169
+ st = rrd_stats_find_bytype("system", id);
4170
+ if(!st) {
4171
+ st = rrd_stats_create("system", id, NULL, "cpu", "CPU Context Switches", "context switches/s", 800);
4172
4118
- rrd_stats_dimension_add(st, "switches", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4119
- }
4120
- else rrd_stats_next(st);
4173
+ rrd_stats_dimension_add(st, "switches", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4174
+ }
4175
+ else rrd_stats_next(st);
4176
4122
- rrd_stats_dimension_set(st, "switches", &value, NULL);
4123
- rrd_stats_done(st);
4177
+ rrd_stats_dimension_set(st, "switches", &value, NULL);
4178
+ rrd_stats_done(st);
4179
+ }
4180
}
4181
else if(strncmp(p, "processes ", 10) == 0) {
4182
char id[MAX_PROC_STAT_NAME + 1] = "";
@@ -4160,32 +4216,37 @@ int do_proc_stat() {
4216
4217
// --------------------------------------------------------------------
4218
4163
- RRD_STATS *st = rrd_stats_find_bytype("system", "forks");
4164
- if(!st) {
4165
- st = rrd_stats_create("system", "forks", NULL, "cpu", "New Processes", "processes/s", 700);
4166
- st->isdetail = 1;
4219
+ if(do_forks) {
4220
+ st = rrd_stats_find_bytype("system", "forks");
4221
+ if(!st) {
4222
+ st = rrd_stats_create("system", "forks", NULL, "cpu", "New Processes", "processes/s", 700);
4223
+ st->isdetail = 1;
4224
4168
- rrd_stats_dimension_add(st, "started", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4169
- }
4170
- else rrd_stats_next(st);
4225
+ rrd_stats_dimension_add(st, "started", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4226
+ }
4227
+ else rrd_stats_next(st);
4228
4172
- rrd_stats_dimension_set(st, "started", &processes, NULL);
4173
- rrd_stats_done(st);
4229
+ rrd_stats_dimension_set(st, "started", &processes, NULL);
4230
+ rrd_stats_done(st);
4231
+ }
4232
4233
// --------------------------------------------------------------------
4234
4177
- st = rrd_stats_find_bytype("system", "processes");
4178
- if(!st) {
4179
- st = rrd_stats_create("system", "processes", NULL, "cpu", "Processes", "processes", 600);
4235
+ if(do_processes) {
4236
+ st = rrd_stats_find_bytype("system", "processes");
4237
+ if(!st) {
4238
+ st = rrd_stats_create("system", "processes", NULL, "cpu", "Processes", "processes", 600);
4239
+
4240
+ rrd_stats_dimension_add(st, "running", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4241
+ rrd_stats_dimension_add(st, "blocked", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4242
+ }
4243
+ else rrd_stats_next(st);
4244
4181
- rrd_stats_dimension_add(st, "running", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4182
- rrd_stats_dimension_add(st, "blocked", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_ABSOLUTE, NULL);
4245
+ rrd_stats_dimension_set(st, "running", &running, NULL);
4246
+ rrd_stats_dimension_set(st, "blocked", &blocked, NULL);
4247
+ rrd_stats_done(st);
4248
}
4184
- else rrd_stats_next(st);
4249
4186
- rrd_stats_dimension_set(st, "running", &running, NULL);
4187
- rrd_stats_dimension_set(st, "blocked", &blocked, NULL);
4188
- rrd_stats_done(st);
4250
return 0;
4251
}
4252
@@ -4196,6 +4257,16 @@ int do_proc_stat() {
4257
#define MAX_PROC_MEMINFO_NAME 1024
4258
4259
int do_proc_meminfo() {
4260
+ static int do_ram = -1, do_swap = -1, do_hwcorrupt = -1, do_committed = -1, do_writeback = -1, do_kernel = -1, do_slab = -1;
4261
+
4262
+ if(do_ram == -1) do_ram = config_get_boolean("plugin:proc:/proc/meminfo", "system ram", 1);
4263
+ if(do_swap == -1) do_swap = config_get_boolean("plugin:proc:/proc/meminfo", "system swap", 1);
4264
+ if(do_hwcorrupt == -1) do_hwcorrupt = config_get_boolean("plugin:proc:/proc/meminfo", "hardware corrupted ECC", 1);
4265
+ if(do_committed == -1) do_committed = config_get_boolean("plugin:proc:/proc/meminfo", "committed memory", 1);
4266
+ if(do_writeback == -1) do_writeback = config_get_boolean("plugin:proc:/proc/meminfo", "writeback memory", 1);
4267
+ if(do_kernel == -1) do_kernel = config_get_boolean("plugin:proc:/proc/meminfo", "kernel memory", 1);
4268
+ if(do_slab == -1) do_slab = config_get_boolean("plugin:proc:/proc/meminfo", "slab memory", 1);
4269
+
4270
char buffer[MAX_PROC_MEMINFO_LINE+1] = "";
4271
4272
FILE *fp = fopen("/proc/meminfo", "r");
@@ -4275,49 +4346,55 @@ int do_proc_meminfo() {
4346
}
4347
fclose(fp);
4348
4349
+ RRD_STATS *st;
4350
+
4351
// --------------------------------------------------------------------
4352
4353
// http://stackoverflow.com/questions/3019748/how-to-reliably-measure-available-memory-in-linux
4354
unsigned long long MemUsed = MemTotal - MemFree - Cached - Buffers;
4355
4283
- RRD_STATS *st = rrd_stats_find("system.ram");
4284
- if(!st) {
4285
- st = rrd_stats_create("system", "ram", NULL, "mem", "System RAM", "MB", 200);
4356
+ if(do_ram) {
4357
+ st = rrd_stats_find("system.ram");
4358
+ if(!st) {
4359
+ st = rrd_stats_create("system", "ram", NULL, "mem", "System RAM", "MB", 200);
4360
4287
- rrd_stats_dimension_add(st, "buffers", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4288
- rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4289
- rrd_stats_dimension_add(st, "cached", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4290
- rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4291
- }
4292
- else rrd_stats_next(st);
4361
+ rrd_stats_dimension_add(st, "buffers", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4362
+ rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4363
+ rrd_stats_dimension_add(st, "cached", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4364
+ rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4365
+ }
4366
+ else rrd_stats_next(st);
4367
4294
- rrd_stats_dimension_set(st, "used", &MemUsed, NULL);
4295
- rrd_stats_dimension_set(st, "free", &MemFree, NULL);
4296
- rrd_stats_dimension_set(st, "cached", &Cached, NULL);
4297
- rrd_stats_dimension_set(st, "buffers", &Buffers, NULL);
4298
- rrd_stats_done(st);
4368
+ rrd_stats_dimension_set(st, "used", &MemUsed, NULL);
4369
+ rrd_stats_dimension_set(st, "free", &MemFree, NULL);
4370
+ rrd_stats_dimension_set(st, "cached", &Cached, NULL);
4371
+ rrd_stats_dimension_set(st, "buffers", &Buffers, NULL);
4372
+ rrd_stats_done(st);
4373
+ }
4374
4375
// --------------------------------------------------------------------
4376
4377
unsigned long long SwapUsed = SwapTotal - SwapFree;
4378
4304
- st = rrd_stats_find("system.swap");
4305
- if(!st) {
4306
- st = rrd_stats_create("system", "swap", NULL, "mem", "System Swap", "MB", 201);
4307
- st->isdetail = 1;
4379
+ if(do_swap) {
4380
+ st = rrd_stats_find("system.swap");
4381
+ if(!st) {
4382
+ st = rrd_stats_create("system", "swap", NULL, "mem", "System Swap", "MB", 201);
4383
+ st->isdetail = 1;
4384
4309
- rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4310
- rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4311
- }
4312
- else rrd_stats_next(st);
4385
+ rrd_stats_dimension_add(st, "free", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4386
+ rrd_stats_dimension_add(st, "used", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4387
+ }
4388
+ else rrd_stats_next(st);
4389
4314
- rrd_stats_dimension_set(st, "used", &SwapUsed, NULL);
4315
- rrd_stats_dimension_set(st, "free", &SwapFree, NULL);
4316
- rrd_stats_done(st);
4390
+ rrd_stats_dimension_set(st, "used", &SwapUsed, NULL);
4391
+ rrd_stats_dimension_set(st, "free", &SwapFree, NULL);
4392
+ rrd_stats_done(st);
4393
+ }
4394
4395
// --------------------------------------------------------------------
4396
4320
- if(hwcorrupted) {
4397
+ if(hwcorrupted && do_hwcorrupt) {
4398
st = rrd_stats_find("mem.hwcorrupt");
4399
if(!st) {
4400
st = rrd_stats_create("mem", "hwcorrupt", NULL, "mem", "Hardware Corrupted ECC", "MB", 9000);
@@ -4333,75 +4410,83 @@ int do_proc_meminfo() {
4410
4411
// --------------------------------------------------------------------
4412
4336
- st = rrd_stats_find("mem.committed");
4337
- if(!st) {
4338
- st = rrd_stats_create("mem", "committed", NULL, "mem", "Committed (Allocated) Memory", "MB", 5000);
4339
- st->isdetail = 1;
4413
+ if(do_committed) {
4414
+ st = rrd_stats_find("mem.committed");
4415
+ if(!st) {
4416
+ st = rrd_stats_create("mem", "committed", NULL, "mem", "Committed (Allocated) Memory", "MB", 5000);
4417
+ st->isdetail = 1;
4418
4341
- rrd_stats_dimension_add(st, "Committed_AS", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4342
- }
4343
- else rrd_stats_next(st);
4419
+ rrd_stats_dimension_add(st, "Committed_AS", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4420
+ }
4421
+ else rrd_stats_next(st);
4422
4345
- rrd_stats_dimension_set(st, "Committed_AS", &Committed_AS, NULL);
4346
- rrd_stats_done(st);
4423
+ rrd_stats_dimension_set(st, "Committed_AS", &Committed_AS, NULL);
4424
+ rrd_stats_done(st);
4425
+ }
4426
4427
// --------------------------------------------------------------------
4428
4350
- st = rrd_stats_find("mem.writeback");
4351
- if(!st) {
4352
- st = rrd_stats_create("mem", "writeback", NULL, "mem", "Writeback Memory", "MB", 4000);
4353
- st->isdetail = 1;
4354
-
4355
- rrd_stats_dimension_add(st, "Dirty", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4356
- rrd_stats_dimension_add(st, "Writeback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4357
- rrd_stats_dimension_add(st, "FuseWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4358
- rrd_stats_dimension_add(st, "NfsWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4359
- rrd_stats_dimension_add(st, "Bounce", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4360
- }
4361
- else rrd_stats_next(st);
4362
-
4363
- rrd_stats_dimension_set(st, "Dirty", &Dirty, NULL);
4364
- rrd_stats_dimension_set(st, "Writeback", &Writeback, NULL);
4365
- rrd_stats_dimension_set(st, "FuseWriteback", &WritebackTmp, NULL);
4366
- rrd_stats_dimension_set(st, "NfsWriteback", &NFS_Unstable, NULL);
4367
- rrd_stats_dimension_set(st, "Bounce", &Bounce, NULL);
4368
- rrd_stats_done(st);
4429
+ if(do_writeback) {
4430
+ st = rrd_stats_find("mem.writeback");
4431
+ if(!st) {
4432
+ st = rrd_stats_create("mem", "writeback", NULL, "mem", "Writeback Memory", "MB", 4000);
4433
+ st->isdetail = 1;
4434
+
4435
+ rrd_stats_dimension_add(st, "Dirty", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4436
+ rrd_stats_dimension_add(st, "Writeback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4437
+ rrd_stats_dimension_add(st, "FuseWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4438
+ rrd_stats_dimension_add(st, "NfsWriteback", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4439
+ rrd_stats_dimension_add(st, "Bounce", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4440
+ }
4441
+ else rrd_stats_next(st);
4442
+
4443
+ rrd_stats_dimension_set(st, "Dirty", &Dirty, NULL);
4444
+ rrd_stats_dimension_set(st, "Writeback", &Writeback, NULL);
4445
+ rrd_stats_dimension_set(st, "FuseWriteback", &WritebackTmp, NULL);
4446
+ rrd_stats_dimension_set(st, "NfsWriteback", &NFS_Unstable, NULL);
4447
+ rrd_stats_dimension_set(st, "Bounce", &Bounce, NULL);
4448
+ rrd_stats_done(st);
4449
+ }
4450
4451
// --------------------------------------------------------------------
4452
4372
- st = rrd_stats_find("mem.kernel");
4373
- if(!st) {
4374
- st = rrd_stats_create("mem", "kernel", NULL, "mem", "Memory Used by Kernel", "MB", 6000);
4375
- st->isdetail = 1;
4453
+ if(do_kernel) {
4454
+ st = rrd_stats_find("mem.kernel");
4455
+ if(!st) {
4456
+ st = rrd_stats_create("mem", "kernel", NULL, "mem", "Memory Used by Kernel", "MB", 6000);
4457
+ st->isdetail = 1;
4458
4377
- rrd_stats_dimension_add(st, "Slab", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4378
- rrd_stats_dimension_add(st, "KernelStack", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4379
- rrd_stats_dimension_add(st, "PageTables", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4380
- rrd_stats_dimension_add(st, "VmallocUsed", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4381
- }
4382
- else rrd_stats_next(st);
4459
+ rrd_stats_dimension_add(st, "Slab", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4460
+ rrd_stats_dimension_add(st, "KernelStack", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4461
+ rrd_stats_dimension_add(st, "PageTables", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4462
+ rrd_stats_dimension_add(st, "VmallocUsed", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4463
+ }
4464
+ else rrd_stats_next(st);
4465
4384
- rrd_stats_dimension_set(st, "KernelStack", &KernelStack, NULL);
4385
- rrd_stats_dimension_set(st, "Slab", &Slab, NULL);
4386
- rrd_stats_dimension_set(st, "PageTables", &PageTables, NULL);
4387
- rrd_stats_dimension_set(st, "VmallocUsed", &VmallocUsed, NULL);
4388
- rrd_stats_done(st);
4466
+ rrd_stats_dimension_set(st, "KernelStack", &KernelStack, NULL);
4467
+ rrd_stats_dimension_set(st, "Slab", &Slab, NULL);
4468
+ rrd_stats_dimension_set(st, "PageTables", &PageTables, NULL);
4469
+ rrd_stats_dimension_set(st, "VmallocUsed", &VmallocUsed, NULL);
4470
+ rrd_stats_done(st);
4471
+ }
4472
4473
// --------------------------------------------------------------------
4474
4392
- st = rrd_stats_find("mem.slab");
4393
- if(!st) {
4394
- st = rrd_stats_create("mem", "slab", NULL, "mem", "Reclaimable Kernel Memory", "MB", 6500);
4395
- st->isdetail = 1;
4475
+ if(do_slab) {
4476
+ st = rrd_stats_find("mem.slab");
4477
+ if(!st) {
4478
+ st = rrd_stats_create("mem", "slab", NULL, "mem", "Reclaimable Kernel Memory", "MB", 6500);
4479
+ st->isdetail = 1;
4480
4397
- rrd_stats_dimension_add(st, "reclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4398
- rrd_stats_dimension_add(st, "unreclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4399
- }
4400
- else rrd_stats_next(st);
4481
+ rrd_stats_dimension_add(st, "reclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4482
+ rrd_stats_dimension_add(st, "unreclaimable", NULL, sizeof(unsigned long long), 0, 1, 1024, RRD_DIMENSION_ABSOLUTE, NULL);
4483
+ }
4484
+ else rrd_stats_next(st);
4485
4402
- rrd_stats_dimension_set(st, "reclaimable", &SReclaimable, NULL);
4403
- rrd_stats_dimension_set(st, "unreclaimable", &SUnreclaim, NULL);
4404
- rrd_stats_done(st);
4486
+ rrd_stats_dimension_set(st, "reclaimable", &SReclaimable, NULL);
4487
+ rrd_stats_dimension_set(st, "unreclaimable", &SUnreclaim, NULL);
4488
+ rrd_stats_done(st);
4489
+ }
4490
4491
return 0;
4492
}
@@ -4413,6 +4498,12 @@ int do_proc_meminfo() {
4498
#define MAX_PROC_VMSTAT_NAME 1024
4499
4500
int do_proc_vmstat() {
4501
+ static int do_swapio = -1, do_io = -1, do_pgfaults = -1;
4502
+
4503
+ if(do_swapio == -1) do_swapio = config_get_boolean("plugin:proc:/proc/vmstat", "swap i/o", 1);
4504
+ if(do_io == -1) do_io = config_get_boolean("plugin:proc:/proc/vmstat", "disk i/o", 1);
4505
+ if(do_pgfaults == -1) do_pgfaults = config_get_boolean("plugin:proc:/proc/vmstat", "memory page faults", 1);
4506
+
4507
char buffer[MAX_PROC_VMSTAT_LINE+1] = "";
4508
4509
FILE *fp = fopen("/proc/vmstat", "r");
@@ -4545,51 +4636,59 @@ int do_proc_vmstat() {
4636
}
4637
fclose(fp);
4638
4639
+ RRD_STATS *st;
4640
+
4641
// --------------------------------------------------------------------
4642
4550
- RRD_STATS *st = rrd_stats_find("system.swapio");
4551
- if(!st) {
4552
- st = rrd_stats_create("system", "swapio", NULL, "mem", "Swap I/O", "kilobytes/s", 250);
4643
+ if(do_swapio) {
4644
+ st = rrd_stats_find("system.swapio");
4645
+ if(!st) {
4646
+ st = rrd_stats_create("system", "swapio", NULL, "mem", "Swap I/O", "kilobytes/s", 250);
4647
4554
- rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4555
- rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4556
- }
4557
- else rrd_stats_next(st);
4648
+ rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4649
+ rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -sysconf(_SC_PAGESIZE), 1024, RRD_DIMENSION_INCREMENTAL, NULL);
4650
+ }
4651
+ else rrd_stats_next(st);
4652
4559
- rrd_stats_dimension_set(st, "in", &pswpin, NULL);
4560
- rrd_stats_dimension_set(st, "out", &pswpout, NULL);
4561
- rrd_stats_done(st);
4653
+ rrd_stats_dimension_set(st, "in", &pswpin, NULL);
4654
+ rrd_stats_dimension_set(st, "out", &pswpout, NULL);
4655
+ rrd_stats_done(st);
4656
+ }
4657
4658
// --------------------------------------------------------------------
4659
4565
- st = rrd_stats_find("system.io");
4566
- if(!st) {
4567
- st = rrd_stats_create("system", "io", NULL, "disk", "Disk I/O", "kilobytes/s", 150);
4660
+ if(do_io) {
4661
+ st = rrd_stats_find("system.io");
4662
+ if(!st) {
4663
+ st = rrd_stats_create("system", "io", NULL, "disk", "Disk I/O", "kilobytes/s", 150);
4664
4569
- rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4570
- rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4571
- }
4572
- else rrd_stats_next(st);
4665
+ rrd_stats_dimension_add(st, "in", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4666
+ rrd_stats_dimension_add(st, "out", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4667
+ }
4668
+ else rrd_stats_next(st);
4669
4574
- rrd_stats_dimension_set(st, "in", &pgpgin, NULL);
4575
- rrd_stats_dimension_set(st, "out", &pgpgout, NULL);
4576
- rrd_stats_done(st);
4670
+ rrd_stats_dimension_set(st, "in", &pgpgin, NULL);
4671
+ rrd_stats_dimension_set(st, "out", &pgpgout, NULL);
4672
+ rrd_stats_done(st);
4673
+ }
4674
4675
// --------------------------------------------------------------------
4676
4580
- st = rrd_stats_find("system.pgfaults");
4581
- if(!st) {
4582
- st = rrd_stats_create("system", "pgfaults", NULL, "mem", "Memory Page Faults", "page faults/s", 500);
4583
- st->isdetail = 1;
4677
+ if(do_pgfaults) {
4678
+ st = rrd_stats_find("system.pgfaults");
4679
+ if(!st) {
4680
+ st = rrd_stats_create("system", "pgfaults", NULL, "mem", "Memory Page Faults", "page faults/s", 500);
4681
+ st->isdetail = 1;
4682
4585
- rrd_stats_dimension_add(st, "minor", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4586
- rrd_stats_dimension_add(st, "major", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4587
- }
4588
- else rrd_stats_next(st);
4683
+ rrd_stats_dimension_add(st, "minor", NULL, sizeof(unsigned long long), 0, 1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4684
+ rrd_stats_dimension_add(st, "major", NULL, sizeof(unsigned long long), 0, -1, 1, RRD_DIMENSION_INCREMENTAL, NULL);
4685
+ }
4686
+ else rrd_stats_next(st);
4687
4590
- rrd_stats_dimension_set(st, "minor", &pgfault, NULL);
4591
- rrd_stats_dimension_set(st, "major", &pgmajfault, NULL);
4592
- rrd_stats_done(st);
4688
+ rrd_stats_dimension_set(st, "minor", &pgfault, NULL);
4689
+ rrd_stats_dimension_set(st, "major", &pgmajfault, NULL);
4690
+ rrd_stats_done(st);
4691
+ }
4692
4693
return 0;
4694
}