nagios监控php-fpm,Nginx平台安装Nagios监控服务

安装环境:CentOS5.5

1、下载相关软件

FCGI-0.67.tar.gz

FCGI-ProcManager-0.18.tar.gz

IO-All-0.39.tar.gznagios-3.2.3.tar.gznagios-plugins-1.4.15.tar.gz

2、建立相关用户

useradd nagios

groupadd nagcmd

usermod -g nagcmd nagios

usermod -g nagcmd www

3、安装Nagios

tar zxvf nagios-3.2.3.tar.gz

cd nagios-3.2.3

./configure --with-group=nagios --with-user=nagios --with-command-group=nagcmd --with-gd-lib=/usr/lib --with-gd-inc=/usr/include

make all

make install

make install-init

make install-config

make install-commandmode

4、安装Nagios插件

tar zxvf nagios-plugins-1.4.15.tar.gz

cd nagios-plugins-1.4.15

./configure --with-nagios-user=nagios --with-nagios-group=nagios

make

make install

5、配置Nagios启动

nagios chkconfig --add nagios

chkconfig nagios on

service nagios start

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

tar -zxf FCGI-0.67.tar.gz

cd FCGI-0.67

perl Makefile.PL

make && make install

tar -zxf FCGI-ProcManager-0.18.tar.gz

cd FCGI-ProcManager-0.18

perl Makefile.PL

make && make install

tar zxf IO-All-0.39.tar.gz

cd IO-All-0.39

perl Makefile.PL

make && make install

建立nginx-fcgi脚本

vi /usr/local/nginx/sbin/nginx-fcgi

把下面内容写进脚本,并授执行权限#!/usr/bin/perl

#

#   author      Daniel Dominik Rudnicki

#   thanks to:  Piotr Romanczuk

#   email       daniel@sardzent.org

#   version     0.4.3

#   webpage     http://www.nginx.eu/

#

#   BASED @ http://wiki.codemongers.com/NginxSimpleCGI

#

#

# use strict;

use FCGI;

use Getopt::Long;

use IO::All;

use Socket;

sub init {

GetOptions("h"=> \$help,

"verbose!"=>\$verbose,

"pid=s"=> \$filepid,

"l=s"=> \$logfile,

"S:s"=> \$unixsocket,

"P:i"=> \$unixport)orusage();

usage()if$help;

print" Starting Nginx-fcgi\n"if$verbose;

print" Running with $> UID"if$verbose;

print" Perl $]"if$verbose;

#   if ( $> == "0" ) {

#       print "\n\tERROR\tRunning as a root!\n";

#       print "\tSuggested not to do so !!!\n\n";

#       exit 1;

#   }

if( ! $logfile ) {

print"\n\tERROR\t log file must declared\n"

."\tuse $0 with option -l filename\n\n";

exit1;

}

print" Using log file $logfile\n"if$verbose;

"\n\n">> io($logfile);

addlog($logfile,"Starting Nginx-cfgi");

addlog($logfile,"Running with $> UID");

addlog($logfile,"Perl $]");

addlog($logfile,"Testing socket options");

if( ($unixsocket && $unixport) || (!($unixsocket) && !($unixport)) ) {

print"\n\tERROR\tOnly one option can be used!\n";

print"\tSuggested (beacuse of speed) is usage UNIX socket -S \n\n";

exit1;

}

if($unixsocket) {

print" Daemon listening at UNIX socket $unixsocket\n"if$versbose;

addlog($logfile,"Deamon listening at UNIX socket $unixsocket");

}else{

print" Daemon listening at TCP/IP socket *:$unixport\n"if$verbose;

#

addlog($logfile,"Daemon listening at TCP/IP socket *:$unixport");

}

if( -e $filepid ) {

print"\n\tERROR\t PID file $filepid already exists\n\n";

addlog($logfile,"Can not use PID file $filepid, already exists.");

exit1;

}

if( $unixsocket ) {

print" Creating UNIX socket\n"if$verbose;

$socket = FCGI::OpenSocket( $unixsocket,10);

if( !$socket) {

print" Couldn't create socket\n";

addlog($logfile,"Couldn't create socket");

exit1;

}

print" Using UNIX socket $unixsocket\n"if$verbose;

}else{

print" Creating TCP/IP socket\n"if$verbose;

$portnumber =":".$unixport;

$socket = FCGI::OpenSocket( $unixport,10);

if( !$socket ) {

print" Couldn't create socket\n";

addlog($logfile,"Couldn't create socket");

exit1;

}

print" Using port $unixport\n"if$verbose;

}

addlog($logfile,"Socket created");

if( ! $filepid ) {

print"\n\tERROR\t PID file must declared\n"

."\tuse $0 with option -pid filename\n\n";

exit1;

}

print" Using PID file $filepid\n"if$verbose;

addlog($logfile,"Using PID file $filepid");

my $pidnumber = $$;

$pidnumber > io($filepid);

print" PID number $$\n"if$verbose;

addlog($logfile,"PID number $pidnumber");

}

sub addzero {

my ($date) = shift;

if($date <10) {

return"0$date";

}

return$date;

}

sub logformat {

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);

}

sub addlog {

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);

}

sub printerror {

my $message = @_;

print"\n   Nginx FastCGI\tERROR\n"

."\t $message\n\n";

exit1;

}

sub usage {

print"\n   Nginx FastCGI \n"

."\n\tusage: $0 [-h] -S string -P int\n"

."\n\t-h\t\t: this (help) message"

."\n\t-S path\t\t: path for UNIX socket"

."\n\t-P port\t\t: port number"

."\n\t-p file\t\t: path for pid file"

."\n\t-l file\t\t: path for logfile"

."\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"; }; eval q{exit};

if($@) {

exit unless $@ =~ /^fakeexit/;

} ;

# fork part

my $pid = fork();

if( $pid ==0) {

&main;

exit0;

}

print" Forking worker process with PID $pid\n"if$verbose;

addlog($logfile,"Forking worker process with PID $pid");

print" Update PID file $filepid\n"if$verbose;

addlog($logfile,"Update PID file $filepid");

$pid > io($filepid);

print" Worker process running.\n"if$verbose;

addlog ($logfile,"Parent process $$ is exiting");

exit0;

sub main {

$request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );

if($request) { request_loop()};

FCGI::CloseSocket( $socket );

}

sub request_loop {

while( $request->Accept() >=0) {

# processing any STDIN input from WebServer (for CGI-POST actions)

$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--;

}

}

# running the cgi app

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}");

}

# http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens

#

open $cgi_app,'-|', $req_params{SCRIPT_FILENAME}, $stdin_passthroughorprint("Content-type: text/plain\r\n\r\n");print"Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n";# addlog($logfile, "Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !");

if($cgi_app) {

print;

close $cgi_app;

}

}else{

print("Content-type: text/plain\r\n\r\n");

print"Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.\n";

addlog($logfile,"Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.");

}

}

}

chmod +x /usr/local/nginx/sbin/nginx-fcgi

运行脚本:

/usr/local/nginx/sbin/nginx-fcgi -l /usr/local/nginx/logs/nginx-fcgi.log -pid /usr/local/nginx/logs/nginx-fcgi.pid -S /usr/local/nginx/logs/nginx-fcgi.sock

把sock授权777:

chmod 777 /usr/local/nginx/logs/nginx-fcgi.sock0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值