1. 程式人生 > >nagios外掛之監控oracle日誌

nagios外掛之監控oracle日誌

vi check_oracle_alert.c

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

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

#define LEN 40960

int 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 "/home/neo/check_log/oracle_log/alert_cutp1.log"

//#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/neo/check_log/oracle_log/log_tmp.file"

char oracle_log_str_now[LEN]={0};
char oracle_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_FAILED
	fp_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(oracle_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("oracle_log_str_old=%s\n",oracle_log_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,char *check_year,char *check_day) {
	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,"parse_log_file() is fopen() error %s\n",log_file);
	//	perror("parse_log_file() is fopen() error,");
	//	exit(-1);

	        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("parse_log_file() is fseek()");
			return -1;
		}

		str=fgets(readbuf,sizeof(readbuf),fp);
		if(str==NULL) {
			fprintf(stderr,"parse_log_file() is fgets() error.\n");
			return -1;
		}
		printf("readbuf=%s",readbuf);

/*
		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,"ORA-") && err_mark==0) {
			if(strstr(readbuf,"ORA-")) {
		//	if(strstr(readbuf,"Exception") && err_mark==0) {
			//	printf("-----------------\n");

				if(strcmp(oracle_log_str_old,readbuf)) {
					err_line=line+1;
					err_count++;

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

					if(err_count==1) {
						ret=write_old_file(OLD_FILE_FAILED,oracle_log_str_now);
						if(ret==-1) {
							fprintf(stderr,"parse_log_file() is write_old_file() oracle_log_str_now error.\n");
							return -1;
						}
					}
				} 
				else {
					break;
				}
			/*	else {
					err_mark=1;
				}
			*/
			}

	//	}

		/*	if(err_mark==1) {
				break;
			}
		*/
			if(strstr(readbuf,check_year) && !strstr(readbuf,check_day)) {
			//	if(!strstr(readbuf,check_day)) {
			//	}
				break;
			}
	}

//	printf("err_400_count=%d,oracle_log_str_now=%s\n",err_400_count,oracle_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,"parse_log_file() is fclose() error\n");
	}

	return 0;
}

