一 监控原理描述
twemproxy默认监听端口22222,可以使用nc等工具直接访问,以JSON格式输出
$ nc 127.0.0.1 22222
{"service":"nutcracker", "source":"gintama-taiwan-redis2", "version":"0.4.0", "uptime":67135, "timestamp":1427100529, "total_connections":376, "curr_connections":7, "gintama": {"client_eof":0, "client_err":311, "client_connections":0, "server_ejects":58, "forward_error":53, "fragments":0, "192.168.100.68:6379": {"server_eof":1, "server_err":12, "server_timedout":0, "server_connections":1, "server_ejected_at":1427074216551863, "requests":553, "request_bytes":333854, "responses":541, "response_bytes":265633, "in_queue":0, "in_queue_bytes":0, "out_queue":0, "out_queue_bytes":0},"192.168.100.68:6380": {"server_eof":1, "server_err":9, "server_timedout":0, "server_connections":1, "server_ejected_at":1427074216552893, "requests":20, "request_bytes":1551, "responses":11, "response_bytes":207, "in_queue":0, "in_queue_bytes":0, "out_queue":0, "out_queue_bytes":0},"192.168.100.68:6381": {"server_eof":1, "server_err":1, "server_timedout":0, "server_connections":1, "server_ejected_at":1427037406770236, "requests":287, "request_bytes":10718, "responses":286, "response_bytes":23430, "in_queue":0, "in_queue_bytes":0, "out_queue":0, "out_queue_bytes":0},"192.168.100.69:6379": {"server_eof":1, "server_err":11, "server_timedout":0, "server_connections":1, "server_ejected_at":1427074216550647, "requests":55, "request_bytes":2633, "responses":44, "response_bytes":220, "in_queue":0, "in_queue_bytes":0, "out_queue":0, "out_queue_bytes":0},"192.168.100.69:6380": {"server_eof":1, "server_err":9, "server_timedout":0, "server_connections":1, "server_ejected_at":1427040015877803, "requests":291, "request_bytes":15563, "responses":282, "response_bytes":1402, "in_queue":0, "in_queue_bytes":0, "out_queue":0, "out_queue_bytes":0},"192.168.100.69:6381": {"server_eof":0, "server_err":11, "server_timedout":0, "server_connections":1, "server_ejected_at":1427059816411041, "requests":193, "request_bytes":17292, "responses":182, "response_bytes":1767, "in_queue":0, "in_queue_bytes":0, "out_queue":0, "out_queue_bytes":0}}}可以使用工具整理一下输出
{
"service": "nutcracker",
"source": "gintama-taiwan-redis2",
"version": "0.4.0",
"uptime": 64944,
"timestamp": 1427098338,
"total_connections": 374,
"curr_connections": 7,
"gintama": {
"client_eof": 0,
"client_err": 309,
"client_connections": 0,
"server_ejects": 58,
"forward_error": 53,
"fragments": 0,
"192.168.100.68:6379": {
"server_eof": 1,
"server_err": 12,
"server_timedout": 0,
"server_connections": 1,
"server_ejected_at": 1427074216551863,
"requests": 552,
"request_bytes": 333808,
"responses": 540,
"response_bytes": 265628,
"in_queue": 0,
"in_queue_bytes": 0,
"out_queue": 0,
"out_queue_bytes": 0
},
"192.168.100.68:6380": {
"server_eof": 1,
"server_err": 9,
"server_timedout": 0,
"server_connections": 1,
"server_ejected_at": 1427074216552893,
"requests": 19,
"request_bytes": 1498,
"responses": 10,
"response_bytes": 202,
"in_queue": 0,
"in_queue_bytes": 0,
"out_queue": 0,
"out_queue_bytes": 0
},
"192.168.100.68:6381": {
"server_eof": 1,
"server_err": 1,
"server_timedout": 0,
"server_connections": 1,
"server_ejected_at": 1427037406770236,
"requests": 286,
"request_bytes": 10672,
"responses": 285,
"response_bytes": 23425,
"in_queue": 0,
"in_queue_bytes": 0,
"out_queue": 0,
"out_queue_bytes": 0
},
"192.168.100.69:6379": {
"server_eof": 1,
"server_err": 11,
"server_timedout": 0,
"server_connections": 1,
"server_ejected_at": 1427074216550647,
"requests": 54,
"request_bytes": 2580,
"responses": 43,
"response_bytes": 215,
"in_queue": 0,
"in_queue_bytes": 0,
"out_queue": 0,
"out_queue_bytes": 0
},
"192.168.100.69:6380": {
"server_eof": 1,
"server_err": 9,
"server_timedout": 0,
"server_connections": 1,
"server_ejected_at": 1427040015877803,
"requests": 291,
"request_bytes": 15563,
"responses": 282,
"response_bytes": 1402,
"in_queue": 0,
"in_queue_bytes": 0,
"out_queue": 0,
"out_queue_bytes": 0
},
"192.168.100.69:6381": {
"server_eof": 0,
"server_err": 11,
"server_timedout": 0,
"server_connections": 1,
"server_ejected_at": 1427059816411041,
"requests": 193,
"request_bytes": 17292,
"responses": 182,
"response_bytes": 1767,
"in_queue": 0,
"in_queue_bytes": 0,
"out_queue": 0,
"out_queue_bytes": 0
}
}
}由此可以知道zabbix需要监控service,total_connections几个规定字段。同时由于配置文件中各个pool是变更的,不固定的,各个pool下面的redis主机也是变更的,不固定的。所以,需要使用zabbix低级发现功能来发现由pool和redis主机构成的键值对。例如通过zabbix来发现
"{#REDIS_POOL}":"gintama@192.168.100.69:6381"
这样的键值对。然后再根据键值对获取各个字段的值。
各个字段的含义可以使用nutcracker -D获取
pool stats: client_eof "# eof on client connections" client_err "# errors on client connections" client_connections "# active client connections" server_ejects "# times backend server was ejected" forward_error "# times we encountered a forwarding error" fragments "# fragments created from a multi-vector request" server stats: server_eof "# eof on server connections" server_err "# errors on server connections" server_timedout "# timeouts on server connections" server_connections "# active server connections" server_ejected_at "timestamp when server was ejected in usec since epoch" requests "# requests" request_bytes "total request bytes" responses "# responses" response_bytes "total response bytes" in_queue "# requests in incoming queue" in_queue_bytes "current request bytes in incoming queue" out_queue "# requests in outgoing queue" out_queue_bytes "current request bytes in outgoing queue"
二 编写twemproxy的pool和redis主机发现脚本
参考文档:
本文出自 “Linux SA John” 博客,请务必保留此出处http://john88wang.blog.51cto.com/2165294/1623309
原文:http://john88wang.blog.51cto.com/2165294/1623309