nagios插件之监控f5主备状态(snmp实现)

vi f5_active_status_snmp.c

使用方法:f5_active_status_snmp  -H $HOSTADDRESS$ -o 1.3.6.1.4.1.3375.2.1.14.3.3.0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

#define LEN 1000L
#define LEN_SHORT 32L

int exitstatus=OK;
char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};
char *power_status[4]={"active","deactive","not_install","unsupport"};

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

void print_usage(char str[LEN_SHORT]) {
        printf("Usage: %s [options]\n",str);
        printf("  e.g. %s -H 1.1.1.1 -o .1.3.6...\n",str);
        printf("Options:\n");
        printf("\t -H ip address\n");
        printf("\t -o snmp oid\n");
}

/*
int check_argv() {
        while((ch=getopt(argc,argv,"H:o:"))!=-1) {
                switch(ch) {
                        case 'H':
                        //      printf("option H:%s\n",optarg);
                                break;
                        case 'o':
                        //      printf("option o:%s\n",optarg);
                                break;
                        default:
                        //      printf("other option :%c\n",ch);
                                break;
                        }
                }

        return -1;
}
*/

int parse_status(char *sh_cmd,char *active_status,char f5_ip_addr[LEN_SHORT]) {
        int ret;
        FILE *fp;
        char readbuf[LEN];

        char *p,*str;

        int line=0;


//      fp=popen("/usr/bin/snmpwalk -v2c  -c zb.186.nms 114.66.80.55 1.3.6.1.4.1.2011.2.23.1.9.1.2.1.2","r");
        fp=popen(sh_cmd,"r");
        if(fp==NULL) {
                fprintf(stderr,"fopen() error.\n");

                exitstatus=UNKNOWN;

                sprintf(status_information,"active_status=%s","Unknown");
                sprintf(performance_data,"active_status=%s;;;0;100","");

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

                return exitstatus;
        }

        str=fgets(readbuf,LEN,fp); 
        if(str==NULL) {
                perror("fgets() error");
        }

        ret=sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.14.3.3.0 = INTEGER: %s",active_status);
        if(ret<0) {
                fprintf(stderr,"sscanf() error.\n");

                exitstatus=UNKNOWN;

                sprintf(status_information,"active_status=%s","Unknown");
                sprintf(performance_data,"active_status=%s;;;0;100","");

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

                return exitstatus;
        }

//SNMPv2-SMI::enterprises.3375.2.1.1.1.1.19.0 = INTEGER:
/*
        while(fgets(readbuf,256,fp)!=NULL) {
                line++;
                if(line==1) {
                        sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.1 = INTEGER: %s",power1_value);
                }
                else if (line==2) {
                        sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.2 = INTEGER: %s",power2_value);
                }
        }
*/


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

        ret=pclose(fp);
        if(ret==-1) {
                perror("pclose");
                return -1;
        }

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

        //TSP GGLC (is active)
        if(!strcmp(f5_ip_addr,"114.66.80.53")) {
                if(atoi(active_status)==0) {
                        exitstatus=OK;

                        sprintf(status_information,"f5 active_status is Active");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else if(atoi(active_status)==4) {
                        exitstatus=CRITICAL;

                        sprintf(status_information,"f5 active_status is Standby");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else {
                        exitstatus=UNKNOWN;

                        sprintf(status_information,"f5 active_status is UNKNOWN");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
        }
        //TSP YZ (is standby)
        else if(!strcmp(f5_ip_addr,"114.66.80.52")) {
                if(atoi(active_status)==4) {
                        exitstatus=OK;

                        sprintf(status_information,"f5 active_status is Standby");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else if(atoi(active_status)==0) {
                        exitstatus=CRITICAL;

                        sprintf(status_information,"f5 active_status is Active");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else {
                        exitstatus=UNKNOWN;

                        sprintf(status_information,"f5 active_status is UNKNOWN");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
        }
        //CUCC GGLC (active,ospf is active)
        else if(!strcmp(f5_ip_addr,"192.168.10.14")) {
                if(atoi(active_status)==0) {
                        exitstatus=OK;

                        sprintf(status_information,"f5 active_status is Active");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else if(atoi(active_status)==4) {
                        exitstatus=CRITICAL;

                        sprintf(status_information,"f5 active_status is Standby");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else {
                        exitstatus=UNKNOWN;

                        sprintf(status_information,"f5 active_status is UNKNOWN");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
        }
        //CUCC YZ (active,ospf is active)
        else if(!strcmp(f5_ip_addr,"192.168.10.29")) {
                if(atoi(active_status)==0) {
                        exitstatus=OK;

                        sprintf(status_information,"f5 active_status is Active");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else if(atoi(active_status)==4) {
                        exitstatus=CRITICAL;

                        sprintf(status_information,"f5 active_status is Standby");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
                else {
                        exitstatus=UNKNOWN;

                        sprintf(status_information,"f5 active_status is UNKNOWN");
                        sprintf(performance_data,"f5 active_value=%s;;;0;100",active_status);
                }
        }

        return 0;
}


int main(int argc,char *argv[]) {
        int ret;
        FILE *fp;

        int ch;
        int mark=0;

        char *str;

        int line=0;
        char readbuf[LEN];

        char sh_cmd[LEN];

        char active_status[LEN_SHORT];
        char active_ip_addr[LEN_SHORT];

        if(argc==1 || argc!=5) {
                printf("%s -H host -o oid\n",argv[0]);
                print_usage(argv[0]);
                return -1;
        }

        while((ch=getopt(argc,argv,"H:o:"))!=-1) {
                switch(ch) {
                        case 'H':
                        //      printf("option H:%s\n",optarg);
                                break;
                        case 'o':
                        //      printf("option o:%s\n",optarg);
                                break;
                        default:
                        //      printf("other option :%c\n",ch);
                                mark=1;
                                break;
                }
        }

        if(mark==1) {
                return -1;
        }


/*
        fp=fopen("1.txt","r");
        if(fp==NULL) {
                fprintf(stderr,"fopen() error.\n");
                return -1;
        }
*/


        sprintf(sh_cmd,"/usr/bin/snmpwalk -v2c  -c zb.186.nms %s %s",argv[2],argv[4]);

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


        ret=parse_status(sh_cmd,active_status,argv[2]);
        if(ret!=0) {
                fprintf(stderr,"parse_status() error.\n");

                sprintf(status_information,"f5 active_status is Unknown");
                sprintf(performance_data,"f5 active_value=%s;;;0;100","");

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

                exit(exitstatus);
        }

        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、付费专栏及课程。

余额充值