zabbix 2.4.5 自定义key监控nginx
一、环境
ubuntu 14.04 LTS
zabbix 2.4.5
nginx/1.4.6
二、配置
1、确定Nginx HttpStubStatusModule模块已经安装,可以通过nginx -V来查看
nginx -V nginx version: nginx/1.4.6 (Ubuntu) built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1) TLS SNI support enabled configure arguments: --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module
2、配置nginx文件
cd /etc/nginx/conf.d sudo vim zabbix-monitor-nginx.conf #Add the following into Nginx configuration: server { listen 10061; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } } # reload nginx
sudo nginx -t && sudo nginx -s reload
3、测试nginx配置是否成功`curl http://127.0.0.1:10061/nginx_status` 获取数据
curl http://127.0.0.1:10061/nginx_status Active connections: 1 server accepts handled requests 167 167 167 Reading: 0 Writing: 1 Waiting: 0
4、编写nginx status检测脚本
cd /etc/zabbix sudo mkdir scripts sudo vim scripts/nginx-check.sh #Add the following bash codes #!/bin/bash ################################## # Zabbix monitoring script # # nginx: # - anything available via nginx stub-status module # ################################## # Contact: # vincent.viallet@gmail.com ################################## # ChangeLog: # 20100922 VV initial creation ################################## # Zabbix requested parameter ZBX_REQ_DATA="$1" ZBX_REQ_DATA_URL="$2" # Nginx defaults NGINX_STATUS_DEFAULT_URL="http://localhost:80/nginx_status" WGET_BIN="/usr/bin/wget" # # Error handling: # - need to be displayable in Zabbix (avoid NOT_SUPPORTED) # - items need to be of type "float" (allow negative + float) # ERROR_NO_ACCESS_FILE="-0.9900" ERROR_NO_ACCESS="-0.9901" ERROR_WRONG_PARAM="-0.9902" ERROR_DATA="-0.9903" # either can not connect / bad host / bad port # Handle host and port if non-default if [ ! -z "$ZBX_REQ_DATA_URL" ]; then URL="$ZBX_REQ_DATA_URL" else URL="$NGINX_STATUS_DEFAULT_URL" fi # save the nginx stats in a variable for future parsing NGINX_STATS=$($WGET_BIN -q $URL -O - 2> /dev/null) # error during retrieve if [ $? -ne 0 -o -z "$NGINX_STATS" ]; then echo $ERROR_DATA exit 1 fi # # Extract data from nginx stats # case $ZBX_REQ_DATA in active_connections) echo "$NGINX_STATS" | head -1 | cut -f3 -d' ';; accepted_connections) echo "$NGINX_STATS" | grep -Ev '[a-zA-Z]' | cut -f2 -d' ';; handled_connections) echo "$NGINX_STATS" | grep -Ev '[a-zA-Z]' | cut -f3 -d' ';; handled_requests) echo "$NGINX_STATS" | grep -Ev '[a-zA-Z]' | cut -f4 -d' ';; reading) echo "$NGINX_STATS" | tail -1 | cut -f2 -d' ';; writing) echo "$NGINX_STATS" | tail -1 | cut -f4 -d' ';; waiting) echo "$NGINX_STATS" | tail -1 | cut -f6 -d' ';; *) echo $ERROR_WRONG_PARAM; exit 1;; esac exit 0
sudo chown -R zabbix:zabbix ./scripts/
sudo chmod +x nginx-check.sh
5、修改zabbix_agent.conf
sudo vi /etc/zabbix/zabbix_agent.conf
###Change the value of UnsafeUserParameters=1 ### Add User Parameters UserParameter=nginx[*],/etc/zabbix/scripts/nginx-check.sh "$1" "$2"
sudo service zabbix-agent restart
6、导入Template nginx
Import nginx-template.xml, and link it to a host. Set the host macro {$NGINX_STATUS_URL} if needed.
nginx模板
1 <?xml version="1.0" encoding="UTF-8"?> 2 <zabbix_export> 3 <version>2.0</version> 4 <date>2015-06-19T15:17:58Z</date> 5 <groups> 6 <group> 7 <name>Templates</name> 8 </group> 9 </groups> 10 <templates> 11 <template> 12 <template>Template_Nginx</template> 13 <name>Template_Nginx</name> 14 <groups> 15 <group> 16 <name>Templates</name> 17 </group> 18 </groups> 19 <applications> 20 <application> 21 <name>Nginx</name> 22 </application> 23 </applications> 24 <items> 25 <item> 26 <name>Nginx $1</name> 27 <type>0</type> 28 <snmp_community/> 29 <multiplier>0</multiplier> 30 <snmp_oid/> 31 <key>nginx[waiting,{$NGINX_STATUS_URL}]</key> 32 <delay>60</delay> 33 <history>30</history> 34 <trends>365</trends> 35 <status>0</status> 36 <value_type>0</value_type> 37 <allowed_hosts/> 38 <units/> 39 <delta>0</delta> 40 <snmpv3_securityname/> 41 <snmpv3_securitylevel>0</snmpv3_securitylevel> 42 <snmpv3_authpassphrase/> 43 <snmpv3_privpassphrase/> 44 <formula>1</formula> 45 <delay_flex/> 46 <params/> 47 <ipmi_sensor/> 48 <data_type>0</data_type> 49 <authtype>0</authtype> 50 <username/> 51 <password/> 52 <publickey/> 53 <privatekey/> 54 <port/> 55 <description/> 56 <inventory_link>0</inventory_link> 57 <applications> 58 <application> 59 <name>Nginx</name> 60 </application> 61 </applications> 62 <valuemap/> 63 </item> 64 <item> 65 <name>Nginx $1</name> 66 <type>0</type> 67 <snmp_community/> 68 <multiplier>0</multiplier> 69 <snmp_oid/> 70 <key>nginx[writing,{$NGINX_STATUS_URL}]</key> 71 <delay>60</delay> 72 <history>30</history> 73 <trends>365</trends> 74 <status>0</status> 75 <value_type>0</value_type> 76 <allowed_hosts/> 77 <units/> 78 <delta>0</delta> 79 <snmpv3_securityname/> 80 <snmpv3_securitylevel>0</snmpv3_securitylevel> 81 <snmpv3_authpassphrase/> 82 <snmpv3_privpassphrase/> 83 <formula>1</formula> 84 <delay_flex/> 85 <params/> 86 <ipmi_sensor/> 87 <data_type>0</data_type> 88 <authtype>0</authtype> 89 <username/> 90 <password/> 91 <publickey/> 92 <privatekey/> 93 <port/> 94 <description/> 95 <inventory_link>0</inventory_link> 96 <applications> 97 <application> 98 <name>Nginx</name> 99 </application> 100 </applications> 101 <valuemap/> 102 </item> 103 <item> 104 <name>Nginx $1</name> 105 <type>0</type> 106 <snmp_community/> 107 <multiplier>0</multiplier> 108 <snmp_oid/> 109 <key>nginx[active_connections,{$NGINX_STATUS_URL}]</key> 110 <delay>60</delay> 111 <history>30</history> 112 <trends>365</trends> 113 <status>0</status> 114 <value_type>0</value_type> 115 <allowed_hosts/> 116 <units/> 117 <delta>0</delta> 118 <snmpv3_securityname/> 119 <snmpv3_securitylevel>0</snmpv3_securitylevel> 120 <snmpv3_authpassphrase/> 121 <snmpv3_privpassphrase/> 122 <formula>1</formula> 123 <delay_flex/> 124 <params/> 125 <ipmi_sensor/> 126 <data_type>0</data_type> 127 <authtype>0</authtype> 128 <username/> 129 <password/> 130 <publickey/> 131 <privatekey/> 132 <port/> 133 <description/> 134 <inventory_link>0</inventory_link> 135 <applications> 136 <application> 137 <name>Nginx</name> 138 </application> 139 </applications> 140 <valuemap/> 141 </item> 142 <item> 143 <name>Nginx $1</name> 144 <type>0</type> 145 <snmp_community/> 146 <multiplier>0</multiplier> 147 <snmp_oid/> 148 <key>nginx[reading,{$NGINX_STATUS_URL}]</key> 149 <delay>60</delay> 150 <history>30</history> 151 <trends>365</trends> 152 <status>0</status> 153 <value_type>0</value_type> 154 <allowed_hosts/> 155 <units/> 156 <delta>0</delta> 157 <snmpv3_securityname/> 158 <snmpv3_securitylevel>0</snmpv3_securitylevel> 159 <snmpv3_authpassphrase/> 160 <snmpv3_privpassphrase/> 161 <formula>1</formula> 162 <delay_flex/> 163 <params/> 164 <ipmi_sensor/> 165 <data_type>0</data_type> 166 <authtype>0</authtype> 167 <username/> 168 <password/> 169 <publickey/> 170 <privatekey/> 171 <port/> 172 <description/> 173 <inventory_link>0</inventory_link> 174 <applications> 175 <application> 176 <name>Nginx</name> 177 </application> 178 </applications> 179 <valuemap/> 180 </item> 181 <item> 182 <name>Nginx $1/sec</name> 183 <type>0</type> 184 <snmp_community/> 185 <multiplier>0</multiplier> 186 <snmp_oid/> 187 <key>nginx[handled_requests,{$NGINX_STATUS_URL}]</key> 188 <delay>60</delay> 189 <history>30</history> 190 <trends>365</trends> 191 <status>0</status> 192 <value_type>0</value_type> 193 <allowed_hosts/> 194 <units/> 195 <delta>1</delta> 196 <snmpv3_securityname/> 197 <snmpv3_securitylevel>0</snmpv3_securitylevel> 198 <snmpv3_authpassphrase/> 199 <snmpv3_privpassphrase/> 200 <formula>1</formula> 201 <delay_flex/> 202 <params/> 203 <ipmi_sensor/> 204 <data_type>0</data_type> 205 <authtype>0</authtype> 206 <username/> 207 <password/> 208 <publickey/> 209 <privatekey/> 210 <port/> 211 <description/> 212 <inventory_link>0</inventory_link> 213 <applications> 214 <application> 215 <name>Nginx</name> 216 </application> 217 </applications> 218 <valuemap/> 219 </item> 220 <item> 221 <name>Nginx $1/sec</name> 222 <type>0</type> 223 <snmp_community/> 224 <multiplier>0</multiplier> 225 <snmp_oid/> 226 <key>nginx[accepted_connections,{$NGINX_STATUS_URL}]</key> 227 <delay>60</delay> 228 <history>30</history> 229 <trends>365</trends> 230 <status>0</status> 231 <value_type>0</value_type> 232 <allowed_hosts/> 233 <units/> 234 <delta>1</delta> 235 <snmpv3_securityname/> 236 <snmpv3_securitylevel>0</snmpv3_securitylevel> 237 <snmpv3_authpassphrase/> 238 <snmpv3_privpassphrase/> 239 <formula>1</formula> 240 <delay_flex/> 241 <params/> 242 <ipmi_sensor/> 243 <data_type>0</data_type> 244 <authtype>0</authtype> 245 <username/> 246 <password/> 247 <publickey/> 248 <privatekey/> 249 <port/> 250 <description/> 251 <inventory_link>0</inventory_link> 252 <applications> 253 <application> 254 <name>Nginx</name> 255 </application> 256 </applications> 257 <valuemap/> 258 </item> 259 <item> 260 <name>Nginx $1/sec</name> 261 <type>0</type> 262 <snmp_community/> 263 <multiplier>0</multiplier> 264 <snmp_oid/> 265 <key>nginx[handled_connections,{$NGINX_STATUS_URL}]</key> 266 <delay>60</delay> 267 <history>30</history> 268 <trends>365</trends> 269 <status>0</status> 270 <value_type>0</value_type> 271 <allowed_hosts/> 272 <units/> 273 <delta>1</delta> 274 <snmpv3_securityname/> 275 <snmpv3_securitylevel>0</snmpv3_securitylevel> 276 <snmpv3_authpassphrase/> 277 <snmpv3_privpassphrase/> 278 <formula>1</formula> 279 <delay_flex/> 280 <params/> 281 <ipmi_sensor/> 282 <data_type>0</data_type> 283 <authtype>0</authtype> 284 <username/> 285 <password/> 286 <publickey/> 287 <privatekey/> 288 <port/> 289 <description/> 290 <inventory_link>0</inventory_link> 291 <applications> 292 <application> 293 <name>Nginx</name> 294 </application> 295 </applications> 296 <valuemap/> 297 </item> 298 <item> 299 <name>Number of $1 process</name> 300 <type>0</type> 301 <snmp_community>public</snmp_community> 302 <multiplier>0</multiplier> 303 <snmp_oid>interfaces.ifTable.ifEntry.ifInOctets.1</snmp_oid> 304 <key>proc.num[nginx]</key> 305 <delay>300</delay> 306 <history>30</history> 307 <trends>365</trends> 308 <status>0</status> 309 <value_type>3</value_type> 310 <allowed_hosts/> 311 <units/> 312 <delta>0</delta> 313 <snmpv3_securityname/> 314 <snmpv3_securitylevel>0</snmpv3_securitylevel> 315 <snmpv3_authpassphrase/> 316 <snmpv3_privpassphrase/> 317 <formula>1</formula> 318 <delay_flex/> 319 <params/> 320 <ipmi_sensor/> 321 <data_type>0</data_type> 322 <authtype>0</authtype> 323 <username/> 324 <password/> 325 <publickey/> 326 <privatekey/> 327 <port/> 328 <description/> 329 <inventory_link>0</inventory_link> 330 <applications/> 331 <valuemap/> 332 </item> 333 </items> 334 <discovery_rules/> 335 <macros> 336 <macro> 337 <macro>{$NGINX_STATUS_URL}</macro> 338 <value>http://127.0.0.1:10061/nginx_status</value> 339 </macro> 340 </macros> 341 <templates/> 342 <screens/> 343 </template> 344 </templates> 345 <triggers> 346 <trigger> 347 <expression>{Template_Nginx:proc.num[nginx].last(0)}=0</expression> 348 <name>Nginx is not running on {HOSTNAME}</name> 349 <url/> 350 <status>0</status> 351 <priority>4</priority> 352 <description>Nginx is not running. 353 354 It has been stopped / shutdown or has crashed. 355 Check on the server for more details: 356 - w / last 357 - dmesg logs 358 - /var/log/messages 359 - nginx error logs</description> 360 <type>0</type> 361 <dependencies/> 362 </trigger> 363 </triggers> 364 <graphs> 365 <graph> 366 <name>Nginx - Connections and Requests status</name> 367 <width>900</width> 368 <height>200</height> 369 <yaxismin>0.0000</yaxismin> 370 <yaxismax>100.0000</yaxismax> 371 <show_work_period>0</show_work_period> 372 <show_triggers>0</show_triggers> 373 <type>0</type> 374 <show_legend>1</show_legend> 375 <show_3d>0</show_3d> 376 <percent_left>0.0000</percent_left> 377 <percent_right>0.0000</percent_right> 378 <ymin_type_1>1</ymin_type_1> 379 <ymax_type_1>0</ymax_type_1> 380 <ymin_item_1>0</ymin_item_1> 381 <ymax_item_1>0</ymax_item_1> 382 <graph_items> 383 <graph_item> 384 <sortorder>0</sortorder> 385 <drawtype>1</drawtype> 386 <color>FF9999</color> 387 <yaxisside>0</yaxisside> 388 <calc_fnc>4</calc_fnc> 389 <type>0</type> 390 <item> 391 <host>Template_Nginx</host> 392 <key>nginx[accepted_connections,{$NGINX_STATUS_URL}]</key> 393 </item> 394 </graph_item> 395 <graph_item> 396 <sortorder>1</sortorder> 397 <drawtype>2</drawtype> 398 <color>990000</color> 399 <yaxisside>0</yaxisside> 400 <calc_fnc>4</calc_fnc> 401 <type>0</type> 402 <item> 403 <host>Template_Nginx</host> 404 <key>nginx[handled_connections,{$NGINX_STATUS_URL}]</key> 405 </item> 406 </graph_item> 407 <graph_item> 408 <sortorder>2</sortorder> 409 <drawtype>0</drawtype> 410 <color>009900</color> 411 <yaxisside>0</yaxisside> 412 <calc_fnc>4</calc_fnc> 413 <type>0</type> 414 <item> 415 <host>Template_Nginx</host> 416 <key>nginx[handled_requests,{$NGINX_STATUS_URL}]</key> 417 </item> 418 </graph_item> 419 </graph_items> 420 </graph> 421 <graph> 422 <name>Nginx - Threads status</name> 423 <width>900</width> 424 <height>200</height> 425 <yaxismin>0.0000</yaxismin> 426 <yaxismax>100.0000</yaxismax> 427 <show_work_period>0</show_work_period> 428 <show_triggers>0</show_triggers> 429 <type>1</type> 430 <show_legend>1</show_legend> 431 <show_3d>0</show_3d> 432 <percent_left>0.0000</percent_left> 433 <percent_right>0.0000</percent_right> 434 <ymin_type_1>1</ymin_type_1> 435 <ymax_type_1>0</ymax_type_1> 436 <ymin_item_1>0</ymin_item_1> 437 <ymax_item_1>0</ymax_item_1> 438 <graph_items> 439 <graph_item> 440 <sortorder>0</sortorder> 441 <drawtype>1</drawtype> 442 <color>990000</color> 443 <yaxisside>0</yaxisside> 444 <calc_fnc>4</calc_fnc> 445 <type>0</type> 446 <item> 447 <host>Template_Nginx</host> 448 <key>nginx[writing,{$NGINX_STATUS_URL}]</key> 449 </item> 450 </graph_item> 451 <graph_item> 452 <sortorder>1</sortorder> 453 <drawtype>1</drawtype> 454 <color>999900</color> 455 <yaxisside>0</yaxisside> 456 <calc_fnc>4</calc_fnc> 457 <type>0</type> 458 <item> 459 <host>Template_Nginx</host> 460 <key>nginx[reading,{$NGINX_STATUS_URL}]</key> 461 </item> 462 </graph_item> 463 <graph_item> 464 <sortorder>2</sortorder> 465 <drawtype>1</drawtype> 466 <color>009900</color> 467 <yaxisside>0</yaxisside> 468 <calc_fnc>4</calc_fnc> 469 <type>0</type> 470 <item> 471 <host>Template_Nginx</host> 472 <key>nginx[waiting,{$NGINX_STATUS_URL}]</key> 473 </item> 474 </graph_item> 475 </graph_items> 476 </graph> 477 </graphs> 478 </zabbix_export>
参考资料:https://github.com/jizhang