int main(void) {
	int fd,ret;

	char oracle_log_file[128];

	char nowtime[128];
	char hostname[128];

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

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

	time_t timestamp;
        struct tm *p1;

       // timestamp=time(NULL)-86400;
        timestamp=time(NULL);
        p1=localtime(×tamp);

//	sprintf(oracle_log_file,"%s/log.%d%02d%02d",LOG_FILE_DIR,1900+p1->tm_year,1+p1->tm_mon,p1->tm_mday);
////	printf("oracle_log_file=%s\n",oracle_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);

	sprintf(my_day,"%02d",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("my_year=%s,my_month=%s,my_week=%s,my_day=%s\n",my_year,my_month,my_week,my_day);

//	Sat Aug 22 14:52:40 EAT 2015
	sprintf(check_year,"%d",1900+p1->tm_year);
	sprintf(check_day,"%s %s %02d",week[p1->tm_wday],month[p1->tm_mon],p1->tm_mday);
	printf("check_year=%s,check_day=%s\n",check_year,check_day);
	

	sprintf(nowtime,"%d-%02d-%02d-%02d-%02d-%02d",1900+p1->tm_year,(1+p1->tm_mon),p1->tm_mday,p1->tm_hour,p1->tm_min,p1->tm_sec);  
	printf("nowtime=%s\n",nowtime);


	ret=gethostname(hostname,sizeof(hostname));
        if(ret==-1) {
                fprintf(stderr,"gethostname() error.\n");
                exit(-1);
	}
	printf("hostname=%s\n",hostname);

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

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

//	ret=parse_log_file(oracle_log_file);
	ret=parse_log_file(LOG_FILE,check_year,check_day);
	if(ret==-1) {
		fprintf(stderr,"parse_log_file() 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 oracle_log_num=%d",err_count);

	sprintf(performance_data,"oracle_log_log=%d;;;;",err_count);

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


相關推薦

nagios外掛監控oracle日誌

vi check_oracle_alert.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define OK

zabbix3.4.6監控Oracle

導入 listener 腳本 剛才 重新 fin import 用戶 send   新zabbix搭建配置完後,公司所有的主機是通過自動註冊完成了添加,網絡設備及其Templates是從舊zabbix中Export出模板,然後Import入新zabbix系統中。一些應用的監

Chrome 瀏覽器外掛監控網頁地址

瀏覽器外掛開發手冊:http://open.chrome.360.cn/extension_dev/overview.html 瀏覽器外掛demo,請先參考部落格:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

搭建基於Nagios監控系統——監控遠程Linux服務器

toc strong 如何 exe 指令 www. 是否 bject local 上一篇介紹了如何安裝Nagios Core,這一篇跟大家分享一下如何將一臺遠程的Linux服務器加入納入監控範圍。 第一部分:在遠程Linux上安裝Nagios Plugins和NRP

開源監控解決方案:ICINGA(Nagios監控Oracle Database

ima 方案 invalid spa block obj adapter tool esp [root@king01 ~]# yum -y install perl-ExtUtils-MakeMaker perl-Time-HiRes [root@king01 ~]# ta

Nagios監控Oracle表空間出現Cannot determine ORACLE_HOME報錯

空間使用 nag 啟動 .com unknown 表名 遇到 監控 size 在使用Nagios監控軟件時,監控Oracle表空間使用率,遇到了如下錯誤: 表名監控狀態是:UNKNOWN錯誤信息是:Cannot determine ORACLE_HOME for sid d

oracle學習筆記(三)檢查Oracle的告警日誌檔案

作為一個 DBA,或者哪怕僅僅是和 Oracle 資料庫打交道的技術人員,你都必須知道告警日誌是什麼,在何處。 而對於 DBA來說,實時的監控資料庫的告警日誌是必須進行的工作,監控並且應該根據不同的嚴重級別,傳送不同級別的告警資訊(通過郵件、簡訊) ,這可以幫助我們及時瞭解資

PyCharm外掛Ideolog,更加直觀的檢視log日誌,根據等級顯示不同顏色

1.首先你的pycharm版本要在2017以上 2.其次安裝JetBrains官方提供的外掛 File | Settings | Plugins 3.搜尋 Ideolog這個外掛,安裝以後,重啟pyc

運維監控與安全篇------3.監控常用命令 、 Nagios監控

準備一臺新的主機 配置要求如下:配置固定ip  192.168.4.11、 網路yum源、永久關閉firewalld和selinux、 下載軟體包 提供監控服務的軟體:nagios   cacti    zabbix  1 監控目的:提前發現問題 報告系統執行狀況(吞吐量、

Zabbix利用Orabbix外掛監控Oracle資料庫(增強版)--裡面有orabbix報錯的處理方法

原文地址:http://www.linuxidc.com/Linux/2015-12/126537.htm 按照網上的一些資料進行安裝最後發現問題挺多的,於是自己修復了一些問題便記錄了下來。 一.jdk的安裝(Orabbix Server) 1.軟體解壓,放到固定位

Oracle日誌挖掘LogMiner(前部分原理解釋,後部分實操!)

官方文件地址:http://docs.oracle.com/cd/E11882_01/server.112/e22490/logminer.htm#SUTIL019本文轉自:http://blog.itpub.net/26736162/viewspace-2141148/眾所周知,所有對使用者資料和資料字典的

搭建基於Nagios監控系統——監控遠端Windows伺服器

分享瞭如何監控Linux伺服器,我們來看看使用Nagios如何監控Windows伺服器。 第一部分:配置被監控的Windows伺服器 首先,訪問 http://sourceforge.net/projects/nscplus/,下載符合自己伺服器的 NSClinent+

Linux如何用指令碼監控Oracle傳送警告日誌ORA-報錯傳送郵件

  Linux如何用指令碼監控Oracle傳送警告日誌ORA-報錯傳送郵件 前言 公司有購買的監控軟體北塔系統監控,由於購買的版權中只包含了有限臺數據庫伺服器的監控,所以只監控了比較重要的幾臺伺服器。 後邊出現過沒有監控的資料庫伺服器表空間爆滿導致生產業務出現問題,後續手工處理資料也麻煩。 因此領導

Linux rsyslog+LogAnalyzer 日誌收集系統

windows 服務器 應用程序 數據庫 規劃圖 一、LogAnalyzer介紹  LogAnalyzer工具提供了一個易於使用,功能強大的前端,用於搜索,查看和分析網絡活動數據,包括系統日誌,事件日誌和其他許多日誌源。由於它只是將數據展示到我們用戶的面前,所以數據本身需要由另一個程序收集

程序外掛修改名稱

技術 img png idt chan http alt die 動態 1.建立運行應用程序如PicPick 2.使用工具OllyDbg v1.0窗口工具捕獲該窗口的類名和標題如下圖 3.根據獲取的類名TfrmMDIEditor和標題PPP編寫c代碼如下 #inclu

Laravel加密解密/日誌/異常處理及自定義錯誤

文件中 例如 tom 處理器 crypt return cat 情況 而不是 一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try {   $decrypted = Crypt::decrypt($encryptedV

zabbix-3.2.6監控一臺新主機

更改 nat eight 啟動 repo sel cpu ota wid 1、更改主機名 [[email protected]/* */ ~]#hostname zabbix-client [[email protected]/* */-

MS SQL 監控錯誤日誌的告警信息

密碼 如果 reason width exists 依次 介紹 win 作用 SQL Server的錯誤消息(Error Message)按照消息的嚴重級別一共劃分25個等級,級別越高,表示嚴重性也越高。但是如果你統計sys.messages,你會發現,實際上只有1

夢幻成仙,誅滅外掛——《夢幻誅仙手遊》的阻擊外掛

超過 ext 客戶端 left ron 相加 功能 出現 成本 隨著智能手機的全面普及和市場泛娛樂化,移動遊戲行業發展迅猛,無論是市場收入還是用戶規模,手遊在遊戲市場上已經占據了半壁江山。如此火熱的市場吸引了大量外掛、輔助工作室等非法盈利團隊,嚴重影響了遊戲的收益、平衡,縮

Oracle日誌查看

mine 正常 com date 啟動數據庫 exe clas call users 一.Oracle日誌的路徑: 登錄:sqlplus "/as sysdba" 查看路徑:SQL> select * from v$logfile; SQL> select *