设为首页 收藏本站
查看: 582|回复: 0

[经验分享] Nginx平台安装Nagios监控服务(0608更新)

[复制链接]

尚未签到

发表于 2018-11-9 06:34:10 | 显示全部楼层 |阅读模式
  安装环境:centos5.5
  Nginx平台安装
  1、下载相关软件
  

  FCGI-0.67.tar.gz
  
FCGI-ProcManager-0.18.tar.gz
  
IO-All-0.39.tar.gz
  
nagios-3.2.3.tar.gz
  
nagios-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/local/gd/lib --with-gd-inc=/usr/local/gd/include (0608更新)
  
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启动
  

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) 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 &quot;0$date&quot;;
  •     }
  •        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 = &quot;$year-$mon-$mday $hour:$min&quot;;
  •     return($datestring);
  • }

  • sub addlog {
  •     my ($log_file, $log_message) = @_;
  •     my $curr_time = logformat();
  •     my $write_message = &quot;[$curr_time]   $log_message&quot;;
  •     $write_message >> io($log_file);
  •     &quot;\n&quot; >> io($log_file);
  • }

  • sub printerror {
  •     my $message = @_;
  •     print &quot;\n   Nginx FastCGI\tERROR\n&quot;
  •         . &quot;\t $message\n\n&quot;;
  •     exit 1;
  • }

  • sub usage {
  •     print &quot;\n   Nginx FastCGI \n&quot;
  •         . &quot;\n\tusage: $0 [-h] -S string -P int\n&quot;
  •         . &quot;\n\t-h\t\t: this (help) message&quot;
  •         . &quot;\n\t-S path\t\t: path for UNIX socket&quot;
  •         . &quot;\n\t-P port\t\t: port number&quot;
  •         . &quot;\n\t-p file\t\t: path for pid file&quot;
  •         . &quot;\n\t-l file\t\t: path for logfile&quot;
  •         . &quot;\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&quot;;
  •     exit 1;
  • }


  • init;
  • #
  • END() { } BEGIN() { }
  • *CORE::GLOBAL::exit = sub { die &quot;fakeexit\nrc=&quot;.shift().&quot;\n&quot;; }; eval q{exit};
  • if ($@) {
  •     exit unless $@ =~ /^fakeexit/;
  • } ;

  • # fork part
  • my $pid = fork();

  • if( $pid == 0 ) {
  •     &main;
  •     exit 0;
  • }

  • print &quot; Forking worker process with PID $pid\n&quot; if $verbose;
  • addlog($logfile, &quot;Forking worker process with PID $pid&quot;);
  • print &quot; Update PID file $filepid\n&quot; if $verbose;
  • addlog($logfile, &quot;Update PID file $filepid&quot;);
  • $pid > io($filepid);
  • print &quot; Worker process running.\n&quot; if $verbose;
  • addlog ($logfile, &quot;Parent process $$ is exiting&quot;);
  • 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, &quot;running $req_params{SCRIPT_FILENAME}&quot;);
  •             }
  •             # http://perldoc.perl.org/perlipc.html#Safe-Pipe-Opens
  •             #
  •             open $cgi_app, '-|', $req_params{SCRIPT_FILENAME}, $stdin_passthrough or print(&quot;Content-type: text/plain\r\n\r\n&quot;); print &quot;Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !\n&quot;; # addlog($logfile, &quot;Error: CGI app returned no output - Executing $req_params{SCRIPT_FILENAME} failed !&quot;);

  •             if ($cgi_app) {
  •                 print ;
  •                 close $cgi_app;
  •             }
  •         } else {
  •             print(&quot;Content-type: text/plain\r\n\r\n&quot;);
  •             print &quot;Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.\n&quot;;
  •             addlog($logfile, &quot;Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executable by this process.&quot;);
  •         }
  •     }
  • }
  

  

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.sock  7、配置登陆帐号及密码
  注意:如果这里生成的用户不是nagiosadmin的话,需要在/usr/local/nagios/etc/cgi.cfg
  
配置文件里添加上你的帐号,否则你新建的lihp帐号会没有权限操作nagios
  

/usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/htpasswd lihp  如果没有apache,可以在网上在线生成一个htpasswd
  8、Nginx创建虚拟主机
  以下是我的虚拟主机配置
  


  • server
  • {
  • listen 80;
  • server_name www.nagios.com;
  • root /usr/local/nagios/share;
  • index index.php;
  • auth_basic &quot;lihp&quot;;
  • auth_basic_user_file /usr/local/nginx/conf/htpasswd;


  • #access_log /usr/local/nginx/logs/nagios.log nagios;
  • 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)?$
  • {
  • #fastcgi_pass unix:/tmp/php-cgi.sock;
  • fastcgi_pass 127.0.0.1:9000;
  • fastcgi_index index.php;
  • include fcgi.conf;
  • }
  • }
  

  最后重读配置:
  

/usr/local/nginx/sbin/nginx -s>然后绑定HOSTS,打开浏览器www.nagios.com  9、图片不正常的修正方法:
  

mkdir -p /usr/local/nagios/share/nagios  
ln -s /usr/local/nagios/share/images /usr/local/nagios/share/nagios/images
  
ln -s /usr/local/nagios/share/stylesheets /usr/local/nagios/share/nagios/stylesheets
  10、加载GD动态库(0608更新)
  

vi /etc/ld.so.conf
include ld.so.conf.d/*.conf  
/usr/local/gd/lib     #加入GD动态库路径
  然后手动运行一下:
  

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



运维网声明 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.iyunv.com/thread-632515-1-1.html 上篇帖子: Nginx集成Naxsi模块 下篇帖子: Resin+Nginx动静分离和负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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