nagios插件之监控多个tomcat线程数

vi check_tomcat_threads.c

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

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

#define LEN 1000
#define MIN_LEN 100

#define CMD1 "ps -efL | grep apache-tomcat-cuservice |grep -v grep | wc -l"
#define CMD2 "ps -efL | grep apache-tomcat-finance |grep -v grep | wc -l"
#define CMD3 "ps -efL | grep apache-tomcat-interface |grep -v grep | wc -l"
#define CMD4 "ps -efL | grep apache-tomcat-payment |grep -v grep | wc -l"
#define CMD5 "ps -efL | grep apache-tomcat-7.0.41 |grep -v grep | wc -l"

int i=0;

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

char cuservice_count[MIN_LEN]={0};
char finance_count[MIN_LEN]={0};
char interface_count[MIN_LEN]={0};
char payment_count[MIN_LEN]={0};
char tomcat7041_count[MIN_LEN]={0};

char status_information[LEN]={0};
char performance_data[LEN]={0};

char *cmd_array[]={"ps -efL | grep apache-tomcat-cuservice |grep -v grep | wc -l","ps -efL | grep apache-tomcat-finance |grep -v grep | wc -l","ps -efL | grep apache-tomcat-interface |grep -v grep | wc -l","ps -efL | grep apache-tomcat-payment |grep -v grep | wc -l","ps -efL | grep apache-tomcat-7.0.41 |grep -v grep | wc -l"};

int parse_cmd(char *cmd_array) {
//	printf("%s\n",cmd_array);

        int ret;
        FILE *fp;
        char readbuf[MIN_LEN]={0};

	char cmd_string[MIN_LEN]={0};

//	strncpy(cmd_string,cmd_array,MIN_LEN);
//	sprintf(cmd_string,cmd_array,strlen(cmd_array));
//	printf("cmd_string=%s\n",cmd_string);

//	int i;
//	char *p,*str;

//	memset(readbuf,0,MIN_LEN);

	fp=popen(cmd_array,"r");
//	fp=popen(cmd_string,"r");
        if(fp==NULL) {
                fprintf(stderr,"popen() error.\n");
                return -1;
        }

       // while(fgets(readbuf,1024,fp)!=NULL) {
		/*
                for(p=strtok(readbuf," ");p;p=strtok(NULL," ")) {
                //      str=p;

                        sprintf(status_information,"active call=%s",p);

                        sprintf(performance_data,"call=%s;;;;",p);

                        break;
                }

                break;
		*/

	//	readbuf[strlen(readbuf)-1]=0;
		ret=fscanf(fp,"%s",readbuf);
		if(ret!=1) {
			fprintf(stderr,"fscanf() error.\n");
		}
	//	printf("readbuf=%s\n",readbuf);

	//	printf("i=%d\n",i);
		switch (i) {
			case 0:
				strncpy(cuservice_count,readbuf,MIN_LEN);
			//	printf("0000000000\n");
				break;

			case 1:
				strncpy(finance_count,readbuf,MIN_LEN);
			//	printf("1111111111\n");
				break;

			case 2:
				strncpy(interface_count,readbuf,MIN_LEN);
			//	printf("2222222222\n");
				break;

			case 3:
				strncpy(payment_count,readbuf,MIN_LEN);
			//	printf("3333333333\n");
				break;

			case 4:
				strncpy(tomcat7041_count,readbuf,MIN_LEN);
			//	printf("4444444444\n");
				break;

			default:
			//	printf("5555555555\n");
				break;
		} 

       // }

        ret=fclose(fp);
        if(fp==NULL) {
                fprintf(stderr,"popen() error.\n");
                return -1;
        }

	return 0;
}

