设为首页 收藏本站
查看: 565|回复: 0

nagios插件之监控Asterisk日志文件

[复制链接]

尚未签到

发表于 2019-1-14 09:45:19 | 显示全部楼层 |阅读模式
  监控Asterisk日志文件messages,过滤“ERROR”和"WARNING"字符串,统计包含该字符串的行数
  

  vi check_ast_msg_log.c
  

  [cpp] view plaincopy
  #include
  #include
  #include
  #include
  

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

  #define LEN 1024
  

  #define LOG_FILE "/home/weihu/check_log/ast_messages/messages"
  

  #define OLD_FILE_ERROR "/home/weihu/check_log/ast_messages/log_tmp_error.file"
  

  #define OLD_FILE_WARNING "/home/weihu/check_log/ast_messages/log_tmp_warning.file"
  

  char error_str_now_failed[LEN]={0};
  char error_str_old_failed[LEN]={0};
  

  char warning_str_now_failed[LEN]={0};
  char warning_str_old_failed[LEN]={0};
  

  

  char month_day[32];
  

  int all_line=0;
  int err_line=0;
  

  int error_mark=0;
  int error_line=0;
  int error_count=0;
  

  int warning_mark=0;
  int warning_line=0;
  int warning_count=0;
  

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

  fp_old=fopen(OLD_FILE_ERROR,"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;
  }
  

  /*
  while(fgets(readbuf,1024,fp_old)!=NULL) {
  strcat(error_str_old_failed,readbuf);
  }
  */
  

  fgets(error_str_old_failed,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");
  //
  //----------------------------------------------------------------------
  fp_old=fopen(OLD_FILE_WARNING,"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;
  }
  

  /*
  while(fgets(readbuf,1024,fp_old)!=NULL) {
  strcat(error_str_old_failed,readbuf);
  }
  */
  

  fgets(warning_str_old_failed,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(ret0 && line!=1) {
  //      printf("-----------------\n");
  

  if(strstr(readbuf,"ERROR") && strstr(readbuf,"5060: Connection refused") && error_mark==0) {
  //  if(strstr(readbuf,"ERROR") && error_mark==0) {
  //      printf("++++++++++++++++++++++++++++++++\nn");
  //  if(strstr(readbuf,"FAILED")) {
  if(strcmp(error_str_old_failed,readbuf)) {
  error_line=line+1;
  error_count++;
  

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

  if(error_count==1) {
  ret=write_old_file(OLD_FILE_ERROR,error_str_now_failed);
  if(ret==-1) {
  fprintf(stderr,"parse_log_file() is write_old_file() error_str_now_failed error.\n");
  return -1;
  }
  }
  

  }
  else {
  error_mark=1;
  }
  

  }
  //  printf("error_count=%d\n",error_count);
  }
  

  //----------------------------------------------------------------------------------------------------
  //
  if(strstr(readbuf,month_day)>0 && line!=1) {
  //      printf("-----------------\n");
  

  if(strstr(readbuf,"WARNING") && strstr(readbuf,"sip") && error_mark==0) {
  //  if(strstr(readbuf,"WARNING") && warning_mark==0) {
  //      printf("++++++++++++++++++++++++++++++++\nn");
  //  if(strstr(readbuf,"FAILED")) {
  if(strcmp(warning_str_old_failed,readbuf)) {
  warning_line=line+1;
  warning_count++;
  

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

  if(warning_count==1) {
  ret=write_old_file(OLD_FILE_WARNING,warning_str_now_failed);
  if(ret==-1) {
  fprintf(stderr,"parse_log_file() is write_old_file() warning_str_now_failed error.\n");
  return -1;
  }
  }
  

  }
  else {
  warning_mark=1;
  }
  

  }
  //  printf("warning_count=%d\n",warning_count);
  }
  }
  

  //  printf("error_count=%d,error_str_now_failed=%s\n",error_count,error_str_now_failed);
  //  printf("warning_count=%d,warning_str_now_failed=%s\n",warning_count,warning_str_now_failed);
  

  ret=fclose(fp);
  if(ret==EOF) {
  fprintf(stderr,"parse_log_file() is fclose() error\n");
  }
  

  return 0;
  }
  

  

  int main(void) {
  int fd,ret;
  int mark=0;
  

  char if8_log_file[128];
  

  char send_mail_cmd[LEN];
  

  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];
  

  char my_day[32];
  char my_week[32];
  char my_month[32];
  char my_year[32];
  

  char *week[]={"Sat","Sun","Mon","Tue","Wed","Thu","Fri"};
  char *month[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
  

  time_t timestamp;
  struct tm *p1;
  

  timestamp=time(NULL);
  p1=localtime(×tamp);
  

  //  sprintf(my_day,"%02d",p1->tm_mday);
  sprintf(my_day,"%d",p1->tm_mday);
  sprintf(my_week,"%s",week[p1->tm_wday]);
  sprintf(my_month,"%s",month[p1->tm_mon]);
  sprintf(my_year,"%d",1900+p1->tm_year);
  

  //  printf("day=%s,week=%s,month=%s,year=%s\n",my_day,my_week,my_month,my_year);
  

  sprintf(month_day,"%s  %d",month[p1->tm_mon],p1->tm_mday);
  

  //  printf("%s\n",month_day);
  

  //  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_failed=%s\n",error_str_old_failed);
  //  printf("error_str_old_no_answer=%s\n",error_str_old_no_answer);
  

  ret=parse_log_file(LOG_FILE);
  if(ret==-1) {
  fprintf(stderr,"parse_log_file() error.\n");
  exit(-1);
  }
  

  //  printf("%s\n",nowtime);
  //  printf("hostname=%s\n",hostname);
  

  //  printf("failed_err_line=%d\n",failed_err_line);
  //  printf("no_answer_err_line=%d\n",no_answer_err_line);
  

  //  printf("all_line=%d\n",all_line);
  

  

  //  printf("-------------------------------\n");
  

  if(error_count>0 || warning_count>0 ) {
  exitstatus=CRITICAL;
  }
  

  /*
  else if(error_count>1 || warning_count>5) {
  exitstatus=CRITICAL;
  }
  */
  

  sprintf(status_information,"Current Error_num=%d, Warning_num=%d",error_count,warning_count);
  

  sprintf(performance_data,"Error_num=%d;;;; Warning_num=%d;;;;",error_count,warning_count);
  

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

  exit(0);
  }
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-663046-1-1.html 上篇帖子: 用Nagios监控Dell服务器硬件状况(snmp) 下篇帖子: Nagios 网卡流量监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表