[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中添加如下配置:
第一步,配置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;
}
}
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下看到結果:
![[Ganglia監控擴展]監控nginx的連接數 [Ganglia監控擴展]監控nginx的連接數](https://simg.open-open.com/show/3cd9bbdb5919f8d2645ea52c33a84320.png)
關于上面的結果的說明,請參考官方解釋:http://wiki.nginx.org/HttpStubStatusModule,這里講得很明白。
![[Ganglia監控擴展]監控nginx的連接數 [Ganglia監控擴展]監控nginx的連接數](https://simg.open-open.com/show/3cd9bbdb5919f8d2645ea52c33a84320.png)
關于上面的結果的說明,請參考官方解釋:http://wiki.nginx.org/HttpStubStatusModule,這里講得很明白。
第二步,配置ganglia客戶端,收集nginx_status數據:
在/etc/ganglia目錄下新建conf.d和python_modules目錄,把下載的擴展文件分別復制到這兩個目錄下,修改配置文件 nginx_status.pyconf 里的nginx監控訪問路徑和nginx啟動文件的路徑; 接下來需要修改gmond.conf文件,添加如下兩段:
在/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 "
}
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監控數據。第三步,配置監控前端頁面:
如果只需要查看單臺機器的監控圖表,直接在這臺機器的節點里就可以看到,如下:
![[Ganglia監控擴展]監控nginx的連接數 [Ganglia監控擴展]監控nginx的連接數](https://simg.open-open.com/show/91a07c5475dd0457562dacadb476dfcf.png)
![[Ganglia監控擴展]監控nginx的連接數 [Ganglia監控擴展]監控nginx的連接數](https://simg.open-open.com/show/91a07c5475dd0457562dacadb476dfcf.png)

如果需要看整個集群的監控畫面,則需要做一些配置,如下:
在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_加上文件名):
在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連接數信息。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 ?>
![[Ganglia監控擴展]監控nginx的連接數 [Ganglia監控擴展]監控nginx的連接數](https://simg.open-open.com/show/45288f37ee30beb78fe16baaa46b2ceb.png)
如上,便完成了在ganglia中集成nginx監控的所有工作。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!