blackbird nginx plugin
この plugin では nginx から様々な情報を取得し、backend にデータを送信します
現在のところ、下記の情報をモニタリングすることができます。
- nginx の version (
nginx -v
) - stub_status の各項目
- 特定 url に対する responce check (HTTP status code / Reponse Time)
Install
blackbird 本体
こちらを参考に install してください
Install nginx plugin
setup.py で入れる方法と rpm で入れる方法があります
手動で入れる方法もありますが、その場合は別途 python の requests
の module を使えるようにしてください
setup.py で install
git clone https://github.com/Vagrants/blackbird-nginx.git
cd blackbird-nginx
python setup.py install
rpm で install
yum install blackbird-nginx--enablerepo=blackbird
依存関係で python-requests
が必要となります
Nginx 側で status を取れるようにする
stub_status の定義をします
server {
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
例えばこんな感じにします
plugin の設定をする
config は /etc/blackbird/conf.d/nginx.cfg
にあります
[nginx]
module = 'nginx'
# stub_status URI
# - support only http status code '200'
# - you must set uri value start with '/'
#
status_uri = '/nginx_status'
# host = '127.0.0.1'
# port = '80'
# use ssl connection?
#
# ssl = False
# for BASIC authentication. default: Nothing
#
# user = 'nobody'
# for BASIC authentication. default: Nothing
#
# password = 'nobody'
# for response time check
# if you do not want to check, please comment out
# - support only http status code '200'
# - you must set uri value start with '/'
#
response_check_uri = '/'
# response_check_port = '80'
# response_check_host = '127.0.0.1'
# response_check_vhost = 'localhost'
# response_check_uagent = 'blackbird response check'
# response_check_ssl = False
# nginx path
path = '/usr/sbin/nginx'
response_check_uri
が指定された場合、その uri に対して HTTP GET をします
HTTP の status code と Response Time を計測します
virtual host も設定しておくことでサービス用途の virtual host の response をモニタリングすることが可能です
設定が終わったら blackbird
を再起動させます
sudo /etc/init.d/blackbird restart
Zabbix 上でデータが入ってきているか確認する
Zabbix の Template は github の repositoryにあります
Zabbix に import して対象のサーバーに適用させて下さい
Zabbix 上の host 名と blackbird が起動しているサーバーの host 名が違う場合は /etc/blackbird/conf.d/nginx.cfg
上で hostname を設定してあげる必要があります
Zabbix 上と合わせてください
hostname = your_static_hostname
また、監視間隔も変更できます (デフォルト 60 秒)
interval = 30
Zabbix Template のアイテムについて
_Nginx_1.4
Application | item | description |
---|---|---|
Nginx - Stats | Stats - Accepts | stub_status の Accepts |
Nginx - Stats | Stats - Accepts cps | 上記の Connection Per Sec |
Nginx - Stats | Stats - Handled | stub_status の Handled |
Nginx - Stats | Stats - Handled cps | 上記の Connection Per Sec |
Nginx - Stats | Stats - Requests | stub_status の Requests |
Nginx - Stats | Stats - Requests cps | 上記の Connection Per Sec |
Nginx - Stats | Stats - Reading | stub_status の Reading |
Nginx - Stats | Stats - Writing | stub_status の Writing |
Nginx - Stats | Stats - Waiting | stub_status の Waiting |
Nginx - Performance | Performance - Amount | aggregate 用 item |
Nginx - Performance | Performance - Available | aggregate 用 item |
Nginx - Performance | Performance - Response status |
response_check_uri の HTTP status |
Nginx - Performance | Performance - Response Time |
response_check_uri の Response Time |
Version | Version - Nginx | nginx の version |
General | General - Blackbird nginx plugin is sending data | blackbird からの ping |
General | General - Blackbird nginx plugin version | nginx plugin の version |
General | General - Port $PORT is in LISTENING state | 特定 port が Listen しているか |
General | General - Port $PORT is accepting connections | 特定 port が Accept しているか |
General | Process - Number of nginx processes | nginx の process 数 |
Macro | {$ITM_NGINX_MONITOR_URI} | アイテム表示用 (nginx.cfg と合わせて下さい) |
Macro | {$ITM_NGINX_MONITOR_VHOST} | アイテム表示用 (nginx.cfg と合わせて下さい) |
Macro | {$ITM_NGINX_PORT} | nginx の port |
Macro | {$TRG_BBD_NGX_NDT_PRD} | blackbird からの ping の間隔の閾値 |
Macro | {$TRG_NGINX_RSP_TIME} | Response Time の閾値 |
{$TRG_BBD_NGX_NDT_PRD}
について
blackbird が落ちていることを検知するため、ある一定の間隔で ping アイテムが更新されなかった場合に Trigger をあげます
その間隔の閾値です
/etc/blackbird/conf.d/nginx.cfg
で interval を長くした場合はこの値も増やして下さい
{$TRG_NGINX_RSP_TIME}
について
Response Time が一定の秒数より大きかった場合に Trigger が上がります
その閾値になります
(Template では 3 回連続で閾値を超えた場合に Trigger を上げるようにしてますが、環境に応じて変えて下さい)
_Nginx_1.4 っていう Template 名になってますが、1.6 系でも使えます
_Nginx_group_monitor
Application | item | description |
---|---|---|
Nginx - Group | Group - Total servers | group 監視のサーバー全体数 |
Nginx - Group | Group - Available servers | group 監視のサーバーのうち正常な数 |
Nginx - Group | Group - Available servers rate | その割合 |
Macro | {$ITM_NGINX_GROUP_NAME} | group 監視する host group |
Macro | {$TRG_NGINX_AVAILABLE_RATE} | Trigger の閾値 |
この _Nginx_group_monitor ですが、load balancer 配下のサーバー郡のうち正常なサーバーがどれくらいあるか把握したい場合に使うことを想定しています
例えば 10 台で load balance されているサーバー達の半分が HTTP status 200 以外返しているのを検知したりできます
Zabbix の Aggregate の機能を使ってますので、監視したいサーバー達は同じ host group でまとめておく必要があります
ちなみにこの Template を適用させるサーバーは正直どこでもいい(127.0.0.1とかでもいい)のですが、わかりやすい方法としては load balance 用の vip の host を Zabbix 上で定義して、その host に適用させておくといいでしょう