diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/zabbix_agent/sysinfo.c | 36 | ||||
| -rw-r--r-- | src/zabbix_agent/sysinfo.h | 5 | ||||
| -rw-r--r-- | src/zabbix_agent/zabbix_agentd.c | 37 | ||||
| -rw-r--r-- | src/zabbix_sucker/zabbix_sucker.c | 2 |
4 files changed, 57 insertions, 23 deletions
diff --git a/src/zabbix_agent/sysinfo.c b/src/zabbix_agent/sysinfo.c index c58805e9..59edf757 100644 --- a/src/zabbix_agent/sysinfo.c +++ b/src/zabbix_agent/sysinfo.c @@ -71,13 +71,16 @@ COMMAND commands[]= {"swap[in]" ,EXECUTE, "vmstat -n 1 2|tail -1|cut -b37-40"}, {"swap[out]" ,EXECUTE, "vmstat -n 1 2|tail -1|cut -b41-44"}, - {"io[in]" ,EXECUTE, "vmstat -n 1 2|tail -1|cut -b45-50"}, - {"io[out]" ,EXECUTE, "vmstat -n 1 2|tail -1|cut -b51-56"}, - {"system[interrupts]" ,EXECUTE, "vmstat -n 1 2|tail -1|cut -b57-61"}, {"system[switches]" ,EXECUTE, "vmstat -n 1 2|tail -1|cut -b62-67"}, ***************************************/ + {"io[disk_io]" ,DISK_IO, 0}, + {"io[disk_rio]" ,DISK_RIO, 0}, + {"io[disk_wio]" ,DISK_WIO, 0}, + {"io[disk_rblk]" ,DISK_RBLK, 0}, + {"io[disk_wblk]" ,DISK_WBLK, 0}, + {"system[procload]" ,PROCLOAD, 0}, {"system[procload5]" ,PROCLOAD5, 0}, {"system[procload15]" ,PROCLOAD15, 0}, @@ -89,8 +92,6 @@ COMMAND commands[]= {"ping" ,PING, 0}, {"tcp_count" ,EXECUTE, "netstat -tn|grep EST|wc -l"}, -/* {"net[listen_21]" ,EXECUTE, "netstat -lnt|grep -v grep|grep ':21 '|wc -l"}, */ -/* {"net[listen_21]" ,EXECUTE, "cat /proc/net/tcp|grep '0015 00000000:0000 0A'|wc -l"}, */ {"net[listen_21]" ,TCP_LISTEN, "0015"}, {"net[listen_22]" ,TCP_LISTEN, "0016"}, {"net[listen_23]" ,TCP_LISTEN, "0017"}, @@ -486,6 +487,31 @@ float SWAPTOTAL(void) return getPROC("/proc/meminfo",9,2); } +float DISK_IO(void) +{ + return getPROC("/proc/stat",2,2); +} + +float DISK_RIO(void) +{ + return getPROC("/proc/stat",3,2); +} + +float DISK_WIO(void) +{ + return getPROC("/proc/stat",4,2); +} + +float DISK_RBLK(void) +{ + return getPROC("/proc/stat",5,2); +} + +float DISK_WBLK(void) +{ + return getPROC("/proc/stat",6,2); +} + float EXECUTE(char *command) { FILE *f; diff --git a/src/zabbix_agent/sysinfo.h b/src/zabbix_agent/sysinfo.h index 906e3e16..11da0967 100644 --- a/src/zabbix_agent/sysinfo.h +++ b/src/zabbix_agent/sysinfo.h @@ -12,6 +12,11 @@ float TOTALMEM(void); float SHAREDMEM(void); float BUFFERSMEM(void); float CACHEDMEM(void); +float DISK_IO(void); +float DISK_RIO(void); +float DISK_WIO(void); +float DISK_RBLK(void); +float DISK_WBLK(void); float PING(void); float PROCCOUNT(void); float PROCLOAD(void); diff --git a/src/zabbix_agent/zabbix_agentd.c b/src/zabbix_agent/zabbix_agentd.c index 61ba4498..6bd97e56 100644 --- a/src/zabbix_agent/zabbix_agentd.c +++ b/src/zabbix_agent/zabbix_agentd.c @@ -30,6 +30,8 @@ static pid_t *pids; +char host_allowed[16]; + void signal_handler( int sig ) { if( SIGALRM == sig ) @@ -73,31 +75,34 @@ void daemon_init(void) } } +void init_security(void) +{ + int file; + int i; + + file=open("/etc/zabbix/zabbix_agent.conf",O_RDONLY); + if(file == -1) + { + syslog( LOG_CRIT, "Cannot open /etc/zabbix/zabbix_agent.conf"); + exit(1); + } + i=read(file, host_allowed, 16); + host_allowed[i-1]=0; + close(file); +} int check_security(int sockfd) { char *sname; - char config[16]; struct sockaddr_in name; int i; - int file; if(getpeername(sockfd, (struct sockaddr *)&name, (size_t *)&i) == 0) { - file=open("/etc/zabbix/zabbix_agent.conf",O_RDONLY); - if(file == -1) - { - syslog( LOG_CRIT, "Cannot open /etc/zabbix/zabbix_agent.conf"); - exit(1); - } - i=read(file, config, 16); - config[i-1]=0; - close(file); - i=sizeof(struct sockaddr_in); sname=inet_ntoa(name.sin_addr); - if(strcmp(sname,config)!=0) + if(strcmp(sname, host_allowed)!=0) { syslog( LOG_WARNING, "Connection from [%s] rejected",sname); return FAIL; @@ -112,7 +117,6 @@ void process_child(int sockfd) char line[1024]; char result[1024]; double res; - void *sigfunc; for(;;) { @@ -244,10 +248,7 @@ int main() signal( SIGTERM, signal_handler ); signal( SIGALRM, signal_handler ); -// if(check_security() == FAIL) -// { -// exit(FAIL); -// } + init_security(); openlog("zabbix_agentd",LOG_PID,LOG_USER); // ret=setlogmask(LOG_UPTO(LOG_DEBUG)); diff --git a/src/zabbix_sucker/zabbix_sucker.c b/src/zabbix_sucker/zabbix_sucker.c index 9f0fde7c..6bf70297 100644 --- a/src/zabbix_sucker/zabbix_sucker.c +++ b/src/zabbix_sucker/zabbix_sucker.c @@ -506,6 +506,8 @@ int main(int argc, char **argv) { if(fork() == 0) { + /* Do not start all processes at once */ + sleep(1); sucker_num=i; break; } |
