From 294d829ba148781606065388d71905735cf8b82c Mon Sep 17 00:00:00 2001 From: Amit Ghadge Date: Fri, 8 Jun 2018 17:33:54 +0530 Subject: [elastic] Add Elasticsearch service plugin Closes: #1334 Resolves: #1335 Signed-off-by: Amit Ghadge Signed-off-by: Bryn M. Reeves --- sos/plugins/elastic.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 sos/plugins/elastic.py diff --git a/sos/plugins/elastic.py b/sos/plugins/elastic.py new file mode 100644 index 00000000..d4d93bc4 --- /dev/null +++ b/sos/plugins/elastic.py @@ -0,0 +1,60 @@ +# Copyright (C) 2018 Amit Ghadge +# +# This file is part of the sos project: https://github.com/sosreport/sos +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# version 2 of the GNU General Public License. +# +# See the LICENSE file in the source distribution for further information. + +from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin +import re + + +class Elastic(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + """ + ElasticSearch service + """ + plugin_name = 'elastic' + profiles = ('services', ) + + packages = ('elasticsearch',) + + def get_hostname_port(self, els_config_file): + hostname = "localhost" + port = 9200 + with open(els_config_file) as fread: + for line in fread: + network_host = re.search(r'(^network.host):(.*)', line) + network_port = re.search(r'(^http.port):(.*)', line) + if network_host and len(network_host.groups()) == 2: + hostname = network_host.groups()[-1].strip() + hostname = re.sub(r'"|\'', '', hostname) + continue + if network_port and len(network_port.groups()) == 2: + port = network_port.groups()[-1].strip() + return hostname, port + + def setup(self): + els_config_file = "/etc/elasticsearch/elasticsearch.yml" + self.add_copy_spec(els_config_file) + + self.limit = self.get_option("log_size") + if self.get_option("all_logs"): + self.add_copy_spec("/var/log/elasticsearch/*", + sizelimit=self.limit) + else: + self.add_copy_spec("/var/log/elasticsearch/elasticsearch.log", + sizelimit=self.limit) + + host, port = self.get_hostname_port(els_config_file) + endpoint = host + ":" + port + self.add_cmd_output([ + "curl -X GET '%s/_cluster/settings?pretty'" % endpoint, + "curl -X GET '%s/_cluster/health?pretty'" % endpoint, + "curl -X GET '%s/_cluster/stats?pretty'" % endpoint, + "curl -X GET '%s/_cat/nodes?v'" % endpoint, + ]) + +# vim: set et ts=4 sw=4 : -- cgit