2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Nginx平台安装Nagios监控服务(0608更新)

Nginx平台安装Nagios监控服务(0608更新)

时间:2019-03-19 02:27:44

相关推荐

Nginx平台安装Nagios监控服务(0608更新)

安装环境:centos5.5

Nginx平台安装

1、下载相关软件

2、建立相关用户

3、安装Nagios

4、安装Nagios插件

5、配置Nagios启动

6、安装Perl fcgi模块,让Nginx支持CGI

建立nginx-fcgi脚本

把下面内容写进脚本,并授执行权限

#!/usr/bin/perl # #authorDanielDominikRudnicki #thanksto:PiotrRomanczuk #emaildaniel@ #version0.4.3 #webpagehttp://www.nginx.eu/ # #BASED@/NginxSimpleCGI # # #usestrict; useFCGI; useGetopt::Long; useIO::All; useSocket; subinit{ GetOptions("h"=>\$help, "verbose!"=>\$verbose, "pid=s"=>\$filepid, "l=s"=>\$logfile, "S:s"=>\$unixsocket, "P:i"=>\$unixport)orusage(); usage()if$help; print"StartingNginx-fcgi\n"if$verbose; print"Runningwith$>UID"if$verbose; print"Perl$]"if$verbose; #if($>=="0"){ #print"\n\tERROR\tRunningasaroot!\n"; #print"\tSuggestednottodoso!!!\n\n"; #exit1; #} if(!$logfile){ print"\n\tERROR\tlogfilemustdeclared\n" ."\tuse$0withoption-lfilename\n\n"; exit1; } print"Usinglogfile$logfile\n"if$verbose; "\n\n">>io($logfile); addlog($logfile,"StartingNginx-cfgi"); addlog($logfile,"Runningwith$>UID"); addlog($logfile,"Perl$]"); addlog($logfile,"Testingsocketoptions"); if(($unixsocket&&$unixport)||(!($unixsocket)&&!($unixport))){ print"\n\tERROR\tOnlyoneoptioncanbeused!\n"; print"\tSuggested(beacuseofspeed)isusageUNIXsocket-S\n\n"; exit1; } if($unixsocket){ print"DaemonlisteningatUNIXsocket$unixsocket\n"if$versbose; addlog($logfile,"DeamonlisteningatUNIXsocket$unixsocket"); }else{ print"DaemonlisteningatTCP/IPsocket*:$unixport\n"if$verbose; # addlog($logfile,"DaemonlisteningatTCP/IPsocket*:$unixport"); } if(-e$filepid){ print"\n\tERROR\tPIDfile$filepidalreadyexists\n\n"; addlog($logfile,"CannotusePIDfile$filepid,alreadyexists."); exit1; } if($unixsocket){ print"CreatingUNIXsocket\n"if$verbose; $socket=FCGI::OpenSocket($unixsocket,10); if(!$socket){ print"Couldn'tcreatesocket\n"; addlog($logfile,"Couldn'tcreatesocket"); exit1; } print"UsingUNIXsocket$unixsocket\n"if$verbose; }else{ print"CreatingTCP/IPsocket\n"if$verbose; $portnumber=":".$unixport; $socket=FCGI::OpenSocket($unixport,10); if(!$socket){ print"Couldn'tcreatesocket\n"; addlog($logfile,"Couldn'tcreatesocket"); exit1; } print"Usingport$unixport\n"if$verbose; } addlog($logfile,"Socketcreated"); if(!$filepid){ print"\n\tERROR\tPIDfilemustdeclared\n" ."\tuse$0withoption-pidfilename\n\n"; exit1; } print"UsingPIDfile$filepid\n"if$verbose; addlog($logfile,"UsingPIDfile$filepid"); my$pidnumber=$$; $pidnumber>io($filepid); print"PIDnumber$$\n"if$verbose; addlog($logfile,"PIDnumber$pidnumber"); } subaddzero{ my($date)=shift; if($date<10){ return"0$date"; } return$date; } sublogformat{ my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$iddst)=localtime(time); my$datestring; $year+=1900; $mon++; $mon=addzero($mon); $mday=addzero($mday); $min=addzero($min); $datestring="$year-$mon-$mday$hour:$min"; return($datestring); } subaddlog{ my($log_file,$log_message)=@_; my$curr_time=logformat(); my$write_message="[$curr_time]$log_message"; $write_message>>io($log_file); "\n">>io($log_file); } subprinterror{ my$message=@_; print"\nNginxFastCGI\tERROR\n" ."\t$message\n\n"; exit1; } subusage{ print"\nNginxFastCGI\n" ."\n\tusage:$0[-h]-Sstring-Pint\n" ."\n\t-h\t\t:this(help)message" ."\n\t-Spath\t\t:pathforUNIXsocket" ."\n\t-Pport\t\t:portnumber" ."\n\t-pfile\t\t:pathforpidfile" ."\n\t-lfile\t\t:pathforlogfile" ."\n\n\texample:$0-S/var/run/nginx-perl_cgi.sock-l/var/log/nginx/nginx-cfgi.log-pid/var/run/nginx-fcgi.pid\n\n"; exit1; } init; # END(){}BEGIN(){} *CORE::GLOBAL::exit=sub{die"fakeexit\nrc=".shift()."\n";};evalq{exit}; if($@){ exitunless$@=~/^fakeexit/; }; #forkpart my$pid=fork(); if($pid==0){ &main; exit0; } print"ForkingworkerprocesswithPID$pid\n"if$verbose; addlog($logfile,"ForkingworkerprocesswithPID$pid"); print"UpdatePIDfile$filepid\n"if$verbose; addlog($logfile,"UpdatePIDfile$filepid"); $pid>io($filepid); print"Workerprocessrunning.\n"if$verbose; addlog($logfile,"Parentprocess$$isexiting"); exit0; submain{ $request=FCGI::Request(\*STDIN,\*STDOUT,\*STDERR,\%req_params,$socket); if($request){request_loop()}; FCGI::CloseSocket($socket); } subrequest_loop{ while($request->Accept()>=0){ #processinganySTDINinputfromWebServer(forCGI-POSTactions) $stdin_passthrough=''; $req_len=0+$req_params{'CONTENT_LENGTH'}; if(($req_params{'REQUEST_METHOD'}eq'POST')&&($req_len!=0)){ while($req_len){ $stdin_passthrough.=getc(STDIN); $req_len--; } } #runningthecgiapp if((-x$req_params{SCRIPT_FILENAME})&& (-s$req_params{SCRIPT_FILENAME})&& (-r$req_params{SCRIPT_FILENAME}) ){ foreach$key(keys%req_params){ $ENV{$key}=$req_params{$key}; } if($verbose){ addlog($logfile,"running$req_params{SCRIPT_FILENAME}"); } #/perlipc.html#Safe-Pipe-Opens # open$cgi_app,'-|',$req_params{SCRIPT_FILENAME},$stdin_passthroughorprint("Content-type:text/plain\r\n\r\n");print"Error:CGIappreturnednooutput-Executing$req_params{SCRIPT_FILENAME}failed!\n";#addlog($logfile,"Error:CGIappreturnednooutput-Executing$req_params{SCRIPT_FILENAME}failed!"); if($cgi_app){ print<$cgi_app>; close$cgi_app; } }else{ print("Content-type:text/plain\r\n\r\n"); print"Error:NosuchCGIapp-$req_params{SCRIPT_FILENAME}maynotexistorisnotexecutablebythisprocess.\n"; addlog($logfile,"Error:NosuchCGIapp-$req_params{SCRIPT_FILENAME}maynotexistorisnotexecutablebythisprocess."); } } }

