Filippo Giunchedi has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/399154 )
Change subject: Fix nutcracker metrics fetching ...................................................................... Fix nutcracker metrics fetching Bug: T181995 Change-Id: I127e0cc057e5f5ff3156e11db0cd52424cc01ffd --- M debian/changelog M prometheus-nutcracker-exporter 2 files changed, 32 insertions(+), 15 deletions(-) Approvals: jenkins-bot: Verified Filippo Giunchedi: Looks good to me, approved diff --git a/debian/changelog b/debian/changelog index eeb235f..9e0fc5a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +prometheus-nutcracker-exporter (0.2) UNRELEASED; urgency=medium + + * Fix nutcracker metrics fetching + + -- Filippo Giunchedi <[email protected]> Tue, 19 Dec 2017 11:23:48 +0100 + prometheus-nutcracker-exporter (0.1) jessie-wikimedia; urgency=medium * First upload. diff --git a/prometheus-nutcracker-exporter b/prometheus-nutcracker-exporter index c505573..dcf0ae0 100755 --- a/prometheus-nutcracker-exporter +++ b/prometheus-nutcracker-exporter @@ -20,8 +20,9 @@ import re import sys import time -import urllib2 +import socket +from contextlib import closing from prometheus_client import start_http_server, Summary from prometheus_client.core import (CounterMetricFamily, GaugeMetricFamily, REGISTRY) @@ -33,11 +34,22 @@ scrape_duration = Summary( 'nutcracker_scrape_duration_seconds', 'Nutcracker exporter scrape duration') - def __init__(self, stats_url='http://localhost:22222'): - self.stats_url = stats_url + def __init__(self, address, port): + self.address = address + self.port = port - def _load_stats(self, url): - fixed_json = re.sub(r'"("[^"]+")"(?=:)', r'\1', url.read()) + def _load_stats(self, host, port): + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + with closing(sock): + sock.connect((host, int(port))) + sock.settimeout(1) + raw_data = sock.recv(65536).decode('utf-8', errors='ignore') + sock.shutdown(socket.SHUT_RDWR) + + # does not properly escape quotation marks in server aliases. + # https://github.com/twitter/twemproxy/issues/532 + fixed_json = re.sub(r'"("[^"]+")"(?=:)', r'\1', raw_data.strip()) return json.loads(fixed_json) def _pool_metrics(self, stats): @@ -83,13 +95,11 @@ up = GaugeMetricFamily('nutcracker_up', 'Nutcracker is running') try: - url = urllib2.urlopen(self.stats_url) - if url.code == 200: - stats = self._load_stats(url) - up.add_metric([], 1) + stats = self._load_stats(self.address, self.port) + up.add_metric([], 1) yield up - except urllib2.URLError: - log.error('Could not connect to Nutcracker stats URL') + except socket.error as e: + log.error('Could not fetch Nutcracker stats', e) up.add_metric([], 0) yield up return @@ -129,9 +139,9 @@ help='Listen on this address', default=':9191') parser.add_argument('-d', '--debug', action='store_true', help='Enable debug logging') - parser.add_argument('-u', '--url', metavar='URL', - help='Fetch pdns-rec stats from this url', - default='http://localhost:22222') + parser.add_argument('-s', '--stats', metavar='ADDRESS', + help='Fetch nutcracker stats from this address', + default=':22222') args = parser.parse_args() if args.debug: @@ -143,7 +153,8 @@ log.info('Starting nutcracker_exporter on %s:%s', address, port) - REGISTRY.register(PrometheusNutcrackerCollector(args.url)) + stats_address, stats_port = args.stats.split(':', 1) + REGISTRY.register(PrometheusNutcrackerCollector(stats_address, stats_port)) start_http_server(int(port), addr=address) try: -- To view, visit https://gerrit.wikimedia.org/r/399154 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I127e0cc057e5f5ff3156e11db0cd52424cc01ffd Gerrit-PatchSet: 1 Gerrit-Project: operations/debs/prometheus-nutcracker-exporter Gerrit-Branch: master Gerrit-Owner: Filippo Giunchedi <[email protected]> Gerrit-Reviewer: Filippo Giunchedi <[email protected]> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
