Добавление нескольких nginx в плагин мониторинга collectd
Collectd запрашивает HttpStubStatusModule для nginx, чтобы найти активные соединения.
Конец конфига выглядит как
<Plugin "nginx">
URL "https://localhost:8433/nginx_status"
</Plugin>
Плагин здесь.
У меня есть установка, в которой у меня есть 4 экземпляра Nginx, работающих на одном физическом хосте, каждый из которых прослушивает свой порт. Как мне сделать сборщик монитора несколькими Nginxes? Следующее не работает
<Plugin "nginx">
URL "https://localhost:8433/nginx_status"
</Plugin>
<Plugin "nginx">
URL "https://localhost:8434/nginx_status"
</Plugin>
2 ответа
Решение
struct curl_slist *curl_list = NULL;
curl_list = curl_slist_append(curl_list, header);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, curl_list);
Я написал небольшой сценарий для collectd
Python плагин:
https://github.com/magazov/collectd-multinginx-python
Это очень просто в использовании.
Вот исходный код:
#! /usr/bin/env python
import re
import urllib2
import collectd
class Nginx(object):
def __init__(self):
self.pattern = re.compile("([A-Z][\w]*).+?(\d+)")
self.urls = {}
def do_nginx_status(self):
for instance, url in self.urls.items():
try:
response = urllib2.urlopen(url)
except urllib2.HTTPError, e:
collectd.error(str(e))
except urllib2.URLError, e:
collectd.error(str(e))
else:
data = response.read()
m = self.pattern.findall(data)
for key, value in m:
metric = collectd.Values()
metric.plugin = 'nginx-%s' % instance
metric.type_instance = key.lower()
metric.type = 'nginx_connections'
metric.values = [value]
metric.dispatch()
requests = data.split('\n')[2].split()[-1]
collectd.debug('Requests %s' % requests)
metric = collectd.Values()
metric.plugin = 'nginx-%s' % instance
metric.type = 'nginx_requests'
metric.values = [requests]
metric.dispatch()
def config(self, obj):
self.urls = dict((node.key, node.values[0]) for node in obj.children)
nginx = Nginx()
collectd.register_config(nginx.config)
collectd.register_read(nginx.do_nginx_status)