[Ganglia監控擴展]監控nginx的連接數

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

          第一步,配置nginx,開啟nginx_status監控:
          在nginx.conf中添加如下配置:
          server {
              listen 12345;#監聽的端口
              server_name 127.0.0.1;#當前機器的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下看到結果:

          關于上面的結果的說明,請參考官方解釋:http://wiki.nginx.org/HttpStubStatusModule,這里講得很明白。

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

          第三步,配置監控前端頁面:
          如果只需要查看單臺機器的監控圖表,直接在這臺機器的節點里就可以看到,如下:


          如果需要看整個集群的監控畫面,則需要做一些配置,如下:
          在gmetad運行的機器上把下載到的graph.d下的文件復制到ganglia web頁面目錄下的graph.d目錄下面。

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

          第四步,定制自己的監控畫面:
          雖然插件提供了比較詳細的監控畫面,但我比較關注的是active、reading、writing和waiting這幾個數據,并且在一張圖形中顯示。所以需要自己定制一個畫圖程序,在graph.d文件夾下新建一個叫nginx_report.php的文件,輸入如下的內容(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數組里添加一個元素'nginx'(文件名的_report.php之前的部分),刷新監控頁面即可看到整個集群的nginx連接數信息。

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

          -->槍聲依舊<--

          posted on 2011-12-27 23:58 槍聲依舊 閱讀(3993) 評論(7)  編輯  收藏 所屬分類: 運維

          評論

          # re: [Ganglia監控擴展]監控nginx的連接數 2011-12-29 08:59 tb

          不錯 學習了   回復  更多評論   

          # re: [Ganglia監控擴展]監控nginx的連接數 2012-01-11 18:19 運維

          你好,博主,是否可以看下nginx_status.pyconf的配置!!多謝多謝!  回復  更多評論   

          # re: [Ganglia監控擴展]監控nginx的連接數 2012-01-11 22:24 槍聲依舊

          @運維,只需要把下載的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'
          }
          }
          }  回復  更多評論   

          # re: [Ganglia監控擴展]監控nginx的連接數 2012-01-11 22:29 槍聲依舊

          @運維
          如果沒有運行成功,可能是python版本的問題,應該需要把python的版本至少升到2.7吧, nginx_status.py里的一些語法低版本的python不支持。你可以把第一行調到debug模式,執行一下這個文件,看下錯誤信息,好運!  回復  更多評論   

          # re: [Ganglia監控擴展]監控nginx的連接數 2012-01-13 15:21 運維

          好的,我試下!多謝!!  回復  更多評論   

          # re: [Ganglia監控擴展]監控nginx的連接數[未登錄] 2012-04-06 18:13 leo

          你好,部署當中遇到點問題請教下,Python 己更新至2.7以上 ,單獨使用python 執行nginx_status.py 終端實時有數據更新,但網頁上的圖片顯示全是空白,沒有任何數據,是不是哪還有什么問題? @槍聲依舊  回復  更多評論   

          # re: [Ganglia監控擴展]監控nginx的連接數 2013-03-20 18:24 運維

          您好,
          請教一個問題。
          為啥我把這些代碼貼進去后在出圖的時候會報錯。
          ERROR: Could not parse color in ''
          請問為啥會報這個錯誤?  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 榆中县| 张家口市| 布尔津县| 上犹县| 敦化市| 浙江省| 鱼台县| 中超| 黎平县| 顺昌县| 汶上县| 彭阳县| 绥滨县| 潍坊市| 韶山市| 仁寿县| 舟曲县| 通辽市| 兴和县| 陵川县| 乌海市| 荃湾区| 乐亭县| 湟源县| 普宁市| 舒城县| 丰原市| 怀化市| 桓台县| 红桥区| 渝北区| 苏州市| 张掖市| 怀化市| 多伦县| 吴江市| 隆昌县| SHOW| 鹤岗市| 宜丰县| 仁寿县|