logstash-patterns-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/Rakefile +6 -0
- data/lib/logstash/patterns/core.rb +12 -0
- data/logstash-patterns-core.gemspec +26 -0
- data/patterns/firewalls +60 -0
- data/patterns/grok-patterns +94 -0
- data/patterns/haproxy +37 -0
- data/patterns/java +7 -0
- data/patterns/junos +9 -0
- data/patterns/linux-syslog +16 -0
- data/patterns/mcollective +1 -0
- data/patterns/mcollective-patterns +4 -0
- data/patterns/mongodb +4 -0
- data/patterns/nagios +108 -0
- data/patterns/postgresql +3 -0
- data/patterns/redis +3 -0
- data/patterns/ruby +2 -0
- data/rakelib/publish.rake +9 -0
- data/rakelib/vendor.rake +169 -0
- data/spec/patterns/core_spec.rb +6 -0
- metadata +86 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
!binary "U0hBMQ==":
|
|
3
|
+
metadata.gz: !binary |-
|
|
4
|
+
MjUwZjc2YmU2ZDc4NDlkOWIxMWZhODFkYjljMTU3MTYwMTFkNmU5Yw==
|
|
5
|
+
data.tar.gz: !binary |-
|
|
6
|
+
OWViMmMzNTEwYWJlODRlYTYzZDM4NjI1Y2YxNzhiNjBmNGZlMzA1Mg==
|
|
7
|
+
SHA512:
|
|
8
|
+
metadata.gz: !binary |-
|
|
9
|
+
Y2YxNjU0ZmM1MWQxMTRjMGRlZDA0ZGU4N2NjNjRmN2I3MTY5YTY2OGJmYzEy
|
|
10
|
+
NDhhMTEwOTNkMGZmYzhhMjQzNmY5ODNhYTE2ODU0MWY1NWFlZDEzZjNmYTU0
|
|
11
|
+
ZjI0ZTFjZjU2OGE3MGM5OThmMzc0ZjM5NTQyMGI2ODgzMTAyYjg=
|
|
12
|
+
data.tar.gz: !binary |-
|
|
13
|
+
ODEwMTFkODU3ZTlmMzY0NmE3NTI1ZmUwYTNiYTIzODcwMmEyZjY2Yzc5N2Rj
|
|
14
|
+
YmVlMGVjNDQ5NTA5ZjBlMWQ3MzFlMWM4MjU1OTA2YTZkM2IxYjE5YjgyMWYy
|
|
15
|
+
NjM2NjEwZGRhNjM0ZWVmOGVjNGU2MWVmOTEzMzBlNWVmMGU5OWM=
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
Gem::Specification.new do |s|
|
|
2
|
+
|
|
3
|
+
s.name = 'logstash-patterns-core'
|
|
4
|
+
s.version = '0.1.0'
|
|
5
|
+
s.licenses = ['Apache License (2.0)']
|
|
6
|
+
s.summary = "Patterns to be used in logstash"
|
|
7
|
+
s.description = "Patterns to be used in logstash for certain plugins"
|
|
8
|
+
s.authors = ["Elasticsearch"]
|
|
9
|
+
s.email = 'richard.pijnenburg@elasticsearch.com'
|
|
10
|
+
s.homepage = "http://logstash.net/"
|
|
11
|
+
s.require_paths = ["lib"]
|
|
12
|
+
|
|
13
|
+
# Files
|
|
14
|
+
s.files = `git ls-files`.split($\)
|
|
15
|
+
|
|
16
|
+
# Tests
|
|
17
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
|
18
|
+
|
|
19
|
+
# Special flag to let us know this is actually a logstash plugin
|
|
20
|
+
s.metadata = { "logstash_plugin" => "true" }
|
|
21
|
+
|
|
22
|
+
# Gem dependencies
|
|
23
|
+
s.add_runtime_dependency 'logstash', '>= 1.4.0', '< 2.0.0'
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
data/patterns/firewalls
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# NetScreen firewall logs
|
|
2
|
+
NETSCREENSESSIONLOG %{SYSLOGTIMESTAMP:date} %{IPORHOST:device} %{IPORHOST}: NetScreen device_id=%{WORD:device_id}%{DATA}: start_time=%{QUOTEDSTRING:start_time} duration=%{INT:duration} policy_id=%{INT:policy_id} service=%{DATA:service} proto=%{INT:proto} src zone=%{WORD:src_zone} dst zone=%{WORD:dst_zone} action=%{WORD:action} sent=%{INT:sent} rcvd=%{INT:rcvd} src=%{IPORHOST:src_ip} dst=%{IPORHOST:dst_ip} src_port=%{INT:src_port} dst_port=%{INT:dst_port} src-xlated ip=%{IPORHOST:src_xlated_ip} port=%{INT:src_xlated_port} dst-xlated ip=%{IPORHOST:dst_xlated_ip} port=%{INT:dst_xlated_port} session_id=%{INT:session_id} reason=%{GREEDYDATA:reason}
|
|
3
|
+
|
|
4
|
+
#== Cisco ASA ==
|
|
5
|
+
CISCO_TAGGED_SYSLOG ^<%{POSINT:syslog_pri}>%{CISCOTIMESTAMP:timestamp}( %{SYSLOGHOST:sysloghost})?: %%{CISCOTAG:ciscotag}:
|
|
6
|
+
CISCOTIMESTAMP %{MONTH} +%{MONTHDAY}(?: %{YEAR})? %{TIME}
|
|
7
|
+
CISCOTAG [A-Z0-9]+-%{INT}-(?:[A-Z0-9_]+)
|
|
8
|
+
# Common Particles
|
|
9
|
+
CISCO_ACTION Built|Teardown|Deny|Denied|denied|requested|permitted|denied by ACL|discarded|est-allowed|Dropping|created|deleted
|
|
10
|
+
CISCO_REASON Duplicate TCP SYN|Failed to locate egress interface|Invalid transport field|No matching connection|DNS Response|DNS Query|(?:%{WORD}\s*)*
|
|
11
|
+
CISCO_DIRECTION Inbound|inbound|Outbound|outbound
|
|
12
|
+
CISCO_INTERVAL first hit|%{INT}-second interval
|
|
13
|
+
CISCO_XLATE_TYPE static|dynamic
|
|
14
|
+
# ASA-2-106001
|
|
15
|
+
CISCOFW106001 %{CISCO_DIRECTION:direction} %{WORD:protocol} connection %{CISCO_ACTION:action} from %{IP:src_ip}/%{INT:src_port} to %{IP:dst_ip}/%{INT:dst_port} flags %{GREEDYDATA:tcp_flags} on interface %{GREEDYDATA:interface}
|
|
16
|
+
# ASA-2-106006, ASA-2-106007, ASA-2-106010
|
|
17
|
+
CISCOFW106006_106007_106010 %{CISCO_ACTION:action} %{CISCO_DIRECTION:direction} %{WORD:protocol} (?:from|src) %{IP:src_ip}/%{INT:src_port}(\(%{DATA:src_fwuser}\))? (?:to|dst) %{IP:dst_ip}/%{INT:dst_port}(\(%{DATA:dst_fwuser}\))? (?:on interface %{DATA:interface}|due to %{CISCO_REASON:reason})
|
|
18
|
+
# ASA-3-106014
|
|
19
|
+
CISCOFW106014 %{CISCO_ACTION:action} %{CISCO_DIRECTION:direction} %{WORD:protocol} src %{DATA:src_interface}:%{IP:src_ip}(\(%{DATA:src_fwuser}\))? dst %{DATA:dst_interface}:%{IP:dst_ip}(\(%{DATA:dst_fwuser}\))? \(type %{INT:icmp_type}, code %{INT:icmp_code}\)
|
|
20
|
+
# ASA-6-106015
|
|
21
|
+
CISCOFW106015 %{CISCO_ACTION:action} %{WORD:protocol} \(%{DATA:policy_id}\) from %{IP:src_ip}/%{INT:src_port} to %{IP:dst_ip}/%{INT:dst_port} flags %{DATA:tcp_flags} on interface %{GREEDYDATA:interface}
|
|
22
|
+
# ASA-1-106021
|
|
23
|
+
CISCOFW106021 %{CISCO_ACTION:action} %{WORD:protocol} reverse path check from %{IP:src_ip} to %{IP:dst_ip} on interface %{GREEDYDATA:interface}
|
|
24
|
+
# ASA-4-106023
|
|
25
|
+
CISCOFW106023 %{CISCO_ACTION:action} %{WORD:protocol} src %{DATA:src_interface}:%{IP:src_ip}(/%{INT:src_port})?(\(%{DATA:src_fwuser}\))? dst %{DATA:dst_interface}:%{IP:dst_ip}(/%{INT:dst_port})?(\(%{DATA:dst_fwuser}\))?( \(type %{INT:icmp_type}, code %{INT:icmp_code}\))? by access-group %{DATA:policy_id} \[%{DATA:hashcode1}, %{DATA:hashcode2}\]
|
|
26
|
+
# ASA-5-106100
|
|
27
|
+
CISCOFW106100 access-list %{WORD:policy_id} %{CISCO_ACTION:action} %{WORD:protocol} %{DATA:src_interface}/%{IP:src_ip}\(%{INT:src_port}\)(\(%{DATA:src_fwuser}\))? -> %{DATA:dst_interface}/%{IP:dst_ip}\(%{INT:dst_port}\)(\(%{DATA:src_fwuser}\))? hit-cnt %{INT:hit_count} %{CISCO_INTERVAL:interval} \[%{DATA:hashcode1}, %{DATA:hashcode2}\]
|
|
28
|
+
# ASA-6-110002
|
|
29
|
+
CISCOFW110002 %{CISCO_REASON:reason} for %{WORD:protocol} from %{DATA:src_interface}:%{IP:src_ip}/%{INT:src_port} to %{IP:dst_ip}/%{INT:dst_port}
|
|
30
|
+
# ASA-6-302010
|
|
31
|
+
CISCOFW302010 %{INT:connection_count} in use, %{INT:connection_count_max} most used
|
|
32
|
+
# ASA-6-302013, ASA-6-302014, ASA-6-302015, ASA-6-302016
|
|
33
|
+
CISCOFW302013_302014_302015_302016 %{CISCO_ACTION:action}(?: %{CISCO_DIRECTION:direction})? %{WORD:protocol} connection %{INT:connection_id} for %{DATA:src_interface}:%{IP:src_ip}/%{INT:src_port}( \(%{IP:src_mapped_ip}/%{INT:src_mapped_port}\))?(\(%{DATA:src_fwuser}\))? to %{DATA:dst_interface}:%{IP:dst_ip}/%{INT:dst_port}( \(%{IP:dst_mapped_ip}/%{INT:dst_mapped_port}\))?(\(%{DATA:dst_fwuser}\))?( duration %{TIME:duration} bytes %{INT:bytes})?(?: %{CISCO_REASON:reason})?( \(%{DATA:user}\))?
|
|
34
|
+
# ASA-6-302020, ASA-6-302021
|
|
35
|
+
CISCOFW302020_302021 %{CISCO_ACTION:action}(?: %{CISCO_DIRECTION:direction})? %{WORD:protocol} connection for faddr %{IP:dst_ip}/%{INT:icmp_seq_num}(?:\(%{DATA:fwuser}\))? gaddr %{IP:src_xlated_ip}/%{INT:icmp_code_xlated} laddr %{IP:src_ip}/%{INT:icmp_code}( \(%{DATA:user}\))?
|
|
36
|
+
# ASA-6-305011
|
|
37
|
+
CISCOFW305011 %{CISCO_ACTION:action} %{CISCO_XLATE_TYPE:xlate_type} %{WORD:protocol} translation from %{DATA:src_interface}:%{IP:src_ip}(/%{INT:src_port})?(\(%{DATA:src_fwuser}\))? to %{DATA:src_xlated_interface}:%{IP:src_xlated_ip}/%{DATA:src_xlated_port}
|
|
38
|
+
# ASA-3-313001, ASA-3-313004, ASA-3-313008
|
|
39
|
+
CISCOFW313001_313004_313008 %{CISCO_ACTION:action} %{WORD:protocol} type=%{INT:icmp_type}, code=%{INT:icmp_code} from %{IP:src_ip} on interface %{DATA:interface}( to %{IP:dst_ip})?
|
|
40
|
+
# ASA-4-313005
|
|
41
|
+
CISCOFW313005 %{CISCO_REASON:reason} for %{WORD:protocol} error message: %{WORD:err_protocol} src %{DATA:err_src_interface}:%{IP:err_src_ip}(\(%{DATA:err_src_fwuser}\))? dst %{DATA:err_dst_interface}:%{IP:err_dst_ip}(\(%{DATA:err_dst_fwuser}\))? \(type %{INT:err_icmp_type}, code %{INT:err_icmp_code}\) on %{DATA:interface} interface\. Original IP payload: %{WORD:protocol} src %{IP:orig_src_ip}/%{INT:orig_src_port}(\(%{DATA:orig_src_fwuser}\))? dst %{IP:orig_dst_ip}/%{INT:orig_dst_port}(\(%{DATA:orig_dst_fwuser}\))?
|
|
42
|
+
# ASA-4-402117
|
|
43
|
+
CISCOFW402117 %{WORD:protocol}: Received a non-IPSec packet \(protocol= %{WORD:orig_protocol}\) from %{IP:src_ip} to %{IP:dst_ip}
|
|
44
|
+
# ASA-4-402119
|
|
45
|
+
CISCOFW402119 %{WORD:protocol}: Received an %{WORD:orig_protocol} packet \(SPI= %{DATA:spi}, sequence number= %{DATA:seq_num}\) from %{IP:src_ip} \(user= %{DATA:user}\) to %{IP:dst_ip} that failed anti-replay checking
|
|
46
|
+
# ASA-4-419001
|
|
47
|
+
CISCOFW419001 %{CISCO_ACTION:action} %{WORD:protocol} packet from %{DATA:src_interface}:%{IP:src_ip}/%{INT:src_port} to %{DATA:dst_interface}:%{IP:dst_ip}/%{INT:dst_port}, reason: %{GREEDYDATA:reason}
|
|
48
|
+
# ASA-4-419002
|
|
49
|
+
CISCOFW419002 %{CISCO_REASON:reason} from %{DATA:src_interface}:%{IP:src_ip}/%{INT:src_port} to %{DATA:dst_interface}:%{IP:dst_ip}/%{INT:dst_port} with different initial sequence number
|
|
50
|
+
# ASA-4-500004
|
|
51
|
+
CISCOFW500004 %{CISCO_REASON:reason} for protocol=%{WORD:protocol}, from %{IP:src_ip}/%{INT:src_port} to %{IP:dst_ip}/%{INT:dst_port}
|
|
52
|
+
# ASA-6-602303, ASA-6-602304
|
|
53
|
+
CISCOFW602303_602304 %{WORD:protocol}: An %{CISCO_DIRECTION:direction} %{GREEDYDATA:tunnel_type} SA \(SPI= %{DATA:spi}\) between %{IP:src_ip} and %{IP:dst_ip} \(user= %{DATA:user}\) has been %{CISCO_ACTION:action}
|
|
54
|
+
# ASA-7-710001, ASA-7-710002, ASA-7-710003, ASA-7-710005, ASA-7-710006
|
|
55
|
+
CISCOFW710001_710002_710003_710005_710006 %{WORD:protocol} (?:request|access) %{CISCO_ACTION:action} from %{IP:src_ip}/%{INT:src_port} to %{DATA:dst_interface}:%{IP:dst_ip}/%{INT:dst_port}
|
|
56
|
+
# ASA-6-713172
|
|
57
|
+
CISCOFW713172 Group = %{GREEDYDATA:group}, IP = %{IP:src_ip}, Automatic NAT Detection Status:\s+Remote end\s*%{DATA:is_remote_natted}\s*behind a NAT device\s+This\s+end\s*%{DATA:is_local_natted}\s*behind a NAT device
|
|
58
|
+
# ASA-4-733100
|
|
59
|
+
CISCOFW733100 \[\s*%{DATA:drop_type}\s*\] drop %{DATA:drop_rate_id} exceeded. Current burst rate is %{INT:drop_rate_current_burst} per second, max configured rate is %{INT:drop_rate_max_burst}; Current average rate is %{INT:drop_rate_current_avg} per second, max configured rate is %{INT:drop_rate_max_avg}; Cumulative total count is %{INT:drop_total_count}
|
|
60
|
+
#== End Cisco ASA ==
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
USERNAME [a-zA-Z0-9._-]+
|
|
2
|
+
USER %{USERNAME}
|
|
3
|
+
INT (?:[+-]?(?:[0-9]+))
|
|
4
|
+
BASE10NUM (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+)))
|
|
5
|
+
NUMBER (?:%{BASE10NUM})
|
|
6
|
+
BASE16NUM (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+))
|
|
7
|
+
BASE16FLOAT \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b
|
|
8
|
+
|
|
9
|
+
POSINT \b(?:[1-9][0-9]*)\b
|
|
10
|
+
NONNEGINT \b(?:[0-9]+)\b
|
|
11
|
+
WORD \b\w+\b
|
|
12
|
+
NOTSPACE \S+
|
|
13
|
+
SPACE \s*
|
|
14
|
+
DATA .*?
|
|
15
|
+
GREEDYDATA .*
|
|
16
|
+
QUOTEDSTRING (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
|
|
17
|
+
UUID [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}
|
|
18
|
+
|
|
19
|
+
# Networking
|
|
20
|
+
MAC (?:%{CISCOMAC}|%{WINDOWSMAC}|%{COMMONMAC})
|
|
21
|
+
CISCOMAC (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4})
|
|
22
|
+
WINDOWSMAC (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})
|
|
23
|
+
COMMONMAC (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2})
|
|
24
|
+
IPV6 ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?
|
|
25
|
+
IPV4 (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])
|
|
26
|
+
IP (?:%{IPV6}|%{IPV4})
|
|
27
|
+
HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
|
|
28
|
+
HOST %{HOSTNAME}
|
|
29
|
+
IPORHOST (?:%{HOSTNAME}|%{IP})
|
|
30
|
+
HOSTPORT %{IPORHOST}:%{POSINT}
|
|
31
|
+
|
|
32
|
+
# paths
|
|
33
|
+
PATH (?:%{UNIXPATH}|%{WINPATH})
|
|
34
|
+
UNIXPATH (?>/(?>[\w_%!$@:.,~-]+|\\.)*)+
|
|
35
|
+
TTY (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+))
|
|
36
|
+
WINPATH (?>[A-Za-z]+:|\\)(?:\\[^\\?*]*)+
|
|
37
|
+
URIPROTO [A-Za-z]+(\+[A-Za-z+]+)?
|
|
38
|
+
URIHOST %{IPORHOST}(?::%{POSINT:port})?
|
|
39
|
+
# uripath comes loosely from RFC1738, but mostly from what Firefox
|
|
40
|
+
# doesn't turn into %XX
|
|
41
|
+
URIPATH (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%_\-]*)+
|
|
42
|
+
#URIPARAM \?(?:[A-Za-z0-9]+(?:=(?:[^&]*))?(?:&(?:[A-Za-z0-9]+(?:=(?:[^&]*))?)?)*)?
|
|
43
|
+
URIPARAM \?[A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
|
|
44
|
+
URIPATHPARAM %{URIPATH}(?:%{URIPARAM})?
|
|
45
|
+
URI %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
|
|
46
|
+
|
|
47
|
+
# Months: January, Feb, 3, 03, 12, December
|
|
48
|
+
MONTH \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b
|
|
49
|
+
MONTHNUM (?:0?[1-9]|1[0-2])
|
|
50
|
+
MONTHNUM2 (?:0[1-9]|1[0-2])
|
|
51
|
+
MONTHDAY (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9])
|
|
52
|
+
|
|
53
|
+
# Days: Monday, Tue, Thu, etc...
|
|
54
|
+
DAY (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?)
|
|
55
|
+
|
|
56
|
+
# Years?
|
|
57
|
+
YEAR (?>\d\d){1,2}
|
|
58
|
+
HOUR (?:2[0123]|[01]?[0-9])
|
|
59
|
+
MINUTE (?:[0-5][0-9])
|
|
60
|
+
# '60' is a leap second in most time standards and thus is valid.
|
|
61
|
+
SECOND (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)
|
|
62
|
+
TIME (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9])
|
|
63
|
+
# datestamp is YYYY/MM/DD-HH:MM:SS.UUUU (or something like it)
|
|
64
|
+
DATE_US %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR}
|
|
65
|
+
DATE_EU %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR}
|
|
66
|
+
ISO8601_TIMEZONE (?:Z|[+-]%{HOUR}(?::?%{MINUTE}))
|
|
67
|
+
ISO8601_SECOND (?:%{SECOND}|60)
|
|
68
|
+
TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
|
|
69
|
+
DATE %{DATE_US}|%{DATE_EU}
|
|
70
|
+
DATESTAMP %{DATE}[- ]%{TIME}
|
|
71
|
+
TZ (?:[PMCE][SD]T|UTC)
|
|
72
|
+
DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}
|
|
73
|
+
DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}
|
|
74
|
+
DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}
|
|
75
|
+
DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}
|
|
76
|
+
|
|
77
|
+
# Syslog Dates: Month Day HH:MM:SS
|
|
78
|
+
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}
|
|
79
|
+
PROG (?:[\w._/%-]+)
|
|
80
|
+
SYSLOGPROG %{PROG:program}(?:\[%{POSINT:pid}\])?
|
|
81
|
+
SYSLOGHOST %{IPORHOST}
|
|
82
|
+
SYSLOGFACILITY <%{NONNEGINT:facility}.%{NONNEGINT:priority}>
|
|
83
|
+
HTTPDATE %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT}
|
|
84
|
+
|
|
85
|
+
# Shortcuts
|
|
86
|
+
QS %{QUOTEDSTRING}
|
|
87
|
+
|
|
88
|
+
# Log formats
|
|
89
|
+
SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
|
|
90
|
+
COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
|
|
91
|
+
COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}
|
|
92
|
+
|
|
93
|
+
# Log Levels
|
|
94
|
+
LOGLEVEL ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?)
|
data/patterns/haproxy
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
## These patterns were tested w/ haproxy-1.4.15
|
|
2
|
+
|
|
3
|
+
## Documentation of the haproxy log formats can be found at the following links:
|
|
4
|
+
## http://code.google.com/p/haproxy-docs/wiki/HTTPLogFormat
|
|
5
|
+
## http://code.google.com/p/haproxy-docs/wiki/TCPLogFormat
|
|
6
|
+
|
|
7
|
+
HAPROXYTIME (?!<[0-9])%{HOUR:haproxy_hour}:%{MINUTE:haproxy_minute}(?::%{SECOND:haproxy_second})(?![0-9])
|
|
8
|
+
HAPROXYDATE %{MONTHDAY:haproxy_monthday}/%{MONTH:haproxy_month}/%{YEAR:haproxy_year}:%{HAPROXYTIME:haproxy_time}.%{INT:haproxy_milliseconds}
|
|
9
|
+
|
|
10
|
+
# Override these default patterns to parse out what is captured in your haproxy.cfg
|
|
11
|
+
HAPROXYCAPTUREDREQUESTHEADERS %{DATA:captured_request_headers}
|
|
12
|
+
HAPROXYCAPTUREDRESPONSEHEADERS %{DATA:captured_response_headers}
|
|
13
|
+
|
|
14
|
+
# Example:
|
|
15
|
+
# These haproxy config lines will add data to the logs that are captured
|
|
16
|
+
# by the patterns below. Place them in your custom patterns directory to
|
|
17
|
+
# override the defaults.
|
|
18
|
+
#
|
|
19
|
+
# capture request header Host len 40
|
|
20
|
+
# capture request header X-Forwarded-For len 50
|
|
21
|
+
# capture request header Accept-Language len 50
|
|
22
|
+
# capture request header Referer len 200
|
|
23
|
+
# capture request header User-Agent len 200
|
|
24
|
+
#
|
|
25
|
+
# capture response header Content-Type len 30
|
|
26
|
+
# capture response header Content-Encoding len 10
|
|
27
|
+
# capture response header Cache-Control len 200
|
|
28
|
+
# capture response header Last-Modified len 200
|
|
29
|
+
#
|
|
30
|
+
# HAPROXYCAPTUREDREQUESTHEADERS %{DATA:request_header_host}\|%{DATA:request_header_x_forwarded_for}\|%{DATA:request_header_accept_language}\|%{DATA:request_header_referer}\|%{DATA:request_header_user_agent}
|
|
31
|
+
# HAPROXYCAPTUREDRESPONSEHEADERS %{DATA:response_header_content_type}\|%{DATA:response_header_content_encoding}\|%{DATA:response_header_cache_control}\|%{DATA:response_header_last_modified}
|
|
32
|
+
|
|
33
|
+
# parse a haproxy 'httplog' line
|
|
34
|
+
HAPROXYHTTP %{SYSLOGTIMESTAMP:syslog_timestamp} %{IPORHOST:syslog_server} %{SYSLOGPROG}: %{IP:client_ip}:%{INT:client_port} \[%{HAPROXYDATE:accept_date}\] %{NOTSPACE:frontend_name} %{NOTSPACE:backend_name}/%{NOTSPACE:server_name} %{INT:time_request}/%{INT:time_queue}/%{INT:time_backend_connect}/%{INT:time_backend_response}/%{NOTSPACE:time_duration} %{INT:http_status_code} %{NOTSPACE:bytes_read} %{DATA:captured_request_cookie} %{DATA:captured_response_cookie} %{NOTSPACE:termination_state} %{INT:actconn}/%{INT:feconn}/%{INT:beconn}/%{INT:srvconn}/%{NOTSPACE:retries} %{INT:srv_queue}/%{INT:backend_queue} (\{%{HAPROXYCAPTUREDREQUESTHEADERS}\})?( )?(\{%{HAPROXYCAPTUREDRESPONSEHEADERS}\})?( )?"(<BADREQ>|(%{WORD:http_verb} (%{URIPROTO:http_proto}://)?(?:%{USER:http_user}(?::[^@]*)?@)?(?:%{URIHOST:http_host})?(?:%{URIPATHPARAM:http_request})?( HTTP/%{NUMBER:http_version})?))?"
|
|
35
|
+
|
|
36
|
+
# parse a haproxy 'tcplog' line
|
|
37
|
+
HAPROXYTCP %{SYSLOGTIMESTAMP:syslog_timestamp} %{IPORHOST:syslog_server} %{SYSLOGPROG}: %{IP:client_ip}:%{INT:client_port} \[%{HAPROXYDATE:accept_date}\] %{NOTSPACE:frontend_name} %{NOTSPACE:backend_name}/%{NOTSPACE:server_name} %{INT:time_queue}/%{INT:time_backend_connect}/%{NOTSPACE:time_duration} %{NOTSPACE:bytes_read} %{NOTSPACE:termination_state} %{INT:actconn}/%{INT:feconn}/%{INT:beconn}/%{INT:srvconn}/%{NOTSPACE:retries} %{INT:srv_queue}/%{INT:backend_queue}
|
data/patterns/java
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
JAVACLASS (?:[a-zA-Z$_][a-zA-Z$_0-9]*\.)*[a-zA-Z$_][a-zA-Z$_0-9]*
|
|
2
|
+
#Space is an allowed character to match special cases like 'Native Method' or 'Unknown Source'
|
|
3
|
+
JAVAFILE (?:[A-Za-z0-9_. -]+)
|
|
4
|
+
#Allow special <init> method
|
|
5
|
+
JAVAMETHOD (?:(<init>)|[a-zA-Z$_][a-zA-Z$_0-9]*)
|
|
6
|
+
#Line number is optional in special cases 'Native method' or 'Unknown source'
|
|
7
|
+
JAVASTACKTRACEPART %{SPACE}at %{JAVACLASS:class}\.%{JAVAMETHOD:method}\(%{JAVAFILE:file}(?::%{NUMBER:line})?\)
|
data/patterns/junos
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# JUNOS 11.4 RT_FLOW patterns
|
|
2
|
+
RT_FLOW_EVENT (RT_FLOW_SESSION_CREATE|RT_FLOW_SESSION_CLOSE|RT_FLOW_SESSION_DENY)
|
|
3
|
+
|
|
4
|
+
RT_FLOW1 %{RT_FLOW_EVENT:event}: %{GREEDYDATA:close-reason}: %{IP:src-ip}/%{DATA:src-port}->%{IP:dst-ip}/%{DATA:dst-port} %{DATA:service} %{IP:nat-src-ip}/%{DATA:nat-src-port}->%{IP:nat-dst-ip}/%{DATA:nat-dst-port} %{DATA:src-nat-rule-name} %{DATA:dst-nat-rule-name} %{INT:protocol-id} %{DATA:policy-name} %{DATA:from-zone} %{DATA:to-zone} %{INT:session-id} \d+\(%{DATA:sent}\) \d+\(%{DATA:received}\) %{INT:elapsed-time} .*
|
|
5
|
+
|
|
6
|
+
RT_FLOW2 %{RT_FLOW_EVENT:event}: session created %{IP:src-ip}/%{DATA:src-port}->%{IP:dst-ip}/%{DATA:dst-port} %{DATA:service} %{IP:nat-src-ip}/%{DATA:nat-src-port}->%{IP:nat-dst-ip}/%{DATA:nat-dst-port} %{DATA:src-nat-rule-name} %{DATA:dst-nat-rule-name} %{INT:protocol-id} %{DATA:policy-name} %{DATA:from-zone} %{DATA:to-zone} %{INT:session-id} .*
|
|
7
|
+
|
|
8
|
+
RT_FLOW3 %{RT_FLOW_EVENT:event}: session denied %{IP:src-ip}/%{DATA:src-port}->%{IP:dst-ip}/%{DATA:dst-port} %{DATA:service} %{INT:protocol-id}\(\d\) %{DATA:policy-name} %{DATA:from-zone} %{DATA:to-zone} .*
|
|
9
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
SYSLOG5424PRINTASCII [!-~]+
|
|
2
|
+
|
|
3
|
+
SYSLOGBASE2 (?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
|
|
4
|
+
SYSLOGPAMSESSION %{SYSLOGBASE} (?=%{GREEDYDATA:message})%{WORD:pam_module}\(%{DATA:pam_caller}\): session %{WORD:pam_session_state} for user %{USERNAME:username}(?: by %{GREEDYDATA:pam_by})?
|
|
5
|
+
|
|
6
|
+
CRON_ACTION [A-Z ]+
|
|
7
|
+
CRONLOG %{SYSLOGBASE} \(%{USER:user}\) %{CRON_ACTION:action} \(%{DATA:message}\)
|
|
8
|
+
|
|
9
|
+
SYSLOGLINE %{SYSLOGBASE2} %{GREEDYDATA:message}
|
|
10
|
+
|
|
11
|
+
# IETF 5424 syslog(8) format (see http://www.rfc-editor.org/info/rfc5424)
|
|
12
|
+
SYSLOG5424PRI <%{NONNEGINT:syslog5424_pri}>
|
|
13
|
+
SYSLOG5424SD \[%{DATA}\]+
|
|
14
|
+
SYSLOG5424BASE %{SYSLOG5424PRI}%{NONNEGINT:syslog5424_ver} +(?:%{TIMESTAMP_ISO8601:syslog5424_ts}|-) +(?:%{HOSTNAME:syslog5424_host}|-) +(-|%{SYSLOG5424PRINTASCII:syslog5424_app}) +(-|%{SYSLOG5424PRINTASCII:syslog5424_proc}) +(-|%{SYSLOG5424PRINTASCII:syslog5424_msgid}) +(?:%{SYSLOG5424SD:syslog5424_sd}|-|)
|
|
15
|
+
|
|
16
|
+
SYSLOG5424LINE %{SYSLOG5424BASE} +%{GREEDYDATA:syslog5424_msg}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MCOLLECTIVEAUDIT %{TIMESTAMP_ISO8601:timestamp}:
|
data/patterns/mongodb
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
MONGO_LOG %{SYSLOGTIMESTAMP:timestamp} \[%{WORD:component}\] %{GREEDYDATA:message}
|
|
2
|
+
MONGO_QUERY \{ (?<={ ).*(?= } ntoreturn:) \}
|
|
3
|
+
MONGO_SLOWQUERY %{WORD} %{MONGO_WORDDASH:database}\.%{MONGO_WORDDASH:collection} %{WORD}: %{MONGO_QUERY:query} %{WORD}:%{NONNEGINT:ntoreturn} %{WORD}:%{NONNEGINT:ntoskip} %{WORD}:%{NONNEGINT:nscanned}.*nreturned:%{NONNEGINT:nreturned}..+ (?<duration>[0-9]+)ms
|
|
4
|
+
MONGO_WORDDASH \b[\w-]+\b
|
data/patterns/nagios
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
##################################################################################
|
|
2
|
+
##################################################################################
|
|
3
|
+
# Chop Nagios log files to smithereens!
|
|
4
|
+
#
|
|
5
|
+
# A set of GROK filters to process logfiles generated by Nagios.
|
|
6
|
+
# While it does not, this set intends to cover all possible Nagios logs.
|
|
7
|
+
#
|
|
8
|
+
# Some more work needs to be done to cover all External Commands:
|
|
9
|
+
# http://old.nagios.org/developerinfo/externalcommands/commandlist.php
|
|
10
|
+
#
|
|
11
|
+
# If you need some support on these rules please contact:
|
|
12
|
+
# Jelle Smet http://smetj.net
|
|
13
|
+
#
|
|
14
|
+
#################################################################################
|
|
15
|
+
#################################################################################
|
|
16
|
+
|
|
17
|
+
NAGIOSTIME \[%{NUMBER:nagios_epoch}\]
|
|
18
|
+
|
|
19
|
+
###############################################
|
|
20
|
+
######## Begin nagios log types
|
|
21
|
+
###############################################
|
|
22
|
+
NAGIOS_TYPE_CURRENT_SERVICE_STATE CURRENT SERVICE STATE
|
|
23
|
+
NAGIOS_TYPE_CURRENT_HOST_STATE CURRENT HOST STATE
|
|
24
|
+
|
|
25
|
+
NAGIOS_TYPE_SERVICE_NOTIFICATION SERVICE NOTIFICATION
|
|
26
|
+
NAGIOS_TYPE_HOST_NOTIFICATION HOST NOTIFICATION
|
|
27
|
+
|
|
28
|
+
NAGIOS_TYPE_SERVICE_ALERT SERVICE ALERT
|
|
29
|
+
NAGIOS_TYPE_HOST_ALERT HOST ALERT
|
|
30
|
+
|
|
31
|
+
NAGIOS_TYPE_SERVICE_FLAPPING_ALERT SERVICE FLAPPING ALERT
|
|
32
|
+
NAGIOS_TYPE_HOST_FLAPPING_ALERT HOST FLAPPING ALERT
|
|
33
|
+
|
|
34
|
+
NAGIOS_TYPE_SERVICE_DOWNTIME_ALERT SERVICE DOWNTIME ALERT
|
|
35
|
+
NAGIOS_TYPE_HOST_DOWNTIME_ALERT HOST DOWNTIME ALERT
|
|
36
|
+
|
|
37
|
+
NAGIOS_TYPE_PASSIVE_SERVICE_CHECK PASSIVE SERVICE CHECK
|
|
38
|
+
NAGIOS_TYPE_PASSIVE_HOST_CHECK PASSIVE HOST CHECK
|
|
39
|
+
|
|
40
|
+
NAGIOS_TYPE_SERVICE_EVENT_HANDLER SERVICE EVENT HANDLER
|
|
41
|
+
NAGIOS_TYPE_HOST_EVENT_HANDLER HOST EVENT HANDLER
|
|
42
|
+
|
|
43
|
+
NAGIOS_TYPE_EXTERNAL_COMMAND EXTERNAL COMMAND
|
|
44
|
+
NAGIOS_TYPE_TIMEPERIOD_TRANSITION TIMEPERIOD TRANSITION
|
|
45
|
+
###############################################
|
|
46
|
+
######## End nagios log types
|
|
47
|
+
###############################################
|
|
48
|
+
|
|
49
|
+
###############################################
|
|
50
|
+
######## Begin external check types
|
|
51
|
+
###############################################
|
|
52
|
+
NAGIOS_EC_DISABLE_SVC_CHECK DISABLE_SVC_CHECK
|
|
53
|
+
NAGIOS_EC_ENABLE_SVC_CHECK ENABLE_SVC_CHECK
|
|
54
|
+
NAGIOS_EC_DISABLE_HOST_CHECK DISABLE_HOST_CHECK
|
|
55
|
+
NAGIOS_EC_ENABLE_HOST_CHECK ENABLE_HOST_CHECK
|
|
56
|
+
NAGIOS_EC_PROCESS_SERVICE_CHECK_RESULT PROCESS_SERVICE_CHECK_RESULT
|
|
57
|
+
NAGIOS_EC_PROCESS_HOST_CHECK_RESULT PROCESS_HOST_CHECK_RESULT
|
|
58
|
+
NAGIOS_EC_SCHEDULE_SERVICE_DOWNTIME SCHEDULE_SERVICE_DOWNTIME
|
|
59
|
+
NAGIOS_EC_SCHEDULE_HOST_DOWNTIME SCHEDULE_HOST_DOWNTIME
|
|
60
|
+
###############################################
|
|
61
|
+
######## End external check types
|
|
62
|
+
###############################################
|
|
63
|
+
NAGIOS_WARNING Warning:%{SPACE}%{GREEDYDATA:nagios_message}
|
|
64
|
+
|
|
65
|
+
NAGIOS_CURRENT_SERVICE_STATE %{NAGIOS_TYPE_CURRENT_SERVICE_STATE:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{DATA:nagios_statetype};%{DATA:nagios_statecode};%{GREEDYDATA:nagios_message}
|
|
66
|
+
NAGIOS_CURRENT_HOST_STATE %{NAGIOS_TYPE_CURRENT_HOST_STATE:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_state};%{DATA:nagios_statetype};%{DATA:nagios_statecode};%{GREEDYDATA:nagios_message}
|
|
67
|
+
|
|
68
|
+
NAGIOS_SERVICE_NOTIFICATION %{NAGIOS_TYPE_SERVICE_NOTIFICATION:nagios_type}: %{DATA:nagios_notifyname};%{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{DATA:nagios_contact};%{GREEDYDATA:nagios_message}
|
|
69
|
+
NAGIOS_HOST_NOTIFICATION %{NAGIOS_TYPE_HOST_NOTIFICATION}: %{DATA:nagios_notifyname};%{DATA:nagios_hostname};%{DATA:nagios_state};%{DATA:nagios_contact};%{GREEDYDATA:nagios_message}
|
|
70
|
+
|
|
71
|
+
NAGIOS_SERVICE_ALERT %{NAGIOS_TYPE_SERVICE_ALERT:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{DATA:nagios_statelevel};%{NUMBER:nagios_attempt};%{GREEDYDATA:nagios_message}
|
|
72
|
+
NAGIOS_HOST_ALERT %{NAGIOS_TYPE_HOST_ALERT:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_state};%{DATA:nagios_statelevel};%{NUMBER:nagios_attempt};%{GREEDYDATA:nagios_message}
|
|
73
|
+
|
|
74
|
+
NAGIOS_SERVICE_FLAPPING_ALERT %{NAGIOS_TYPE_SERVICE_FLAPPING_ALERT:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{GREEDYDATA:nagios_message}
|
|
75
|
+
NAGIOS_HOST_FLAPPING_ALERT %{NAGIOS_TYPE_HOST_FLAPPING_ALERT:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_state};%{GREEDYDATA:nagios_message}
|
|
76
|
+
|
|
77
|
+
NAGIOS_SERVICE_DOWNTIME_ALERT %{NAGIOS_TYPE_SERVICE_DOWNTIME_ALERT:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{GREEDYDATA:nagios_comment}
|
|
78
|
+
NAGIOS_HOST_DOWNTIME_ALERT %{NAGIOS_TYPE_HOST_DOWNTIME_ALERT:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_state};%{GREEDYDATA:nagios_comment}
|
|
79
|
+
|
|
80
|
+
NAGIOS_PASSIVE_SERVICE_CHECK %{NAGIOS_TYPE_PASSIVE_SERVICE_CHECK:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{GREEDYDATA:nagios_comment}
|
|
81
|
+
NAGIOS_PASSIVE_HOST_CHECK %{NAGIOS_TYPE_PASSIVE_HOST_CHECK:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_state};%{GREEDYDATA:nagios_comment}
|
|
82
|
+
|
|
83
|
+
NAGIOS_SERVICE_EVENT_HANDLER %{NAGIOS_TYPE_SERVICE_EVENT_HANDLER:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{DATA:nagios_statelevel};%{DATA:nagios_event_handler_name}
|
|
84
|
+
NAGIOS_HOST_EVENT_HANDLER %{NAGIOS_TYPE_HOST_EVENT_HANDLER:nagios_type}: %{DATA:nagios_hostname};%{DATA:nagios_state};%{DATA:nagios_statelevel};%{DATA:nagios_event_handler_name}
|
|
85
|
+
|
|
86
|
+
NAGIOS_TIMEPERIOD_TRANSITION %{NAGIOS_TYPE_TIMEPERIOD_TRANSITION:nagios_type}: %{DATA:nagios_service};%{DATA:nagios_unknown1};%{DATA:nagios_unknown2};
|
|
87
|
+
|
|
88
|
+
####################
|
|
89
|
+
#### External checks
|
|
90
|
+
####################
|
|
91
|
+
|
|
92
|
+
#Disable host & service check
|
|
93
|
+
NAGIOS_EC_LINE_DISABLE_SVC_CHECK %{NAGIOS_TYPE_EXTERNAL_COMMAND:nagios_type}: %{NAGIOS_EC_DISABLE_SVC_CHECK:nagios_command};%{DATA:nagios_hostname};%{DATA:nagios_service}
|
|
94
|
+
NAGIOS_EC_LINE_DISABLE_HOST_CHECK %{NAGIOS_TYPE_EXTERNAL_COMMAND:nagios_type}: %{NAGIOS_EC_DISABLE_HOST_CHECK:nagios_command};%{DATA:nagios_hostname}
|
|
95
|
+
|
|
96
|
+
#Enable host & service check
|
|
97
|
+
NAGIOS_EC_LINE_ENABLE_SVC_CHECK %{NAGIOS_TYPE_EXTERNAL_COMMAND:nagios_type}: %{NAGIOS_EC_ENABLE_SVC_CHECK:nagios_command};%{DATA:nagios_hostname};%{DATA:nagios_service}
|
|
98
|
+
NAGIOS_EC_LINE_ENABLE_HOST_CHECK %{NAGIOS_TYPE_EXTERNAL_COMMAND:nagios_type}: %{NAGIOS_EC_ENABLE_HOST_CHECK:nagios_command};%{DATA:nagios_hostname}
|
|
99
|
+
|
|
100
|
+
#Process host & service check
|
|
101
|
+
NAGIOS_EC_LINE_PROCESS_SERVICE_CHECK_RESULT %{NAGIOS_TYPE_EXTERNAL_COMMAND:nagios_type}: %{NAGIOS_EC_PROCESS_SERVICE_CHECK_RESULT:nagios_command};%{DATA:nagios_hostname};%{DATA:nagios_service};%{DATA:nagios_state};%{GREEDYDATA:nagios_check_result}
|
|
102
|
+
NAGIOS_EC_LINE_PROCESS_HOST_CHECK_RESULT %{NAGIOS_TYPE_EXTERNAL_COMMAND:nagios_type}: %{NAGIOS_EC_PROCESS_HOST_CHECK_RESULT:nagios_command};%{DATA:nagios_hostname};%{DATA:nagios_state};%{GREEDYDATA:nagios_check_result}
|
|
103
|
+
|
|
104
|
+
#Schedule host & service downtime
|
|
105
|
+
NAGIOS_EC_LINE_SCHEDULE_HOST_DOWNTIME %{NAGIOS_TYPE_EXTERNAL_COMMAND:nagios_type}: %{NAGIOS_EC_SCHEDULE_HOST_DOWNTIME:nagios_command};%{DATA:nagios_hostname};%{NUMBER:nagios_start_time};%{NUMBER:nagios_end_time};%{NUMBER:nagios_fixed};%{NUMBER:nagios_trigger_id};%{NUMBER:nagios_duration};%{DATA:author};%{DATA:comment}
|
|
106
|
+
|
|
107
|
+
#End matching line
|
|
108
|
+
NAGIOSLOGLINE %{NAGIOSTIME} (?:%{NAGIOS_WARNING}|%{NAGIOS_CURRENT_SERVICE_STATE}|%{NAGIOS_CURRENT_HOST_STATE}|%{NAGIOS_SERVICE_NOTIFICATION}|%{NAGIOS_HOST_NOTIFICATION}|%{NAGIOS_SERVICE_ALERT}|%{NAGIOS_HOST_ALERT}|%{NAGIOS_SERVICE_FLAPPING_ALERT}|%{NAGIOS_HOST_FLAPPING_ALERT}|%{NAGIOS_SERVICE_DOWNTIME_ALERT}|%{NAGIOS_HOST_DOWNTIME_ALERT}|%{NAGIOS_PASSIVE_SERVICE_CHECK}|%{NAGIOS_PASSIVE_HOST_CHECK}|%{NAGIOS_SERVICE_EVENT_HANDLER}|%{NAGIOS_HOST_EVENT_HANDLER}|%{NAGIOS_TIMEPERIOD_TRANSITION}|%{NAGIOS_EC_LINE_DISABLE_SVC_CHECK}|%{NAGIOS_EC_LINE_ENABLE_SVC_CHECK}|%{NAGIOS_EC_LINE_DISABLE_HOST_CHECK|%{NAGIOS_EC_LINE_ENABLE_HOST_CHECK}|%{NAGIOS_EC_LINE_PROCESS_HOST_CHECK_RESULT}|%{NAGIOS_EC_LINE_PROCESS_SERVICE_CHECK_RESULT}|%{NAGIOS_EC_LINE_SCHEDULE_HOST_DOWNTIME})
|
data/patterns/postgresql
ADDED
data/patterns/redis
ADDED
data/patterns/ruby
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require "gem_publisher"
|
|
2
|
+
|
|
3
|
+
desc "Publish gem to RubyGems.org"
|
|
4
|
+
task :publish_gem do |t|
|
|
5
|
+
gem_file = Dir.glob(File.expand_path('../*.gemspec',File.dirname(__FILE__))).first
|
|
6
|
+
gem = GemPublisher.publish_if_updated(gem_file, :rubygems)
|
|
7
|
+
puts "Published #{gem}" if gem
|
|
8
|
+
end
|
|
9
|
+
|
data/rakelib/vendor.rake
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
require "net/http"
|
|
2
|
+
require "uri"
|
|
3
|
+
require "digest/sha1"
|
|
4
|
+
|
|
5
|
+
def vendor(*args)
|
|
6
|
+
return File.join("vendor", *args)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
directory "vendor/" => ["vendor"] do |task, args|
|
|
10
|
+
mkdir task.name
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def fetch(url, sha1, output)
|
|
14
|
+
|
|
15
|
+
puts "Downloading #{url}"
|
|
16
|
+
actual_sha1 = download(url, output)
|
|
17
|
+
|
|
18
|
+
if actual_sha1 != sha1
|
|
19
|
+
fail "SHA1 does not match (expected '#{sha1}' but got '#{actual_sha1}')"
|
|
20
|
+
end
|
|
21
|
+
end # def fetch
|
|
22
|
+
|
|
23
|
+
def file_fetch(url, sha1)
|
|
24
|
+
filename = File.basename( URI(url).path )
|
|
25
|
+
output = "vendor/#{filename}"
|
|
26
|
+
task output => [ "vendor/" ] do
|
|
27
|
+
begin
|
|
28
|
+
actual_sha1 = file_sha1(output)
|
|
29
|
+
if actual_sha1 != sha1
|
|
30
|
+
fetch(url, sha1, output)
|
|
31
|
+
end
|
|
32
|
+
rescue Errno::ENOENT
|
|
33
|
+
fetch(url, sha1, output)
|
|
34
|
+
end
|
|
35
|
+
end.invoke
|
|
36
|
+
|
|
37
|
+
return output
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def file_sha1(path)
|
|
41
|
+
digest = Digest::SHA1.new
|
|
42
|
+
fd = File.new(path, "r")
|
|
43
|
+
while true
|
|
44
|
+
begin
|
|
45
|
+
digest << fd.sysread(16384)
|
|
46
|
+
rescue EOFError
|
|
47
|
+
break
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
return digest.hexdigest
|
|
51
|
+
ensure
|
|
52
|
+
fd.close if fd
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def download(url, output)
|
|
56
|
+
uri = URI(url)
|
|
57
|
+
digest = Digest::SHA1.new
|
|
58
|
+
tmp = "#{output}.tmp"
|
|
59
|
+
Net::HTTP.start(uri.host, uri.port, :use_ssl => (uri.scheme == "https")) do |http|
|
|
60
|
+
request = Net::HTTP::Get.new(uri.path)
|
|
61
|
+
http.request(request) do |response|
|
|
62
|
+
fail "HTTP fetch failed for #{url}. #{response}" if [200, 301].include?(response.code)
|
|
63
|
+
size = (response["content-length"].to_i || -1).to_f
|
|
64
|
+
count = 0
|
|
65
|
+
File.open(tmp, "w") do |fd|
|
|
66
|
+
response.read_body do |chunk|
|
|
67
|
+
fd.write(chunk)
|
|
68
|
+
digest << chunk
|
|
69
|
+
if size > 0 && $stdout.tty?
|
|
70
|
+
count += chunk.bytesize
|
|
71
|
+
$stdout.write(sprintf("\r%0.2f%%", count/size * 100))
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
$stdout.write("\r \r") if $stdout.tty?
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
File.rename(tmp, output)
|
|
80
|
+
|
|
81
|
+
return digest.hexdigest
|
|
82
|
+
rescue SocketError => e
|
|
83
|
+
puts "Failure while downloading #{url}: #{e}"
|
|
84
|
+
raise
|
|
85
|
+
ensure
|
|
86
|
+
File.unlink(tmp) if File.exist?(tmp)
|
|
87
|
+
end # def download
|
|
88
|
+
|
|
89
|
+
def untar(tarball, &block)
|
|
90
|
+
require "archive/tar/minitar"
|
|
91
|
+
tgz = Zlib::GzipReader.new(File.open(tarball))
|
|
92
|
+
# Pull out typesdb
|
|
93
|
+
tar = Archive::Tar::Minitar::Input.open(tgz)
|
|
94
|
+
tar.each do |entry|
|
|
95
|
+
path = block.call(entry)
|
|
96
|
+
next if path.nil?
|
|
97
|
+
parent = File.dirname(path)
|
|
98
|
+
|
|
99
|
+
mkdir_p parent unless File.directory?(parent)
|
|
100
|
+
|
|
101
|
+
# Skip this file if the output file is the same size
|
|
102
|
+
if entry.directory?
|
|
103
|
+
mkdir path unless File.directory?(path)
|
|
104
|
+
else
|
|
105
|
+
entry_mode = entry.instance_eval { @mode } & 0777
|
|
106
|
+
if File.exists?(path)
|
|
107
|
+
stat = File.stat(path)
|
|
108
|
+
# TODO(sissel): Submit a patch to archive-tar-minitar upstream to
|
|
109
|
+
# expose headers in the entry.
|
|
110
|
+
entry_size = entry.instance_eval { @size }
|
|
111
|
+
# If file sizes are same, skip writing.
|
|
112
|
+
next if stat.size == entry_size && (stat.mode & 0777) == entry_mode
|
|
113
|
+
end
|
|
114
|
+
puts "Extracting #{entry.full_name} from #{tarball} #{entry_mode.to_s(8)}"
|
|
115
|
+
File.open(path, "w") do |fd|
|
|
116
|
+
# eof? check lets us skip empty files. Necessary because the API provided by
|
|
117
|
+
# Archive::Tar::Minitar::Reader::EntryStream only mostly acts like an
|
|
118
|
+
# IO object. Something about empty files in this EntryStream causes
|
|
119
|
+
# IO.copy_stream to throw "can't convert nil into String" on JRuby
|
|
120
|
+
# TODO(sissel): File a bug about this.
|
|
121
|
+
while !entry.eof?
|
|
122
|
+
chunk = entry.read(16384)
|
|
123
|
+
fd.write(chunk)
|
|
124
|
+
end
|
|
125
|
+
#IO.copy_stream(entry, fd)
|
|
126
|
+
end
|
|
127
|
+
File.chmod(entry_mode, path)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
tar.close
|
|
131
|
+
File.unlink(tarball) if File.file?(tarball)
|
|
132
|
+
end # def untar
|
|
133
|
+
|
|
134
|
+
def ungz(file)
|
|
135
|
+
|
|
136
|
+
outpath = file.gsub('.gz', '')
|
|
137
|
+
tgz = Zlib::GzipReader.new(File.open(file))
|
|
138
|
+
begin
|
|
139
|
+
File.open(outpath, "w") do |out|
|
|
140
|
+
IO::copy_stream(tgz, out)
|
|
141
|
+
end
|
|
142
|
+
File.unlink(file)
|
|
143
|
+
rescue
|
|
144
|
+
File.unlink(outpath) if File.file?(outpath)
|
|
145
|
+
raise
|
|
146
|
+
end
|
|
147
|
+
tgz.close
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
desc "Process any vendor files required for this plugin"
|
|
151
|
+
task "vendor" do |task, args|
|
|
152
|
+
|
|
153
|
+
@files.each do |file|
|
|
154
|
+
download = file_fetch(file['url'], file['sha1'])
|
|
155
|
+
if download =~ /.tar.gz/
|
|
156
|
+
prefix = download.gsub('.tar.gz', '').gsub('vendor/', '')
|
|
157
|
+
untar(download) do |entry|
|
|
158
|
+
if !file['files'].nil?
|
|
159
|
+
next unless file['files'].include?(entry.full_name.gsub(prefix, ''))
|
|
160
|
+
out = entry.full_name.split("/").last
|
|
161
|
+
end
|
|
162
|
+
File.join('vendor', out)
|
|
163
|
+
end
|
|
164
|
+
elsif download =~ /.gz/
|
|
165
|
+
ungz(download)
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: logstash-patterns-core
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Elasticsearch
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2014-11-04 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: logstash
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ! '>='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 1.4.0
|
|
20
|
+
- - <
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: 2.0.0
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 1.4.0
|
|
30
|
+
- - <
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 2.0.0
|
|
33
|
+
description: Patterns to be used in logstash for certain plugins
|
|
34
|
+
email: richard.pijnenburg@elasticsearch.com
|
|
35
|
+
executables: []
|
|
36
|
+
extensions: []
|
|
37
|
+
extra_rdoc_files: []
|
|
38
|
+
files:
|
|
39
|
+
- .gitignore
|
|
40
|
+
- Gemfile
|
|
41
|
+
- Rakefile
|
|
42
|
+
- lib/logstash/patterns/core.rb
|
|
43
|
+
- logstash-patterns-core.gemspec
|
|
44
|
+
- patterns/firewalls
|
|
45
|
+
- patterns/grok-patterns
|
|
46
|
+
- patterns/haproxy
|
|
47
|
+
- patterns/java
|
|
48
|
+
- patterns/junos
|
|
49
|
+
- patterns/linux-syslog
|
|
50
|
+
- patterns/mcollective
|
|
51
|
+
- patterns/mcollective-patterns
|
|
52
|
+
- patterns/mongodb
|
|
53
|
+
- patterns/nagios
|
|
54
|
+
- patterns/postgresql
|
|
55
|
+
- patterns/redis
|
|
56
|
+
- patterns/ruby
|
|
57
|
+
- rakelib/publish.rake
|
|
58
|
+
- rakelib/vendor.rake
|
|
59
|
+
- spec/patterns/core_spec.rb
|
|
60
|
+
homepage: http://logstash.net/
|
|
61
|
+
licenses:
|
|
62
|
+
- Apache License (2.0)
|
|
63
|
+
metadata:
|
|
64
|
+
logstash_plugin: 'true'
|
|
65
|
+
post_install_message:
|
|
66
|
+
rdoc_options: []
|
|
67
|
+
require_paths:
|
|
68
|
+
- lib
|
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
70
|
+
requirements:
|
|
71
|
+
- - ! '>='
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: '0'
|
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
|
+
requirements:
|
|
76
|
+
- - ! '>='
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '0'
|
|
79
|
+
requirements: []
|
|
80
|
+
rubyforge_project:
|
|
81
|
+
rubygems_version: 2.4.1
|
|
82
|
+
signing_key:
|
|
83
|
+
specification_version: 4
|
|
84
|
+
summary: Patterns to be used in logstash
|
|
85
|
+
test_files:
|
|
86
|
+
- spec/patterns/core_spec.rb
|