设为首页 收藏本站
查看: 4461|回复: 3

Centos6.4 Nginx环境下安装配置nagios

[复制链接]

尚未签到

发表于 2013-12-30 17:59:38 | 显示全部楼层 |阅读模式
1.环境:
centos 6.4 X64
nginx 1.4.8
php 5.3.17
php和nginx提前安装这里不再详细介绍,如果比较懒可以下载lnmp一键安装包来安装。
所需软件安装包:
nagios 4.0.2 金山快盘附件nagios-4.0.2.tar.gz(1.62MB)
nagios-plugins1.5 金山快盘附件nagios-plugins-1.5.tar.gz(2.32MB)

FCGI-0.74.tar.gz 金山快盘附件FCGI-0.74.tar.gz(95.31KB)
FCGI-ProcManager-0.24.tar.gz 金山快盘附件FCGI-ProcManager-0.24.tar.gz(21.06KB)
IO-All-0.50.tar.gz 金山快盘附件IO-All-0.50.tar.gz(82.08KB)
所有软件包都已上传到附件可下载。
2.建立用户:
[iyunv@apabicentos2 ~]# useradd nagios -s /sbin/nologin
3.安装nagios
[iyunv@apabicentos2 ~]# tar zxvf nagios-4.0.2.tar.gz
[iyunv@apabicentos2 ~]# cd nagios-4.0.2
[iyunv@apabicentos2 nagios-4.0.2]# ./configure --prefix=/usr/local/nagios

make all
make install
make install-init
make install-config
make install-commandmode

注:
(1)make install 安装主要的程序、CGI及HTML文件
(2)make install-commandmode 给外部命令访问nagios配置文件权限
(3)make install-config 把配置文件的例子复制到nagios的安装目录

4.安装nagios插件:
[iyunv@apabicentos2 ~]# tar zxvf nagios-plugins-1.5.tar.gz
[iyunv@apabicentos2 ~]# cd nagios-plugins-1.5
[iyunv@apabicentos2 nagios-plugins-1.5]# ./configure --prefix=/usr/local/nagios
[iyunv@apabicentos2 nagios-plugins-1.5]# make && make install
5.配置nagios开机启动
[iyunv@apabicentos2 ~]# chkconfig nagios on
[iyunv@apabicentos2 ~]# chkconfig --list nagios
nagios                 0:off        1:off        2:on        3:on        4:on        5:on        6:off

6.安装Perl fcgi模块,让Nginx支持CGI
tar -zxf FCGI-0.74.tar.gz
cd FCGI-0.74
perl Makefile.PL
make && make install

tar -zxf FCGI-ProcManager-0.24.tar.gz
cd FCGI-ProcManager-0.24
perl Makefile.PL
make && make install

tar zxf IO-All-0.50.tar.gz
cd IO-All-0.50
perl Makefile.PL
make && make install

7.建立nginx-fcgi脚本:
vim /usr/local/nginx/sbin/nginx-fcgi

[Shell] 纯文本查看 复制代码
#!/usr/bin/perl  
#  
#   author      Daniel Dominik Rudnicki  
#   thanks to:  Piotr Romanczuk  
#   email       [url=mailto:daniel@sardzent.org]daniel@sardzent.org[/url]  
#   version     0.4.3  
#   webpage     [url=http://www.nginx.eu/]http://www.nginx.eu/[/url]  
#  
#   BASED @ [url=http://wiki.codemongers.com/NginxSimpleCGI]http://wiki.codemongers.com/NginxSimpleCGI[/url]  
#  
#  
# 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) or usage();  
        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";  
        exit 1;  
    }  
    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";  
        exit 1;  
    }  
 
    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.");  
        exit 1;  
    }  
 
    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");  
            exit 1;  
        }  
        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");  
            exit 1;  
        }  
        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";  
        exit 1;  
    }  
    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";  
    exit 1;  
}  
 
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";  
    exit 1;  
}  
 
 
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;  
    exit 0;  
}  
 
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");  
exit 0;  
 
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}");  
            }  
            # [url=http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens]http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens[/url]  
            #  
            open $cgi_app, '-|', $req_params{SCRIPT_FILENAME}, $stdin_passthrough or print("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 <$cgi_app>;   
                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.");  
        }  
    }  
} 


