티스토리 뷰
systemd-journald, rsyslogd, journalctl
로그관리 참조
- systemd-journald : OS의 모든 프로세스의 로그 수집
- journalctl: systemd-journald가 수집한 로그를 보는 viewer( binary형태의 로그를 표시함)
- rsyslogd: systemd-journald가 수집한 메시지를 지정된 규칙대로 분리하여 /var/log디렉토리 내에 파일로 기록하는 서비스
- /var/log/messages: 일반로그(인증, 메일, 스케쥴job, 디버깅 외)가 기록되는 syslog파일
- /var/log/secure: 보안과 인증 수행 관련된 syslog 파일
- /var/log/maillog: 메일서버 관련 syslog 파일
- /var/log/cron: schdule job 관련 syslog 파일
- /var/log/boot.log: 시스템 부팅 관련 syslog 파일
About rsyslogd
- 설정은 /etc/rsyslog.conf파일이고, 그 하위 rsyslog.d라는 디렉토리의 *.conf를 include하므로 추가되는 설정은 rsyslog.d 밑에다가 하는것이 좋음
- 설정하는 규칙
facility.priority log파일명
- facility와 priority는 위 로그관리 참조
- facility는 사용자 facility로 local0~7까지 지정할 수 있음
실습하기: sshd logging
-
rsyslog.service 상태 확인
$ systemctl status rsyslog.service active상태가 아니면 시작함 $ systemctl start rsyslog.service
-
sshd의 Logging설정 변경 후 sshd 재시작
$ cd /etc/ssh $ vi sshd_config SyslogFacility를 AUTHPRIV에서 local6로 변경 ... Logging #SyslogFacility AUTH #SyslogFacility AUTHPRIV SyslogFacility local6 #LogLevel INFO ... $ systemctl restart sshd
- rsyslog에서 log파일 지정
$ cd /etc
$ vi rsyslog.conf
아래와 같이 /etc/rsyslog.d디렉토리의 파일들이 include 되었는지 확인
Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
$ cd rsyslog.d
$ vim 99-sshd.conf
local6.* /var/log/sshd.log
$ systemctl restart rsyslog.service
- logging 테스트
$ logger -p local6.warn "This is warning test"
$ tail /var/log/sshd.log
...
Jun 8 01:05:48 bastion sshd[27163]: Disconnected from 222.186.175.215 port 23252 [preauth]
Jun 8 01:07:28 bastion root: This is warning test
[root@bastion rsyslog.d]#
logrotate
한 로그 파일에 계속 기록하다 보면 로그 파일이 너무 커져서 문제가 생깁니다.
이를 방지하기 위해 날짜나 크기별로 log파일을 분리하는 서비스입니다. /etc/logrotate.conf파일에 설정하며, 하위에 있는 logrotate.d디렉토리의 설정파일들을 포함합니다.
$ cd /etc/logrotate.d
sshd라는 이름으로 sshd.log 분리 설정을 합니다.
$ vim sshd
/var/log/sshd.log {
daily
rotate 10
missingok
notifempty
compress
}
아래는 설정할 수 있는 옵션들입니다.
* rotate [숫자] : log파일이 5개 이상 되면 삭제 ex) rotate 5
* maxage [숫자] : log파일이 30일 이상 되면 삭제 ex) maxage 30
* size : 지정된 용량보다 클 경우 로테이트 실행 ex) size +100k
* create [권한] [유저] [그룹] : 로테이트 되는 로그파일 권한 지정 ex) create 644 root root
* notifempty : 로그 내용이 없으면 로테이트 하지 않음
* ifempty : 로그 내용이 없어도 로테이트 진행
* monthly(월 단위) , weekly(주 단위) , daily(일 단위) 로테이트 진행
* compress : 로테이트 되는 로그파일 gzip 압축
* nocompress : 로테이트 되는 로그파일 gzip 압축 X
* missingok : 로그 파일이 발견되지 않은 경우 에러처리 하지 않음
* dateext : 백업 파일의 이름에 날짜가 들어가도록 함
logrotate crontab등록
logrotate는 crontab을 이용하여 스케쥴job으로 등록해줘야 로그 분할이 됩니다.
아래 예제는 매일 00시 00분에 logrotate를 실행하는 설정입니다.
[ocean@study logrotate.d]$ sudo crontab -e
[sudo] password for ocean:
00 00 * * * /usr/sbin/logrotate -f /etc/logrotate.conf
[ocean@study logrotate.d]$ sudo crontab -l
00 00 * * * /usr/sbin/logrotate -f /etc/logrotate.conf
crontab설정에 대해서는 인터넷에 많이 나와 있으며, 문법과 sample은 아래와 같습니다.
문법: [분] [시] [일] [월] [요일] [명령어]
1. 매일 2.am에 백업하기
-> 0 2 * * * /bin/sh backup.sh
2. 하루에 두번 script.sh 수행
-> 0 5, 17 * * * /scripts/script.sh
3. 매분 수행
-> * * * * * /scripts/script.sh
4. 매 10분마다 monitor 스크립트 실행
-> */10 * * * * /scripts/monitor.sh
5. 1월부터 12월까지 2개월마다 1일날 오전 4시 10분에 /etc/check.sh라는 스크립트 실행
-> 10 4 1 1-12/2 * /etc/check.sh
6. 금요일하고 일요일 5시에만 스크립트 수행되게
-> 0 17 * * sun,fri /script/script.sh
7. 매달 첫 번째 일요일에만 시행되게
-> 0 2 * * sun [$(date + %d) -le 07] && /script/scripnt.sh
logrotate test
logrotate를 수동으로 실행하고 /var/log/sshd.conf파일이 분할되는지 확인합니다.
[ocean@study ~]$ sudo logrotate -f /etc/logrotate.conf
[ocean@study ~]$ cd /var/log
[ocean@study log]$ ls -al | grep sshd
-rw-------. 1 root root 0 Jun 27 17:59 sshd.log
-rw-------. 1 root root 320 Jun 27 17:48 sshd.log-20200627.gz
journalctl
systemd-journald가 수집하는 모든 로그를 보는 프로그램입니다.
rsyslogd가 /var/log에 영구적으로 로깅파일을 기록하는 반면, systemd-journald는 runtime 시에만 일시적으로 로그파일을 보관합니다.
즉, 아래 난수같은 디렉토리에 있는 log파일들은 OS정지 시 모두 사라집니다.
[root@bastion journal]# cd /run/log/journal
[root@bastion journal]# ls -l
total 0
drwxr-s---+ 2 root systemd-journal 200 Jun 8 00:04 657ef9edb6454d36878fa53c9ac15a57
[root@bastion journal]#
유용한 옵션은 아래와 같습니다.
-r, -p, -u, --since, --until, -f
- journalctl -r : 시간 내림차순으로 표시
$ journalctl
-- Logs begin at Wed 2020-06-03 00:00:06 CDT, end at Mon 2020-06-08 01:25:20 CDT. --
Jun 03 00:00:06 centos7-x86-64 systemd-journal[120]: Runtime journal is using 8.0M (max allowed 390.7M, trying to leave 586.1M free of 3.8G ava
Jun 03 00:00:06 centos7-x86-64 kernel: Initializing cgroup subsys cpuset
Jun 03 00:00:06 centos7-x86-64 kernel: Initializing cgroup subsys cpu
$ journalctl -r
-- Logs begin at Wed 2020-06-03 00:00:06 CDT, end at Mon 2020-06-08 01:24:28 CDT. --
Jun 08 01:24:28 bastion.ibm.cloud dnsmasq[14728]: cached infogw.api.openshift.com.cp.kubepia.net is 169.56.96.107
Jun 08 01:24:28 bastion.ibm.cloud dnsmasq[14728]: query[A] infogw.api.openshift.com.cp.kubepia.net from 10.178.41.151
Jun 08 01:24:28 bastion.ibm.cloud dnsmasq[14728]: cached infogw.api.ope
- journalctl -p (우선순위) : 지정된 메시지 우선순위만 표시
메시지 우선순위는 아래와 같습니다.
$ journalctl -p err -r
-- Logs begin at Wed 2020-06-03 00:00:06 CDT, end at Mon 2020-06-08 01:28:10 CDT. --
Jun 08 01:25:50 bastion.ibm.cloud sshd[1438]: PAM service(sshd) ignoring max retries; 6 > 3
Jun 08 01:25:50 bastion.ibm.cloud sshd[1438]: error: maximum authentication attempts exceeded for root from 222.186.180.223 port 19920 ssh2 [pr
Jun 08 01:25:24 bastion.ibm.cloud sshd[1301]: PAM service(sshd) ignoring max retries; 5 > 3
- journalctl -u (서비스명): 지정된 서비스 관련 메시지만 표시
$ journalctl -u sshd.service -p info -r
-- Logs begin at Wed 2020-06-03 00:00:06 CDT, end at Mon 2020-06-08 01:29:29 CDT. --
Jun 08 01:28:39 bastion.ibm.cloud sshd[1943]: Disconnected from 112.85.42.174 port 13657 [preauth]
Jun 08 01:28:39 bastion.ibm.cloud sshd[1943]: Received disconnect from 112.85.42.174 port 13657:11: [preauth]
Jun 08 01:28:37 bastion.ibm.cloud sshd[1943]: Failed password for root from 112.85.42.174 port 13657 ssh2
Jun 08 01:28:35 bastion.ibm.cloud sshd[1943]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
- journalctl --since (년-월-일 시:분:초) --until (년-월-일 시:분:초)
$ journalctl -u sshd.service -p info -r --since "2020-06-08 01:00:00"
-- Logs begin at Wed 2020-06-03 00:00:06 CDT, end at Mon 2020-06-08 01:31:24 CDT. --
Jun 08 01:31:24 bastion.ibm.cloud sshd[1983]: Failed password for root from 222.186.175.217 port 30742 ssh2
Jun 08 01:31:22 bastion.ibm.cloud sshd[1983]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Jun 08 01:31:21 bastion.ibm.cloud sshd[1983]: Failed password for root from 222.186.175.217 port 30742 ssh2
Jun 08 01:31:18 bastion.ibm.cloud sshd[1983]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Jun 08 01:31:17 bastion.ibm.cloud sshd[1983]: Failed password for root from 222.186.175.217 port 30742 ssh2
$ journalctl -u sshd.service -p info --since "2020-06-08 01:00:00" --until "2020-06-08 01:03:00"
-- Logs begin at Wed 2020-06-03 00:00:06 CDT, end at Mon 2020-06-08 01:32:29 CDT. --
Jun 08 01:02:38 bastion.ibm.cloud sshd[26965]: Invalid user honey from 144.172.79.7 port 59590
Jun 08 01:02:38 bastion.ibm.cloud sshd[26965]: input_userauth_request: invalid user honey [preauth]
Jun 08 01:02:38 bastion.ibm.cloud sshd[26965]: pam_unix(sshd:auth): check pass; user unknown
Jun 08 01:02:38 bastion.ibm.cloud sshd[26965]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=144.172.
Jun 08 01:02:40 bastion.ibm.cloud sshd[26965]: Failed password for invalid user honey from 144.172.79.7 port 59590 ssh2
- journalctl -f : 실시간으로 로그 표시
$ journalctl -f
[root@bastion logrotate.d]# journalctl -f
-- Logs begin at Wed 2020-06-03 00:00:06 CDT. --
Jun 08 01:32:44 bastion.ibm.cloud dnsmasq-dhcp[14728]: 3109502685 sent size: 4 option: 1 netmask 255.255.255.192
Jun 08 01:32:44 bastion.ibm.cloud dnsmasq-dhcp[14728]: 3109502685 sent size: 4 option: 28 broadcast 10.178.41.191
Jun 08 01:32:44 bastion.ibm.cloud dnsmasq-dhcp[14728]: 3109502685 sent size: 14 option: 15 domain-name cp.kubepia.net
Jun 08 01:32:44 bastion.ibm.cloud dnsmasq-dhcp[14728]: 3109502685 sent size: 8 option: 12 hostname worker-2
Jun 08 01:32:44 bastion.ibm.cloud dnsmasq-dhcp[14728]: 3109502685 sent size: 4 option: 6 dns-server 10.178.41.148
Jun 08 01:32:44 bastion.ibm.cloud dnsmasq-dhcp[14728]: 3109502685 sent size: 4 option: 3 router 10.178.41.148
Jun 08 01:32:53 bastion.ibm.cloud dnsmasq[14728]: query[A] oauth-openshift.apps.cp.kubepia.net.cp.kubepia.net from 10.178.41.162
Jun 08 01:32:53 bastion.ibm.cloud dnsmasq[14728]: cached oauth-openshift.apps.cp.kubepia.net.cp.kubepia.net is 169.56.96.107
- journalctl _SYSTEMD_UNIT & _PID
systemd의 이름과 Main Process id로 필터링할 수 있습니다.
[root@bastion logrotate.d]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2020-06-08 00:24:37 CDT; 1h 14min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 17829 (sshd)
CGroup: /system.slice/sshd.service
└─17829 /usr/sbin/sshd -D
[root@bastion logrotate.d]# journalctl -f _SYSTEMD_UNIT=sshd.service
-- Logs begin at Wed 2020-06-03 00:00:06 CDT. --
Jun 08 01:40:31 bastion.ibm.cloud sshd[2275]: Failed password for root from 112.85.42.172 port 41668 ssh2
Jun 08 01:40:31 bastion.ibm.cloud sshd[2275]: error: maximum authentication attempts exceeded for root from 112.85.42.172 port 41668 ssh2 [preauth]
[root@bastion logrotate.d]# journalctl -f _SYSTEMD_UNIT=sshd.service _PID=17829
-- Logs begin at Wed 2020-06-03 00:00:06 CDT. --
Jun 08 00:24:37 bastion.ibm.cloud sshd[17829]: Server listening on 0.0.0.0 port 22.
Jun 08 00:24:37 bastion.ibm.cloud sshd[17829]: Server listening on :: port 22.
journal 파일 보관하기
journal파일은 /run/log/journal디렉토리에 임시적으로만 보관됩니다.
이를 영구적으로 보관하려면 /var/log/journal디렉토리를 만들고,
/etc/systemd/journald.conf파일의 Storage값을 persistent로 변경하면 됩니다.
$ mkdir -p /var/log/journal
$ vim /etc/systemd/journald.conf
See journald.conf(5) for details.
[Journal]
Storage=persistent
#Storage=auto
#Compress=yes
$ systemctl restart systemd-journald.service
$ reboot
timezone 변경
log의 날짜 시간이 틀리게 나오는 경우는 timezone이 맞지 않아서입니다.
아래 글을 참조하세요 timezone을 변경하십시오.
https://happycloud-lee.tistory.com/138
'Infrastructure > OS' 카테고리의 다른 글
Red Hat System Administration I: 압축/해제와 파일 전송 (0) | 2020.06.09 |
---|---|
Red Hat System Administration I: 네트워크 관리 (0) | 2020.06.08 |
Red Hat System Administration I: timedatectl (0) | 2020.06.08 |
Red Hat System Administration I: ssh 사용하기 (0) | 2020.06.04 |
Red Hat System Administration I: Service와 Daemon 관리 (0) | 2020.06.04 |
- Total
- Today
- Yesterday
- micro service
- 요즘남편 없던아빠
- CQRS
- AXON
- spotify
- agile
- 육각형인간
- 돌봄경제
- 분초사회
- 리퀴드폴리탄
- 스포티파이
- 호모프롬프트
- API Composition
- 마이크로서비스
- 스핀프로젝트
- Event Sourcing
- 버라이어티가격
- 도파밍
- 디토소비
- 애자일
- SAGA
- 마이크로서비스 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |