将多个nginx添加到collectd的监控插件中

时间:2013-12-23 08:07:52

标签: nginx collectd

收集查询nginx的HttpStubStatusModule  为了找到活动连接。

配置结束看起来像 -

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

该插件为here

我有一个设置,其中我有4个Nginx实例在同一个物理主机上运行,​​每个实例都在不同的端口上监听。我如何使collectd监控多个Nginxes?以下不起作用 -

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

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

2 个答案:

答案 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)

答案 1 :(得分:-1)

struct curl_slist * curl_list = NULL;

   curl_list = curl_slist_append(curl_list, header);

   curl_easy_setopt(curl, CURLOPT_HTTPHEADER, curl_list);