int main() {
        int ret;

	// clean
//	memset(cuservice_count,0,MIN_LEN);
//	memset(finance_count,0,MIN_LEN);
//	memset(interface_count,0,MIN_LEN);
//	memset(payment_count,0,MIN_LEN);
//	memset(tomcat7041_count,0,MIN_LEN);

	for(i=0;i<5;i++) {
		ret=parse_cmd(cmd_array[i]);
		if(ret!=0) {
			fprintf(stderr,"parse_cmd() error.\n");
			// exitstatus=CRITICAL;
			// printf("%s: - %s | %s\n",exit_status[exitstatus],status_information,performance_data);
			exit(-1);
		}
	}

//	printf("cuservice_count=%s\n",cuservice_count);
//	printf("finance_count=%s\n",finance_count);
//	printf("interface_count=%s\n",interface_count);
//	printf("payment_count=%s\n",payment_count);
//	printf("tomcat7041_count=%s\n",tomcat7041_count);

	if(atoi(cuservice_count)<400 && atoi(finance_count)<400 && atoi(interface_count)<400 && atoi(payment_count)<400 && atoi(tomcat7041_count)<400) {
		exitstatus=OK;
	}
	else if(atoi(cuservice_count)>=400 && atoi(cuservice_count)<450 || atoi(finance_count)>=400 && atoi(finance_count)<450 || atoi(interface_count)>=400 && atoi(interface_count)<450 || atoi(payment_count)>=400 && atoi(payment_count)<450 || atoi(tomcat7041_count)>=400 && atoi(tomcat7041_count)<450) {
		exitstatus=WARNING;
	}
	else if(atoi(cuservice_count)>=450 || atoi(finance_count)>=450 || atoi(interface_count)>=450 || atoi(payment_count)>=450 || atoi(tomcat7041_count)>=450) {
		exitstatus=CRITICAL;
	}

	sprintf(status_information,"cuservice_count=%s, finance_count=%s, interface_count=%s, payment_count=%s, tomcat7041_count=%s",cuservice_count,finance_count,interface_count,payment_count,tomcat7041_count);

	sprintf(performance_data,"cuservice_count=%s;400;450;0; finance_count=%s;400;450;0; interface_count=%s;400;450;0; payment_count=%s;400;450;0; tomcat7041_count=%s;400;450;0;",cuservice_count,finance_count,interface_count,payment_count,tomcat7041_count);

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

        return exitstatus;
}
时间: 2024-10-08 20:04:40

nagios插件之监控多个tomcat线程数的相关文章

并发和Tomcat线程数

转自 http://zhanjindong.com 最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s. 服务器性能很好,Tomcat版本是7.0.54,配置如下: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="3000" min

【干货】并发和Tomcat线程数,跪求指正!

最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s. 服务器性能很好,Tomcat版本是7.0.54,配置如下: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="3000" minSpareThreads="800&quo

聊下并发和Tomcat线程数(错误更正)

本文前半部分结论存在严重错误,请看最后2015-1-20更新部分. 最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s. 服务器性能很好,Tomcat版本是7.0.54,配置如下: <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="3000&q

nagios插件之监控if8接口日志(新接口)

vi check_if8_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 400000 int exitstatus=OK; char

nagios插件之监控if8接口日志

vi check_if8_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 400000 int exitstatus=OK; char

nagios插件之监控f5pool中cngw主机session数

使用方法:f5_session_cngw_prod -H host -o oid vi f5_session_cngw_prod.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define OK 0 #define WARNING 1 #define CRITICAL 2 #define UNKNOWN 3 #define LEN 1000

一个使用高并发高线程数 Server 使用异步数据库客户端造成的超时问题

现象 今天在做一个项目时, 将 tomcat 的 maxThreads 加大, 加到了 1024, tomcat 提供的服务主要是做一些运算, 然后插入 redis, 查询 redis, 最后将任务返回给客户端 在做压测时, 同时开了 1000 个线程, 并发发起 http 请求去访问 tomcat 的服务, 结果在第一次访问 tomcat 时出现了一系列的 redis 查询超时, 例如 1000 个并发发起 10W 次请求, 可能头 1W 次请求会有 2000 次左右的 redis 超时造成服

Nagios通过check_http监控一台web应用服务器上多个tomcat服务

如何在nagios监控tomcat,是一个比较简单又复杂的事情,简单是因为如果只监控web应用服务器的一个tomcat服务是否正常运行,那么比较简单:如果要监控tomcat的其他比如连接数比如jvm内存使用率等就比较复杂,google没有适合的监控脚本:如果要监控web应用上面的多个tomcat服务器,而且很多tomcat服务都是跳转式的,那就需要多做很多事情. 一般通常都使用tcp tomcat端口的方式,不过这有一个bug就是tomcat假死的情况下,tcp 端口是OK的,但是tomcat里

nagios插件详解

一.check_apt 作用:debain相关系统的更新机制检查 update更新软件列表信息,包括版本,依赖关系等 upgrade在不改变现有软件设置的基础上更新软件 dist-upgrade会改变配置文件,改变旧的依赖关系 语法:check_apt [[-d|-u|-U]opts] [-n] [-t timeout] >#check_apt --help //查看具体使用说明 -d opts:--dist-upgrade=OPTS:执行dist-upgrade升级.和-U opts 参数相同