nagios插件之监控AES日志文件--检查ERROR
来源:互联网 发布:谷歌退出中国 知乎 编辑:程序博客网 时间:2024/06/05 16:13
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 40960int 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_FAILEDfp_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 directoryif(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
- nagios插件之监控AES日志文件--检查ERROR
- nagios插件之监控MQA日志文件--检查ERROR
- nagios插件之监控MQA日志文件
- nagios插件之监控Asterisk日志文件--Master.cvs
- nagios插件之监控Asterisk日志文件--messages
- nagios插件之监控if8接口日志
- nagios插件之监控单个tomcat日志
- nagios插件之监控oracle日志
- nagios插件之监控文件更新时间
- nagios插件之监控if8接口日志(新接口)
- nagios插件之监控多个tomcat日志
- nagios插件之监控日志中CASA接口响应时间
- nagios插件之监控日志中index增长情况
- nagios插件之系统打开文件数监控
- nagios插件之检测mqa的日志文件更新时间
- nagios插件之hpux系统内存检查
- nagios插件之监控POI搜索情况
- nagios插件之监控web页面登陆
- Java中CopyOnWriteArrayList 的使用
- VC++6.0常见编译错误中英文对照表
- 黑马程序员————单例设计模式、线程间的通信等等
- 内部类
- 二分图匹配 Hdu1150
- nagios插件之监控AES日志文件--检查ERROR
- 自己动手写CPU之第九阶段(4)——加载存储指令实现思路
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- YII显示sql进行调试
- Android中自定义布局无法在xml中使用的问题
- Java基础知识1:了解Java,安装JDK
- ArrayList与LinkedList的简单比较
- HDU 1018-Big Number(数学)
- Android--书籍翻页效果