nagios插件之监控if8接口日志

来源:互联网 发布:css 开发工具 知乎 编辑:程序博客网 时间:2024/06/01 10:25

vi check_if8_log.c

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <errno.h>#define OK       0   #define WARNING  1   #define CRITICAL 2   #define UNKNOWN  3   #define LEN 400000int exitstatus=OK;char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};char status_information[LEN];char performance_data[LEN];//#define OLD_FILE_FAILED "/home/nagios/check_if8_log/113/log_tmp_400.file"//#define OLD_FILE_NO_ANSWER "/home/nagios/check_if8_log/113/log_tmp_404.file"//#define OLD_FILE_QUEUE "/home/nagios/check_if8_log/113/log_tmp_queue.file"#define OLD_FILE_FETCH_400_FAILED "/home/nagios/check_if8_log/113/test1/log_tmp_fetch_400.file"#define OLD_FILE_FETCH_404_FAILED "/home/nagios/check_if8_log/113/test1/log_tmp_fetch_404.file"#define OLD_FILE_FETCH_TIMEOUT_FAILED "/home/nagios/check_if8_log/113/test1/log_tmp_fetch_Timeout.file"#define OLD_FILE_VOICE_TIMEOUT_FAILED "/home/nagios/check_if8_log/113/test1/log_tmp_voice_timeout.file"#define OLD_FILE_INFORM_400_FAILED "/home/nagios/check_if8_log/113/test1/log_tmp_inform_400.file"#define OLD_FILE_INFORM_404_FAILED "/home/nagios/check_if8_log/113/test1/log_tmp_inform_404.file"#define OLD_FILE_QUEUE "/home/nagios/check_if8_log/113/test1/log_tmp_queue.file"//#define LOG_FILE_DIR "/opt/smb_win_113_dir/log"//#define LOG_FILE_DIR "/home/weihu/tmp_2_140"#define LOG_FILE_DIR "/opt/smb_win_113_dir/log"//fetchRoutingData返回400char error_str_now_fetch_resp_400[LEN]={0};char error_str_old_fetch_resp_400[LEN]={0};//fetchRoutingData返回404char error_str_now_fetch_resp_404[LEN]={0};char error_str_old_fetch_resp_404[LEN]={0};//informRoutingResult返回400char error_str_now_inform_resp_400[LEN]={0};char error_str_old_inform_resp_400[LEN]={0};////informRoutingResult返回404char error_str_now_inform_resp_404[LEN]={0};char error_str_old_inform_resp_404[LEN]={0};//------------下行可以去掉了//char error_str_now_404[LEN]={0};//char error_str_old_404[LEN]={0};char error_str_now_queue[LEN]={0};char error_str_old_queue[LEN]={0};//char today_start_time[32];int all_line=0;int err_line=0;//int err_400_line=0;int err_fetch_resp_400_line=0;int err_inform_resp_400_line=0;//int err_404_line=0;int err_fetch_resp_404_line=0;int err_inform_resp_404_line=0;// queue fullint err_queue_line=0;//fetchRoutingData Timtoutchar error_str_now_fetch_resp_Timeout[LEN]={0};char error_str_old_fetch_resp_Timeout[LEN]={0};// fetch resp timeout lineint err_fetch_resp_Timeout_line=0;int err_fetch_resp_Timeout_count=0;int err_fetch_resp_Timeout_mark=0;//wait voice timtoutchar error_str_now_wait_voice_timeout[LEN]={0};char error_str_old_wait_voice_timeout[LEN]={0};//wait voice timeout lineint err_wait_voice_timeout_line=0;int err_wait_voice_timeout_count=0;int err_wait_voice_timeout_mark=0;//response 400 countint err_fetch_resp_400_count=0;int err_inform_resp_400_count=0;//response 404 countint err_fetch_resp_404_count=0;int err_inform_resp_404_count=0;int err_queue_count=0;//response 400 markint err_fetch_resp_400_mark=0;int err_inform_resp_400_mark=0;//response 404 markint err_fetch_resp_404_mark=0;int err_inform_resp_404_mark=0;int err_queue_mark=0;int check_old_file(void) {int ret;FILE *fp_old;char readbuf[4000];//OLD_FILE_FAILED,fetch resp 400fp_old=fopen(OLD_FILE_FETCH_400_FAILED,"a+");if(fp_old==NULL) {fprintf(stderr,"check_old_file() is fopen() OLD_FILE_FETCH_400_FAILED error.\n");return -1;}ret=fseek(fp_old,0,SEEK_SET);if(ret==-1) {fprintf(stderr,"check_old_file() is fseek() OLD_FILE_FETCH_400_FAILED error.\n");return -1;}else {fgets(error_str_old_fetch_resp_400,4000,fp_old);}        ret=fclose(fp_old);if(ret==EOF) {fprintf(stderr,"check_old_file() is fclose() OLD_FILE_FETCH_400_FAILED error.\n");return -1;}//OLD_FILE_FAILED,fetch resp 404fp_old=fopen(OLD_FILE_FETCH_404_FAILED,"a+");if(fp_old==NULL) {fprintf(stderr,"check_old_file() is fopen() OLD_FILE_FETCH_404_FAILED error.\n");return -1;}ret=fseek(fp_old,0,SEEK_SET);if(ret==-1) {fprintf(stderr,"check_old_file() is fseek() OLD_FILE_FETCH_404_FAILED error.\n");return -1;}else {fgets(error_str_old_fetch_resp_404,4000,fp_old);}        ret=fclose(fp_old);if(ret==EOF) {fprintf(stderr,"check_old_file() is fclose() OLD_FILE_FETCH_404_FAILED error.\n");return -1;}//OLD_FILE_FAILED,fetch resp Timeoutfp_old=fopen(OLD_FILE_FETCH_TIMEOUT_FAILED,"a+");if(fp_old==NULL) {fprintf(stderr,"check_old_file() is fopen() OLD_FILE_FETCH_TIMEOUT_FAILED error.\n");return -1;}ret=fseek(fp_old,0,SEEK_SET);if(ret==-1) {fprintf(stderr,"check_old_file() is fseek() OLD_FILE_FETCH_TIMEOUT_FAILED error.\n");return -1;}else {fgets(error_str_old_fetch_resp_Timeout,4000,fp_old);}        ret=fclose(fp_old);if(ret==EOF) {fprintf(stderr,"check_old_file() is fclose() OLD_FILE_FETCH_TIMEOUT_FAILED error.\n");return -1;}//OLD_FILE_FAILED,voice timeoutfp_old=fopen(OLD_FILE_VOICE_TIMEOUT_FAILED,"a+");if(fp_old==NULL) {fprintf(stderr,"check_old_file() is fopen() OLD_FILE_FETCH_TIMEOUT_FAILED error.\n");return -1;}ret=fseek(fp_old,0,SEEK_SET);if(ret==-1) {fprintf(stderr,"check_old_file() is fseek() OLD_FILE_FETCH_TIMEOUT_FAILED error.\n");return -1;}else {fgets(error_str_old_wait_voice_timeout,4000,fp_old);}        ret=fclose(fp_old);if(ret==EOF) {fprintf(stderr,"check_old_file() is fclose() OLD_FILE_FETCH_TIMEOUT_FAILED error.\n");return -1;}//OLD_FILE_FAILED,inform resp 400fp_old=fopen(OLD_FILE_INFORM_400_FAILED,"a+");if(fp_old==NULL) {fprintf(stderr,"check_old_file() is fopen() OLD_FILE_INFORM_400_FAILED error.\n");return -1;}ret=fseek(fp_old,0,SEEK_SET);if(ret==-1) {fprintf(stderr,"check_old_file() is fseek() OLD_FILE_INFORM_400_FAILED error.\n");return -1;}else {fgets(error_str_old_inform_resp_400,4000,fp_old);}        ret=fclose(fp_old);if(ret==EOF) {fprintf(stderr,"check_old_file() is fclose() OLD_FILE_INFORM_400_FAILED error.\n");return -1;}//OLD_FILE_NO_ANSWER,inform resp 404fp_old=fopen(OLD_FILE_INFORM_404_FAILED,"a+");if(fp_old==NULL) {fprintf(stderr,"check_old_file() is fopen() OLD_FILE_INFORM_404_FAILED error.\n");return -1;}ret=fseek(fp_old,0,SEEK_SET);if(ret==-1) {fprintf(stderr,"check_old_file() is fseek() OLD_FILE_INFORM_404_FAILED error.\n");return -1;}else {fgets(error_str_old_inform_resp_404,4000,fp_old);}        ret=fclose(fp_old);if(ret==EOF) {fprintf(stderr,"check_old_file() is fclose() OLD_FILE_INFORM_404_FAILEDerror.\n");return -1;}//OLD_FILE_QUEUEfp_old=fopen(OLD_FILE_QUEUE,"a+");if(fp_old==NULL) {fprintf(stderr,"check_old_file() is fopen() OLD_FILE_QUEUE error.\n");return -1;}ret=fseek(fp_old,0,SEEK_SET);if(ret==-1) {fprintf(stderr,"check_old_file() is fseek() OLD_FILE_QUEUE error.\n");return -1;}else {fgets(error_str_old_queue,4000,fp_old);}        ret=fclose(fp_old);if(ret==EOF) {fprintf(stderr,"check_old_file() is fclose() OLD_FILE_QUEUE error.\n");return -1;}//printf("%s",error_str_old);//printf("-------------------------\n");return 0;}int write_old_file(char *old_file,char *error_str) {int ret;FILE *fp_old;fp_old=fopen(old_file,"w");if(fp_old==NULL) {       fprintf(stderr,"write_old_file() is fopen() error.\n");}ret=fprintf(fp_old,"%s",error_str);if(ret<0) {fprintf(stderr,"write_old_file() if fprintf() fp_old error.\n");return -1;}ret=fclose(fp_old);if(ret==EOF) {       fprintf(stderr,"write_old_file() is fclose() error.\n");}return 0;}int parse_log_file(char *log_file) {FILE *fp;long int *position;char readbuf[4000];char readbuf_tmp[4000];int size=4000,line=0,line_bak;char *str;int ret;int mark;char *p,*str_date;position=(long int *)malloc(sizeof(long int)*size);position[0]=0;fp=fopen(log_file,"r");        if(fp==NULL) {        //      fprintf(stderr,"mytail() is fopen() error %s\n",log_file);        //      perror("mytail() is fopen() error,");        //      exit(-1);if(errno==ENOENT) {                sprintf(status_information,"Log file no create, Fetch_resp_400_num=%d, Fetch_resp_404_num=%d, Fetch_resp_Timeout_num=%d, Wait_voice_timeout_num=%d, Inform_resp_400_num=%d, Inform_resp_404_num=%d, Error_queue_num=%d",err_fetch_resp_400_count, err_fetch_resp_404_count, err_fetch_resp_Timeout_count, err_wait_voice_timeout_count, err_inform_resp_400_count, err_inform_resp_404_count, err_queue_count);                sprintf(performance_data,"Fetch_resp_400_num=%d;;;; Fetch_resp_404_num=%d;;;; Fetch_resp_Timeout_num=%d;;;; Wait_voice_timeout_num=%d;;;; Inform_resp_400_num=%d;;;; Inform_resp_404_num=%d;;;; Error_queue_num=%d;;;;",err_fetch_resp_400_count, err_fetch_resp_404_count, err_fetch_resp_Timeout_count, err_wait_voice_timeout_count, err_inform_resp_400_count, err_inform_resp_404_count, err_queue_count);                exitstatus=WARNING;                printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);                exit(exitstatus);} else {                        exitstatus=WARNING;                        printf("parse() fopen() other error.\n");                        exit(exitstatus);}        }while(fgets(readbuf,sizeof(readbuf),fp)!=NULL) {if(++line==size) {size*=2;position=(long int *)realloc(position,sizeof(long int)*size);}position[line]=ftell(fp);}all_line=line;line_bak=line;while(line--) {mark=0;ret=fseek(fp,position[line],SEEK_SET);if(ret==-1) {perror("mytail() is fseek()");return -1;}str=fgets(readbuf,sizeof(readbuf),fp);if(str==NULL) {fprintf(stderr,"mytail() is fgets() error.\n");return -1;}/*strcpy(readbuf_tmp,readbuf);for(p=strtok(readbuf_tmp,",\"");p;p=strtok(NULL,",\"")) {str_date=p;mark++;if(mark==12) break;}*///printf("mark=%d,str_date=%s\n",mark,str_date);/*if(strcmp(str_date,today_start_time)<0) {break;}*///printf("mark=%d,str_date=%s\n",mark,str_date);//if(strcmp(str_date,today_start_time)>=0 && line!=1) {//printf("-----------------\n");//fetch resp 400//if(strstr(readbuf,"(400)") && err_400_mark==0) {if(strstr(readbuf,"(400)") && strstr(readbuf,"fetchRoutingData]Response") && err_fetch_resp_400_mark==0) {//printf("-----------------\n");if(strcmp(error_str_old_fetch_resp_400,readbuf)) {err_fetch_resp_400_line=line+1;err_fetch_resp_400_count++;//strcat(error_str,readbuf);//printf("readbuf=%s\n",readbuf);strcpy(error_str_now_fetch_resp_400,readbuf);//printf("error_str_now_400=%s\n",error_str_now_400);if(err_fetch_resp_400_count==1) {ret=write_old_file(OLD_FILE_FETCH_400_FAILED,error_str_now_fetch_resp_400);if(ret==-1) {fprintf(stderr,"parse_log_file() is write_old_file() error_str_now_fetch_resp_400 error.\n");return -1;}}} else {err_fetch_resp_400_mark=1;}}//fetch resp 404if(strstr(readbuf,"(404)") && strstr(readbuf,"fetchRoutingData]Response") && err_fetch_resp_404_mark==0) {//printf("-----------------\n");if(strcmp(error_str_old_fetch_resp_404,readbuf)) {err_fetch_resp_404_line=line+1;err_fetch_resp_404_count++;//strcat(error_str,readbuf);//printf("readbuf=%s\n",readbuf);strcpy(error_str_now_fetch_resp_404,readbuf);//printf("error_str_now_400=%s\n",error_str_now_400);if(err_fetch_resp_404_count==1) {ret=write_old_file(OLD_FILE_FETCH_404_FAILED,error_str_now_fetch_resp_404);if(ret==-1) {fprintf(stderr,"parse_log_file() is write_old_file() error_str_now_fetch_resp_404 error.\n");return -1;}}} else {err_fetch_resp_404_mark=1;}}// fetch resp Timeoutif(strstr(readbuf,"Timeout") && strstr(readbuf,"fetchRoutingData]Response") && err_fetch_resp_Timeout_mark==0) {//printf("-----------------\n");if(strcmp(error_str_old_fetch_resp_Timeout,readbuf)) {err_fetch_resp_Timeout_line=line+1;err_fetch_resp_Timeout_count++;//strcat(error_str,readbuf);//printf("readbuf=%s\n",readbuf);strcpy(error_str_now_fetch_resp_Timeout,readbuf);//printf("error_str_now_400=%s\n",error_str_now_400);if(err_fetch_resp_Timeout_count==1) {ret=write_old_file(OLD_FILE_FETCH_TIMEOUT_FAILED,error_str_now_fetch_resp_Timeout);if(ret==-1) {fprintf(stderr,"parse_log_file() is write_old_file() error_str_now_fetch_resp_Timeout error.\n");return -1;}}} else {err_fetch_resp_Timeout_mark=1;}}// wait voice timeout//if(strstr(readbuf,"timeout") && strstr(readbuf,"wait call arrive") && err_voice_timeout_mark==0) {if(strstr(readbuf,"wait call arrive timeout") && err_wait_voice_timeout_mark==0) {//printf("-----------------\n");if(strcmp(error_str_old_wait_voice_timeout,readbuf)) {err_wait_voice_timeout_line=line+1;err_wait_voice_timeout_count++;//strcat(error_str,readbuf);//printf("readbuf=%s\n",readbuf);strcpy(error_str_now_wait_voice_timeout,readbuf);//printf("error_str_now_400=%s\n",error_str_now_400);if(err_wait_voice_timeout_count==1) {ret=write_old_file(OLD_FILE_VOICE_TIMEOUT_FAILED,error_str_now_wait_voice_timeout);if(ret==-1) {fprintf(stderr,"parse_log_file() is write_old_file() error_str_now_fetch_resp_Timeout error.\n");return -1;}}} else {err_wait_voice_timeout_mark=1;}}//inform resp 400if(strstr(readbuf,"(400)") && strstr(readbuf,"informRoutingResult]Response") && err_inform_resp_400_mark==0) {//printf("-----------------\n");if(strcmp(error_str_old_inform_resp_400,readbuf)) {err_inform_resp_400_line=line+1;err_inform_resp_400_count++;//strcat(error_str,readbuf);//printf("readbuf=%s\n",readbuf);strcpy(error_str_now_inform_resp_400,readbuf);//printf("error_str_now_400=%s\n",error_str_now_400);if(err_inform_resp_400_count==1) {ret=write_old_file(OLD_FILE_INFORM_400_FAILED,error_str_now_inform_resp_400);if(ret==-1) {fprintf(stderr,"parse_log_file() is write_old_file() error_str_now_inform_resp_400 error.\n");return -1;}}} else {err_inform_resp_400_mark=1;}}//inform resp 404if(strstr(readbuf,"(404)") && strstr(readbuf,"informRoutingResult]Response") && err_inform_resp_404_mark==0) {//printf("-----------------\n");if(strcmp(error_str_old_inform_resp_404,readbuf)) {err_inform_resp_404_line=line+1;err_inform_resp_404_count++;//printf("readbuf=%s\n",readbuf);strcpy(error_str_now_inform_resp_404,readbuf);//printf("error_str_now_404=%s\n",error_str_now_404);if(err_inform_resp_404_count==1) {ret=write_old_file(OLD_FILE_INFORM_404_FAILED,error_str_now_inform_resp_404);if(ret==-1) {fprintf(stderr,"parse_log_file() is write_old_file() error_str_now_inform_resp_404 error.\n");return -1;}}}else {err_inform_resp_404_mark=1;}}//check queueif(strstr(readbuf,"队列已满") && err_queue_mark==0) {//printf("-----------------\n");if(strcmp(error_str_old_queue,readbuf)) {err_queue_line=line+1;err_queue_count++;//printf("readbuf=%s\n",readbuf);strcpy(error_str_now_queue,readbuf);//printf("error_str_now_404=%s\n",error_str_now_404);if(err_queue_count==1) {ret=write_old_file(OLD_FILE_QUEUE,error_str_now_queue);if(ret==-1) {fprintf(stderr,"parse_logfile() is write_old_file() error_str_now_queue error.\n");return -1;}}}else {err_queue_mark=1;}}//}if(err_fetch_resp_400_mark==1 && err_fetch_resp_404_mark==1 && err_fetch_resp_Timeout_mark==1 && err_wait_voice_timeout_mark==1 && err_inform_resp_400_mark==1 && err_inform_resp_404_mark==1 && err_queue_mark==1) {break;}}//printf("err_400_count=%d,error_str_now_400=%s\n",err_400_count,error_str_now_400);//printf("err_404_count=%d,error_str_now_404=%s\n",err_404_count,error_str_now_404);ret=fclose(fp);if(ret==EOF) {fprintf(stderr,"mytail() is fclose() error\n");}return 0;}int main(void) {int fd,ret;char if8_log_file[128];char nowtime[128];char hostname[128];/*int exitstatus=OK;char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"}; char status_information[LEN];char performance_data[LEN];*/time_t timestamp;        struct tm *p1;       // timestamp=time(NULL)-86400;        timestamp=time(NULL);        p1=localtime(×tamp);sprintf(if8_log_file,"%s/log%d%02d%02d.Log",LOG_FILE_DIR,1900+p1->tm_year,1+p1->tm_mon,p1->tm_mday);////printf("if8_log_file=%s\n",if8_log_file);//sprintf(today_start_time,"%d-%02d-%02d %s\n",p1->tm_year+1900,p1->tm_mon+1,p1->tm_mday,"16-00-00");//printf("today_start_time=%s\n",today_start_time);ret=gethostname(hostname,sizeof(hostname));        if(ret==-1) {                fprintf(stderr,"gethostname() error.\n");                exit(-1);        }ret=check_old_file();if(ret==-1) {fprintf(stderr,"check_old_file() error.\n");exit(-1);}//printf("error_str_old_400=%s\n",error_str_old_400);//printf("error_str_old_404=%s\n",error_str_old_404);ret=parse_log_file(if8_log_file);if(ret==-1) {fprintf(stderr,"mytail() error.\n");exit(-1);}//printf("%s\n",nowtime);//printf("hostname=%s\n",hostname);//printf("err_400_line=%d\n",err_400_line);//printf("err_404_line=%d\n",err_404_line);////printf("all_line=%d\n",all_line);////printf("-------------------------------\n");//if(err_400_count>=10 && err_400_count<=20 || err_404_count>=10 && err_404_count<=20) {if(err_fetch_resp_400_count>=10 && err_fetch_resp_400_count<=20 || err_fetch_resp_404_count>=10 && err_fetch_resp_404_count<=20 || err_fetch_resp_Timeout_count>=10 && err_fetch_resp_Timeout_count<=20 || err_wait_voice_timeout_count>=20 && err_wait_voice_timeout_count<=30 || err_inform_resp_400_count>=10 && err_inform_resp_400_count<=20  || err_inform_resp_404_count>=10 && err_inform_resp_404_count<=20) {exitstatus=WARNING;}//else if(err_400_count>11 && err_400_count<=20 || err_404_count>11 && err_404_count<=20 || err_queue_count>=1) {else if(err_fetch_resp_400_count>20 || err_fetch_resp_404_count>20 || err_fetch_resp_Timeout_count>20 || err_wait_voice_timeout_count>30 || err_inform_resp_400_count>20 || err_inform_resp_404_count>20 || err_queue_count>0) {exitstatus=CRITICAL;}sprintf(status_information,"Current Fetch_resp_400_num=%d, Fetch_resp_404_num=%d, Fetch_resp_Timeout_num=%d, Wait_voice_timeout_num=%d, Inform_resp_400_num=%d, Inform_resp_404_num=%d, Error_queue_num=%d",err_fetch_resp_400_count, err_fetch_resp_404_count, err_fetch_resp_Timeout_count, err_wait_voice_timeout_count, err_inform_resp_400_count, err_inform_resp_404_count, err_queue_count);sprintf(performance_data,"Fetch_resp_400_num=%d;;;; Fetch_resp_404_num=%d;;;; Fetch_resp_Timeout_num=%d;;;; Wait_voice_timeout_num=%d;;;; Inform_resp_400_num=%d;;;; Inform_resp_404_num=%d;;;; Error_queue_num=%d;;;;",err_fetch_resp_400_count, err_fetch_resp_404_count, err_fetch_resp_Timeout_count, err_wait_voice_timeout_count, err_inform_resp_400_count, err_inform_resp_404_count, err_queue_count);printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);return exitstatus;}
0 0
原创粉丝点击