nagios插件之监控AES日志文件--检查ERROR

vi check_aes_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 40960

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

char status_information[LEN];
char performance_data[LEN];

//#define LOG_FILE_DIR "/home/nagios/check_wcar_log/113"
//#define LOG_FILE_DIR "/opt/smb_win_113_huapu_intface/gateWay/log"
//#define LOG_FILE_DIR "/home/neo/check_log/aes"
#define LOG_FILE_DIR "/opt/mvap/logs"

//#define OLD_FILE_FAILED "/home/nagios/check_wcar_log/113/log_err_tmp.file"
//#define OLD_FILE_FAILED "/home/neo/check_log/aes/log_tmp.file"
#define OLD_FILE_FAILED "/home/nagios/check_log/log_tmp.file"

char aes_log_str_now[LEN]={0};
char aes_log_str_old[LEN]={0};

//char today_start_time[32];

int all_line=0;

int err_line=0;

int err_count=0;

int err_mark=0;


int check_old_file(void) {
	int ret;
	FILE *fp_old;
	char readbuf[1024];

	//OLD_FILE_FAILED
	fp_old=fopen(OLD_FILE_FAILED,"a+");
	if(fp_old==NULL) {
		fprintf(stderr,"check_old_file() is fopen() error.\n");
		return -1;
	}

	ret=fseek(fp_old,0,SEEK_SET);
	if(ret==-1) {
		fprintf(stderr,"check_old_file() is fseek() error.\n");
		return -1;
	}
	else {
		fgets(aes_log_str_old,1024,fp_old);
	}

        ret=fclose(fp_old);
	if(ret==EOF) {
		fprintf(stderr,"check_old_file() is fclose() 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[1024];
	char readbuf_tmp[1024];
	int size=1024,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);

		//ENOENT macro is No such file or directory
		if(errno==ENOENT) {
		//      printf("errno=%d,%s\n",errno,strerror(errno));
			sprintf(status_information,"Log file no create, log_err_num=%d",err_count);
			sprintf(performance_data,"log_err_num=%d;;;;",err_count);
		//      exitstatus=WARNING;
			exitstatus=OK;
			printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
			exit(exitstatus);
                }
                else {
		//      printf("errno=%d,%s\n",errno,strerror(errno));
			sprintf(status_information,"Log file no create, log_err_num=%d",err_count);
			sprintf(performance_data,"log_err_num=%d;;;;",err_count);
		//      exitstatus=WARNING;
			exitstatus=UNKNOWN;
			printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
			exit(exitstatus);
                }
/*
	        sprintf(status_information,"Log file no create, Queue_full_num=%d",err_count);
		sprintf(performance_data,"Queue_full_num=%d;;;;",err_count);
		exitstatus=WARNING;
		printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
		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");

			if(strstr(readbuf,"Down") && err_mark==0) {
		//	if(strstr(readbuf,"Exception") && err_mark==0) {
			//	printf("-----------------\n");

				if(strcmp(aes_log_str_old,readbuf)) {
					err_line=line+1;
					err_count++;

					//	strcat(error_str,readbuf);
					//	printf("readbuf=%s\n",readbuf);
					strcpy(aes_log_str_now,readbuf);
				//	printf("aes_log_str_now=%s\n",aes_log_str_now);

					if(err_count==1) {
						ret=write_old_file(OLD_FILE_FAILED,aes_log_str_now);
						if(ret==-1) {
							fprintf(stderr,"mytail() is write_old_file() aes_log_str_now error.\n");
							return -1;
						}
					}
				} 
				else {
					err_mark=1;
				}
			}

	//	}

		if(err_mark==1) {
			break;
		}
	}

//	printf("err_400_count=%d,aes_log_str_now=%s\n",err_400_count,aes_log_str_now);

//	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 aes_log_file[128];

	char nowtime[128];
	char hostname[128];


	time_t timestamp;
        struct tm *p1;

       // timestamp=time(NULL)-86400;
        timestamp=time(NULL);
        p1=localtime(×tamp);

	sprintf(aes_log_file,"%s/log.%d%02d%02d",LOG_FILE_DIR,1900+p1->tm_year,1+p1->tm_mon,p1->tm_mday);
	printf("aes_log_file=%s\n",aes_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("aes_log_str_old=%s\n",aes_log_str_old);
//	printf("error_str_old_404=%s\n",error_str_old_404);

	ret=parse_log_file(aes_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_count>=1) {
                exitstatus=CRITICAL;
        }

	sprintf(status_information,"Current aes_log_num=%d",err_count);

	sprintf(performance_data,"aes_log_log=%d;;;;",err_count);

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值