nagios插件之计算内存使用率
来源:互联网 发布:电视台视频剪辑软件 编辑:程序博客网 时间:2024/06/02 08:01
vi check_mem.c
/*Ver: 1.0Date: 2012-11-20Desc:the check_mem.c only for linux */#include <stdio.h>#include <stdlib.h>#include <string.h>#define OK 0#define WARNING 1#define CRITICAL 2#define UNKNOWN 3#define VERSION "1.0"#define MEMINFO "/proc/meminfo"int debug=0;int rawOutput=0;char pctWarning[32],pctCritical[32],pctSwpWarning[32],pctSwpCritical[32];void print_usage(char str[32]) { printf("Usage: %s [options]\n",str); printf(" e.g. %s -w 75 -W 25 -c 95 -C 75\n\n",str); printf("Options:\n"); printf("\t --help | -h print help\n"); printf("\t --version | -V print version\n"); printf("\t --verbose | -v be verbose (debug mode)\n"); printf("\t --raw | -r Use MB instead of % for output data\n"); printf("\t -w [int] set warning value for physical RAM used %\n"); printf("\t -c [int] set critical value for physical RAM used %\n"); printf("\t -W [int] set warning value for swap used %\n"); printf("\t -C [int] set critical value for swap used %\n"); printf("\n\n");}void print_help(char str[32]) { printf("check_mem Revision: 1.0\n\n"); printf("This plugin checks file /proc/meminfo\n\n"); print_usage(str);}int parse_options(int argc,char *argv[]) { int j; for(j=1;j<=argc-1;j++) { if(strcmp("--help",argv[j])==0 || strcmp("-h",argv[j])==0) { print_help(argv[j]); exit(UNKNOWN); } else if(strcmp("--version",argv[j])==0 || strcmp("-V",argv[j])==0) { printf("%s Reversion: %s\n",argv[0],VERSION); exit(UNKNOWN); } else if(strcmp("--verbose",argv[j])==0 || strcmp("-v",argv[j])==0) { debug=1; } else if(strcmp("--rawOutput",argv[j])==0 || strcmp("-r",argv[j])==0) { rawOutput=1; } else if(strcmp("-w",argv[j])==0) { strcpy(pctWarning,argv[++j]); } else if(strcmp("-W",argv[j])==0) { strcpy(pctSwpWarning,argv[++j]); } else if(strcmp("-c",argv[j])==0) { strcpy(pctCritical,argv[++j]); } else if(strcmp("-C",argv[j])==0) { strcpy(pctSwpCritical,argv[++j]); } // else if(argc==2) { else { printf("Unknown option!\n"); print_usage(argv[0]); exit(UNKNOWN); } } return 0;}int main(int argc,char *argv[]) { int a; int ret; int i=0,mark=0; FILE *fp; char readbuf[64]; int MemTotal,MemFree,Buffers,Cached,MemUse,AllMemUse;; int SwapTotal,SwapFree,SwapUse; FILE *cmd; char str_cmd[512];// int j; memset(pctWarning,0,sizeof(pctWarning)); memset(pctCritical,0,sizeof(pctCritical)); memset(pctSwpWarning,0,sizeof(pctSwpWarning)); memset(pctSwpCritical,0,sizeof(pctSwpCritical)); float MemUsePercent; float SwapUsePercent; float temp1; char swap_temp[32],swap_temp_1[32]; int exitstatus=OK; char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"}; char result[512]; char perfdata[1024]; printf("argc=%d,argv[1]=%s,argv[2]=%s\n",argc,argv[1],argv[2]); if(argc>1) { ret=parse_options(argc,argv); if(ret!=0) { fprintf(stderr,"parse_options() error.\n"); exit(-1); } } /* for(j=1;j<=argc-1;j++) { switch(argv[j]) { // case "-h"|"--help": case "-h": print_help(argv[1]); break; default: printf("kkkkkkkkkkkkkkkkkkk\n"); break; } } */ fp=fopen(MEMINFO,"r"); if(fp==NULL) { fprintf(stderr,"fopen() error.\n"); exit(-1); } while(fgets(readbuf,64,fp)!=NULL) { mark=0; if(strstr(readbuf,"MemTotal")) { ret=sscanf(readbuf,"MemTotal: %d kB",&MemTotal); mark=1; } else if(strstr(readbuf,"MemFree:")) { ret=sscanf(readbuf,"MemFree: %d kB",&MemFree); mark=1; } else if(strstr(readbuf,"Buffers:")) { ret=sscanf(readbuf,"Buffers: %d kB",&Buffers); mark=1; } else if(strstr(readbuf,"Cached:")) { ret=sscanf(readbuf,"Cached: %d kB",&Cached); mark=1; } else if(strstr(readbuf,"SwapTotal:")) { ret=sscanf(readbuf,"SwapTotal: %d kB",&SwapTotal); mark=1; } else if(strstr(readbuf,"SwapFree:")) { ret=sscanf(readbuf,"SwapFree: %d kB",&SwapFree); mark=1; } if(mark==1) { i++; } if(i==7) { break; } } ret=fclose(fp); if(ret==EOF) { fprintf(stderr,"fclose() error.\n"); exit(-1); } MemUse=MemTotal-MemFree-Buffers-Cached; // printf("MemUse=%dKB\n",MemUse); AllMemUse=MemTotal-MemFree; // printf("AllMemUse=%dKB\n",AllMemUse); MemUsePercent=(float)MemUse/(float)MemTotal*100; // printf("PctMemUse=%.2f%\n",MemUsePercent); SwapUse=SwapTotal-SwapFree; // printf("SwapUse=%dKB\n",SwapUse); SwapUsePercent=(float)SwapUse/(float)SwapTotal*100; // printf("PctSwapUse=%.2f%\n",SwapUsePercent); // printf("%.3f%\n",(float)MemUse/(float)MemTotal*100); // printf("MemUse=%.2f%\n",(float)MemUse/(float)MemTotal*100); if(debug==1) { cmd=popen("free -mt","r"); if(cmd==NULL) { fprintf(stderr,"popen() error.\n"); } else { while(fgets(str_cmd,512,cmd)!=NULL) printf("%s",str_cmd); } // printf("---debug---\n"); printf("phyTotal=%d\n",MemTotal/1024); printf("swpTotal=%d\n",SwapTotal/1024); printf("phyShared=%d\n",0); printf("phyBuffers=%d\n",Buffers/1024); printf("phyCached=%d\n",Cached/1024); printf("phyUsed=%d\n",MemUse/1024); printf("phyAllUsed=%d\n",AllMemUse/1024); printf("swpUsed=%d\n",SwapUse/1024); printf("pctPhyShared=%d\n",0); printf("pctPhyBuffers=%.2f\n",(float)Buffers/(float)MemTotal*100); printf("pctPhyCached=%.2f",(float)Cached/(float)MemTotal*100); printf("pctPhyUsed=%.2f\n",(float)MemUse/(float)MemTotal*100); printf("pctPhyAllUsed=%.2f\n",(float)AllMemUse/(float)MemTotal*100); snprintf(swap_temp_1,32,"%.2f",SwapUsePercent); if(!strcmp(swap_temp_1,"0.00")) printf("pctSwpUsed=%.f\n",SwapUsePercent); else printf("pctSwpUsed=%.2f\n",SwapUsePercent); printf("rawOutput=%d\n",0); printf("pctWarning=%d\n",0); printf("pctCritical=%d\n",0); printf("pctSwpWarning=%d\n",0); printf("pctSwpCritical=%d\n",0); // printf("-----------\n"); } if(argc==1) { if((int)MemUsePercent>=80 && (int)MemUsePercent<=90) exitstatus=WARNING; else if((int)MemUsePercent>90) exitstatus=CRITICAL; if((int)SwapUsePercent>=80 && (int)SwapUsePercent<=90) exitstatus=WARNING; else if((int)SwapUsePercent>90) exitstatus=CRITICAL; } else { if(strlen(pctWarning)) if((int)MemUsePercent>=atoi(pctWarning)) exitstatus=WARNING; if(strlen(pctSwpWarning)) if((int)SwapUsePercent>=atoi(pctSwpWarning)) exitstatus=WARNING; if(strlen(pctCritical)) if((int)MemUsePercent>=atoi(pctCritical)) exitstatus=CRITICAL; if(strlen(pctSwpCritical)) if((int)SwapUsePercent>=atoi(pctSwpCritical)) exitstatus=CRITICAL; } printf("exitstatus=%d\n",exitstatus); snprintf(swap_temp,32,"%.2f",SwapUsePercent); if(!strcmp(swap_temp,"0.00")) { if(rawOutput==1) { snprintf(result,512,"Memory Usage - %dMB of %dMB RAM used, %dMB of %dMB Swap used",MemUse/1024,MemTotal/1024,SwapUse/1024,SwapTotal/1024); snprintf(perfdata,1024,"phyUsed=%d;%s;%s;0;%d phyShared=0;;;0;%d phyBuffers=%d;;;0;%d phyCached=%d;;;0;%d phyAllUsed=%d;;;0;%d swpUsed=%d;%s;%s;0;%d",MemUse/1024,pctWarning,pctCritical,MemTotal/1024,MemTotal/1024,Buffers/1024,MemTotal/1024,Cached/1024,MemTotal/1024,AllMemUse/1024,MemTotal/1024,SwapUse/1024,pctSwpWarning,pctSwpCritical,SwapTotal/1024); } else { snprintf(result,512,"Memory Usage - %.2f%s RAM, %.f%s Swap",MemUsePercent,"%",SwapUsePercent,"%"); snprintf(perfdata,1024,"phyUsed=%.2f%;%s;%s;0;100 phyShared=0%;;;0;100 phyBuffers=%.2f%;;;0;100 phyCached=%.2f%s;;;0;100 phyAllUsed=%.2f%s;;;0;100 swpUsed=%.f%;%s;%s;0;100",MemUsePercent,pctWarning,pctCritical,(float)Buffers/(float)MemTotal*100,(float)Cached/(float)MemTotal*100,"%",(float)AllMemUse/(float)MemTotal*100,"%",SwapUsePercent,pctSwpWarning,pctSwpCritical); } } else { if(rawOutput==1) { snprintf(result,512,"Memory Usage - %dMB of %dMB RAM used, %dMB of %dMB Swap used",MemUse/1024,MemTotal/1024,SwapUse/1024,SwapTotal/1024); snprintf(perfdata,1024,"phyUsed=%d;%s;%s;0;%d phyShared=0;;;0;%d phyBuffers=%d;;;0;%d phyCached=%d;;;0;%d phyAllUsed=%d;;;0;%d swpUsed=%d;;;0;%d",MemUse/1024,pctWarning,pctCritical,MemTotal/1024,MemTotal/1024,Buffers/1024,MemTotal/1024,Cached/1024,MemTotal/1024,AllMemUse/1024,MemTotal/1024,SwapUse/1024,SwapTotal/1024); } else { snprintf(result,512,"Memory Usage - %.2f%s RAM, %.2f%s Swap",MemUsePercent,"%",SwapUsePercent,"%"); snprintf(perfdata,1024,"phyUsed=%.2f%;%s;%s;0;100 phyShared=0%;;;0;100 phyBuffers=%.2f%;;;0;100 phyCached=%.2f%s;;;0;100 phyAllUsed=%.2f%s;;;0;100 swpUsed=%.2f%s;%s;%s;0;100",MemUsePercent,pctWarning,pctCritical,(float)Buffers/(float)MemTotal*100,(float)Cached/(float)MemTotal*100,"%",(float)AllMemUse/(float)MemTotal*100,"%",SwapUsePercent,"%"); } } printf("%s: %s",exit_status[exitstatus],result); printf(" | "); printf("%s\n",perfdata); return exitstatus;}
- nagios插件之计算内存使用率
- nagios插件之监控内存使用率(centos7)
- nagios插件-查看redis的内存使用率
- nagios插件之hpux系统内存检查
- htop 内存使用率计算
- linux 计算内存使用率
- nagios插件之计算asterisk当前通话量
- nagios插件之计算vp当前通话量
- 如何正确计算LINUX内存使用率
- LINUX计算CPU、内存的使用率
- linux平台如何计算内存使用率
- LINUX计算CPU、内存的使用率
- 正确计算linux系统内存使用率
- 正确计算linux系统内存使用率
- 正确计算linux系统内存使用率
- linux下计算内存使用率的脚本
- 正确计算linux系统内存使用率
- 正确计算linux系统内存使用率
- 将年月日时分秒都保存进数据库
- LaTex Templates and Samples for Writing IEEE Conference Paper
- android 相机获取照片显示代码实例
- mysql视图简介
- 测试面试
- nagios插件之计算内存使用率
- hibernate 解决插入时间默认不支持时分秒
- OGRE 源码编译问题 集合 [choose rendering subsystem ]
- #ifndef #define #endif的用法
- 使用Moq让单元测试变得更简单
- 在 Windows 下使用 OpenCL
- Android调用相机并将照片存储到sd卡上
- C++ STL轻松导学
- c 和 c++中的 struct 和 class