I am using logstash to ingest the logs into elasticsearch.
Below is the logstash.conf that we have.
Thanks.
input {
tcp {
port => 5000
type => syslog
}
udp {
port => 5000
type => syslog
}
}
filter {
if [type] == "syslog" {
grok {
match => [
"message","^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{SYSLOGPROG:syslog_program}:? %{GREEDYDATA:syslog_message}$",
"message","^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}:? %{GREEDYDATA:syslog_message}$",
"message","^<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{GREEDYDATA:syslog_message}$"
]
add_field => {
"received_at" => "%{@timestamp}"
"received_from" => "%{host}"
}
}
mutate {
gsub => ["syslog_program", ":", ""]
remove_field => [ "program" ]
}
grok {
match => [
"syslog_hostname","^%{WORD:server_rack}-%{WORD:server_dc}-%{INT:server_pos}$",
"syslog_hostname","^%{INT}-%{INT}-%{INT}-%{WORD:server_rack}-%{WORD:server_pos}$",
"syslog_hostname","%{GREEDYDATA}"
]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
if [syslog_program] == "apache_access" {
grok {
match => [
"syslog_message", "%{COMBINEDAPACHELOG} %{POSINT:resp_micros}",
"syslog_message", "%{COMBINEDAPACHELOG}"
]
}
date {
match => [ "timestamp", "dd/MMM/YYYY:HH:mm:ss,SSS Z", "dd/MMM/YYYY:HH:mm:ss Z" ]
}
geoip {
source => "clientip"
target => "geoip"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
gsub => [ "resp_micros", "^$", "-1" ]
remove_field => [ "syslog_timestamp", "syslog_program", "syslog_facility", "syslog_facility_code", "syslog_message", "syslog_severity", "syslog_severity_code", "syslog_timestamp" ]
replace => [ "type", "apacheaccess" ]
convert => [ "[geoip][coordinates]", "float", "bytes", "integer", "resp_micros", "integer" ]
}
# Temporary add post work because lots of fields are inconsistant
#if [beans_user] {
# filter {
# mutate {
# uppercase => [ "beans_user" ]
# }
# }
#}
}
}
output {
#stdout { codec => rubydebug
elasticsearch {
hosts => "{{ansible_bond0.ipv4.address}}:9200"
}