Version information
This version is compatible with:
- Puppet Enterprise >= 3.0.0 < 2015.4.0
- Puppet >= 3.0.0 < 5.0.0
- , , , , , ,
Start using this module
Add this module to your Puppetfile:
mod 'pcfens-filebeat', '0.7.1'Learn more about managing modules with a PuppetfileDocumentation
puppet-filebeat
Table of Contents
- Description
- Setup - The basics of getting started with filebeat
- Usage - Configuration options and additional functionality
- Reference
- Limitations - OS compatibility, etc.
- Development - Guide for contributing to the module
Description
The filebeat module installs and configures the filebeat log shipper maintained by elastic.
Setup
What filebeat affects
By default filebeat adds a software repository to your system, and installs filebeat along
with required configurations.
Setup Requirements
The filebeat module depends on puppetlabs/stdlib, and on
puppetlabs/apt on Debian based systems.
Beginning with filebeat
filebeat can be installed with puppet module install pcfens-filebeat (or with r10k, librarian-puppet, etc.)
The only required parameter, other than which files to ship, is the outputs parameter.
Usage
All of the default values in filebeat follow the upstream defaults (at the time of writing).
To ship files to elasticsearch:
class { 'filebeat':
outputs => {
'elasticsearch' => {
'hosts' => [
'http://localhost:9200',
'http://anotherserver:9200'
],
'index' => 'packetbeat',
'cas' => [
'/etc/pki/root/ca.pem',
],
},
},
}
To ship log files through logstash:
class { 'filebeat':
outputs => {
'logstash' => {
'hosts' => [
'localhost:5044',
'anotherserver:5044'
],
'loadbalance' => true,
},
},
}
Shipper and logging options can be configured the same way, and are documented on the elastic website.
Adding a prospector
Prospectors are processes that ship log files to elasticsearch or logstash. They can be defined as a hash added to the class declaration (also used for automatically creating prospectors using hiera), or as their own defined resources.
At a minimum, the paths parameter must be set to an array of files or blobs that should
be shipped. doc_type is what logstash views as the type parameter if you'd like to
apply conditional filters.
filebeat::prospector { 'syslogs':
paths => [
'/var/log/auth.log',
'/var/log/syslog',
],
doc_type => 'syslog-beat',
}
Multiline Logs
Filebeat prospectors (versions >= 1.1) can handle multiline log entries. The multiline
parameter accepts a hash containing pattern, negate, match, max_lines, and timeout
as documented in the filebeat configuration documentation.
Prospectors in Hiera
Prospectors can be declared in hiera using the prospectors parameter. By default, hiera will not merge
prospector declarations down the hiera hierarchy. To change the behavior in puppet 3 use the prospectors_merge
parameter. In puppet 4, you can use prospectors_merge, but can also use the
lookup_options
flag.
When prospectors_merge is set to true, prospectors will be replaced by the output of
hiera_hash('filebeat::prospectors').
Usage on Windows
When installing on Windows, this module will download the windows version of Filebeat from
elastic to C:\Temp by default. The directory
can be overridden using the tmp_dir parameter. tmp_dir is not managed by this module,
but is expected to exist as a directory that puppet can write to.
Reference
Public Classes
Class: filebeat
Installs and configures filebeat.
Parameters within filebeat
package_ensure: [String] The ensure parameter for the filebeat package (default: present)manage_repo: [Boolean] Whether or not the upstream (elastic) repo should be configured or not (default: true)service_ensure: [String] The ensure parameter on the filebeat service (default: running)service_enable: [String] The enable parameter on the filebeat service (default: true)service_provider: [String] The provier parameter on the filebeat service (default: on RedHat based systems use redhat, otherwise undefined)spool_size: [Integer] How large the spool should grow before being flushed to the network (default: 2048)idle_timeout: [String] How often the spooler should be flushed even if spool size isn't reached (default: 5s)publish_async: [Boolean] If set to true filebeat will publish while preparing the next batch of lines to transmit (defualt: false)registry_file: [String] The registry file used to store positions, absolute or relative to working directory (default .filebeat)config_file: [String] Where the configuration file managed by this module should be placed. If you think you might want to use this, read the limitations first. Defaults to the location that filebeat expects for your operating system.config_dir: [String] The directory where prospectors should be defined (default: /etc/filebeat/conf.d)config_dir_mode: [String] The permissions mode set on the configuration directory (default: 0755)config_file_mode: [String] The permissions mode set on configuration files (default: 0644)purge_conf_dir: [Boolean] Should files in the prospector configuration directory not managed by puppet be automatically purgedoutputs: [Hash] Will be converted to YAML for the required outputs section of the configuration (see documentation, and above)shipper: [Hash] Will be converted to YAML to create the optional shipper section of the filebeat config (see documentation)logging: [Hash] Will be converted to YAML to create the optional logging section of the filebeat config (see documentation)conf_template: [String] The configuration template to use to generate the main filebeat.yml config filedownload_url: [String] The URL of the zip file that should be downloaded to install filebeat (windows only)install_dir: [String] Where filebeat should be installed (windows only)tmp_dir: [String] Where filebeat should be temporarily downloaded to so it can be installed (windows only)prospectors: [Hash] Prospectors that will be created. Commonly used to create prospectors using hieraprospectors_merge: [Boolean] If true,hiera_hash()will be used to build the theprospectorsparameter (default: false)
Private Classes
Class: filebeat::config
Creates the configuration files required for filebeat (but not the prospectors)
Class: filebeat::install
Calls the correct installer class based on the kernel fact.
Class: filebeat::params
Sets default parameters for filebeat based on the OS and other facts.
Class: filebeat::repo
Installs the yum or apt repository for the system package manager to install filebeat.
Class: filebeat::service
Configures and manages the filebeat service.
Class: filebeat::install::linux
Install the filebeat package on Linux kernels.
Class: filebeat::install::windows
Downloads, extracts, and installs the filebeat zip file in Windows.
Public Defines
Define: filebeat::prospector
Installs a configuration file for a prospector.
Be sure to read the filebeat configuration details to fully understand what these parameters do.
Parameters for filebeat::prospector
ensure: The ensure parameter on the prospector configuration file. (default: present)paths: [Array] The paths, or blobs that should be handled by the prospector. (required)exclude_files: [Array] Files that match any regex in the list are excluded from filebeat (default: [])encoding: [String] The file encoding. (default: plain)input_type: [String] log or stdin - where filebeat reads the log from (default:log)fields: [Hash] Optional fields to add information to the output (default: {})fields_under_root: [Boolean] Should thefieldsparameter fields be stored at the top level of indexed documents.ignore_older: [String] Files older than this field will be ignored by filebeat (default: 24h in filebeat < 1.2.0, infinite in filebeat >= 1.2.0)close_older: [String] Files that haven't been modified sinceclose_older, they'll be closed. New modifications will be read when files are scanned again according toscan_frequency. Introduced in filebeat 1.2.0 (default: 1h)log_type: [String] (Deprecated - usedoc_type) The document_type setting (optional - default: log)doc_type: [String] The event type to used for published lines, used as type field in logstash and elasticsearch (optional - default: log)scan_frequency: [String] How often should the prospector check for new files (default: 10s)harvester_buffer_size: [Integer] The buffer size the harvester uses when fetching the file (default: 16384)tail_files: [Boolean] If true, filebeat starts reading new files at the end instead of the beginning (default: false)backoff: [String] How long filebeat should wait between scanning a file after reaching EOF (default: 1s)max_backoff: [String] The maximum wait time to scan a file for new lines to ship (default: 10s)backoff_factor: [Integer]backoffis multiplied by this parameter untilmax_backoffis reached to determine the actual backoff (default: 2)partial_line_waiting: [String] How long should the prospector wait before shipping a file with a potentially incomplete last line (default: 5s)force_close_files: [Boolean] Should filebeat forcibly close a file when renamed (default: false)include_lines: [Array] A list of regular expressions to match the lines that you want to include. Ignored if empty (default: [])exclude_lines: [Array] A list of regular expressions to match the files that you want to exclude. Ignored if empty (default: [])max_bytes: [Integer] The maximum number of bytes that a single log message can have (default: 10485760)multiline: [Hash] Options that control how Filebeat handles log messages that span multiple lines. See above. (default: {})
Limitations
This module doesn't load the elasticsearch index template into elasticsearch (required when shipping directly to elasticsearch).
Only filebeat versions after 1.0.0-rc1 are supported. 1.0.0-rc1 and older don't support YAML like the ruby template can easily generate.
When installing on Windows, there's an expectation that C:\Temp already exists, or an alternative
location specified in the tmp_dir parameter exists and is writable by puppet. The temp directory
is used to store the downloaded installer only.
Pre-1.9.1 Ruby
If you're on a system running a Ruby pre-1.9.1, hashes aren't sorted consistently, causing puppet runs to not be idempotent. To fix this, a limited template is used if the rubyversion is pre-1.9.1. The limited template only supports elasticsearch, logstash, file, and console outputs, and not all options may be supported (there is no warning when an option is omitted). Unlike with newer rubies, as new versions of filebeat are released, this template may not work until it's updated, even if you're using an updated configuration hash.
If you don't care about keeping puppet idempotent, this can be overridden by setting the conf_template
parameter to 'filebeat/filebeat.yml.erb'.
See templates/filebeat.yml.ruby18.erb for the all of the details.
Using config_file
There are a few very specific use cases where you don't want this module to directly manage the filebeat
configuration file, but you still want the configuration file on the system at a different location.
Setting config_file will write the filebeat configuration file to an alternate location, but it will not
update the init script. If you don't also manage the correct file (/etc/filebeat/filebeat.yml on Linux,
C:/Program Files/Filebeat/filebeat.yml on Windows) then filebeat won't be able to start.
If you're copying the alternate config file location into the real location you'll need to include some metaparameters like
file { '/etc/filebeat/filebeat.yml':
ensure => file,
source => 'file:///etc/filebeat/filebeat.special',
require => File['filebeat.yml'],
notify => Service['filebeat'],
}
to ensure that services are managed like you might expect.
Development
Pull requests and bug reports are welcome. If you're sending a pull request, please consider writing tests if applicable.
Changelog
Unreleased
v0.7.1
- Allow the config file to be written to an alternate location. Be sure and read limitations before you use this.
Fixed Bugs
- Add elasticsearch and logstash port setting to Ruby 1.8 template #29
v0.7.0
- Setting the
prospectors_mergeparameter to true will create prospectors across multiple hiera levels usinghiera_hash()#25 - No longer manage the windows temp directory where the Filebeat download is kept. The assumption is made that the directory exists and is writable by puppet.
- Update the default windows download to Filebeat version 1.2.3
- Add redis output to the Ruby 1.8 template
- Wrap include_lines and exclude_lines array elements in quotes #28
Fixed Bugs
- SLES repository and metaparameters didn't match #25
v0.6.3
Fixed Bugs
- Spool size default should match upstream #24
- Repository names now match notification parameters Part of #25
v0.6.2
Fixed Bugs
- Fix the other certificate_key typo in Ruby 1.8 template #23
v0.6.1
Fixed Bugs
- Fix typo in Ruby 1.8 template #23
v0.6.0
- Add the
close_olderparameter to support the option of the same name in filebeat 1.2.0 - Add support for the
publish_asyncparameter.
Fixed Bugs
- Added limited, but improved support for Ruby versions pre-1.9.1 by fixing the hash sort issue #20
v0.5.8
Fixed Bugs
doc_typeis now used in the documentation instead of the deprecatedlog_type#17- RedHat based systems should be using the redhat service provider. #18
v0.5.7
Fixed Bugs
- Some configuration parameters should be rendered as integers, not strings #15
v0.5.6
Fixed Bugs
- Configuration files should use the
conf_templateparameter #14
v0.5.5
Fixed Bugs
rotate_every_kbandnumber_of_filesparameters in file outputs should be explicitly integers to keep filebeat happy. #13
v0.5.4
Fixed Bugs
- Fix template regression in v0.5.3
v0.5.2
- Use the anchor pattern instead of contain so that older versions of puppet are supported #12
v0.5.1
- Update metadata to reflect which versions of puppet are supported.
v0.5.0
- For prospectors, deprecate
log_typein favor ofdoc_typeto better match the actual configuration parameter.document_typeis not used because it causes errors when running with a puppet master.log_typewill be fully removed before module version 1.0. #9
New Features
- Add support for
exclude_files,exclude_lines,include_lines, andmultiline. Use of the new parameters requires a filebeat version >= 1.1 (#10, #11)
v0.4.1
Fixed Bugs
- Fix links in documentation to match the updated documentation
New Features
- Change repository resource names to beats (e.g. apt::source['beats'], etc.), and only declare them if they haven't already been declared. This way we only have one module for all beats modules managed through puppet.
v0.4.0
This is the first release that includes changelog. Since v0.3.1:
Fixed Bugs
- 'fields' parse error in prospector.yml template #7
New Features
- Windows support #3
- Requires the
puppetlabs/powershellandlwf/remote_filemodules.
- Requires the
- Config file and folder permissions can be managed #8
Dependencies
- puppetlabs/stdlib (>=4.6.0 <5.0.0)
- puppetlabs/apt (>=2.0.0 <3.0.0)
- puppetlabs/powershell (>= 1.0.1 < 2.0.0)
- lwf/remote_file (>= 0.2.0 < 2.0.0)