8단원 로그 관리
[학습목표]
- 운영적인 측면과 보안적인 측면에서 매우 중요한 용도로 쓰이는 이벤트에 대한 기록(로그)의 개념에 대해 알아보기
- 이벤트 로그 관리 시스템인 rsyslog에 대해 알아보고 설정하는 법에 대해 알아보기
- systemd-journal을 통해 저장된 로그 데이터를 조회하는 방법에 대해 알아보기
8.1 로그 아키텍쳐
8.1.1 로그 관리 데몬
8.1.2 로그 파일 위치
- 다음 데이터들이 Systemd-journald 데몬에게 전달
: 커널로그메시지, syslog 메시지, 표준출력 및 에러에 대한 서비스 메시지
- /run/log/journal 디렉토리에 모든 로그를 저장한 저널 데이터 파일을 생성
- syslog 형태의 로그는 rsyslogd에 전달됨. 그 로그들은 /var/log 에 해당 로그 파일들을 생성하고 저장.
8.1.3 로그 파일의 순환
- 로그 파일이 생성된 후 일정 기간이 지나거나 일정 크기에 도달한 경우 백업 후 새로운 로그 파일을 생성해야함. 또한 백업 파일도 일정 기간, 일정 개수가 늘어날 경우 삭제하도록 하는데 이를 순환이라고 함.
- cron작업에 의해 logrotate 유틸리티를 사용하여 이루어짐
- /etc/logroate.conf 파일을 사용하여 설정할 수 있음
8.2 rsyslogd
- 유닉스나 리눅스 계열 시스템에서 로그를 기록하기 위한 표준 프로토콜인 syslog에서 암호화 옵션 등을 추가하여 보안이 강화된 프로세스
- /etc/rsyslog.conf 파일을 사용하여 저장할 로그의 종류 및 우선순위를 설정할 수 있음
8.2.1 /etc/rsyslog.conf
- Rule 부분에는 전달되는 로그의 규칙들이 정의되어 있음
- 규칙을 정의할 때 공백을 기준으로 앞부분은 필터(Filter)라고 하고 뒷부분을 행동(Action)이라 함
- 필터는 현재 기능과 우선순위 형식으로 되어있음
- 행동 부분은 필터에 해당하는 로그들이 저장되는 파일의 위치
8.2.2 필터(Filter)
* 기능 부분에 표시 되어 있다면 모든 기능의 로그를 의미함
** 우선순위가 지정되면 해당 우선순위뿐만 아니라, 상위의 우선순위까지 포함됨
기능 기반 필터 | 설명 |
---|
kern | 커널메시지 |
user | 유저 레벨 메시지 |
mail | 메일 관련 메시지 |
deamon | 시스템 데몬 메시지 |
auth | 및 인가 메시지 |
cron | 스케줄 작업 메시지 |
authpriv | 보안 및 인가 메시지 |
ftp | ftp 데몬 메시지 |
local0-local7 | 사용자 정의 기능 |
우선순위 기반 필터 (0부터 7까지) | 설명 |
---|
emerg | 시스템 사용 불가 |
alert | 즉시 조취를 취해야 할 상태 |
crit | 치명적인 상태 |
err, error | 에러발생 |
warn, warning | 경고발생 |
notice | 일반적이지만 중요 |
info | 정보 |
debug | 디버깅 메시지 |
8.2.3 행동(Action)
1) 로그 파일에 저장
- /var/log/secure과 같이 행동 부분에 해당 파일 경로를 입력함. 복수의 필터 규칙이 지정될 경우 전체 필터의 로그 메시지를 한 파일에 저장
- 일반적으로 syslog에 의해 발생된 로그는 바로 동기화가 이루어지지만 Dash(-) 기호가 추가로 있는 경우 메모리 버퍼에 저장한 후 여유가 있을 때 한꺼번에 저장함
2) 사용자에게 전달
- omusrmsg는 사용자 메시지 출력 모듈, 로그인 된 사용자에게 선택된 로그 메시지를 전달
3) 기타 로그 메시지 전달 방식
- 콘솔 및 터미널, 원격 시스템, Discard(~)
8.3 systemd-journald
- 저널 데이터는 구조화되어 있어 인덱싱을 통해 사용자가 원하는 내용을 쉽고 자세하게 찾을 수 있다는 장점이 있음
8.3.1 journalctl 사용
- journalctl [option][argument]
1) 기본 사용
- 기본 journalctl 을 실행할 경우 현재 저장된 저널 데이터를 순차적으로 출력함
- 출력은 시간 순으로 출력되고, 가장 먼저 출력되는 데이터는 시스템이 부팅 될 때 발생하는 이벤트
2) 우선순위를 지정하여 저널 데이터 출력
- journalctl + “-p” 옵션을 사용하여 특정 우선순위를 지정하여 로그를 출력할 수 있음
- alert 우선순위부터 err 우선순위까지 범위를 지정하는 경우 journalctl -p alert..err와 같이 시작과 끝을 지정하여 사용 가능
3) 최근에 발생한 저널 데이터 출력
- journalctl -r : 최근의 저널 데이터부터 역순으로 로그를 조회하고 싶을 경우 사용함
- journalctl -n : 최근 데이터부터 일정 개수를 조회할 경우에 옵션 뒤에 숫자를 입력하여 지정 가능. 기본 값은 10으로 지정되어 있음
4) 저널 데이터 모니터링
- journalctl -f : 최근에 발생한 저널 데이터 10개 출력 후 포그라운드 상태로 출력 대기 상태를 유지함.
5) 특정 날짜의 저널 데이터 조회
- journalctl —since ‘YYYY-MM-DD hh:mm:ss’ 형식을 사용함. 기본 시간 값은 00:00:00으로 지정됨.
6) 특정 기간의 저널 데이터 조회
- journalctl —since ‘yyyy-mm-dd hh:mm:ss’ —until ‘yyyy-mm-dd’
7) 저널 데이터의 출력 설정
- journalctl -o [output-type]
- output-type : short, verbose, json, json-pretty 등..
short | 기본 출력 형식 |
---|
verbose | short에서 출력 되지 않는 전체 정보 출력 |
json | 한줄로 만들어진 json 파일로 출력 |
json-pretty | 정렬된 json 파일 |
8) 특정 저널 데이터 검색
- journalctl -o verbose(output-type) 를 이용하여 로그 메시지의 정보를 찾음. 그 중 pid,uid,gid 등의 정보를 통해 해당 값을 지정하여 찾을 수 있음.
- journalctl _PID=1 과 같이 지정하여 사용
_PID | 로그 프로세스의 PID |
---|
_UID | 로그 발생 사용자의 UID |
_GID | 로그 발생 그룹의 GID |
_COMM | 로그를 발생시킨 명령 |
_SYSTEMD_UNIT | 로그를 발생시킨 서비스의 유닛 명 |
- 서로 다른 검색조건을 사용한 경우 AND조건이 출력되고
- 같은 검색조건에 다른 값을 사용할 경우 과 OR 조건이 출력됨
8.3.2 저널 데이터의 영구 저장
- 저널 데이터가 저장되는 파일은 시스템이 재부팅 되면 삭제됨
1) 설정 방법
- 기존 디렉토리 설정 값 확인
- ls -ld /run/log/journal/ 을 통해 정보를 확인하고 (사용자, 사용자 그룹, 권한 정보 등 확인)
- 저널 데이터를 영구적으로 저장할 디렉토리에 동일하게 권한 및 소유권 정보를 설정함
- 저널 데이터 저장 디렉토리 생성 및 설정 변경
- mkdir /var/log/journal
- chown root:systemd-journal /var/log/journal
- chmod g+s /var/log/journal
- systemctl restart systemd-journald
*** 저널 데이터 파일의 크기가 현재 파일시스템 전체 사이즈의 10%를 초과하면 안됨
*** 현재 파일시스템의 여유 공간 중 15%를 초과하면 안됨
2) journalctl boot-id
- journalctl —list-boots 를 통해 시스템 재부팅으로 인해 분리된 저널 데이터를 각각 조회할 수 있음
- 어느 부트 번호(boot-id)가 어느 시간대의 저널 데이터를 저장하고 있는 지 확인할 수 있음.
- 해당 부트 번호를 지정하여 저널 데이터를 조회할 수 있음 ex) journalctl -b 9d40df62411b499b80659f47cceca727