mirror of
https://github.com/nicolargo/glances.git
synced 2024-11-29 07:30:58 +03:00
Merge pull request #822 from gregory094/feature-riemann-export
exports: riemann export implemented and documented
This commit is contained in:
commit
b40707f5bb
@ -50,6 +50,7 @@ Optional dependencies:
|
|||||||
- ``docker-py`` (for the Docker monitoring support) [Linux-only]
|
- ``docker-py`` (for the Docker monitoring support) [Linux-only]
|
||||||
- ``matplotlib`` (for graphical/chart support)
|
- ``matplotlib`` (for graphical/chart support)
|
||||||
- ``pika`` (for the RabbitMQ/ActiveMQ export module)
|
- ``pika`` (for the RabbitMQ/ActiveMQ export module)
|
||||||
|
- ``bernhard`` (for the Riemann export module)
|
||||||
- ``py-cpuinfo`` (for the Quicklook CPU info module)
|
- ``py-cpuinfo`` (for the Quicklook CPU info module)
|
||||||
- ``scandir`` (for the Folders plugin) [Only for Python < 3.5]
|
- ``scandir`` (for the Folders plugin) [Only for Python < 3.5]
|
||||||
|
|
||||||
@ -296,7 +297,7 @@ Gateway to other services
|
|||||||
=========================
|
=========================
|
||||||
|
|
||||||
Glances can export stats to: ``CSV`` file, ``InfluxDB``, ``OpenTSDB``,
|
Glances can export stats to: ``CSV`` file, ``InfluxDB``, ``OpenTSDB``,
|
||||||
``StatsD``, ``ElasticSearch`` and ``RabbitMQ`` server.
|
``StatsD``, ``RabbitMQ`` and ``Riemann`` server.
|
||||||
|
|
||||||
How to contribute ?
|
How to contribute ?
|
||||||
===================
|
===================
|
||||||
|
@ -139,6 +139,10 @@ Command-Line Options
|
|||||||
|
|
||||||
export stats to RabbitMQ broker (pika lib needed)
|
export stats to RabbitMQ broker (pika lib needed)
|
||||||
|
|
||||||
|
.. option:: --export-riemann
|
||||||
|
|
||||||
|
export stats to Riemann server (bernhard lib needed)
|
||||||
|
|
||||||
.. option:: --export-elasticsearch
|
.. option:: --export-elasticsearch
|
||||||
|
|
||||||
export stats to an Elasticsearch server (elasticsearch lib needed)
|
export stats to an Elasticsearch server (elasticsearch lib needed)
|
||||||
|
20
docs/gw/riemann.rst
Normal file
20
docs/gw/riemann.rst
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
.. _riemann:
|
||||||
|
|
||||||
|
Riemann
|
||||||
|
========
|
||||||
|
|
||||||
|
You can export statistics to an ``Riemann`` server (using TCP protocol). The
|
||||||
|
connection should be defined in the Glances configuration file as
|
||||||
|
following:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[rabbitmq]
|
||||||
|
host=localhost
|
||||||
|
port=5555
|
||||||
|
|
||||||
|
and run Glances with:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ glances --export-riemann
|
@ -214,6 +214,11 @@ export stats to RabbitMQ broker (pika lib needed)
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
|
.B \-\-export\-riemann
|
||||||
|
export stats to Riemann server (bernhard lib needed)
|
||||||
|
.UNINDENT
|
||||||
|
.INDENT 0.0
|
||||||
|
.TP
|
||||||
.B \-\-export\-elasticsearch
|
.B \-\-export\-elasticsearch
|
||||||
export stats to an Elasticsearch server (elasticsearch lib needed)
|
export stats to an Elasticsearch server (elasticsearch lib needed)
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
|
93
glances/exports/glances_riemann.py
Normal file
93
glances/exports/glances_riemann.py
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# This file is part of Glances.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2015 Nicolargo <nicolas@nicolargo.com>
|
||||||
|
#
|
||||||
|
# Glances is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Glances is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""JMS interface class."""
|
||||||
|
|
||||||
|
import socket
|
||||||
|
import sys
|
||||||
|
from numbers import Number
|
||||||
|
|
||||||
|
from glances.compat import NoOptionError, NoSectionError, range
|
||||||
|
from glances.logger import logger
|
||||||
|
from glances.exports.glances_export import GlancesExport
|
||||||
|
|
||||||
|
# Import pika for Riemann
|
||||||
|
import bernhard
|
||||||
|
|
||||||
|
|
||||||
|
class Export(GlancesExport):
|
||||||
|
|
||||||
|
"""This class manages the Riemann export module."""
|
||||||
|
|
||||||
|
def __init__(self, config=None, args=None):
|
||||||
|
"""Init the Riemann export IF."""
|
||||||
|
super(Export, self).__init__(config=config, args=args)
|
||||||
|
|
||||||
|
# Load the rabbitMQ configuration file
|
||||||
|
self.riemann_host = None
|
||||||
|
self.riemann_port = None
|
||||||
|
self.hostname = socket.gethostname()
|
||||||
|
self.export_enable = self.load_conf()
|
||||||
|
if not self.export_enable:
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
# Init the rabbitmq client
|
||||||
|
self.client = self.init()
|
||||||
|
|
||||||
|
def load_conf(self, section="riemann"):
|
||||||
|
"""Load the Riemann configuration in the Glances configuration file."""
|
||||||
|
if self.config is None:
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
self.riemann_host = self.config.get_value(section, 'host')
|
||||||
|
self.riemann_port = int(self.config.get_value(section, 'port'))
|
||||||
|
except NoSectionError:
|
||||||
|
logger.critical("No riemann configuration found")
|
||||||
|
return False
|
||||||
|
except NoOptionError as e:
|
||||||
|
logger.critical("Error in the Riemann configuration (%s)" % e)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
logger.debug("Load Riemann from the Glances configuration file")
|
||||||
|
return True
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
"""Init the connection to the Riemann server."""
|
||||||
|
if not self.export_enable:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
client = bernhard.Client(host=self.riemann_host, port=self.riemann_port)
|
||||||
|
return client
|
||||||
|
except Exception as e:
|
||||||
|
logger.critical("Connection to Riemann failed : %s " % e)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def export(self, name, columns, points):
|
||||||
|
"""Write the points in Riemann."""
|
||||||
|
for i in range(len(columns)):
|
||||||
|
if not isinstance(points[i], Number):
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
data = { 'host': self.hostname, 'service': name + " " + columns[i], 'metric': points[i] }
|
||||||
|
logger.debug(data)
|
||||||
|
try:
|
||||||
|
self.client.send(data)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Can not export stats to Riemann (%s)" % e)
|
||||||
|
|
@ -163,6 +163,8 @@ Start the client browser (browser mode):\n\
|
|||||||
dest='export_elasticsearch', help='export stats to an ElasticSearch server (elasticsearch lib needed)')
|
dest='export_elasticsearch', help='export stats to an ElasticSearch server (elasticsearch lib needed)')
|
||||||
parser.add_argument('--export-rabbitmq', action='store_true', default=False,
|
parser.add_argument('--export-rabbitmq', action='store_true', default=False,
|
||||||
dest='export_rabbitmq', help='export stats to rabbitmq broker (pika lib needed)')
|
dest='export_rabbitmq', help='export stats to rabbitmq broker (pika lib needed)')
|
||||||
|
parser.add_argument('--export-riemann', action='store_true', default=False,
|
||||||
|
dest='export_riemann', help='export stats to riemann broker (bernhard lib needed)')
|
||||||
# Client/Server option
|
# Client/Server option
|
||||||
parser.add_argument('-c', '--client', dest='client',
|
parser.add_argument('-c', '--client', dest='client',
|
||||||
help='connect to a Glances server by IPv4/IPv6 address or hostname')
|
help='connect to a Glances server by IPv4/IPv6 address or hostname')
|
||||||
|
Loading…
Reference in New Issue
Block a user