The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Search::ESsearcher::Templates::httpAccess - Provicdes support for HTTP access logs sucked down via beats.

VERSION

Version 0.0.0

LOGSTASH / FILEBEAT

This uses a logstath beasts input akin to below.

The important bit below is setting the "type" to "beats" and "fields.log" to "apache-access".

If you are using something different than "type" and "beats" you can specify that via "--field" and "--fieldv" respectively.

If you are using something different than "fields.log" and "apache-access" you can specify that via "--field2" and "--field2v" respectively.

    input {
      beats {
        host => "192.168.14.3"
        port => 5044
        type => "beats"
      }
    }
    
    filter {
        if [fields][log] == "apache-access" {
                    grok {
                            match => {
                                    "message" => "%{HTTPD_COMBINEDLOG}+%{GREEDYDATA:extra_fields}"
                            }
                            overwrite => [ "message" ]
                    }
    
                    mutate {
                            convert => ["response", "integer"]
                            convert => ["bytes", "integer"]
                            convert => ["responsetime", "float"]
                    }
                    geoip {
                            source => "clientip"
                            target => "geoip"
                            add_tag => [ "apache-geoip" ]
                    }
                    date {
                            match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
                            remove_field => [ "timestamp" ]
                    }
                    useragent {
                            source => "agent"
                    }
        }
    }
    
    output {
      if [type] == "beats" {
        elasticsearch {
          hosts => [ "127.0.0.1:9200" ]
        }
      }
    }

Then for file beats, something akin to below. The really important bits here the various values for "fields".

For "fields.vhost" and "fields.vhost_port" if you are using somethind different, you can specify that via "--field3" and "--field4" respectively.

    - type: log
      enabled: true
      paths:
        - /var/log/apache/foo.bar:80-access.log
      fields:
         log: apache-access
         vhost: foo.bar
         vhost_port: 80

Options

--host <host>

The machine beasts is running on feeding info to logstash/ES.

--response <code>

The response code from the HTTP server.

--verb <verb>

The verb used with the request.

--vhost <vhost>

The domain served up.

--port <port>

The port for the vhost.

--ip <ip>

The client IP that made the request.

--os <os>

The supplied OS value that made the request.

--showos

Shows the OS value.

--req <req>

The HTTP request.

--ref <ref>

The supplied referrer for the request.

--agent <agent>

The supplied agent value that made the request.

--noagent

Do not show the agent field.

--auth <auth>

The authed user for the request.

--bgt <bytes>

Response bytes greater than.

--bgte <bytes>

Response bytes greater than or equal to.

--blt <bytes>

Response bytes less than.

--blte <bytes>

Response bytes less than or equal to.

--geoip

Require GEO IP to have worked.

--country <country>

The 2 letter country code.

--showcountry

Show country code.

--region <state>

The state/province/etc to search for.

--showregion

Show region code.

--postal <zipcode>

The postal code to search for.

--showpostal

Show postal code.

--city <cide>

The city to search for.

--showcity

Show city name.

--size <count>

The number of items to return.

--dgt <date>

Date greater than.

--dgte <date>

Date greater than or equal to.

--dlt <date>

Date less than.

--dlte <date>

Date less than or equal to.

--msg <message>

Messages to match.

AND, OR, or NOT shortcut

    , OR
    + AND
    ! NOT

A list seperated by any of those will be transformed

These may be used with program, facility, pid, or host.

    example: --program postfix,spamd
    
    results: postfix OR spamd

date

date

/^-/ appends "now" to it. So "-5m" becomes "now-5m".

/^u\:/ takes what is after ":" and uses Time::ParseDate to convert it to a unix time value.

Any thing not matching maching any of the above will just be passed on.