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

[经验分享] nginx配置支持nagios-fightering

[复制链接]

尚未签到

发表于 2018-11-11 08:37:13 | 显示全部楼层 |阅读模式
  配置前提:安装了nginx和php。并且php也安装了gd支持
  现在需要做的是让nagios在LNMP环境下也能运行
  1.首先须需要安装依赖包
  
1.1.安装perl
  Shell> yum install perl
1.2.安装perl fcgi模块
  Shell> wget http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-0.74.tar.gz
  Shell> perl Makefile.PL
  Shell> make && make install
1.3.安装FCGI-ProcManager:
  Shell> wget http://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/FCGI-ProcManager-0.2
  4.tar.gz
  Shell> perl Makefile.PL
  Shell> make && make install
1.4.安装perl-IO
  Shell> wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/IO-1.25.tar.gz
  Shell> perl Makefile.PL
  Shell> make && make install
1.5.安装perl-IO-ALL
  Shell> wget http://search.cpan.org/CPAN/authors/id/I/IN/INGY/IO-All-0.39.tar.gz
  Shell> perl Makefile.PL
  Warning: prerequisite IO::String 0 not found.
  Writing Makefile for IO::All
  解决:
  Shell> cpan IO::String
  Shell> perl Makefile.PL
  Writing Makefile for IO::All
  Shell> make && make install
  nagios中web界面为cgi程序,我们使用unixsocket来监听perl CGI请求并解析
2.运行perl脚本
  2.1 Perl脚本用来产生perl的fast-cgi接口,让nginx以CGI的形式来处理perl
  shell> cd /usr/local/nginx/sbin
  Shell> mkdir logs && chown www.www logs     --这里的www为nginx运行用户
  Shell> wget http://addcn.googlecode.com/svn/trunk/conf/nagios/nginx-fcgi.pl
  Shell> mv nginx-fcgi.pl perl-fcgi.pl
  Shell> chmod 755 perl-fcgi.pl
  Shell> cat perl-fcgi.pl
  ------------------------------------
  #!/usr/bin/perl
  #
  #   author      DanielDominik Rudnicki
  #   thanks to:  PiotrRomanczuk
  #   email       daniel@sardzent.org
  #   version     0.4.3
  #   webpage     http://www.nginx.eu/
  #
  #   BASED @ http://wiki.codemongers.com/NginxSimpleCGI
  #
  #
  useFCGI;
  useGetopt::Long;
  useIO::All;
  useSocket;
  subinit {
  GetOptions( "h" => \$help,
  "verbose!"=>\$verbose,
  "pid=s" => \$filepid,
  "l=s" => \$logfile,
  "S:s"   => \$unixsocket,
  "P:i"   => \$unixport) or usage();
  usage() if $help;
  print " StartingNginx-fcgi\n" if $verbose;
  print " Runningwith $> UID" if $verbose;
  print " Perl$]" if $verbose;
  if ( $> == "0" ) {
  print "\n\tERROR\tRunning as aroot!\n";
  print "\tSuggested not to do so!!!\n\n";
  exit 1;
  }
  if ( ! $logfile ) {
  print "\n\tERROR\t log file mustdeclared\n"
  . "\tuse $0 with option -lfilename\n\n";
  exit 1;
  }
  print " Usinglog file $logfile\n" if $verbose;
  "\n\n" >> io($logfile);
  addlog($logfile, "StartingNginx-cfgi");
  addlog($logfile, "Running with $>UID");
  addlog($logfile, "Perl $]");
  addlog($logfile, "Testing socketoptions");
  if ( ($unixsocket && $unixport) ||(!($unixsocket) && !($unixport)) ) {
  print "\n\tERROR\tOnly one optioncan be used!\n";
  print "\tSuggested (beacuse ofspeed) is usage UNIX socket -S \n\n";
  exit 1;
  }
  if ($unixsocket) {
  print " Daemon listening at UNIX socket $unixsocket\n" if $versbose;
  addlog($logfile, "Deamon listeningat UNIX socket $unixsocket");
  } else {
  print " Daemon listening at TCP/IP socket *:$unixport\n" if $verbose;
  #
  addlog($logfile, "Daemon listeningat TCP/IP socket *:$unixport");
  }
  if ( -e $filepid ) {
  print "\n\tERROR\t PID file$filepid already exists\n\n";
  addlog($logfile, "Can not use PIDfile $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'tcreate 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'tcreate socket");
  exit 1;
  }
  print " Using port$unixport\n" if $verbose;
  }
  addlog($logfile, "Socketcreated");
  if ( ! $filepid ) {
  print "\n\tERROR\t PID file mustdeclared\n"
  . "\tuse $0 with option -pidfilename\n\n";
  exit 1;
  }
  print " UsingPID 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");
  }
  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 "\n   Nginx FastCGI\tERROR\n"
  . "\t $message\n\n";
  exit 1;
  }
  subusage {
  print "\n   Nginx FastCGI \n"
  . "\n\tusage: $0 [-h] -S string -Pint\n"
  . "\n\t-h\t\t: this (help)message"
  . "\n\t-S path\t\t: path for UNIXsocket"
  . "\n\t-P port\t\t: portnumber"
  . "\n\t-p file\t\t: path for pidfile"
  . "\n\t-l file\t\t: path forlogfile"
  . "\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/;
  } ;
  # forkpart
  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");
  exit0;
  submain {
  $request = FCGI::Request( \*STDIN, \*STDOUT,\*STDERR, \%req_params, $socket );
  if ($request) { request_loop()};
  FCGI::CloseSocket( $socket );
  }
  subrequest_loop {
  while( $request->Accept() >= 0 ) {
  # processing any STDIN input fromWebServer (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_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 ;
  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 thisprocess.\n";
  addlog($logfile, "Error: Nosuch CGI app - $req_params{SCRIPT_FILENAME} may not exist or is not executableby this process.");
  }
  }
  }
  --------------------------------------------------------------------
