Mar 6 16:15:20 192.168.10.2 syslog: User: admin last logged successfully in 2023-Mar-6#012, to 192.168.10.2, from 192.168.0.54 using HTTPS
쿼리
%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{WORD:process}\: User\: %{GREEDYDATA:user} last logged %{GREEDYDATA:access_result} in %{GREEDYDATA:access_day}\#%{NUMBER:deauthentication_reason_code}, to %{IP:destination_ip}, from %{IP:source_ip} using %{WORD:access_method}
grok 패턴 설명 4
원문
Mar 6 16:14:35 192.168.10.2 syslog: User: logon failed for invalid username in 2023-Mar-6#012, to 192.168.10.2, from 192.168.0.54 using HTTPS
쿼리
%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{WORD:process}\: User\: %{GREEDYDATA:reason} in %{GREEDYDATA:access_day}\#%{NUMBER:deauthentication_reason_code}, to %{IP:destination_ip}, from %{IP:source_ip} using %{WORD:access_method}
input {
file {
path => "/var/log/rsyslog/192.168.10.2/*.log"
start_position => "beginning"
tags => ["ap1"]
}
file {
path => "/var/log/rsyslog/192.168.10.3/*.log"
start_position => "beginning"
tags => ["ap2"]
}
file {
path => "/var/log/rsyslog/192.168.10.4/*.log"
start_position => "beginning"
tags => ["ap3"]
}
file {
path => "/var/log/rsyslog/192.168.10.5/*.log"
start_position => "beginning"
tags => ["ap4"]
}
}
filter {
if "ap1" in [tags] or "ap2" in [tags] or "ap3" in [tags] or "ap4" in [tags] {
grok {
patterns_dir => ["/etc/logstash/pattern.d"]
match => {
"message" => [
"%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{IPORHOST:process}\[%{BASE10NUM:process_id}\]\: %{GREEDYDATA:sub_message}",
"%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} \[%{BASE10NUM:process_id}\]\: %{GREEDYDATA:sub_message}",
"%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{WORD:process}\: User\: %{GREEDYDATA:user} last logged %{GREEDYDATA:access_result} in %{GREEDYDATA:access_day}\#%{NUMBER:deauthentication_reason_code}, to %{IP:destination_ip}, from %{IP:source_ip} using %{WORD:access_method}",
"%{SYSLOGTIMESTAMP:access_time} %{IPORHOST:ip_or_host} %{WORD:process}\: User\: %{GREEDYDATA:reason} in %{GREEDYDATA:access_day}\#%{NUMBER:deauthentication_reason_code}, to %{IP:destination_ip}, from %{IP:source_ip} using %{WORD:access_method}"
]
}
}
mutate { remove_field => [ "message" ] }
}
}
output {
if "ap1" in [tags] {
elasticsearch {
hosts => ["http://192.168.0.17:9200"]
index => "logstash-ap1-index-%{+YYYY.MM.dd}"
}
}
else if "ap2" in [tags] {
elasticsearch {
hosts => ["http://192.168.0.17:9200"]
index => "logstash-ap2-index-%{+YYYY.MM.dd}"
}
}
else if "ap3" in [tags] {
elasticsearch {
hosts => ["http://192.168.0.17:9200"]
index => "logstash-ap3-index-%{+YYYY.MM.dd}"
}
}
else if "ap4" in [tags] {
elasticsearch {
hosts => ["http://192.168.0.17:9200"]
index => "logstash-ap4-index-%{+YYYY.MM.dd}"
}
}
}
rsyslog의 설정을 제가 한 대로 따라하셨다면, 해당 폴더에 syslog 를 수신한 폴더와 내부에 파일이 보일 겁니다.
X
user@localhost:~
[root@tmplogsvr rsyslog]# pwd
/var/log/rsyslog
[root@tmplogsvr rsyslog]# ls -al
합계 4
drwx------. 7 root root 106 2월 15 14:45 .
drwxr-xr-x. 17 root root 4096 2월 19 00:00 ..
drwx------. 2 root root 138 2월 20 00:12 192.168.0.54
drwx------. 2 root root 138 2월 20 00:00 192.168.10.2
drwx------. 2 root root 138 2월 20 08:23 192.168.10.3
drwx------. 2 root root 138 2월 20 08:31 192.168.10.4
drwx------. 2 root root 138 2월 20 01:39 192.168.10.5
[root@tmplogsvr rsyslog]#
해당 폴더에 들어가면 수신날자.log 형태의 파일을 확인할 수 있습니다.
X
user@localhost:~
[root@tmplogsvr 192.168.10.2]# ls -al
합계 3072
drwx------. 2 root root 138 2월 20 00:00 .
drwx------. 7 root root 106 2월 15 14:45 ..
-rw-------. 1 root root 703219 2월 15 23:57 2023-02-15.log
-rw-------. 1 root root 1129390 2월 16 18:29 2023-02-16.log
-rw-------. 1 root root 176330 2월 17 21:12 2023-02-17.log
-rw-------. 1 root root 504511 2월 18 23:59 2023-02-18.log
-rw-------. 1 root root 542715 2월 19 22:26 2023-02-19.log
-rw-------. 1 root root 71405 2월 20 11:17 2023-02-20.log
[root@tmplogsvr 192.168.10.2]#
kibana에서 보고 싶은 파일의 위치를 확인 하신 후 logstash의 설정을 합니다.
우선 먼저 어떻게 파일이 수신되는지 확인을 합니다.
저는 logstash의 로그 파싱 설정을 /etc/logstash/conf.d 폴더에 logstash.conf 로 작성하였습니다.
[root@tmplogsvr 192.168.10.2]# cat /etc/logstash/conf.d/logstash.conf
input { # logstash에서 파일을 받아들이겠다는 선언
file { # 어떤 형태의 입력 type을 받겠다는 선언
path => "/var/log/rsyslog/192.168.10.2/*.log"# 받아 들일 로그의 위치 선언
start_position => "beginning"# 파일을 읽는 방식으로 차후 자세한 설명
tags => ["ap1"] # 해당 경로의 파일인 경우 tag에 "ap1"을 표시
}
}
output { #logstash에서 파일을 내보내겠다는 선언if"ap1"in [tags] { # 로그 중 tags에 "ap1"이 표시되어 있다면
elasticsearch { # 로그를 elasticsearch에 보내겠다는 선언
hosts => ["http://192.168.0.17:9200"] # elasticsearch url 정보
index => "logstash-ap1-index-%{+YYYY.MM.dd}"# elasticsearch의 index 입력 방식
}
}
}
[root@tmplogsvr ~]# yum install logstash
마지막 메타자료 만료확인 0:06:31 이전인: 2023년 03월 16일 (목) 오전 09시 32분 44초.
종속성이 해결되었습니다.
=============================================================================================================
꾸러미 구조 버전 레포지터리 크기
=============================================================================================================
설치 중:
logstash x86_64 1:8.6.2-1 logstash-8.x 311 M
연결 요약
=============================================================================================================
설치 1 꾸러미
총계 내려받기 크기: 311 M
설치된 크기 : 551 M
진행 할 까요? [y/N]: y
꾸러미 내려받기 중:
logstash-8.6.2-x86_64.rpm 15 MB/s | 311 MB 00:21
-------------------------------------------------------------------------------------------------------------
합계 15 MB/s | 311 MB 00:21
연결 확인 실행 중
연결 확인에 성공했습니다.
연결 시험 실행 중
연결 시험에 성공했습니다.
연결 실행 중
준비 중 : 1/1
스크립트릿 실행 중: logstash-1:8.6.2-1.x86_64 1/1
설치 중 : logstash-1:8.6.2-1.x86_64 1/1
스크립트릿 실행 중: logstash-1:8.6.2-1.x86_64 1/1
확인 중 : logstash-1:8.6.2-1.x86_64 1/1