2013-12-23 2 views
1

Коллективные запросы nginx's HttpStubStatusModule , чтобы найти активные соединения.Добавление нескольких плагинов мониторинга nginx to collectd

Конец конфигурации выглядит как-

<Plugin "nginx"> 
    URL "https://localhost:8433/nginx_status" 
</Plugin> 

Плагин here.

У меня есть настройка, в которой у меня есть 4 экземпляра Nginx, работающих на одном физическом хосте, каждый из которых прослушивает другой порт. Как сделать сборщик монитором нескольких Nginxes? Следующие не работают -

<Plugin "nginx"> 
    URL "https://localhost:8433/nginx_status" 
</Plugin> 

<Plugin "nginx"> 
    URL "https://localhost:8434/nginx_status" 
</Plugin> 

ответ

-1

struct curl_slist * curl_list = NULL;

curl_list = curl_slist_append(curl_list, header); 

    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, curl_list); 
+3

Можете ли вы быть больше конкретнее? – corradio

+0

Читая этот ответ, я не понимаю, что делать вообще. Должен ли я писать код С? Должен ли я писать свой собственный коллекционный плагин? Измените существующий плагин? –

1

Я написал небольшой скрипт для плагина 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) 
Смежные вопросы