8.授予脚本可执行权限:
[iyunv@apabicentos2 IO-All-0.50]# cd /usr/local/nginx/sbin/
[iyunv@apabicentos2 sbin]# ls
nginx  nginx-fcgi  nginx.old
[iyunv@apabicentos2 sbin]# chmod a+x 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
查看是否启动:
[iyunv@apabicentos2 sbin]# ps -aux |grep fcgi
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      6710  0.0  0.2 136404  4540 pts/2    S    17:42   0:00 /usr/bin/perl /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
root      6712  0.0  0.0 103172   848 pts/2    S+   17:42   0:00 grep fcgi

已经正常启动。
授予nginx-fcgi.sock 777权限。
[iyunv@apabicentos2 sbin]# chmod -R 777 /usr/local/nginx/logs/nginx-fcgi.sock
9.设置登录密码保证安全:
[iyunv@apabicentos2 sbin]# htpasswd -c /usr/local/nginx/conf/htpasswd nagios
New password:
Re-type new password:
Adding password for user nagios

10.在nginx里面设置一个虚拟主机:

[Shell] 纯文本查看 复制代码
server
        {
                listen       80;
                server_name nagios.a.com;
                index index.html index.htm index.php default.html default.htm default.php;
                root /usr/local/nagios/share;                auth_basic "nagios";                  auth_basic_user_file /usr/local/nginx/conf/htpasswd; 
location ~ \.cgi$ {
root /usr/local/nagios/sbin;  
rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;  
fastcgi_index index.cgi;  
fastcgi_pass unix:/usr/local/nginx/logs/nginx-fcgi.sock;  
fastcgi_param SCRIPT_FILENAME /usr/local/nagios/sbin$fastcgi_script_name;  
fastcgi_param QUERY_STRING $query_string;  
fastcgi_param REMOTE_ADDR $remote_addr;  
fastcgi_param REMOTE_PORT $remote_port;  
fastcgi_param REQUEST_METHOD $request_method;  
fastcgi_param REQUEST_URI $request_uri;  
fastcgi_param REMOTE_USER $remote_user;  
#fastcgi_param SCRIPT_NAME $fastcgi_script_name;  
fastcgi_param SERVER_ADDR $server_addr;  
fastcgi_param SERVER_NAME $server_name;  
fastcgi_param SERVER_PORT $server_port;  
fastcgi_param SERVER_PROTOCOL $server_protocol;  
fastcgi_param SERVER_SOFTWARE nginx;  
fastcgi_param CONTENT_LENGTH $content_length;  
fastcgi_param CONTENT_TYPE $content_type;  
fastcgi_param GATEWAY_INTERFACE CGI/1.1;  
fastcgi_param HTTP_ACCEPT_ENCODING gzip,deflate;  
fastcgi_param HTTP_ACCEPT_LANGUAGE zh-cn;  
} 
                
                location ~ .*\.(php|php5)?$
                        {
                                try_files $uri =404;
                                fastcgi_pass  unix:/tmp/php-cgi.sock;
                                fastcgi_index index.php;
                                include fcgi.conf;
                        }

                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                        {
                                expires      30d;
                        }

                location ~ .*\.(js|css)?$
                        {
                                expires      12h;
                        }

                access_log  /home/wwwlogs/nagios.a.com.log  nagios.a.com;
        }


重新加载配置文件:
[iyunv@apabicentos2 vhost]# /usr/local/nginx/sbin/nginx -s reload
11.如果图片加载不正常加个链接就好了:
[iyunv@apabicentos2 vhost]# mkdir -p /usr/local/nagios/share/nagios
[iyunv@apabicentos2 vhost]# ln -s /usr/local/nagios/share/images /usr/local/nagios/share/nagios/images
[iyunv@apabicentos2 vhost]# ln -s /usr/local/nagios/share/stylesheets /usr/local/nagios/share/nagios/stylesheets

12.配置可加载GD动态库:
vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/gd/lib     #加入GD动态库路径
然后手动运行一下:
ldconfig
解决了map和trends错误的问题!

QQ截图20131230175955.png



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-12723-1-1.html 上篇帖子: Linux下Nagios的安装与配置详解 下篇帖子: Nagios 安装配置

尚未签到

发表于 2013-12-30 21:25:11 | 显示全部楼层
也许放弃才能靠近你不再见你你才会把我想起

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-30 21:56:42 | 显示全部楼层
青春仿佛因我爱你而开始,却令我看破爱这个字。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-30 22:06:45 | 显示全部楼层
最初的那些誓言,却抵不过时间的摧残。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表