From abe222fa9edf318d5c446f890b796c1caab20cfb Mon Sep 17 00:00:00 2001 From: Clark Boylan <clark.boylan@gmail.com> Date: Wed, 12 Jun 2013 15:15:01 -0700 Subject: [PATCH] Fix logstash gearman puppet. * modules/openstack_project/manifests/logstash.pp: Concat is not available in our version of puppetlabs stdlib. Use flatten instead which is available. Remove dependency on non existant logstash::indexer class. Fix requires orders. * modules/openstack_project/manifests/logstash_worker.pp: Fix requires orders. * modules/openstack_project/files/logstash/jenkins-log-client.init * modules/openstack_project/files/logstash/jenkins-log-worker.init: Set pidfile argument when calling scripts. * modules/openstack_project/files/logstash/log-gearman-worker.py: Use python2 compatible gzip.GzipFile instead of gzip.decompress. Send work exception instead of work fail when an exception happens. Log these exceptions locally as well. Change-Id: Idf0a873215acb72187e058a0306a21ccd928d464 Reviewed-on: https://review.openstack.org/32804 Reviewed-by: Jeremy Stanley <fungi@yuggoth.org> Reviewed-by: Khai Do <zaro0508@gmail.com> Reviewed-by: James E. Blair <corvus@inaugust.com> Approved: Clark Boylan <clark.boylan@gmail.com> Tested-by: Jenkins --- .../files/logstash/jenkins-log-client.init | 2 +- .../files/logstash/jenkins-log-worker.init | 2 +- .../files/logstash/log-gearman-worker.py | 12 +++++++++--- modules/openstack_project/manifests/logstash.pp | 11 ++++++++--- .../openstack_project/manifests/logstash_worker.pp | 14 +++++++++++--- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/modules/openstack_project/files/logstash/jenkins-log-client.init b/modules/openstack_project/files/logstash/jenkins-log-client.init index 81bb6a9865..04357b3d10 100755 --- a/modules/openstack_project/files/logstash/jenkins-log-client.init +++ b/modules/openstack_project/files/logstash/jenkins-log-client.init @@ -16,8 +16,8 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Jenkins Log Client" NAME=jenkins-log-client DAEMON=/usr/local/bin/log-gearman-client.py -DAEMON_ARGS='-c /etc/logstash/jenkins-log-client.yaml -d /var/log/logstash/log-client-debug.log' PIDFILE=/var/run/$NAME/$NAME.pid +DAEMON_ARGS="-c /etc/logstash/jenkins-log-client.yaml -d /var/log/logstash/log-client-debug.log -p $PIDFILE" SCRIPTNAME=/etc/init.d/$NAME USER=logstash diff --git a/modules/openstack_project/files/logstash/jenkins-log-worker.init b/modules/openstack_project/files/logstash/jenkins-log-worker.init index 882840a743..c8ef3eb361 100755 --- a/modules/openstack_project/files/logstash/jenkins-log-worker.init +++ b/modules/openstack_project/files/logstash/jenkins-log-worker.init @@ -16,8 +16,8 @@ PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Jenkins Log Worker" NAME=jenkins-log-worker DAEMON=/usr/local/bin/log-gearman-worker.py -DAEMON_ARGS='-c /etc/logstash/jenkins-log-worker.yaml -d /var/log/logstash/log-worker-debug.log' PIDFILE=/var/run/$NAME/$NAME.pid +DAEMON_ARGS="-c /etc/logstash/jenkins-log-worker.yaml -d /var/log/logstash/log-worker-debug.log -p $PIDFILE" SCRIPTNAME=/etc/init.d/$NAME USER=logstash diff --git a/modules/openstack_project/files/logstash/log-gearman-worker.py b/modules/openstack_project/files/logstash/log-gearman-worker.py index 38c02f826e..18921b1abf 100644 --- a/modules/openstack_project/files/logstash/log-gearman-worker.py +++ b/modules/openstack_project/files/logstash/log-gearman-worker.py @@ -15,6 +15,7 @@ # under the License. import argparse +import cStringIO import daemon import gear import gzip @@ -83,8 +84,9 @@ class LogRetriever(threading.Thread): out_event["event_message"] = line self.logq.put(out_event) job.sendWorkComplete() - except: - job.sendWorkFail() + except Exception as e: + logging.exception("Exception handling log event.") + job.sendWorkException(str(e).encode('utf-8')) def _retrieve_log(self, source_url, retry): # TODO (clarkb): This should check the content type instead of file @@ -100,7 +102,11 @@ class LogRetriever(threading.Thread): logging.exception("Unable to get log data.") if gzipped: logging.debug("Decompressing gzipped source file.") - buf = gzip.decompress(raw_buf).decode('utf-8') + raw_strIO = cStringIO.StringIO(raw_buf) + f = gzip.GzipFile(fileobj=raw_strIO) + buf = f.read().decode('utf-8') + raw_strIO.close() + f.close() else: logging.debug("Decoding source file.") buf = raw_buf.decode('utf-8') diff --git a/modules/openstack_project/manifests/logstash.pp b/modules/openstack_project/manifests/logstash.pp index cb2d98ccaf..e60161766e 100644 --- a/modules/openstack_project/manifests/logstash.pp +++ b/modules/openstack_project/manifests/logstash.pp @@ -21,7 +21,7 @@ class openstack_project::logstash ( ) { $iptables_es_rule = regsubst ($elasticsearch_masters, '^(.*)$', '-m state --state NEW -m tcp -p tcp --dport 9200:9400 -s \1 -j ACCEPT') $iptables_gm_rule = regsubst ($gearman_workers, '^(.*)$', '-m state --state NEW -m tcp -p tcp --dport 4730 -s \1 -j ACCEPT') - $iptables_rule = concat($iptables_es_rule, $iptables_gm_rule) + $iptables_rule = flatten([$iptables_es_rule, $iptables_gm_rule]) class { 'openstack_project::server': iptables_public_tcp_ports => [22, 80], iptables_rules6 => $iptables_rule, @@ -59,6 +59,12 @@ class openstack_project::logstash ( group => 'root', mode => '0755', source => 'puppet:///modules/openstack_project/logstash/log-gearman-client.py', + require => [ + Package['python-daemon'], + Package['python-zmq'], + Package['python-yaml'], + Package['gear'], + ], } file { '/etc/logstash/jenkins-log-client.yaml': @@ -67,7 +73,6 @@ class openstack_project::logstash ( group => 'root', mode => '0555', source => 'puppet:///modules/openstack_project/logstash/jenkins-log-client.yaml', - require => Class['logstash::indexer'], } file { '/etc/init.d/jenkins-log-client': @@ -77,7 +82,7 @@ class openstack_project::logstash ( mode => '0555', source => 'puppet:///modules/openstack_project/logstash/jenkins-log-client.init', require => [ - File['/usr/local/bin/log-client.py'], + File['/usr/local/bin/log-gearman-client.py'], File['/etc/logstash/jenkins-log-client.yaml'], ], } diff --git a/modules/openstack_project/manifests/logstash_worker.pp b/modules/openstack_project/manifests/logstash_worker.pp index 1ef5238722..1b1473e264 100644 --- a/modules/openstack_project/manifests/logstash_worker.pp +++ b/modules/openstack_project/manifests/logstash_worker.pp @@ -55,6 +55,12 @@ class openstack_project::logstash_worker ( group => 'root', mode => '0755', source => 'puppet:///modules/openstack_project/logstash/log-gearman-worker.py', + require => [ + Package['python-daemon'], + Package['python-zmq'], + Package['python-yaml'], + Package['gear'], + ], } file { '/etc/logstash/jenkins-log-worker.yaml': @@ -63,7 +69,6 @@ class openstack_project::logstash_worker ( group => 'root', mode => '0555', source => 'puppet:///modules/openstack_project/logstash/jenkins-log-worker.yaml', - require => Class['logstash::indexer'], } file { '/etc/init.d/jenkins-log-worker': @@ -73,7 +78,7 @@ class openstack_project::logstash_worker ( mode => '0555', source => 'puppet:///modules/openstack_project/logstash/jenkins-log-worker.init', require => [ - File['/usr/local/bin/log-worker.py'], + File['/usr/local/bin/log-gearman-worker.py'], File['/etc/logstash/jenkins-log-worker.yaml'], ], } @@ -82,6 +87,9 @@ class openstack_project::logstash_worker ( enable => true, hasrestart => true, subscribe => File['/etc/logstash/jenkins-log-worker.yaml'], - require => File['/etc/init.d/jenkins-log-worker'], + require => [ + Class['logstash::indexer'], + File['/etc/init.d/jenkins-log-worker'], + ], } }