Puppet Class: role::elk

Defined in:
puppet/modules/role/manifests/elk.pp

Overview

Class: role::elk

Provision an ELK stack (ElasticSearch, Logstash, Kibana). Configures MediaWiki to send log messages to the ELK cluster using Monolog and Redis.

Parameters

vhost_name

vhost_name of Kibana web interface. Default 'logstash.local.wmftest.net'.

Parameters:

  • vhost_name (Any)


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'puppet/modules/role/manifests/elk.pp', line 10

class role::elk (
    $vhost_name,
){
    require ::role::mediawiki
    require ::role::psr3
    include ::elasticsearch
    include ::redis
    include ::logstash
    include ::logstash::output::elasticsearch
    include ::kibana
    include ::apache::mod::headers
    include ::apache::mod::proxy
    include ::apache::mod::proxy_http

    ## Configure Logstash
    logstash::input::syslog { 'syslog':
        port => 10514,
    }

    logstash::input::gelf { 'gelf':
        port => 12201,
    }

    logstash::input::json { 'json':
        port => 12202,
    }

    logstash::input::udp { 'logback':
        port  => 11514,
        codec => 'json',
    }

# log4j logstash input has been deprecated: https://www.elastic.co/blog/log4j-input-logstash
#    logstash::input::log4j { 'log4j': }

    logstash::conf { 'filter_strip_ansi_color':
        source   => 'puppet:///modules/role/elk/filter-strip-ansi-color.conf',
        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':
        command => template('role/elk/create-logstash-template.erb'),
        unless  => template('role/elk/check-logstash-template.erb'),
        require => Service['elasticsearch'],
        before  => Class['::logstash::output::elasticsearch'],
    }

    ## Configure Kibana
    apache::site { $vhost_name:
        content => template('role/elk/apache.conf.erb'),
    }

    ## Configure MediaWiki
    mediawiki::settings { 'Monolog':
        values  => template('role/elk/monolog.php.erb'),
    }

    ## Configure rsyslog
    rsyslog::conf { 'logstash':
        source   => 'puppet:///modules/role/elk/rsyslog.conf',
        priority => 30,
    }

    mediawiki::import::text { 'VagrantRoleElk':
        content => template('role/elk/VagrantRoleElk.wiki.erb'),
    }
}