nagios插件之監控多個tomcat線程數

jopen 9年前發布 | 39K 次閱讀 系統監控 Nagios

    #include <stdio.h>

#include <stdlib.h>  
#include <string.h>  

#define OK       0  
#define WARNING  1  
#define CRITICAL 2  
#define UNKNOWN  3  

#define LEN 1000  
#define MIN_LEN 100  

#define CMD1 "ps -efL | grep apache-tomcat-cuservice |grep -v grep | wc -l"  
#define CMD2 "ps -efL | grep apache-tomcat-finance |grep -v grep | wc -l"  
#define CMD3 "ps -efL | grep apache-tomcat-interface |grep -v grep | wc -l"  
#define CMD4 "ps -efL | grep apache-tomcat-payment |grep -v grep | wc -l"  
#define CMD5 "ps -efL | grep apache-tomcat-7.0.41 |grep -v grep | wc -l"  

int i=0;  

int exitstatus=OK;  
char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};  

char cuservice_count[MIN_LEN]={0};  
char finance_count[MIN_LEN]={0};  
char interface_count[MIN_LEN]={0};  
char payment_count[MIN_LEN]={0};  
char tomcat7041_count[MIN_LEN]={0};  

char status_information[LEN]={0};  
char performance_data[LEN]={0};  

char *cmd_array[]={"ps -efL | grep apache-tomcat-cuservice |grep -v grep | wc -l","ps -efL | grep apache-tomcat-finance |grep -v grep | wc -l","ps -efL | grep apache-tomcat-interface |grep -v grep | wc -l","ps -efL | grep apache-tomcat-payment |grep -v grep | wc -l","ps -efL | grep apache-tomcat-7.0.41 |grep -v grep | wc -l"};  


int parse_cmd(char *cmd_array) {  
//  printf("%s\n",cmd_array);  

        int ret;  
        FILE *fp;  
        char readbuf[MIN_LEN]={0};  

    char cmd_string[MIN_LEN]={0};  

//  strncpy(cmd_string,cmd_array,MIN_LEN);  
//  sprintf(cmd_string,cmd_array,strlen(cmd_array));  
//  printf("cmd_string=%s\n",cmd_string);  

//  int i;  
//  char *p,*str;  

//  memset(readbuf,0,MIN_LEN);  

    fp=popen(cmd_array,"r");  
//  fp=popen(cmd_string,"r");  
        if(fp==NULL) {  
                fprintf(stderr,"popen() error.\n");  
                return -1;  
        }  

       // while(fgets(readbuf,1024,fp)!=NULL) {  
        /* 
                for(p=strtok(readbuf," ");p;p=strtok(NULL," ")) { 
                //      str=p; 

                        sprintf(status_information,"active call=%s",p); 

                        sprintf(performance_data,"call=%s;;;;",p); 

                        break; 
                } 

                break; 
        */  

    //  readbuf[strlen(readbuf)-1]=0;  
        ret=fscanf(fp,"%s",readbuf);  
        if(ret!=1) {  
            fprintf(stderr,"fscanf() error.\n");  
        }  
    //  printf("readbuf=%s\n",readbuf);  

    //  printf("i=%d\n",i);  
        switch (i) {  
            case 0:  
                strncpy(cuservice_count,readbuf,MIN_LEN);  
            //  printf("0000000000\n");  
                break;  

            case 1:  
                strncpy(finance_count,readbuf,MIN_LEN);  
            //  printf("1111111111\n");  
                break;  

            case 2:  
                strncpy(interface_count,readbuf,MIN_LEN);  
            //  printf("2222222222\n");  
                break;  

            case 3:  
                strncpy(payment_count,readbuf,MIN_LEN);  
            //  printf("3333333333\n");  
                break;  

            case 4:  
                strncpy(tomcat7041_count,readbuf,MIN_LEN);  
            //  printf("4444444444\n");  
                break;  

            default:  
            //  printf("5555555555\n");  
                break;  
        }   

       // }  

        ret=fclose(fp);  
        if(fp==NULL) {  
                fprintf(stderr,"popen() error.\n");  
                return -1;  
        }  

    return 0;  
}  

int main() {  
        int ret;  

    // clean   
//  memset(cuservice_count,0,MIN_LEN);  
//  memset(finance_count,0,MIN_LEN);  
//  memset(interface_count,0,MIN_LEN);  
//  memset(payment_count,0,MIN_LEN);  
//  memset(tomcat7041_count,0,MIN_LEN);  

    for(i=0;i<5;i++) {  
        ret=parse_cmd(cmd_array[i]);  
        if(ret!=0) {  
            fprintf(stderr,"parse_cmd() error.\n");  
            // exitstatus=CRITICAL;  
            // printf("%s: - %s | %s\n",exit_status[exitstatus],status_information,performance_data);  
            exit(-1);  
        }  
    }  

//  printf("cuservice_count=%s\n",cuservice_count);  
//  printf("finance_count=%s\n",finance_count);  
//  printf("interface_count=%s\n",interface_count);  
//  printf("payment_count=%s\n",payment_count);  
//  printf("tomcat7041_count=%s\n",tomcat7041_count);  

    if(atoi(cuservice_count)<400 && atoi(finance_count)<400 && atoi(interface_count)<400 && atoi(payment_count)<400 && atoi(tomcat7041_count)<400) {  
        exitstatus=OK;  
    }  
    else if(atoi(cuservice_count)>=400 && atoi(cuservice_count)<450 || atoi(finance_count)>=400 && atoi(finance_count)<450 || atoi(interface_count)>=400 && atoi(interface_count)<450 || atoi(payment_count)>=400 && atoi(payment_count)<450 || atoi(tomcat7041_count)>=400 && atoi(tomcat7041_count)<450) {  
        exitstatus=WARNING;  
    }  
    else if(atoi(cuservice_count)>=450 || atoi(finance_count)>=450 || atoi(interface_count)>=450 || atoi(payment_count)>=450 || atoi(tomcat7041_count)>=450) {  
        exitstatus=CRITICAL;  
    }  

    sprintf(status_information,"cuservice_count=%s, finance_count=%s, interface_count=%s, payment_count=%s, tomcat7041_count=%s",cuservice_count,finance_count,interface_count,payment_count,tomcat7041_count);  

    sprintf(performance_data,"cuservice_count=%s;400;450;0; finance_count=%s;400;450;0; interface_count=%s;400;450;0; payment_count=%s;400;450;0; tomcat7041_count=%s;400;450;0;",cuservice_count,finance_count,interface_count,payment_count,tomcat7041_count);  

        printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);  

        return exitstatus;  
}  </pre><br />
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!