2.2.建立一个CGI启动/停止脚本
  Shell>pwd
  /usr/local/nginx/sbin
  Shell> vim start_perl_cgi.sh
  -----------------------------------
  #!/bin/bash
  #set -x
  dir=/usr/local/nginx/sbin
  stop()
  {
  #pkill  -f $dir/perl-fcgi.pl
  kill $(cat $dir/logs/perl-fcgi.pid)
  rm $dir/logs/perl-fcgi.pid 2>/dev/null
  rm $dir/logs/perl-fcgi.sock 2>/dev/null
  echo "stop perl-fcgi done"
  }
  start()
  {
  rm $dir/now_start_perl_fcgi.sh 2>/dev/null
  chown www.www $dir/logs
  echo "$dir/perl-fcgi.pl -l $dir/logs/perl-fcgi.log -pid $dir/logs/perl-fcgi.pid-S $dir/logs/perl-fcgi.sock" >> $dir/now_start_perl_fcgi.sh
  chown www.www $dir/now_start_perl_fcgi.sh
  chmod u+x $dir/now_start_perl_fcgi.sh
  sudo -u www $dir/now_start_perl_fcgi.sh
  echo "start perl-fcgi done"
  }
  case $1 in
  stop)
  stop
  ;;
  start)
  start
  ;;
  restart)
  stop
  start
  ;;
  esac
  -----------------------------------------------------------------------
2.3.启动脚本
  Shell>chmod 755 /usr/local/nginx/sbin/start_perl_cgi.sh
  Shell>cd /usr/local/nginx/sbin
  Shell>./start_perl_cgi.sh start
  Shell> ls logs –lh   #检查文件是否存在
  perl-fcgi.log perl-fcgi.pid  perl-fcgi.sock
1.9.配置nginx作为web服务器
  Shell> vim /usr/local/nginx/conf/nginx.conf
  includevirtual/nagios.web.com.conf;       #web服务器
  shell> cd cd/usr/local/nginx/conf/virtual
  shell> cat nagios.web.com.conf
  -----------------------------------------------------------
  server{
  listen 9180;
  index index.php index.html index.htm;
  root /data/monitor/nagios/share;
  location ~ \.php$ {
  root    /data/monitor/nagios/share;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  include        fastcgi.conf;
  }
  location /nagios/ {
  alias /data/monitor/nagios/share/;
  index index.php index.htm index.html;
  }
  location ~ .*\.(cgi|pl)?$ {
  gzip off;
  root /data/monitor/nagios/sbin;
  rewrite ^/nagios/cgi-bin/(.*)\.cgi/$1.cgi break;
  fastcgi_pass unix:/usr/local/nginx/sbin/logs/perl-fcgi.sock;
  #fastcgi_pass 127.0.0.1:8999;
  fastcgi_param REMOTE_USER $remote_user;
  fastcgi_index index.cgi;
  fastcgi_read_timeout   60;
  fastcgi_param SCRIPT_FILENAME/data/monitor/nagios/sbin$fastcgi_script_name;
  fastcgi_param HTTP_ACCEPT_LANGUAGEzh-cn;
  include fastcgi_params;
  include fastcgi.conf;
  }
  }
  server{
  listen      80;
  server_name nagios.medees.com;
  charset utf-8;
  access_log logs/nagios.access.log  main;
  index index.php index.html;
  location / {
  proxy_pass http://127.0.0.1:9180;
  proxy_set_header HOST $host;
  proxy_set_header X-Real-IP$remote_addr;
  proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
  }
  location /server-status {
  stub_status on;
  access_log off;
  }
  }
  --------------------------------------------
1.11.  重启nginx服务器
  Shell>/etc/init.d/nginx configtest
  Shell>/etc/init.d/nginx restart
  Shell>/etc/init.d/nagios checkconfig
  Shell>/etc/init.d/nagios restart
  #浏览器访问nagios.medees.com,输入用户名,密码


运维网声明 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-633505-1-1.html 上篇帖子: Nginx root和alias应用 下篇帖子: ubuntu 上 nginx 源码安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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