运行脚本:

把sock授权777:

7、配置登陆帐号及密码

注意:如果这里生成的用户不是nagiosadmin的话,需要在/usr/local/nagios/etc/cgi.cfg

配置文件里添加上你的帐号,否则你新建的lihp帐号会没有权限操作nagios

如果没有apache,可以在网上在线生成一个htpasswd

8、Nginx创建虚拟主机

以下是我的虚拟主机配置

server { listen80; ; root/usr/local/nagios/share; indexindex.php; auth_basic"lihp"; auth_basic_user_file/usr/local/nginx/conf/htpasswd; #access_log/usr/local/nginx/logs/nagios.lognagios; location~\.cgi${ root/usr/local/nagios/sbin; rewrite^/nagios/cgi-bin/(.*)\.cgi/$1.cgibreak; fastcgi_indexindex.cgi; fastcgi_passunix:/usr/local/nginx/logs/nginx-fcgi.sock; fastcgi_paramSCRIPT_FILENAME/usr/local/nagios/sbin$fastcgi_script_name; fastcgi_paramQUERY_STRING$query_string; fastcgi_paramREMOTE_ADDR$remote_addr; fastcgi_paramREMOTE_PORT$remote_port; fastcgi_paramREQUEST_METHOD$request_method; fastcgi_paramREQUEST_URI$request_uri; fastcgi_paramREMOTE_USER$remote_user; #fastcgi_paramSCRIPT_NAME$fastcgi_script_name; fastcgi_paramSERVER_ADDR$server_addr; fastcgi_paramSERVER_NAME$server_name; fastcgi_paramSERVER_PORT$server_port; fastcgi_paramSERVER_PROTOCOL$server_protocol; fastcgi_paramSERVER_SOFTWAREnginx; fastcgi_paramCONTENT_LENGTH$content_length; fastcgi_paramCONTENT_TYPE$content_type; fastcgi_paramGATEWAY_INTERFACECGI/1.1; fastcgi_paramHTTP_ACCEPT_ENCODINGgzip,deflate; fastcgi_paramHTTP_ACCEPT_LANGUAGEzh-cn; } location~.*\.(php|php5)?$ { #fastcgi_passunix:/tmp/php-cgi.sock; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; includefcgi.conf; } }

最后重读配置:

然后绑定HOSTS,打开浏览器

9、图片不正常的修正方法:

10、加载GD动态库(0608更新)

然后手动运行一下:

解决了map和trends错误的问题!

本文转自运维笔记博客51CTO博客,原文链接/lihuipeng/565412如需转载请自行联系原作者

lihuipeng

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。