root / plugins / twemproxy / nutcracker_requests_ @ 51864405
Historique | Voir | Annoter | Télécharger (1,65 ko)
| 1 | 51864405 | Lars Kruse | #!/usr/bin/env python3 |
|---|---|---|---|
| 2 | """ |
||
| 3 | =head1 NAME |
||
| 4 | 5baefd98 | Edgar Veiga | |
| 5 | 51864405 | Lars Kruse | nutcracker_requests_ - monitor twemproxy (aka: nutcracker) |
| 6 | |||
| 7 | |||
| 8 | =head1 CONFIGURATION |
||
| 9 | |||
| 10 | Config in /etc/munin/plugin-conf.d/nutcracker.conf: |
||
| 11 | |||
| 12 | [nutcracker_*] |
||
| 13 | env.NUTCRACKER_STATS_HOST 127.0.0.1 |
||
| 14 | env.NUTCRACKER_STATS_PORT 22222 |
||
| 15 | |||
| 16 | |||
| 17 | =head1 AUTHORS |
||
| 18 | |||
| 19 | Copyright 2013 Edgar Veiga <edgarmveiga@gmail.com> |
||
| 20 | |||
| 21 | =cut |
||
| 22 | """ |
||
| 23 | |||
| 24 | |||
| 25 | import json |
||
| 26 | 5baefd98 | Edgar Veiga | import socket |
| 27 | import os |
||
| 28 | 51864405 | Lars Kruse | import sys |
| 29 | 5baefd98 | Edgar Veiga | |
| 30 | |||
| 31 | def get_stats(): |
||
| 32 | 51864405 | Lars Kruse | data = '' |
| 33 | 5baefd98 | Edgar Veiga | |
| 34 | 51864405 | Lars Kruse | HOST = os.environ.get('NUTCRACKER_STATS_HOST', '127.0.0.1')
|
| 35 | 78e584dc | minitux | PORT = int(os.environ.get('NUTCRACKER_STATS_PORT', 22222))
|
| 36 | 5baefd98 | Edgar Veiga | |
| 37 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
||
| 38 | s.connect((HOST, PORT)) |
||
| 39 | |||
| 40 | file = s.makefile('r')
|
||
| 41 | 51864405 | Lars Kruse | data = file.readline() |
| 42 | 5baefd98 | Edgar Veiga | s.close() |
| 43 | |||
| 44 | 51864405 | Lars Kruse | return json.loads(data) |
| 45 | |||
| 46 | 5baefd98 | Edgar Veiga | |
| 47 | def process_data(): |
||
| 48 | 51864405 | Lars Kruse | data = get_stats() |
| 49 | 5baefd98 | Edgar Veiga | # get pools |
| 50 | 51864405 | Lars Kruse | for key, value in data.items(): |
| 51 | if isinstance(value, dict): |
||
| 52 | 5baefd98 | Edgar Veiga | total = 0 |
| 53 | # get server requests |
||
| 54 | 1e81c032 | pboesch | for pool_key, pool_value in value.items(): |
| 55 | 51864405 | Lars Kruse | if isinstance(pool_value, dict): |
| 56 | 5baefd98 | Edgar Veiga | total += pool_value["requests"] |
| 57 | 51864405 | Lars Kruse | print("requests_" + key + ".value" + " " + str(total))
|
| 58 | |||
| 59 | 5baefd98 | Edgar Veiga | |
| 60 | def process_config(): |
||
| 61 | 51864405 | Lars Kruse | print("graph_title Nutcracker requests/s")
|
| 62 | print("graph_category other")
|
||
| 63 | print("graph_vlabel requests/s")
|
||
| 64 | 5baefd98 | Edgar Veiga | |
| 65 | 51864405 | Lars Kruse | data = get_stats() |
| 66 | 1e81c032 | pboesch | for key, value in data.items(): |
| 67 | 51864405 | Lars Kruse | if isinstance(value, dict): |
| 68 | print("requests_" + key + ".label " + key)
|
||
| 69 | print("requests_" + key + ".type COUNTER")
|
||
| 70 | print("requests_" + key + ".min 0")
|
||
| 71 | |||
| 72 | 5baefd98 | Edgar Veiga | |
| 73 | if __name__ == "__main__": |
||
| 74 | if len(sys.argv) > 1 and sys.argv[1] == "config": |
||
| 75 | process_config() |
||
| 76 | else: |
||
| 77 | process_data() |
