[Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù)

          Ganglia監(jiān)控支持多種腳本的功能擴(kuò)展,本文介紹使用python擴(kuò)展對(duì)nginx連接數(shù)進(jìn)行監(jiān)控,可以到網(wǎng)上下載監(jiān)控腳本:https://github.com/csakatoku/ganglia-pymodule_nginx_status這個(gè)監(jiān)控腳本主要是借助nginx自身的監(jiān)控模塊來實(shí)現(xiàn),nginx需要開啟--with-http_stub_status_module模塊,如果沒有開啟,需要重新編譯nginx(重新編譯后需要kill -QUIT才能生效)。

          第一步,配置nginx,開啟nginx_status監(jiān)控:
          在nginx.conf中添加如下配置:
          server {
              listen 12345;#監(jiān)聽的端口
              server_name 127.0.0.1;#當(dāng)前機(jī)器的ip或域名
              location /nginx_status {
                  stub_status on;
                  access_log off;
                  #allow xx.xx.xx.xx;#允許訪問的IP地址
                  #deny all;
                  allow all;
              }
          }
          重啟nginx,可以到http://127.0.0.1:12345/nginx_status下看到結(jié)果:

          關(guān)于上面的結(jié)果的說明,請(qǐng)參考官方解釋:http://wiki.nginx.org/HttpStubStatusModule,這里講得很明白。

          第二步,配置ganglia客戶端,收集nginx_status數(shù)據(jù):
          在/etc/ganglia目錄下新建conf.d和python_modules目錄,把下載的擴(kuò)展文件分別復(fù)制到這兩個(gè)目錄下,修改配置文件
          nginx_status.pyconf里的nginx監(jiān)控訪問路徑和nginx啟動(dòng)文件的路徑;接下來需要修改gmond.conf文件,添加如下兩段:
          在modules下添加python支持:
          module {
                name = "python_module"
                path = "modpython.so"#這里需要確定ganglia安裝目錄下的lib64里是否有這個(gè)文件
                params = "/etc/ganglia/python_modules"
            }
          在文件最后導(dǎo)入python配置:
          include ("/etc/ganglia/conf.d/*.pyconf")
          重啟gmond服務(wù):service gmond restart,這樣就開始收集這臺(tái)機(jī)器上的nginx監(jiān)控?cái)?shù)據(jù)。

          第三步,配置監(jiān)控前端頁面:
          如果只需要查看單臺(tái)機(jī)器的監(jiān)控圖表,直接在這臺(tái)機(jī)器的節(jié)點(diǎn)里就可以看到,如下:


          如果需要看整個(gè)集群的監(jiān)控畫面,則需要做一些配置,如下:
          在gmetad運(yùn)行的機(jī)器上把下載到的graph.d下的文件復(fù)制到ganglia web頁面目錄下的graph.d目錄下面。

          然后修改conf.php,找到$optional_graphs,去掉注釋,修改為 $optional_graphs = array('nginx_accepts_ratio','nginx_scoreboard'),保存,刷新監(jiān)控頁面即可看到監(jiān)控圖(這個(gè)就不帖圖了)。

          第四步,定制自己的監(jiān)控畫面:
          雖然插件提供了比較詳細(xì)的監(jiān)控畫面,但我比較關(guān)注的是active、reading、writing和waiting這幾個(gè)數(shù)據(jù),并且在一張圖形中顯示。所以需要自己定制一個(gè)畫圖程序,在graph.d文件夾下新建一個(gè)叫nginx_report.php的文件,輸入如下的內(nèi)容(function的名稱必須是graph_加上文件名):
            1 <?php
            2 
            3 function graph_nginx_report ( &$rrdtool_graph ) {
            4 
            5    global  $context,  
            6            $cpu_system_color
            7            $mem_swapped_color,
            8            $mem_shared_color,
            9            $mem_cached_color,
           10            $mem_buffered_color,
           11            $mem_used_color,
           12            $hostname,
           13            $range,
           14            $rrd_dir,
           15            $size,
           16        $strip_domainname,
           17        $graphreport_stats;
           18 
           19     if ($strip_domainname) {
           20         $hostname = strip_domainname($hostname);
           21     }
           22     
           23     $rrdtool_graph['height'] += ($size == 'medium') ? 28 : 0;
           24     if ( $graphreport_stats ) {
           25         $rrdtool_graph['height'] += ($size == 'medium') ? 52 : 0;
           26         $rmspace = '\\g';
           27     } else {
           28         $rmspace = '';
           29     }
           30     
           31     $title = 'Nginx';
           32     if ($context != 'host') {
           33        $rrdtool_graph['title'] = $title;
           34     } else {
           35        $rrdtool_graph['title'] = "$hostname $title last $range";
           36     }
           37 
           38     $rrdtool_graph['lower-limit']    = '0';
           39     $rrdtool_graph['vertical-label'] = 'num/sec';
           40     $rrdtool_graph['extras'] = '--base 1024';
           41     $rrdtool_graph['extras'] .= ($graphreport_stats == true) ? ' --font LEGEND:7' : '';
           42 
           43     if ($size == 'small') {
           44         $eol1 = '\\l';
           45         $space1 = ' ';
           46         $space2 = '      ';
           47     } else if ($size == 'medium' || $size == 'default') {
           48         $eol1 = '';
           49         $space1 = ' ';
           50         $space2 = '';
           51     } else if ($size == 'large') {
           52         $eol1 = '';
           53         $space1 = '                ';
           54         $space2 = '                ';
           55     }
           56 
           57     $series = "DEF:'nginx_reading'='${rrd_dir}/nginx_reading.rrd':'sum':AVERAGE "
           58             . "DEF:'nginx_writing'='${rrd_dir}/nginx_writing.rrd':'sum':AVERAGE "
           59             . "DEF:'nginx_waiting'='${rrd_dir}/nginx_waiting.rrd':'sum':AVERAGE "
           60             . "DEF:'nginx_active'='${rrd_dir}/nginx_active_connections.rrd':'sum':AVERAGE "
           61             . "LINE2:'nginx_reading'#$mem_cached_color:'Reading${rmspace}' ";
           62 
           63     if ( $graphreport_stats ) {
           64         $series .= "CDEF:nginxreading_pos=nginx_reading,0,INF,LIMIT "
           65                 . "VDEF:nginxreading_last=nginxreading_pos,LAST "
           66                 . "VDEF:nginxreading_min=nginxreading_pos,MINIMUM "
           67                 . "VDEF:nginxreading_avg=nginxreading_pos,AVERAGE "
           68                 . "VDEF:nginxreading_max=nginxreading_pos,MAXIMUM "
           69                 . "GPRINT:'nginxreading_last':' ${space1}Now\:%6.1lf%s' "
           70                 . "GPRINT:'nginxreading_min':'${space1}Min\:%6.1lf%s${eol1}' "
           71                 . "GPRINT:'nginxreading_avg':'${space2}Avg\:%6.1lf%s' "
           72                 . "GPRINT:'nginxreading_max':'${space1}Max\:%6.1lf%s\\l' ";
           73     }
           74 
           75     $series .= "LINE2:'nginx_writing'#$mem_used_color:'Writing${rmspace}' ";
           76 
           77     if ( $graphreport_stats ) {
           78         $series .= "CDEF:nginxwriting_pos=nginx_writing,0,INF,LIMIT "
           79                 . "VDEF:nginxwriting_last=nginxwriting_pos,LAST "
           80                 . "VDEF:nginxwriting_min=nginxwriting_pos,MINIMUM "
           81                 . "VDEF:nginxwriting_avg=nginxwriting_pos,AVERAGE "
           82                 . "VDEF:nginxwriting_max=nginxwriting_pos,MAXIMUM "
           83                 . "GPRINT:'nginxwriting_last':'${space1}Now\:%6.1lf%s' "
           84                 . "GPRINT:'nginxwriting_min':'${space1}Min\:%6.1lf%s${eol1}' "
           85                 . "GPRINT:'nginxwriting_avg':'${space2}Avg\:%6.1lf%s' "
           86                 . "GPRINT:'nginxwriting_max':'${space1}Max\:%6.1lf%s\\l' ";
           87     }
           88 
           89     $series .= "LINE2:'nginx_waiting'#$mem_swapped_color:'Waiting${rmspace}' ";
           90     
           91     if ( $graphreport_stats ) {
           92         $series .= "CDEF:nginxwaiting_pos=nginx_waiting,0,INF,LIMIT "
           93                 . "VDEF:nginxwaiting_last=nginxwaiting_pos,LAST "
           94                 . "VDEF:nginxwaiting_min=nginxwaiting_pos,MINIMUM "
           95                 . "VDEF:nginxwaiting_avg=nginxwaiting_pos,AVERAGE "
           96                 . "VDEF:nginxwaiting_max=nginxwaiting_pos,MAXIMUM "
           97                 . "GPRINT:'nginxwaiting_last':'${space1}Now\:%6.1lf%s' "
           98                 . "GPRINT:'nginxwaiting_min':'${space1}Min\:%6.1lf%s${eol1}' "
           99                 . "GPRINT:'nginxwaiting_avg':'${space2}Avg\:%6.1lf%s' "
          100                 . "GPRINT:'nginxwaiting_max':'${space1}Max\:%6.1lf%s\\l' ";
          101     }
          102 
          103 
          104 
          105     $series .= "LINE2:'nginx_active'#$cpu_system_color:'Active${rmspace}' ";
          106     
          107     if ( $graphreport_stats ) {
          108         $series .= "CDEF:nginxactive_pos=nginx_active,0,INF,LIMIT "
          109                 . "VDEF:nginxactive_last=nginxactive_pos,LAST "
          110                 . "VDEF:nginxactive_min=nginxactive_pos,MINIMUM "
          111                 . "VDEF:nginxactive_avg=nginxactive_pos,AVERAGE "
          112                 . "VDEF:nginxactive_max=nginxactive_pos,MAXIMUM "
          113                 . "GPRINT:'nginxactive_last':'${space1}Now\:%6.1lf%s' "
          114                 . "GPRINT:'nginxactive_min':'${space1}Min\:%6.1lf%s${eol1}' "
          115                 . "GPRINT:'nginxactive_avg':'${space2}Avg\:%6.1lf%s' "
          116                 . "GPRINT:'nginxactive_max':'${space1}Max\:%6.1lf%s\\l' ";
          117     }
          118 
          119 
          120    $rrdtool_graph['series'] = $series
          121 
          122     return $rrdtool_graph;
          123 }
          124 ?>
          完成后保存文件,在conf.php中$optional_graphs數(shù)組里添加一個(gè)元素'nginx'(文件名的_report.php之前的部分),刷新監(jiān)控頁面即可看到整個(gè)集群的nginx連接數(shù)信息。

          如上,便完成了在ganglia中集成nginx監(jiān)控的所有工作。

          -->槍聲依舊<--

          posted on 2011-12-27 23:58 槍聲依舊 閱讀(4000) 評(píng)論(7)  編輯  收藏 所屬分類: 運(yùn)維

          評(píng)論

          # re: [Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù) 2011-12-29 08:59 tb

          不錯(cuò) 學(xué)習(xí)了   回復(fù)  更多評(píng)論   

          # re: [Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù) 2012-01-11 18:19 運(yùn)維

          你好,博主,是否可以看下nginx_status.pyconf的配置!!多謝多謝!  回復(fù)  更多評(píng)論   

          # re: [Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù) 2012-01-11 22:24 槍聲依舊

          @運(yùn)維,只需要把下載的nginx_status.pyconf文件最前面這段修改一下就行:
          modules {
          module {
          name = 'nginx_status'
          language = 'python'

          param status_url {
          value = 'http://127.0.0.1:12345/nginx_status'
          }
          param nginx_bin {
          value = '/usr/local/nginx/sbin/nginx'
          }
          param refresh_rate {
          value = '15'
          }
          }
          }  回復(fù)  更多評(píng)論   

          # re: [Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù) 2012-01-11 22:29 槍聲依舊

          @運(yùn)維
          如果沒有運(yùn)行成功,可能是python版本的問題,應(yīng)該需要把python的版本至少升到2.7吧, nginx_status.py里的一些語法低版本的python不支持。你可以把第一行調(diào)到debug模式,執(zhí)行一下這個(gè)文件,看下錯(cuò)誤信息,好運(yùn)!  回復(fù)  更多評(píng)論   

          # re: [Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù) 2012-01-13 15:21 運(yùn)維

          好的,我試下!多謝!!  回復(fù)  更多評(píng)論   

          # re: [Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù)[未登錄] 2012-04-06 18:13 leo

          你好,部署當(dāng)中遇到點(diǎn)問題請(qǐng)教下,Python 己更新至2.7以上 ,單獨(dú)使用python 執(zhí)行nginx_status.py 終端實(shí)時(shí)有數(shù)據(jù)更新,但網(wǎng)頁上的圖片顯示全是空白,沒有任何數(shù)據(jù),是不是哪還有什么問題? @槍聲依舊  回復(fù)  更多評(píng)論   

          # re: [Ganglia監(jiān)控?cái)U(kuò)展]監(jiān)控nginx的連接數(shù) 2013-03-20 18:24 運(yùn)維

          您好,
          請(qǐng)教一個(gè)問題。
          為啥我把這些代碼貼進(jìn)去后在出圖的時(shí)候會(huì)報(bào)錯(cuò)。
          ERROR: Could not parse color in ''
          請(qǐng)問為啥會(huì)報(bào)這個(gè)錯(cuò)誤?  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 济宁市| 江陵县| 扬中市| 来宾市| 东山县| 介休市| 泉州市| 册亨县| 庆元县| 胶南市| 长沙县| 平定县| 建德市| 莱阳市| 尤溪县| 思茅市| 阜平县| 麦盖提县| 特克斯县| 忻州市| 甘肃省| 东平县| 金坛市| 河间市| 汉阴县| 江西省| 洛浦县| 随州市| 长治县| 枝江市| 深泽县| 安乡县| 景宁| 临海市| 张北县| 宜丰县| 东方市| 化隆| 商都县| 平邑县| 兰考县|