2022. 12. 4. 18:35ㆍ리눅스(Linux)
$ Linux Log의 특징
- 리눅스 로그의 특징은 일반적인 텍스트 형식의 로그와 바이너리 형식의 로그 2가지의 형태의 로그가 존재한다.
- 이러한 특징에 의해 분석하는 로그의 종류에 따라 사용하는 명령어가 다르다.
- 리눅스 로그분석은 로그파일의 위치와 해당 로그파일을 분석할 때 사용하는 명령어를 연결하여 학습하는 것이 중요하다.
- 일반적으로 리눅스에서는 서비스관련 로그기록은 해당 서비스를 구성할때 같이 정의하게 된다
$ 로그의 종류
- 텍스트 형식의 로그분석 명령어 [ "vi , cat , tail , head" 등 ]
- 바이너리 형식의 로그분석 명령어 [ "last , w , who" 등 ]
Linux 주요 Log 분석
$ UTMP 로그 파일
# who
root tty1 2019-01-30 08:57 (:0)
root pts/0 2019-01-30 08:57 (:0.0)
- 로그인 계정, 터미널 장치명, Login 시간, Login 위치
- 현재 로그인 한 사용자의 정보를 담고있는 로그 파일이며, 원본 위치는 "/var/log/utmp" 파일이다.
- 바이너리 형식이며, 내용 확인을 위해서는 "who" 명령어를 사용
$ WTMP 로그 파일
# last root
root pts/0 :0.0 Sat Feb 9 17:03 still logged in
root tty1 :0 Sat Feb 9 17:03 still logged in
root pts/0 :0.0 Wed Jan 30 08:57 - down (10+08:03)
root tty1 :0 Wed Jan 30 08:57 - down (10+08:04)
# last whitehacker
whitehac tty7 :1 Sat Feb 9 16:59 - down (00:01)
- 로그인 계정, 터미널 장치명, Login 위치, Login 시간
- 사용자의 성공한 로그인/로그아웃 정보를 담고 있는 로그파일이며, 원본 위치는 "/var/log/wtmp" 파일이다.
- 바이너리 형식이며, 내용 확인을 위해서는 "last" 명령어를 사용
- 접속시간 및 접속 한 곳의 IP정보등을 표시한다.
- 사용자별 정보 확인이 가능하다, 그냥 last 명령어만 사용 한 경우 전체정보가 표시
$ BTMP 로그 파일
# lastb
whitehac tty7 :1 Sat Feb 9 16:59 - 16:59 (00:00)
- 실패 한 로그인 정보를 담고있으며, 원본 위치는 "/var/log/btmp" 파일이다.
- 바이너리 형식이며, 내용 확인을 위해서는 "lastb" 명령어를 사용
- 접속시간 및 접속 한 곳의 IP정보등을 표시한다.
- 사용자별 정보 확인이 가능하다.
$ LAST 로그 파일
# lastlog -t 5
사용자이름 포트 어디서 최근정보
root pts/1 192.168.1.1 토 2월 9 17:13:49 +0900 2019
whitehacker pts/2 192.168.1.1 토 2월 9 17:13:57 +0900 2019
# lastlog -u root
사용자이름 포트 어디서 최근정보
root pts/1 192.168.1.1 토 2월 9 17:13:49 +0900 2019
- 가장 최근에 성공한 로그인 정보를 담고있으며, 원본 위치는 "/var/log/lastlog" 파일이다.
- 바이너리 형식이며, 내용 확인을 위해서는 "lastlog" 명령어를 사용
- 접속시간 및 접속 한 곳의 IP정보등을 표시한다.
- 사용자별 정보 확인 및 날짜를 지정하여 최근 기록을 확인 할 수 있다
$ SECURE 로그 파일
# tail -5 /var/log/secure
Feb 9 17:13:49 localhost sshd[3168]: pam_unix(sshd:session): session opened for user root by (uid=0)
Feb 9 17:13:57 localhost sshd[3189]: Accepted password for whitehacker from 192.168.1.1 port 4299 ssh2
Feb 9 17:13:57 localhost sshd[3189]: pam_unix(sshd:session): session opened for user whitehacker by (uid=0)
Feb 9 17:14:39 localhost sshd[3189]: pam_unix(sshd:session): session closed for user whitehacker
Feb 9 17:14:40 localhost sshd[3168]: pam_unix(sshd:session): session closed for user root
- 원격 로그인 정보를 담고있으며, 파일의 위치는 "/var/log/secure" 파일이다.
- 일반 텍스트 형식이며, 내용 확인을 위해서는 "tail 혹은 tail -f"를 주로 사용.
- tail 명령을 사용하는 이유는 가장 최신의 로그는 밑에 저장 되기때문이다.
- tail -f를 이용하면, 실시간으로 생성되는 로그정보를 확인 할 수 있다.
$ MESSAGE 로그 파일
# tail -5 /var/log/messages
Feb 9 17:53:53 localhost dhclient: bound to 192.168.1.141 -- renewal in 786 seconds.
Feb 9 18:00:41 localhost ntpd[2148]: synchronized to 13.209.0.242, stratum 2
Feb 9 18:06:59 localhost dhclient: DHCPREQUEST on eth2 to 192.168.1.254 port 67
Feb 9 18:06:59 localhost dhclient: DHCPACK from 192.168.1.254
Feb 9 18:06:59 localhost dhclient: bound to 192.168.1.141 -- renewal in 711 seconds.
- 시스템 운영에 대핚 전반적인 정보를 담고있으며, 파일의 위치는 "/var/log/message" 파일이다.
- 시스템 데몬 실행 상황 및 내역등을 확인 할 수 있다.
- 일반 텍스트 형식이며, 내용 확인을 위해서는 "tail 혹은 tail -f"를 주로 사용.
$ Psacct Tool 활용
# rpm -qa psacct
psacct-6.3.2-63.el6.i686
# service psacct start
프로세스 어카운팅 시작 중: [ OK ]
# chkconfig psacct on
- Psacct Tool이 자동 실행 되도록 설정
- Psacct Tool은 기본적으로 패키지는 설치가 되어있으며, 데몬 시작은 수동으로 진행 해주어야 핚다.
- Psacct Tool은 사용자가 수행중인 작업, 실행중인 명령, 시스템에서 사용중인 리소스의 양,
시스템에서 얼마나 오랜 시간동안 사용자가 활성 상태인지를 모니터링하는데 효과적이다.
- 또한 Apache, MySQL, FTP, SSH 등과 같은 서비스에 의해 소비되는
시스템의 리소스를 모니터링 하는데에도 사용된다. ( 우리는 "로그 정보"만 활용 )
# ac -d root
Nov 8 total 0.22
Jan 19 total 12.14
Jan 30 total 45.41
Today total 470.53
# ac -d whitehacker
Today total 0.99
- 사용자가 얼마나 오랜 시간 동안 활성 상태인지를 확인하기 위해서는 "ac" 명령어를 사용한다.
- 기본 출력 값은 "시간 단위"로 출력이되며, "-d" 옵션은 일자별 출력을 의미한다.
- 사용자 이름을 입력하지 않을 경우 모든 사용자의 활성시간 정보가 합산되어 출력된다.
# lastcomm ls
ls root pts/0 0.00 secs Sat Feb 9 18:28
ls root pts/0 0.00 secs Sat Feb 9 18:28
ls whitehac pts/1 0.00 secs Sat Feb 9 18:20
ls root pts/0 0.00 secs Sat Feb 9 18:19
ls root pts/0 0.00 secs Sat Feb 9 18:19
# lastcomm root
lastcomm root pts/0 0.00 secs Sat Feb 9 18:23
lastcomm root pts/0 0.00 secs Sat Feb 9 18:22
lastcomm root pts/0 0.00 secs Sat Feb 9 18:22
# lastcomm whitehacker
rm whitehac pts/1 0.00 secs Sat Feb 9 18:22
mkdir whitehac pts/1 0.00 secs Sat Feb 9 18:22
ls whitehac pts/1 0.00 secs Sat Feb 9 18:20
- 명령어 사용기록 확인을 위해서는 "lastcomm" 명령어를 사용한다.
- 특정 명령어의 사용기록을 확인 할 수 있으며, 사용자 별 명령어 사용내역도 확인이 가능하다.
- Psacct Tool의 기록은 "/var/account/pacct" 파일에서 저장 한다. ( 바이너리 형식 )
[ 참고 ]
# lastcomm whitehacker -f /var/account/pacct-20190210
- logrotate에 의해 로그기록이 Rotate되어있을 경우 "-f" 옵션을 사용하여
이전 로그기록을 저장하는 파일을 지정하여 확인이 가능하다
Linux Log 관리
- 리눅스 운영체제에서는 로그관리를 "logrotate"로 관리한다.
- logrotate는 로그관리를 자동으로 진행해주는 도구이며, 각종 설정에따라 관리방법을 다르게 설정 할 수 있다
$ "logrotate" 동작과정 정리
1. "/etc/cron.daily/logrotate" 에서 "/usr/sbin/logrotate" 호출 한다.
2. 호출 된 logrotate를 실행 시 "/etc/logrotate.conf" 설정파일을 참조하여 logrotate 설정값을 Load 한다.
- "/etc/logrotate.conf" 설정 파일에 정의 된 "Include /etc/logrotate.d" 설정에 의해 "/etc/logroate.d/" 디렉터리를 호출
- "/etc/logroate.d/" 디렉터리 속 정의되어있는 각 서비스 별 logrotate 설정정보도 함께 Load 한다.
# vi /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
- Random으로 부여되는 지연시간 값 설정
- EX : 45로 설정 될 경우 0~45분 사이에 랜덤 한 지연값을 설정 한다.
- 실제 설정라인에서 정의되는 Delay 값과 합산되어 최종적인 Delay값이 완성 된다.
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
- Anacrontab을 수행 한 시간을 범위 형태로 지정 ( default : "3시 ~ 22시" 사이 )
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
- nice 명령어는 프로세스의 우선순위 확인을 위한 명령어
- run-parts 명령어의 경우 특정 디렉터리내의 존재하는 스크립트 파일을 실행시킬때 사용하는 명령어
- 시스템 활성화 후 "nice run-parts /etc/cron.daily" 명령어가 1일이상 실행되지 않았을 경우
( "Random Delay(0~45) + 5분" ) 후에 해당 명령어의 프로세스 우선순위를 확인 후 실행
# ls -l /etc/cron.daily/
-rwxr-xr-x. 1 root root 118 2010-11-11 13:03 cups
-rwxr-xr-x. 1 root root 196 2010-11-12 05:46 logrotate
-rwxr-xr-x. 1 root root 905 2010-11-12 05:45 makewhatis.cron
-rwxr-xr-x. 1 root root 174 2009-05-20 15:03 mlocate.cron
-rwxr-xr-x. 1 root root 2126 2010-04-23 23:34 prelink
-rwxr-xr-x. 1 root root 563 2010-08-23 18:35 readahead.cron
-rwxr-xr-x. 1 root root 365 2009-10-16 14:52 tmpwatch
- "/etc/cron.daily" 디렉터리는 anacrontab에 의해 실행되는 Shell Script 파일이 정의되어있다.
- 이러한 설정들에 의해 "logrotate"는 주기적으로 실행된다
# vi /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf > /dev/null 2 > &1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
- "logrotate"의 스크립트를 내용을 확인하면, "/usr/sbin/logrotate /etc/logrotate.conf"에 의해 logrotate를 실행하게 된다.
- 나머지 부분의 스크립트의 내용은 "Cron" 실행 시 오류가 발생하게 될 경우 화면에 오류메시지를 띄어주기위한 코드이다.
# which logrotate
/usr/sbin/logrotate
- logrotate 데몬의 경로
# vi /etc/logrotate.conf
# rotate log files weekly
weekly
- Log Rotate의 기본 주기 값 정의 ( daily : 일 , weekly : 주 , monthly : 월 )
# keep 4 weeks worth of backlogs
rotate 4
- Log Rotate의 기본 횟수 정의 ( 로그 파일이 4개 이상일 경우 가장 먼저 생성 된 파일부터 삭제 )
# create new (empty) log files after rotating old ones
create
- Log Ratate 시 새로운 파일을 생성하여 로그 정보를 저장
# use date as a suffix of the rotated file
dateext
- Log Ratate 시 기존 로그 파일명에 Rotate를 수행 할 날짜 값을 명시
# uncomment this if you want your log files compressed
# compress
- Log 파일을 gzip으로 압축하여 저장 할 것인지 결정 (default : 사용 안함)
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
- RPM에 의해 설치 된 Service에 대한 로그 관리 설정 정보는
/etc/logrotat.d/ 디렉터리에 별도로 저장
# no packages own wtmp and btmp -- we'll rotate them here
- wtmp, btmp 등의 로그 기록은 해당 설정 파일에서 설정 값을 정의
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
- logrotate 설정 파일
- 그 외의 추가적인 로그관리 설정 값 또한 정의가 가능하다
$ logrotate 옵션 정리
rotate ("N") | Rotate File이 "N"개 이상 일 경우 삭제 |
maxage ("N") | Rotate File의 "N"일 이상 경과되었을 경우 삭제 |
size ("N{K,M}") | Log File의 용량이 지정한 크기만큼 채워졌을 경우 Rotate를 진행 [ "EX : 10M, 100M, 20K" ] |
create ("권한") : | Rotate시 새로 만들어지는 파일의 권한을 허가권 소유권 순으로 정의 [ "EX : 0600 root : root" ] |
copytruncate | 임시파일을 생성하여, 기존의 Log 내용을 복사한 뒤 해당 임시파일의 이름을 Rotate 설정에 맞게 변경 |
notifempty | Log File의 내용이 비어있을 경우 Rotate를 진행하지 않는다. |
ifempty | Log File의 내용이 비어있을 경우에도 Rotate를 진행. |
missingok | 오류가 발생하더라도 다음 작업을 이어서 수행 |
daily, weekly, monthly | "일, 주, 월" 단위로 Rotate를 진행 한다. |
compress | Rotate 된 Log File을 gzip 압축하여 저장 |
delaycompress | compress와 같이 사용 되며, 즉시 압축하지 않고 일정기간이 지난 뒤 압축을 진행 |
prerotate-endscript | 해당 범위안에 포함되어있는 명령어를 rotate 전에 수행한다. |
postrotate-endscript | 해당 범위안에 포함되어있는 명령어를 rotate 이후에 수행한다. |
extension | Rotate 후 생성 되는 새로운 파일에 대한 확장자를 지정 |
mail admin@mail | Rotate 설정에 의해 보관 주기가 끝난 파일을 지정 한 메일로 발송. |
mailfirst admin@mail | Rotate 진행 시 새로 만들어진 신규파일 이전의 Log File을 지정 한 메일로 발송한다. |
errors admin@mail | Rotate 진행 시 에러가 발생하면 지정 한 메일로 통보한다. |
sharedscripts | 하나의 서비스에 로그의 종류가 여러 개 일때 logrotate의 스크립트를 공유하도록 한다. [ "Apache의 경우 Error, Access 로그를 따로 관리, EX : /var/log/httpd/*log" ] |
$ logrotate 사용 예제
# vi /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2019-1-29
"/var/log/boot.log" 2019-2-10
"/var/log/sssd/*.log" 2019-1-29
"/var/log/httpd/*log" 2019-2-10
"/var/log/wtmp" 2019-1-29
"/var/log/spooler" 2019-2-10
- logroate 작업 내역을 저장 한다.
# ls -l /etc/logrotate.d
-rw-r--r--. 1 root root 71 2010-11-11 13:03 cups
-rw-r--r--. 1 root root 136 2010-08-23 08:21 ppp
-rw-r--r--. 1 root root 329 2010-08-24 21:09 psacct
-rw-r--r--. 1 root root 219 2010-11-12 19:00 sssd
-rw-r--r--. 1 root root 228 2009-05-20 19:49 syslog
-rw-r--r--. 1 root root 95 2011-06-25 18:43 vsftpd
-rw-r--r--. 1 root root 100 2010-08-25 23:34 wpa_supplicant
-rw-r--r--. 1 root root 100 2011-04-29 21:19 yum
- 특정 데몬에의해 관리되는 로그에 관한 logrotate 설정 값을 저장하고있는 파일 목록
- 일반적으로 리눅스 시스템에 설치되는 각 서비스( Apache , vsftpd 등)에 관한
logrotate 설정은 "/etc/logrotate.d"디렉터리에 자동으로 저장된다.
# vi /etc/logrotate.d/psacct
# Logrotate file for psacct RPM
/var/account/pacct {
compress
- rotate 된 로그파일은 gzip으로 압축하여 관리
delaycompress
- compree 옵션과 같이 사용, rotate시 즉시 압축이 아닌
일정 기간을 두고 압축을 진행하도록 설정한다.
notifempty
- 만약 로그파일이 비어있을경우 rotate를 사용하지 않도록한다.
daily
- 일 단위로 rotate를 수행
rotate 31
- 최대 31개의 rotate 파일을 유지
- 31개 이상부터는 가장 이전의 rotate 파일을 삭제
create 0600 root root
- rotate 시 새로운 파일을 생성, 이때 허가권 600 과 소유권 root:root의 값을 지정하여 생성
postrotate
/usr/sbin/accton /var/account/pacct
- accton 명령어는 Psacct Tool의 활성화 명령어 ( 즉, Psacct Tool 재시작을 의미한다. )
endscript
- postrotate ~ endscript ( 해당 범위안에 포함되어있는 명령어를 rotate 이후에 수행한다. )
}
- 위에서 작업 한 Psacct Tool의 logrotate 설정 값 분석
- 지정 되지 않은 옵션의 경우에는 "/etc/logrotate.conf"에서 지정 한 설정값이 기본값으로 설정 된다.
$ logrotate Rotate 로그 파일 이름부여 방식
# logrotate -f /etc/logrotate.conf
# ls -l /var/log/yum.log*
-rw------- 1 root root 0 2019-02-10 16:04 /var/log/yum.log
-rw-------. 1 root root 2794 2019-02-10 10:38 /var/log/yum.log-20190210
- "logrotate -f /etc/logrotate.conf" 명령을 이용하여 강제로 logrotate를 수행한다.
- 위 명령어를 수행 후 "/var/log/yum.log" 로그의 목록을 확인 할 경우 해당
로그파일이 Rotate가 된 것을 확인 할 수 있다.
- Rotate 시 지정 된 이름 부여규칙에 따라 Rotate 된 파일의 이름이 설정 되는 것을 확인.
- 일반적인 Rotate 짂행 시 기존의 로그파일의 이름만 변경하여 Rotate 작업을 진행한다.
( "각 서비스와 연결정보는 그대로 유지한다 [ i-node ]" )
- 만약 Rotate 된 로그 파일이 지속적으로 서비스와 연결 정보를 유지 할 경우 새로 생성 된 로그파일에는 로그기록이 남지 않게 된다.
- 이러한 문제를 해결하기 위해서는 "copytruncate" 옵션을 사용 하거나 "postrotate ~ endscript" 옵션을 사용하여 서비스를 재시작 하도록 한다.
$ Copytruncate를 이용 한 Rotate 이름부여
- Copytruncate 옵션을 사용 할 경우 logrotate 작업이 시작 되면, 임시파일을 생성 후 생성 된 임시파일에 기존 로그정보를 저장한다.
- 복사 완료 후 임시파일의 이름을 logrotate 설정에 맞게 이름을 변경 후 기존의 로그파일의 내용을 삭제 한다.
- 이러한 방법을 사용 할 경우 서비스의 재 시작없이 로그기록을 정상적으로 저장 할 수 있게된다.
- Copytruncate를 사용하는 것은 좋은방법이지만, 한번에 많은 양의 로그기록을 복사 할 경우 복사 되는 동안의 로그의 유실 문제가 발생 할 위험이 있다.
- 해당 문제를 해결하기 위해서는 시스템의 성능에 맞추어 Rotate 주기를 적절하게 설정하고, 각 서비스에서 제공 되는 로그기록에 관한 추가 기능들을 사용하여 로그유실을 방지 할 수 있다.
$ 실습 예제
- lograte를 이용하여 Apache Web 서버의 로그 관리방법을 정의
- Apache Web Server를 설치 후 자동으로 생성되는 Apache 관련 logrotate 파일을 문제조건에 맞게 수정
조건
1. Rotate 주기 ( "10M" ), 최대 10개의 Rotate 로그파일 저장
2. Rotate 된 로그파일은 즉시 압축, 서비스 재시작 안 함 ( 로그기록은 정상적으로 작성 )
3. Rotate 시 로그 파일이 비어있어도 Rotate를 수행
4. Rotate 시 오류가 발생하더라도 계속 다음작업을 수행
5. Apache의 Access Log, Error Log는 스크립트를 서로 공유
- logrotate -f logrotate.conf 명령어를 이용하여 logrotate를 강제로 실행 후 결과 확인
# yum -y install httpd-*
# service httpd restart
httpd 를 정지 중: [ 실패 ]
httpd (을)를 시작 중: [ OK ]
# ls /etc/logrotate.d
cups httpd ppp psacct sssd syslog vsftpd wpa_supplicant yum
# vi /etc/logrotate.d/httpd
/var/log/httpd/*log {
size 10M
rotate 10
compress
copytruncate
missingok
ifempty
sharedscripts
}
# logrotate -f /etc/logrotate.conf
# ls -l /var/log/httpd/
-rw-r--r-- 1 root root 0 2019-02-10 17:36 access_log
-rw-r--r-- 1 root root 20 2019-02-10 17:36 access_log-20190210.gz
-rw-r--r-- 1 root root 0 2019-02-10 17:36 error_log
-rw-r--r-- 1 root root 20 2019-02-10 17:36 error_log-20190210.gz
'리눅스(Linux)' 카테고리의 다른 글
프록시 서버 & L4 vs L7 로드밸런서 비교 (0) | 2022.12.12 |
---|---|
SQL (Structured Query Language) 예제 2 (0) | 2022.12.04 |
SQL (Structured Query Language) 예제 1 (0) | 2022.12.04 |
[Centos 7] DB (Database) & DB Replication ( 읽기 전용 복제본 ) (0) | 2022.12.04 |
[Centos 7] 보안 프로토콜(SSL/TLS) (0) | 2022.12.02 |