Merge pull request #19 from simonpasquier/stacklight
Merge master into stacklight
diff --git a/elasticsearch/client.sls b/elasticsearch/client.sls
index f336cd3..4c8246e 100644
--- a/elasticsearch/client.sls
+++ b/elasticsearch/client.sls
@@ -8,6 +8,10 @@
- user: root
- group: root
+elasticsearch_client_packages:
+ pkg.installed:
+ - names: {{ client.pkgs }}
+
{%- for index_name, index in client.get('index', {}).iteritems() %}
elasticsearch_index_{{ index_name }}:
{%- if index.get('enabled', False) %}
@@ -19,6 +23,8 @@
elasticsearch_index_template.absent:
- name: {{ index_name }}
{%- endif %}
+ - require:
+ - pkg: elasticsearch_client_packages
{%- endfor %}
{%- endif %}
diff --git a/elasticsearch/files/grafana_influxdb.json b/elasticsearch/files/grafana_influxdb.json
index 1697da0..9eec5af 100644
--- a/elasticsearch/files/grafana_influxdb.json
+++ b/elasticsearch/files/grafana_influxdb.json
@@ -90,19 +90,12 @@
"dsType": "influxdb",
"fill": "",
"function": "last",
- "groupBy": [
- {
- "params": [
- "auto"
- ],
- "type": "time"
- }
- ],
+ "groupBy": [],
"groupby_field": "",
"interval": "",
"measurement": "cluster_status",
"policy": "default",
- "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'elasticsearch' AND $timeFilter GROUP BY time($interval)",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'elasticsearch' AND $timeFilter",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
@@ -123,10 +116,11 @@
"tags": [
{
"key": "environment_label",
- "operator": "=",
- "value": "$environment"
+ "operator": "=~",
+ "value": "/^$environment$/"
},
{
+ "condition": "AND",
"key": "cluster_name",
"operator": "=",
"value": "elasticsearch"
@@ -232,17 +226,10 @@
{
"alias": "number",
"dsType": "influxdb",
- "groupBy": [
- {
- "params": [
- "auto"
- ],
- "type": "time"
- }
- ],
+ "groupBy": [],
"measurement": "elasticsearch_cluster_number_of_nodes",
"policy": "default",
- "query": "SELECT last(\"value\") FROM \"elasticsearch_cluster_number_of_nodes\" WHERE $timeFilter GROUP BY time($interval)",
+ "query": "SELECT last(\"value\") FROM \"elasticsearch_cluster_number_of_nodes\" WHERE $timeFilter",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
@@ -263,8 +250,8 @@
"tags": [
{
"key": "environment_label",
- "operator": "=",
- "value": "$environment"
+ "operator": "=~",
+ "value": "/^$environment$/"
}
]
}
@@ -726,17 +713,10 @@
"column": "value",
"dsType": "influxdb",
"function": "last",
- "groupBy": [
- {
- "params": [
- "auto"
- ],
- "type": "time"
- }
- ],
+ "groupBy": [],
"measurement": "lma_components_threads",
"policy": "default",
- "query": "SELECT last(\"value\") FROM \"lma_components_threads\" WHERE \"service\" = 'elasticsearch' AND \"hostname\" =~ /^$server$/ AND $timeFilter GROUP BY time($interval)",
+ "query": "SELECT last(\"value\") FROM \"lma_components_threads\" WHERE \"service\" = 'elasticsearch' AND \"hostname\" =~ /^$server$/ AND $timeFilter",
"rawQuery": false,
"refId": "A",
"resultFormat": "time_series",
@@ -763,8 +743,8 @@
{
"condition": "AND",
"key": "hostname",
- "operator": "=",
- "value": "$server"
+ "operator": "=~",
+ "value": "/^$server$/"
}
]
}
@@ -1333,5 +1313,5 @@
},
"timezone": "browser",
"title": "Elasticsearch",
- "version": 3
-}
\ No newline at end of file
+ "version": 4
+}
diff --git a/elasticsearch/map.jinja b/elasticsearch/map.jinja
index e2d7871..36dd674 100644
--- a/elasticsearch/map.jinja
+++ b/elasticsearch/map.jinja
@@ -20,7 +20,15 @@
{%- set server = salt['grains.filter_by'](base_defaults, merge=salt['pillar.get']('elasticsearch:server')) %}
{%- load_yaml as client_defaults %}
-default:
+Debian:
+ pkgs:
+ - python-elasticsearch
+ server:
+ host: 127.0.0.1
+ port: 9200
+RedHat:
+ pkgs:
+ - python-elasticsearch
server:
host: 127.0.0.1
port: 9200
diff --git a/elasticsearch/meta/heka.yml b/elasticsearch/meta/heka.yml
index 8b13789..90b3ae7 100644
--- a/elasticsearch/meta/heka.yml
+++ b/elasticsearch/meta/heka.yml
@@ -1 +1,80 @@
-
+{%- if pillar.elasticsearch.server is defined %}
+metric_collector:
+ trigger:
+ elasticsearch_check:
+ description: 'Elasticsearch cannot be checked'
+ severity: down
+ rules:
+ - metric: elasticsearch_check
+ relational_operator: '=='
+ threshold: 0
+ window: 60
+ periods: 0
+ function: last
+ elasticsearch_health_critical:
+ description: 'Elasticsearch cluster health is critical'
+ severity: critical
+ rules:
+ - metric: elasticsearch_cluster_health
+ relational_operator: '=='
+ threshold: 3 # red
+ window: 60
+ function: min
+ elasticsearch_health_warning:
+ description: 'Elasticsearch cluster health is warning'
+ severity: warning
+ rules:
+ - metric: elasticsearch_cluster_health
+ relational_operator: '=='
+ threshold: 2 # yellow
+ window: 60
+ function: min
+ alarm:
+ elasticsearch_check:
+ alerting: enabled
+ triggers:
+ - elasticsearch_check
+ dimension:
+ service: elasticsearch
+ elasticsearch_health:
+ alerting: enabled
+ triggers:
+ - elasticsearch_health_critical
+ - elasticsearch_health_warning
+ dimension:
+ cluster: elasticsearch
+aggregator:
+ alarm_cluster:
+ elasticsearch_service:
+ policy: majority_of_members
+ alerting: enabled
+ group_by: hostname
+ match:
+ service: elasticsearch
+ members:
+ - elasticsearch_check
+ dimension:
+ service: elasticsearch-cluster
+ nagios_host: 01-service-clusters
+ elasticsearch_cluster:
+ policy: highest_severity
+ alerting: enabled
+ match:
+ cluster: elasticsearch
+ members:
+ - elasticsearch_health
+ dimension:
+ service: elasticsearch-cluster
+ nagios_host: 01-service-clusters
+ elasticsearch:
+ policy: highest_severity
+ alerting: enabled_with_notification
+ match:
+ service: elasticsearch-cluster
+ members:
+ - elasticsearch_service
+ - elasticsearch_cluster
+ dimension:
+ cluster_name: elasticsearch
+ nagios_host: 00-top-clusters
+{%- endif %}