Configuring LogStash and FileBeat to Send to ELK Logging System


  • Service Provider

    Continue the project to get ELK working. Here is how we configure a client machine to send to LogStash using FileBeat.

    #!/bin/bash
    cat > elastic-beats.repo <<EOF
    [beats]
    name=Elastic Beats Repository
    baseurl=https://packages.elastic.co/beats/yum/el/$basearch
    enabled=1
    gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
    gpgcheck=1
    EOF
    
    rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
    yum -y install filebeat
    
    # Edit /etc/filebeat/filebeat.yml and /etc/pki/tls/certs/logstash-forwarder.crt
    systemctl start filebeat 
    systemctl enable filebeat
    

  • Service Provider

    Here are the contents, with comments and whitespace removed, of our filebeat.yml configuration file.

    filebeat:
      prospectors:
        -
          paths:
            - /var/log/messages
            - /var/log/secure
          input_type: log
          document_type: log
      registry_file: /var/lib/filebeat/registry
    output:
      logstash:
        hosts: ["hostname_of_elk_server:5044"]
        tls:
          certificate_authorities: ["etc/pki/tls/certs/logstash-forwarder.crt"]
    shipper:
    logging:
      files:
        rotateeverybytes: 10485760
    

    This assumes that you are using the default port of 5044 and is set up in the "paths" section to grab the big CentOS and RHEL /var/log/messages and /var/log/secure log files. You will need to add log file locations here if you want to grab a different log file than there.


  • Service Provider

    The LogStash Forwarder will need a certificate generated on the ELK server. On the ELK server, you can use these commands to create this certificate which you will then copy to any server that will send the log files via FileBeat and LogStash.

    cd /etc/pki/tls/
    openssl req -subj '/CN=your.elk.fqdn.com/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
    


  • document_type: log

    When would you need to change this to document_type: syslog?


  • Service Provider

    @scottalanmiller
    You are specifying a cert that was created on the ELK server. with no mention of adding it to this server.


  • Service Provider

    @JaredBusch said:

    @scottalanmiller
    You are specifying a cert that was created on the ELK server. with no mention of adding it to this server.

    hence the second reserved post area



  • Here's a question. What's going to happen when RHEL7/CentOS 7 leave syslog and are completely on journald? I guess just wait till they develop something to read it?



  • I guess this answers my question

    https://github.com/elastic/filebeat/issues/325


  • Service Provider

    Updated with the certificate creation information.


  • Service Provider

    @scottalanmiller You using cat to create a repo file here in whatever directory the user is current in. Do you not need to put that elsewhere such as here

    cat > /etc/yum.repos.d/elastic-beats.repo <<EOF
    


  • For anyone looking to do this here is my filebeat.yml file.

    # Name of the registry file. Per default it is put in the current working
      # directory. In case the working directory is changed after when running
      # filebeat again, indexing starts from the beginning again.
      registry_file: /var/lib/filebeat/registry
    
      # Full Path to directory with additional prospector configuration files. Each file must end with .yml
      # These config files must have the full filebeat config part inside, but only
      # the prospector part is processed. All global options like spool_size are ignored.
      # The config_dir MUST point to a different directory then where the main filebeat config file is in.
      #config_dir:
    
    ###############################################################################
    ############################# Libbeat Config ##################################
    # Base config file used by all other beats for using libbeat features
    
    ############################# Output ##########################################
    
    # Configure what outputs to use when sending the data collected by the beat.
    # Multiple outputs may be used.
    output:
    
      ### Elasticsearch as output
      elasticsearch:
    	# Array of hosts to connect to.
    	# Scheme and port can be left out and will be set to the default (http and 9200)
    	# In case you specify and additional path, the scheme is required: http://localhost:9200/path
    	# IPv6 addresses should always be defined as: https://[2001:db8::1]:9200
    	hosts: ["localhost:9200"]
    
    	# Optional protocol and basic auth credentials.
    	#protocol: "https"
    	#username: "admin"
    	#password: "s3cr3t"
    
    	# Number of workers per Elasticsearch host.
    	#worker: 1
    
    	# Optional index name. The default is "filebeat" and generates
    	# [filebeat-]YYYY.MM.DD keys.
    	#index: "filebeat"
    
    	# A template is used to set the mapping in Elasticsearch
    	# By default template loading is disabled and no template is loaded.
    	# These settings can be adjusted to load your own template or overwrite existing ones
    	#template:
    
    	  # Template name. By default the template name is filebeat.
    	  #name: "filebeat"
    
    	  # Path to template file
    	  #path: "filebeat.template.json"
    
    	  # Overwrite existing template
    	  #overwrite: false
    
    	# Optional HTTP Path
    	#path: "/elasticsearch"
    
    	# Proxy server url
    	#proxy_url: http://proxy:3128
    
    	# The number of times a particular Elasticsearch index operation is attempted. If
    	# the indexing operation doesn't succeed after this many retries, the events are
    	# dropped. The default is 3.
    	#max_retries: 3
    
    	# The maximum number of events to bulk in a single Elasticsearch bulk API index request.
    	# The default is 50.
    	#bulk_max_size: 50
    
    	# Configure http request timeout before failing an request to Elasticsearch.
    	#timeout: 90
    
    	# The number of seconds to wait for new events between two bulk API index requests.
    	# If `bulk_max_size` is reached before this interval expires, addition bulk index
    	# requests are made.
    	#flush_interval: 1
    
    	# Boolean that sets if the topology is kept in Elasticsearch. The default is
    	# false. This option makes sense only for Packetbeat.
    	#save_topology: false
    
    	# The time to live in seconds for the topology information that is stored in
    	# Elasticsearch. The default is 15 seconds.
    	#topology_expire: 15
    
    	# tls configuration. By default is off.
    	#tls:
    	  # List of root certificates for HTTPS server verifications
    	  certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
    
    	  # Certificate for TLS client authentication
    	  #certificate: "/etc/pki/client/cert.pem"
    
    	  # Client Certificate Key
    	  #certificate_key: "/etc/pki/client/cert.key"
    
    	  # Controls whether the client verifies server certificates and host name.
    	  # If insecure is set to true, all server host names and certificates will be
    	  # accepted. In this mode TLS based connections are susceptible to
    	  # man-in-the-middle attacks. Use only for testing.
    	  #insecure: true
    
    	  # Configure cipher suites to be used for TLS connections
    	  #cipher_suites: []
    
    	  # Configure curve types for ECDHE based cipher suites
    	  #curve_types: []
    
    	  # Configure minimum TLS version allowed for connection to logstash
    	  #min_version: 1.0
    
    	  # Configure maximum TLS version allowed for connection to logstash
    	  #max_version: 1.2
    
    
      ### Logstash as output
      #logstash:
    	# The Logstash hosts
    	hosts: ["localhost:5044"]
    
    	# Number of workers per Logstash host.
    	#worker: 1
    
    	# Set gzip compression level.
    	#compression_level: 3
    
    	# Optional load balance the events between the Logstash hosts
    	#loadbalance: true
    
    	# Optional index name. The default index name depends on the each beat.
    	# For Packetbeat, the default is set to packetbeat, for Topbeat
    	# top topbeat and for Filebeat to filebeat.
    	#index: filebeat
    
    	# Optional TLS. By default is off.
    	#tls:
    	  # List of root certificates for HTTPS server verifications
    	  #certificate_authorities: ["/etc/pki/root/ca.pem"]
    
    	  # Certificate for TLS client authentication
    	  #certificate: "/etc/pki/client/cert.pem"
    
    	  # Client Certificate Key
    	  #certificate_key: "/etc/pki/client/cert.key"
    
    	  # Controls whether the client verifies server certificates and host name.
    	  # If insecure is set to true, all server host names and certificates will be
    	  # accepted. In this mode TLS based connections are susceptible to
    	  # man-in-the-middle attacks. Use only for testing.
    	  #insecure: true
    
    	  # Configure cipher suites to be used for TLS connections
    	  #cipher_suites: []
    
    	  # Configure curve types for ECDHE based cipher suites
    	  #curve_types: []
    
    
      ### File as output
      #file:
    	# Path to the directory where to save the generated files. The option is mandatory.
    	#path: "/tmp/filebeat"
    
    	# Name of the generated files. The default is `filebeat` and it generates files: `filebeat`, `filebeat.1`, `filebeat.2`, etc.
    	#filename: filebeat
    
    	# Maximum size in kilobytes of each file. When this size is reached, the files are
    	# rotated. The default value is 10 MB.
    	#rotate_every_kb: 10000
    
    	# Maximum number of files under path. When this number of files is reached, the
    	# oldest file is deleted and the rest are shifted from last to first. The default
    	# is 7 files.
    	#number_of_files: 7
    
    
      ### Console output
      # console:
    	# Pretty print json event
    	#pretty: false
    
    
    ############################# Shipper #########################################
    
    shipper:
      # The name of the shipper that publishes the network data. It can be used to group
      # all the transactions sent by a single shipper in the web interface.
      # If this options is not defined, the hostname is used.
      #name:
    
      # The tags of the shipper are included in their own field with each
      # transaction published. Tags make it easy to group servers by different
      # logical properties.
      #tags: ["service-X", "web-tier"]
    
      # Uncomment the following if you want to ignore transactions created
      # by the server on which the shipper is installed. This option is useful
      # to remove duplicates if shippers are installed on multiple servers.
      #ignore_outgoing: true
    
      # How often (in seconds) shippers are publishing their IPs to the topology map.
      # The default is 10 seconds.
      #refresh_topology_freq: 10
    
      # Expiration time (in seconds) of the IPs published by a shipper to the topology map.
      # All the IPs will be deleted afterwards. Note, that the value must be higher than
      # refresh_topology_freq. The default is 15 seconds.
      #topology_expire: 15
    
      # Internal queue size for single events in processing pipeline
      #queue_size: 1000
    
      # Configure local GeoIP database support.
      # If no paths are not configured geoip is disabled.
      #geoip:
    	#paths:
    	#  - "/usr/share/GeoIP/GeoLiteCity.dat"
    	#  - "/usr/local/var/GeoIP/GeoLiteCity.dat"
    
    
    ############################# Logging #########################################
    
    # There are three options for the log ouput: syslog, file, stderr.
    # Under Windos systems, the log files are per default sent to the file output,
    # under all other system per default to syslog.
    logging:
    
      # Send all logging output to syslog. On Windows default is false, otherwise
      # default is true.
      #to_syslog: true
    
      # Write all logging output to files. Beats automatically rotate files if rotateeverybytes
      # limit is reached.
      #to_files: false
    
      # To enable logging to files, to_files option has to be set to true
      files:
    	# The directory where the log files will written to.
    	#path: /var/log/mybeat
    
    	# The name of the files where the logs are written to.
    	#name: mybeat
    
    	# Configure log file size limit. If limit is reached, log file will be
    	# automatically rotated
    	rotateeverybytes: 10485760 # = 10MB
    
    	# Number of rotated log files to keep. Oldest files will be deleted first.
    	#keepfiles: 7
    
      # Enable debug output for selected components. To enable all selectors use ["*"]
      # Other available selectors are beat, publish, service
      # Multiple selectors can be chained.
      #selectors: [ ]
    
      # Sets log level. The default log level is error.
      # Available log levels are: critical, error, warning, info, debug
      #level: error