Merge pull request #84 from ppetit/policy
Added a policy for members of node clusters
diff --git a/heka/_service.sls b/heka/_service.sls
index f509f45..687b30d 100644
--- a/heka/_service.sls
+++ b/heka/_service.sls
@@ -2,13 +2,6 @@
{%- if server.enabled is defined and server.enabled %}
-heka_{{ service_name }}_log_file:
- file.managed:
- - name: /var/log/{{ service_name }}.log
- - user: heka
- - mode: 644
- - replace: false
-
heka_{{ service_name }}_conf_dir:
file.directory:
- name: /etc/{{ service_name }}
@@ -53,6 +46,45 @@
{%- if not systemd_enabled %}
+heka_{{ service_name }}_log_file:
+ file.managed:
+ - name: /var/log/{{ service_name }}.log
+ - user: heka
+ - mode: 644
+ - replace: false
+
+{%- set logrotate_conf = "/etc/logrotate_" ~ service_name ~ ".conf" %}
+
+{{ logrotate_conf }}:
+ file.managed:
+ - source: salt://heka/files/heka_logrotate.conf
+ - template: jinja
+ - defaults:
+ service_name: {{ service_name }}
+ - user: root
+ - group: root
+ - mode: 644
+
+{%- set logrotate_command = "/usr/local/bin/" ~ service_name ~ "_logrotate" %}
+
+{{ logrotate_command }}:
+ file.managed:
+ - source: salt://heka/files/heka_logrotate.cron
+ - template: jinja
+ - defaults:
+ service_name: {{ service_name }}
+ logrotate_conf: {{ logrotate_conf }}
+ - user: root
+ - group: root
+ - mode: 755
+ - require:
+ - file: {{ logrotate_conf }}
+ cron.present:
+ - identifier: {{ service_name }}_logrotate_cron
+ - minute: '*/30'
+ - require:
+ - file: {{ logrotate_command }}
+
heka_{{ service_name }}_service_wrapper:
file.managed:
- name: /usr/local/bin/{{ service_name }}_wrapper
diff --git a/heka/files/heka_logrotate.conf b/heka/files/heka_logrotate.conf
new file mode 100644
index 0000000..2e290ad
--- /dev/null
+++ b/heka/files/heka_logrotate.conf
@@ -0,0 +1,21 @@
+/var/log/{{ service_name }}.log {
+ # Heka cannot be told to close its log file and re-open it so we need to
+ # use the copytruncate option
+ copytruncate
+ compress
+ delaycompress
+ missingok
+ notifempty
+ # logrotate allows to use only year, month, day and unix epoch
+ dateext
+ dateformat -%Y%m%d-%s
+ # number of rotated files to keep
+ rotate 10
+ # do not rotate files unless both size and time conditions are met
+ hourly
+ minsize 20M
+ # force rotate if filesize exceeded 100M
+ maxsize 100M
+ # this must map the /var/log directory group ownership
+ su root syslog
+}
diff --git a/heka/files/heka_logrotate.cron b/heka/files/heka_logrotate.cron
new file mode 100644
index 0000000..cc3e249
--- /dev/null
+++ b/heka/files/heka_logrotate.cron
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+test -x /usr/sbin/logrotate || exit 0
+
+LOCK_FILE="/var/lock/logrotate.{{ service_name }}.lock"
+
+lock() {
+ exec 903>$LOCK_FILE
+ flock -n 903 && return 0 || return 1
+}
+
+unlock() {
+ flock -u 903
+}
+
+fail() {
+ if [ -z "$1" ]
+ then
+ MESSAGE="WARNING logrotate failed, no reason provided"
+ else
+ MESSAGE=$1
+ fi
+ /usr/bin/logger -t logrotate "{{ service_name }} ${MESSAGE}"
+ unlock
+ exit 1
+}
+
+lock || fail "WARNING {{ service_name }} logrotate flock failed, exiting"
+
+
+TMP_FILE=$(/bin/mktemp)
+nice ionice -c3 /usr/sbin/logrotate -s /var/lib/logrotate/{{ service_name }}.status {{ logrotate_conf }} >& $TMP_FILE
+EXITVALUE=$?
+
+if [ -f /etc/redhat-release ] || [ -f /etc/centos-release ];
+then
+ # Due to bug in logrotate on centos/rhel, it always returns 0. Use grep for
+ # detect errors; exit code 1 is considered a success as no errors were
+ # found.
+ grep -q error $TMP_FILE
+ EXITVALUE=$?
+ EXPECTEDVALUE=1
+else
+ EXPECTEDVALUE=0
+fi
+rm $TMP_FILE
+
+if [ "${EXITVALUE}" != "${EXPECTEDVALUE}" ]; then
+ fail "ALERT exited abnormally with [${EXITVALUE}] (${EXPECTEDVALUE} was expected)"
+fi
+
+unlock
+exit 0
diff --git a/heka/files/lma_alarm.lua b/heka/files/lma_alarm.lua
index b826112..56530d3 100644
--- a/heka/files/lma_alarm.lua
+++ b/heka/files/lma_alarm.lua
@@ -35,6 +35,9 @@
{%- endfor %}
},
{%- endif %}
+ {%- if _rule.value is defined %}
+ ['value'] = '{{ _rule.value }}',
+ {%- endif %}
},
{%- endfor %}
},
diff --git a/heka/files/lua/decoders/collectd.lua b/heka/files/lua/decoders/collectd.lua
index 8762b54..b206100 100644
--- a/heka/files/lua/decoders/collectd.lua
+++ b/heka/files/lua/decoders/collectd.lua
@@ -260,6 +260,7 @@
end
elseif metric_source == 'nova' then
if sample['plugin_instance'] == 'nova_services' or
+ sample['plugin_instance'] == 'nova_services_percent' or
sample['plugin_instance'] == 'nova_service' then
msg['Fields']['name'] = 'openstack_' .. sample['plugin_instance']
msg['Fields']['service'] = sample['meta']['service']
@@ -276,6 +277,7 @@
end
elseif metric_source == 'cinder' then
if sample['plugin_instance'] == 'cinder_services' or
+ sample['plugin_instance'] == 'cinder_services_percent' or
sample['plugin_instance'] == 'cinder_service' then
msg['Fields']['name'] = 'openstack_' .. sample['plugin_instance']
msg['Fields']['service'] = sample['meta']['service']
@@ -308,6 +310,7 @@
elseif sample['type_instance'] == 'subnets' then
msg['Fields']['name'] = 'openstack' .. sep .. 'neutron' .. sep .. 'subnets'
elseif sample['type_instance'] == 'neutron_agents' or
+ sample['type_instance'] == 'neutron_agents_percent' or
sample['type_instance'] == 'neutron_agent' then
msg['Fields']['name'] = 'openstack_' .. sample['type_instance']
msg['Fields']['service'] = sample['meta']['service']
diff --git a/heka/files/lua/decoders/lma_apache_access.lua b/heka/files/lua/decoders/lma_apache_access.lua
index 704e4d8..bf41ff1 100644
--- a/heka/files/lua/decoders/lma_apache_access.lua
+++ b/heka/files/lua/decoders/lma_apache_access.lua
@@ -77,11 +77,11 @@
end
if fields.request_time then
if fields.request_time.representation == 'us' then
- fields.http_response_size = fields.request_time.value / 1e6
+ fields.http_response_time = fields.request_time.value / 1e6
elseif fields.request_time.representation == 'ms' then
- fields.http_response_size = fields.request_time.value / 1e3
+ fields.http_response_time = fields.request_time.value / 1e3
else
- fields.http_response_size = fields.request_time.value
+ fields.http_response_time = fields.request_time.value
end
fields.request_time = nil
end