jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/342772 )
Change subject: Update logstash to 5.2.2, kibana to 5.1.2
......................................................................
Update logstash to 5.2.2, kibana to 5.1.2
In preparation for upgrading production to a modern version of the ELK
stack, upgrade mwv.
Kibana needs to be upgraded in lock-step with elasticsearch, so 5.1.2
was chosen instead of 5.2.2 which is the latest release.
Changes:
* This new version of logstash gets stuck in a boot loop OOM'ing with
the previously set 64m ram. Even at 128m ram was able to trigger an
OOM. Increase to 192m. Additionally moved setting from defaults file
to jvm.options, which is the new standard for elastic.co packages.
* update jdk from 7 to 8 to match logstash new requirements
* upstream packaging no longer includes both sets of startup scripts, so
removes the kludge that previously deleted the upstart scripts.
* Adds new logstash::plugin define, as plugins are now handled with a
script rather than all bundled together into a single contrib package.
* Remove /etc/defaults/logstash, this is no longer used in 5.x.
* elasticsearch_http output no longer exists, instead it is
elasticsearchi now which only speaks http. This also no longer has
a replication setting, Elastic consider async writes to be a
Bad Idea™ which can lead to cluster overload.
* Add the haveged package to provide entropy in a vm so that JRuby
doesn't spend minutes booting up waiting on entropy from /dev/random
Bug: T154473
Change-Id: I4f23fd402d13ad33c8b6a72fc96b3b39be6ba364
---
M puppet/hieradata/common.yaml
D puppet/modules/elasticsearch/files/elasticsearch.yml
M puppet/modules/elasticsearch/manifests/init.pp
A puppet/modules/kibana/files/kibana-dump.json
A puppet/modules/kibana/files/kibana-mapping.json
D puppet/modules/kibana/manifests/dashboard.pp
M puppet/modules/kibana/manifests/init.pp
D puppet/modules/kibana/templates/check-dashboard.erb
D puppet/modules/kibana/templates/config.js
D puppet/modules/kibana/templates/save-dashboard.erb
M puppet/modules/logstash/files/elasticsearch-template.json
M puppet/modules/logstash/manifests/init.pp
M puppet/modules/logstash/manifests/output/elasticsearch.pp
A puppet/modules/logstash/manifests/plugin.pp
D puppet/modules/logstash/templates/default.erb
A puppet/modules/logstash/templates/jvm.options.erb
M puppet/modules/logstash/templates/output/elasticsearch.erb
M puppet/modules/role/manifests/elk.pp
M puppet/modules/role/settings/elk.yaml
19 files changed, 541 insertions(+), 256 deletions(-)
Approvals:
BryanDavis: Looks good to me, approved
jenkins-bot: Verified
diff --git a/puppet/hieradata/common.yaml b/puppet/hieradata/common.yaml
index eacaaba..4adc168 100644
--- a/puppet/hieradata/common.yaml
+++ b/puppet/hieradata/common.yaml
@@ -164,10 +164,9 @@
kibana::deploy_dir: "%{hiera('mwv::vendor_dir')}/kibana"
kibana::default_route: /dashboard/elasticsearch/default
-logstash::heap_memory_mb: 64
-logstash::filter_workers: 1
+logstash::heap_memory_mb: 192
+logstash::pipeline_workers: 1
logstash::output::elasticsearch::host: 127.0.0.1
-logstash::output::elasticsearch::replication: async
logstash::output::elasticsearch::manage_indices: true
logstash::output::elasticsearch::priority: 90
diff --git a/puppet/modules/elasticsearch/files/elasticsearch.yml
b/puppet/modules/elasticsearch/files/elasticsearch.yml
deleted file mode 100644
index e69de29..0000000
--- a/puppet/modules/elasticsearch/files/elasticsearch.yml
+++ /dev/null
diff --git a/puppet/modules/elasticsearch/manifests/init.pp
b/puppet/modules/elasticsearch/manifests/init.pp
index 5988ce2..27e0236 100644
--- a/puppet/modules/elasticsearch/manifests/init.pp
+++ b/puppet/modules/elasticsearch/manifests/init.pp
@@ -39,19 +39,15 @@
]
}
+ exec { 'wait-for-elasticsearch':
+ require => Service['elasticsearch'],
+ command => '/usr/bin/wget --tries 20 --retry-connrefused
http://localhost:9200/',
+ }
+
file { '/etc/default/elasticsearch':
source => 'puppet:///modules/elasticsearch/defaults',
require => Package['elasticsearch'],
notify => Service['elasticsearch'],
- }
-
- file { '/etc/elasticsearch/elasticsearch.yml':
- source => 'puppet:///modules/elasticsearch/elasticsearch.yml',
- require => Package['elasticsearch'],
- notify => Service['elasticsearch'],
- owner => 'root',
- group => 'root',
- mode => '0444',
}
file { '/etc/elasticsearch/jvm.options':
diff --git a/puppet/modules/kibana/files/kibana-dump.json
b/puppet/modules/kibana/files/kibana-dump.json
new file mode 100644
index 0000000..ce843be
--- /dev/null
+++ b/puppet/modules/kibana/files/kibana-dump.json
@@ -0,0 +1,14 @@
+{"index":{"_index":".kibana","_type":"config","_id":"5.1.2"}}
+{"buildNum":14588,"defaultIndex":"logstash-*"}
+{"index":{"_index":".kibana","_type":"visualization","_id":"Events-Over-Time"}}
+{"title":"Events Over Time","visState":"{\"title\":\"Events Over
Time\",\"type\":\"line\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"showCircles\":true,\"smoothLines\":false,\"interpolate\":\"linear\",\"scale\":\"linear\",\"drawLinesBetweenPoints\":true,\"radiusRatio\":9,\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"@timestamp\",\"interval\":\"auto\",\"customInterval\":\"2h\",\"min_doc_count\":1,\"extended_bounds\":{}}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"legendOpen\":false}}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}
+{"index":{"_index":".kibana","_type":"visualization","_id":"Event-Types"}}
+{"title":"Event Types","visState":"{\"title\":\"Event
Types\",\"type\":\"histogram\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"scale\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"legendOpen\":false}}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}
+{"index":{"_index":".kibana","_type":"visualization","_id":"Event-Level"}}
+{"title":"Event Level","visState":"{\"title\":\"Event
Level\",\"type\":\"histogram\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"scale\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"level\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"filter\":[]}"}}
+{"index":{"_index":".kibana","_type":"index-pattern","_id":"logstash-*"}}
+{"title":"logstash-*","timeFieldName":"@timestamp","fields":"[{\"name\":\"timeSpentBackend.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"wiki\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"params.format\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"channel\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"reqId.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"params.action.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"ip.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"params.formatversion.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"metaDirty\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"metaDirty.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"http_method\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"host\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"dataDirty\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"params.limit\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"method\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"level\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"params.format.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"ip\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"count\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"runtime\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"mwversion\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"normalized_message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"params.suggest.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"reqId\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"tags\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"userAgent.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"dataDirty.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"params.action\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false,\"searchable\":false,\"aggregatable\":false},{\"name\":\"process_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"server\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"private\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"referrer.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"normalized_message.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"params.suggest\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"session\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"session.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"count.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"process_id.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"key.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"method.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"udp_sender\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":false,\"aggregatable\":false},{\"name\":\"private.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"normalized_message.normalized_message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"params.search.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"uid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"forcePersist\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"geoip.location\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"@version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"sequence_id\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":false,\"aggregatable\":false},{\"name\":\"params.limit.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"http_method.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"forcePersist.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"key\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"hadError\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"params.namespace\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"params.search\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"params.formatversion\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"url.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"wiki.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"server.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"ts.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"callers.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"userAgent\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"message\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"params.namespace.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"master\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"referrer\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":1,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"uid.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"mwversion.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"channel.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"callers\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"timeSpentBackend\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"runtime.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"master.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"hadError.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"ts\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"severity_label.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"timestamp.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"pid\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"program\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"facility_label.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"program.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"logsource.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"facility.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"priority.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"timestamp\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"severity\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"logsource\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"priority\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"severity.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"pid.raw\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"facility\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true,\"searchable\":true,\"aggregatable\":true},{\"name\":\"severity_label\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"facility_label\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":true,\"doc_values\":false,\"searchable\":true,\"aggregatable\":false},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false,\"searchable\":false,\"aggregatable\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false,\"searchable\":true,\"aggregatable\":true},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false,\"searchable\":false,\"aggregatable\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false,\"searchable\":false,\"aggregatable\":false}]"}
+{"index":{"_index":".kibana","_type":"search","_id":"Default-Event-List"}}
+{"title":"Default Event
List","description":"","hits":0,"columns":["level","wiki","message"],"sort":["@timestamp","desc"],"version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"logstash-*\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}}}"}}
+{"index":{"_index":".kibana","_type":"dashboard","_id":"default"}}
+{"title":"default","hits":0,"description":"","panelsJSON":"[{\"id\":\"Events-Over-Time\",\"type\":\"visualization\",\"panelIndex\":1,\"size_x\":12,\"size_y\":2,\"col\":1,\"row\":1},{\"id\":\"Event-Types\",\"type\":\"visualization\",\"panelIndex\":2,\"size_x\":6,\"size_y\":2,\"col\":1,\"row\":3},{\"id\":\"Event-Level\",\"type\":\"visualization\",\"panelIndex\":3,\"size_x\":6,\"size_y\":2,\"col\":7,\"row\":3},{\"id\":\"Default-Event-List\",\"type\":\"search\",\"panelIndex\":4,\"size_x\":12,\"size_y\":11,\"col\":1,\"row\":5,\"columns\":[\"level\",\"wiki\",\"message\"],\"sort\":[\"@timestamp\",\"desc\"]}]","optionsJSON":"{\"darkTheme\":false}","uiStateJSON":"{\"P-3\":{\"vis\":{\"legendOpen\":false}}}","version":1,"timeRestore":false,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}}}]}"}}
diff --git a/puppet/modules/kibana/files/kibana-mapping.json
b/puppet/modules/kibana/files/kibana-mapping.json
new file mode 100644
index 0000000..c4c6a7f
--- /dev/null
+++ b/puppet/modules/kibana/files/kibana-mapping.json
@@ -0,0 +1,180 @@
+{
+ "aliases": {},
+ "mappings": {
+ "server": {
+ "properties": {
+ "uuid": {
+ "type": "keyword"
+ }
+ }
+ },
+ "config": {
+ "properties": {
+ "buildNum": {
+ "type": "keyword"
+ },
+ "defaultIndex": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "index-pattern": {
+ "properties": {
+ "fieldFormatMap": {
+ "type": "text"
+ },
+ "fields": {
+ "type": "text"
+ },
+ "intervalName": {
+ "type": "text"
+ },
+ "notExpandable": {
+ "type": "boolean"
+ },
+ "sourceFilters": {
+ "type": "text"
+ },
+ "timeFieldName": {
+ "type": "text"
+ },
+ "title": {
+ "type": "text"
+ }
+ }
+ },
+ "dashboard": {
+ "properties": {
+ "description": {
+ "type": "text"
+ },
+ "hits": {
+ "type": "integer"
+ },
+ "kibanaSavedObjectMeta": {
+ "properties": {
+ "searchSourceJSON": {
+ "type": "text"
+ }
+ }
+ },
+ "optionsJSON": {
+ "type": "text"
+ },
+ "panelsJSON": {
+ "type": "text"
+ },
+ "refreshInterval": {
+ "properties": {
+ "display": {
+ "type": "text"
+ },
+ "pause": {
+ "type": "boolean"
+ },
+ "section": {
+ "type": "integer"
+ },
+ "value": {
+ "type": "integer"
+ }
+ }
+ },
+ "timeFrom": {
+ "type": "text"
+ },
+ "timeRestore": {
+ "type": "boolean"
+ },
+ "timeTo": {
+ "type": "text"
+ },
+ "title": {
+ "type": "text"
+ },
+ "uiStateJSON": {
+ "type": "text"
+ },
+ "version": {
+ "type": "integer"
+ }
+ }
+ },
+ "search": {
+ "properties": {
+ "columns": {
+ "type": "text"
+ },
+ "description": {
+ "type": "text"
+ },
+ "hits": {
+ "type": "integer"
+ },
+ "kibanaSavedObjectMeta": {
+ "properties": {
+ "searchSourceJSON": {
+ "type": "text"
+ }
+ }
+ },
+ "sort": {
+ "type": "text"
+ },
+ "title": {
+ "type": "text"
+ },
+ "version": {
+ "type": "integer"
+ }
+ }
+ },
+ "visualization": {
+ "properties": {
+ "description": {
+ "type": "text"
+ },
+ "kibanaSavedObjectMeta": {
+ "properties": {
+ "searchSourceJSON": {
+ "type": "text"
+ }
+ }
+ },
+ "savedSearchId": {
+ "type": "text"
+ },
+ "title": {
+ "type": "text"
+ },
+ "uiStateJSON": {
+ "type": "text"
+ },
+ "version": {
+ "type": "integer"
+ },
+ "visState": {
+ "type": "text"
+ }
+ }
+ }
+ },
+ "settings": {
+ "index": {
+ "creation_date": "1490215360374",
+ "number_of_shards": "1",
+ "number_of_replicas": "1",
+ "uuid": "g5yFFGPuSsGwZHzNSyWKHg",
+ "version": {
+ "created": "5010299"
+ },
+ "provided_name": ".kibana"
+ }
+ }
+}
diff --git a/puppet/modules/kibana/manifests/dashboard.pp
b/puppet/modules/kibana/manifests/dashboard.pp
deleted file mode 100644
index b2d1245..0000000
--- a/puppet/modules/kibana/manifests/dashboard.pp
+++ /dev/null
@@ -1,21 +0,0 @@
-# == Define: kibana::dashboard
-#
-# === Parameters:
-# - $content: Dashboard contents
-#
-define kibana::dashboard(
- $content,
-) {
- $safe_title = regsubst($title, '\W_', '-', 'G')
- $dashboard = {
- 'user' => 'guest',
- 'group' => 'guest',
- 'title' => $safe_title,
- 'dashboard' => $content,
- }
- exec { "save dashboard ${title}":
- command => template('kibana/save-dashboard.erb'),
- unless => template('kibana/check-dashboard.erb'),
- require => Service['elasticsearch'],
- }
-}
diff --git a/puppet/modules/kibana/manifests/init.pp
b/puppet/modules/kibana/manifests/init.pp
index 54fc826..8f455ac 100644
--- a/puppet/modules/kibana/manifests/init.pp
+++ b/puppet/modules/kibana/manifests/init.pp
@@ -18,25 +18,42 @@
$deploy_dir,
$default_route,
) {
- git::clone { 'operations/software/kibana':
- ensure => 'latest',
- directory => $deploy_dir,
- owner => 'root',
- group => 'root',
+ package { 'kibana':
+ ensure => latest,
}
- file { '/etc/kibana':
- ensure => directory,
- owner => 'root',
- group => 'root',
- mode => '0755',
- }
-
- file { '/etc/kibana/config.js':
- ensure => present,
- content => template('kibana/config.js'),
+ file { '/etc/kibana/kibana.yml':
+ ensure => file,
owner => 'root',
group => 'root',
- mode => '0644',
+ mode => '0444',
+ content => ordered_yaml({
+ 'kibana.defaultAppId' => 'dashboard/default',
+ 'logging.quiet' => true,
+ 'server.host' => '0.0.0.0',
+ }),
+ require => Package['kibana']
+ }
+
+ service { 'kibana':
+ ensure => running,
+ enable => true,
+ require => [
+ Package['kibana'],
+ File['/etc/kibana/kibana.yml'],
+ ],
+ }
+
+ exec { 'create-kibana-index':
+ command => 'curl -XPUT localhost:9200/.kibana --data-binary
@/vagrant/puppet/modules/kibana/files/kibana-mapping.json',
+ unless => 'curl -sf -XHEAD localhost:9200/.kibana',
+ require => Exec['wait-for-elasticsearch'],
+ }
+
+ exec { 'preload-kibana-dashboard':
+ command => 'curl -sf -XPOST localhost:9200/.kibana/_bulk
--data-binary @/vagrant/puppet/modules/kibana/files/kibana-dump.json >
/dev/null',
+ refreshonly => true,
+ subscribe => Exec['create-kibana-index'],
+ require => Exec['wait-for-elasticsearch'],
}
}
diff --git a/puppet/modules/kibana/templates/check-dashboard.erb
b/puppet/modules/kibana/templates/check-dashboard.erb
deleted file mode 100644
index fd7c262..0000000
--- a/puppet/modules/kibana/templates/check-dashboard.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-/usr/bin/curl -sf \
- 'http://127.0.0.1:9200/kibana-int/dashboard/<%= @safe_title %>' >/dev/null
diff --git a/puppet/modules/kibana/templates/config.js
b/puppet/modules/kibana/templates/config.js
deleted file mode 100644
index 1f6abd9..0000000
--- a/puppet/modules/kibana/templates/config.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/** @scratch /configuration/config.js/1
- * == Configuration
- * config.js is where you will find the core Kibana configuration. This file
- * contains parameters that must be set before kibana is run for the first
time.
- */
-define(['settings'],
-function (Settings) {
- "use strict";
-
- /** @scratch /configuration/config.js/2
- * === Parameters
- */
- return new Settings({
-
- /** @scratch /configuration/config.js/5
- * ==== elasticsearch
- *
- * Our apache config acts as a reverse proxy to the elasticsearch cluster.
- */
- elasticsearch: '//' + window.location.host,
-
- /** @scratch /configuration/config.js/5
- * ==== default_route
- *
- * This is the default landing page when you don't specify a dashboard to
- * load. You can specify files, scripts or saved dashboards here. For
- * example, if you had saved a dashboard called `WebLogs' to elasticsearch
- * you might use:
- *
- * +default_route: '/dashboard/elasticsearch/WebLogs',+
- */
- default_route : <%= @default_route.to_pson %>,
-
- /** @scratch /configuration/config.js/5
- * ==== kibana-int
- *
- * The default ES index to use for storing Kibana specific object
- * such as stored dashboards
- */
- kibana_index: "kibana-int",
-
- /** @scratch /configuration/config.js/5
- * ==== panel_name
- *
- * An array of panel modules available. Panels will only be loaded when
- * they are defined in the dashboard, but this list is used in the "add
- * panel" interface.
- */
- panel_names: [
- 'histogram',
- 'map',
- 'goal',
- 'table',
- 'filtering',
- 'timepicker',
- 'text',
- 'hits',
- 'column',
- 'trends',
- 'bettermap',
- 'query',
- 'terms',
- 'stats',
- 'sparklines'
- ]
- });
-});
diff --git a/puppet/modules/kibana/templates/save-dashboard.erb
b/puppet/modules/kibana/templates/save-dashboard.erb
deleted file mode 100644
index 56a83e7..0000000
--- a/puppet/modules/kibana/templates/save-dashboard.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-/usr/bin/curl -XPUT -s \
- 'http://127.0.0.1:9200/kibana-int/dashboard/<%= @safe_title %>' \
- --data-binary '<%= @dashboard.to_pson %>'
diff --git a/puppet/modules/logstash/files/elasticsearch-template.json
b/puppet/modules/logstash/files/elasticsearch-template.json
index 0e74c36..7b5dfc0 100644
--- a/puppet/modules/logstash/files/elasticsearch-template.json
+++ b/puppet/modules/logstash/files/elasticsearch-template.json
@@ -1,67 +1,148 @@
{
- "template": "logstash-*",
- "settings": {
- "number_of_shards": 1,
- "number_of_replicas": 0,
- "index.cache.field.type": "soft",
- "index.refresh_interval": "5s",
- "analysis": {
- "analyzer": {
- "default": {
- "type": "standard",
- "stopwords": "_none_"
+ "template" : "logstash-*",
+ "settings" : {
+ "number_of_shards" : 1,
+ "number_of_replicas" : 0,
+ "index.refresh_interval" : "5s",
+ "analysis" : {
+ "analyzer" : {
+ "default" : {
+ "type" : "standard",
+ "stopwords" : "_none_"
}
}
}
},
- "mappings": {
- "_default_": {
- "_all": { "enabled": true },
- "dynamic_templates": [ {
- "string_fields": {
- "match": "*",
- "match_mapping_type": "string",
- "mapping": {
- "type": "multi_field",
- "fields": {
- "{name}": {
- "type": "string",
- "index": "analyzed",
- "omit_norms": true
- },
- "raw": {
- "type": "string",
- "index": "no",
- "ignore_above": 256,
- "fielddata": {
- "format": "doc_values"
+ "mappings" : {
+ "_default_" : {
+ "_all" : {
+ "enabled" : true,
+ "omit_norms": true
+ },
+ "date_detection" : false,
+ "numeric_detection": false,
+ "dynamic_templates" : [
+ {
+ "string_fields" : {
+ "match_mapping_type" : "string",
+ "mapping" : {
+ "type" : "text",
+ "omit_norms" : true,
+ "fields" : {
+ "raw" : {
+ "type" : "keyword",
+ "doc_values": true
+ }
+ }
+ }
+ }
+ },
+ {
+ "boolean_to_string" : {
+ "match_mapping_type" : "boolean",
+ "mapping" : {
+ "type" : "keyword",
+ "omit_norms" : true,
+ "fields" : {
+ "raw" : {
+ "type" : "keyword",
+ "doc_values": true
+ }
+ }
+ }
+ }
+ },
+ {
+ "double_to_string" : {
+ "match_mapping_type" : "double",
+ "mapping" : {
+ "type" : "keyword",
+ "omit_norms" : true,
+ "fields" : {
+ "raw" : {
+ "type" : "keyword",
+ "doc_values": true
+ }
+ }
+ }
+ }
+ },
+ {
+ "long_to_string" : {
+ "match_mapping_type" : "long",
+ "mapping" : {
+ "type" : "keyword",
+ "omit_norms" : true,
+ "fields" : {
+ "raw" : {
+ "type" : "keyword",
+ "doc_values": true
}
}
}
}
}
- } ],
- "properties": {
- "@timestamp": { "type": "date", "index": "not_analyzed" },
- "@version": { "type": "string", "index": "not_analyzed" },
- "geoip" : {
- "type": "object",
- "dynamic": true,
- "properties": { "location": { "type": "geo_point" } }
+ ],
+ "properties" : {
+ "@timestamp" : {
+ "type" : "date",
+ "doc_values": true
},
- "host": { "type": "string", "index": "not_analyzed" },
- "message": {
- "type": "string",
- "index": "analyzed",
- "omit_norms": true
+ "@version" : {
+ "type" : "keyword",
+ "doc_values": true
},
- "sequence_id": { "type": "long" },
- "tags": {
- "type": "string",
- "index": "not_analyzed"
+ "geoip" : {
+ "type" : "object",
+ "dynamic" : true,
+ "properties" : {
+ "location" : {
+ "type" : "geo_point",
+ "doc_values": true
+ }
+ }
},
- "type": { "type": "string", "index": "not_analyzed" },
- "udp_sender": { "type": "string", "index": "not_analyzed" }
+ "host" : {
+ "type" : "keyword",
+ "doc_values": true
+ },
+ "level" : {
+ "type" : "keyword",
+ "doc_values": true
+ },
+ "message" : {
+ "type" : "text",
+ "omit_norms" : true
+ },
+ "normalized_message" : {
+ "type": "text",
+ "fields": {
+ "raw": {
+ "type": "keyword",
+ "doc_values": true
+ },
+ "normalized_message": {
+ "type" : "text",
+ "omit_norms" : true
+ }
+ }
+ },
+ "sequence_id" : {
+ "type": "long",
+ "doc_values": true
+ },
+ "tags" : {
+ "type" : "keyword",
+ "doc_values": true
+ },
+ "type" : {
+ "type" : "keyword",
+ "doc_values": true
+ },
+ "udp_sender" : {
+ "type" : "keyword",
+ "doc_values": true
+ }
}
}
}
diff --git a/puppet/modules/logstash/manifests/init.pp
b/puppet/modules/logstash/manifests/init.pp
index 0e30ec2..e1470ca 100644
--- a/puppet/modules/logstash/manifests/init.pp
+++ b/puppet/modules/logstash/manifests/init.pp
@@ -6,31 +6,35 @@
#
# == Parameters:
# - $heap_memory_mb: amount of memory to allocate to logstash in megabytes.
-# - $filter_workers: number of worker threads to run to process filters
+# - $pipeline_workers: number of worker threads to run to use for
+# filter/output processing
#
# == Sample usage:
#
# class { 'logstash':
# heap_memory_mb => 128,
-# filter_workers => 3,
+# pipeline_workers => 3,
# }
#
class logstash(
$heap_memory_mb,
- $filter_workers,
+ $pipeline_workers,
) {
- require_package('openjdk-7-jre-headless')
+ require_package('openjdk-8-jre-headless')
package { 'logstash':
- ensure => present,
- require => Package['openjdk-7-jre-headless'],
+ ensure => latest,
+ require => Package['openjdk-8-jre-headless'],
}
- file { '/etc/default/logstash':
- content => template('logstash/default.erb'),
- require => Package['logstash'],
- notify => Service['logstash'],
+ # JRuby waits for enough entropy from /dev/random when starting up.
Especially
+ # within VM's very little entropy may be available. haveged adds an
entropy source
+ # to fix this problem.
+ package { 'haveged':
+ ensure => present,
+ before => Service['logstash']
}
+ Package['haveged'] -> Logstash::Plugin <| |>
file { '/etc/logstash/conf.d':
ensure => directory,
@@ -41,31 +45,39 @@
require => Package['logstash'],
}
- service { 'logstash':
- ensure => running,
- provider => 'debian',
- enable => true,
- hasstatus => true,
- hasrestart => true,
- require => Package['logstash'],
+ file { '/etc/logstash/logstash.yml':
+ ensure => file,
+ content => ordered_yaml({
+ 'path.data' => '/var/lib/logstash',
+ 'path.config' => '/etc/logstash/conf.d',
+ 'path.logs' => '/var/log/logstash',
+ 'pipeline.workers' => $pipeline_workers,
+ }),
+ owner => 'root',
+ group => 'root',
+ mode => '0444',
+ require => Package['logstash'],
+ before => Service['logstash'],
+ notify => Service['logstash'],
}
- # Upstream package provides both sysv and upstart startup scripts. Remove
- # the upstart versions so that Puppet and `service logstash ...` don't
- # fight over which to use.
- file { '/etc/init/logstash.conf':
- ensure => absent,
- require => Package['logstash'],
- }
- file { '/etc/init/logstash-web.conf':
- ensure => absent,
- require => Package['logstash'],
- }
-
- exec { 'install logstash contrib plugins':
- command => '/opt/logstash/bin/plugin install contrib',
- unless => '/usr/bin/test -d /opt/logstash/vendor/logstash/',
+ file { '/etc/logstash/jvm.options':
+ ensure => file,
+ content => template('logstash/jvm.options.erb'),
+ owner => 'root',
+ group => 'root',
+ mode => '0444',
require => Package['logstash'],
notify => Service['logstash'],
}
+
+ service { 'logstash':
+ ensure => running,
+ provider => 'systemd',
+ enable => true,
+ require => [
+ Package['logstash'],
+ File['/etc/logstash/jvm.options']
+ ]
+ }
}
diff --git a/puppet/modules/logstash/manifests/output/elasticsearch.pp
b/puppet/modules/logstash/manifests/output/elasticsearch.pp
index 398ac1a..b7bf8ac 100644
--- a/puppet/modules/logstash/manifests/output/elasticsearch.pp
+++ b/puppet/modules/logstash/manifests/output/elasticsearch.pp
@@ -11,8 +11,6 @@
# - $idle_flush_time: Maxmimum seconds to wait between sends. Default 1.
# - $index: Index to write events to. Default 'logstash-%{+YYYY.MM.dd}'.
# - $port: Elasticsearch server port. Default 9200.
-# - $replication: Type of elasticsearch replication to use ('async', 'sync').
-# Default 'sync'.
# - $require_tag: Tag to require on events. Default undef.
# - $manage_indices: Whether cron jobs should be installed to manage
# Elasticsearch indices. Default false.
@@ -23,7 +21,6 @@
#
# class { 'logstash::output::elasticsearch':
# host => '127.0.0.1',
-# replication => 'async',
# require_tag => 'es',
# manage_indices => 'true',
# }
@@ -35,7 +32,6 @@
$idle_flush_time = 1,
$index = 'logstash-%{+YYYY.MM.dd}',
$port = 9200,
- $replication = 'sync',
$require_tag = undef,
$manage_indices = false,
$priority = undef,
diff --git a/puppet/modules/logstash/manifests/plugin.pp
b/puppet/modules/logstash/manifests/plugin.pp
new file mode 100644
index 0000000..ac95aee
--- /dev/null
+++ b/puppet/modules/logstash/manifests/plugin.pp
@@ -0,0 +1,35 @@
+# == Define: logstash::plugin
+#
+# A Logstash plugin.
+#
+# === Parameters
+#
+# [*title*]
+# Name of the plugin. Examples:
+# logstash-filter-prune
+#
+define logstash::plugin(
+ $ensure = present,
+) {
+ case $ensure {
+ present: {
+ exec { "install_logstash_plugin_${title}":
+ command => "/usr/share/logstash/bin/logstash-plugin install
'${title}'",
+ require => Package['logstash'],
+ notify => Service['logstash'],
+ unless => "grep '^gem \"${title}\"$'
/usr/share/logstash/Gemfile"
+ }
+ }
+ absent: {
+ exec { "uninstall_logstash_plugin_${title}":
+ command => "/usr/share/logstash/bin/logstash-plugin remove
'${title}'",
+ require => Package['logstash'],
+ notify => Service['logstash'],
+ onlyif => "grep '^gem \"${title}\"$'
/usr/share/logstash/Gemfile"
+ }
+ }
+ default: {
+ fail("'ensure' may be 'present' or 'absent' (got: '${ensure}').")
+ }
+ }
+}
diff --git a/puppet/modules/logstash/templates/default.erb
b/puppet/modules/logstash/templates/default.erb
deleted file mode 100644
index 0c3aade..0000000
--- a/puppet/modules/logstash/templates/default.erb
+++ /dev/null
@@ -1,30 +0,0 @@
-#####################################################################
-## THIS FILE IS MANAGED BY PUPPET
-## puppet:///modules/logstash/default
-#####################################################################
-
-# Start logstash on boot?
-START=yes
-
-# Location of the logstash jar file
-LS_JAR=/opt/logstash/logstash.jar
-
-# Java JVM options
-LS_JAVA_OPTS="-Xms<%= @heap_memory_mb %>m -Xmx<%= @heap_memory_mb %>m"
-LS_JAVA_OPTS="${LS_JAVA_OPTS} -Djava.io.tmpdir=/var/lib/logstash"
-
-# Location of configuration files.
-# All files in this directory are concatenated in alphabetical order.
-CONF_DIR=/etc/logstash/conf.d
-
-# Logstash will look for ruby plugins in the logstash/{inputs,filters,outputs}
-# subdirectories of plugin_dir
-PLUGIN_DIR=/var/lib
-
-# Logstash options
-# Note: the sysv init script prepends these options with "agent -f ${CONF_DIR}"
-LS_OPTS="--log /var/log/logstash/logstash.log"
-LS_OPTS="${LS_OPTS} --filterworkers <%= @filter_workers %>"
-# XXX: Don't add plugin dir until we need it.
-# Logstash refuses to start if missing
-#LS_OPTS="${LS_OPTS} --pluginpath ${PLUGIN_DIR}"
diff --git a/puppet/modules/logstash/templates/jvm.options.erb
b/puppet/modules/logstash/templates/jvm.options.erb
new file mode 100644
index 0000000..e75cd6a
--- /dev/null
+++ b/puppet/modules/logstash/templates/jvm.options.erb
@@ -0,0 +1,79 @@
+#####################################################################
+## THSI FILE IS MANAGED BY PUPPET
+## puppet://modules/logstash/jvm.options.erb
+#####################################################################
+
+## JVM configuration
+
+# Xms represents the initial size of total heap space
+# Xmx represents the maximum size of total heap space
+
+-Xms<%= @heap_memory_mb %>m
+-Xmx<%= @heap_memory_mb %>m
+
+################################################################
+## Expert settings
+################################################################
+##
+## All settings below this section are considered
+## expert settings. Don't tamper with them unless
+## you understand what you are doing
+##
+################################################################
+
+## GC configuration
+-XX:+UseParNewGC
+-XX:+UseConcMarkSweepGC
+-XX:CMSInitiatingOccupancyFraction=75
+-XX:+UseCMSInitiatingOccupancyOnly
+
+## optimizations
+
+# disable calls to System#gc
+-XX:+DisableExplicitGC
+
+## locale
+# Set the locale language
+#-Duser.language=en
+
+# Set the locale country
+#-Duser.country=US
+
+# Set the locale variant, if any
+#-Duser.variant=
+
+## basic
+
+# set the I/O temp directory
+#-Djava.io.tmpdir=$HOME
+
+# set to headless, just in case
+-Djava.awt.headless=true
+
+# ensure UTF-8 encoding by default (e.g. filenames)
+-Dfile.encoding=UTF-8
+
+# use our provided JNA always versus the system one
+#-Djna.nosys=true
+
+## heap dumps
+
+# generate a heap dump when an allocation from the Java heap fails
+# heap dumps are created in the working directory of the JVM
+-XX:+HeapDumpOnOutOfMemoryError
+
+# specify an alternative path for heap dumps
+# ensure the directory exists and has sufficient space
+#-XX:HeapDumpPath=${LOGSTASH_HOME}/heapdump.hprof
+
+## GC logging
+#-XX:+PrintGCDetails
+#-XX:+PrintGCTimeStamps
+#-XX:+PrintGCDateStamps
+#-XX:+PrintClassHistogram
+#-XX:+PrintTenuringDistribution
+#-XX:+PrintGCApplicationStoppedTime
+
+# log GC status to a file with time stamps
+# ensure the directory exists
+#-Xloggc:${LS_GC_LOG_FILE}
diff --git a/puppet/modules/logstash/templates/output/elasticsearch.erb
b/puppet/modules/logstash/templates/output/elasticsearch.erb
index 0457b72..e60e9ab 100644
--- a/puppet/modules/logstash/templates/output/elasticsearch.erb
+++ b/puppet/modules/logstash/templates/output/elasticsearch.erb
@@ -1,12 +1,10 @@
output {
<%- if @require_tag %>if "<%= @require_tag %>" in [tags] {<% end -%>
- elasticsearch_http {
+ elasticsearch {
flush_size => <%= @flush_size %>
- host => "<%= @host %>"
+ hosts => ["<%= @host %>:<%= @port %>"]
idle_flush_time => <%= @idle_flush_time %>
index => "<%= @index %>"
- port => <%= @port %>
- replication => "<%= @replication %>"
}
<% if @require_tag %>}<% end %>
}
diff --git a/puppet/modules/role/manifests/elk.pp
b/puppet/modules/role/manifests/elk.pp
index 7073a53..c960200 100644
--- a/puppet/modules/role/manifests/elk.pp
+++ b/puppet/modules/role/manifests/elk.pp
@@ -35,14 +35,28 @@
priority => 40,
}
+ logstash::plugin { 'logstash-filter-prune':
+ ensure => present
+ }
logstash::conf { 'filter_gelf':
source => 'puppet:///modules/role/elk/filter-gelf.conf',
priority => 50,
+ require => Logstash::Plugin['logstash-filter-prune'],
}
+ logstash::plugin { 'logstash-filter-multiline':
+ ensure => present
+ }
+ logstash::plugin { 'logstash-filter-anonymize':
+ ensure => present
+ }
logstash::conf { 'filter_syslog':
source => 'puppet:///modules/role/elk/filter-syslog.conf',
priority => 50,
+ require => [
+ Logstash::Plugin['logstash-filter-multiline'],
+ Logstash::Plugin['logstash-filter-anonymize'],
+ ]
}
exec { 'Create logstash index template':
@@ -55,20 +69,6 @@
## Configure Kibana
apache::site { $vhost_name:
content => template('role/elk/apache.conf.erb'),
- }
-
- exec { 'Create kibana index':
- command => template('role/elk/create-kibana-index.erb'),
- unless => template('role/elk/check-kibana-index.erb'),
- require => Service['elasticsearch'],
- }
- kibana::dashboard { 'default':
- content => template('role/elk/dashboard-default.erb'),
- require => Exec['Create kibana index'],
- }
- kibana::dashboard { 'mediawiki':
- content => template('role/elk/dashboard-mediawiki.erb'),
- require => Exec['Create kibana index'],
}
## Configure MediaWiki
diff --git a/puppet/modules/role/settings/elk.yaml
b/puppet/modules/role/settings/elk.yaml
index 961c898..0eceb2d 100644
--- a/puppet/modules/role/settings/elk.yaml
+++ b/puppet/modules/role/settings/elk.yaml
@@ -1,3 +1,4 @@
vagrant_ram: 512
forward_ports:
9200: 9200
+ 5601: 5601
--
To view, visit https://gerrit.wikimedia.org/r/342772
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I4f23fd402d13ad33c8b6a72fc96b3b39be6ba364
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: EBernhardson <[email protected]>
Gerrit-Reviewer: BryanDavis <[email protected]>
Gerrit-Reviewer: Dduvall <[email protected]>
Gerrit-Reviewer: EBernhardson <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits