여기서는 리눅스의
systemd
를 의미한다. Amazon Linux 에는 포함되어 있지 않으며 Amazon Linux 2에 포함되어 있다. 기본적으로 Debian 계열 Ubuntu에도 포함되어 있으며, Fedora, CentOS에 포함되어있다.![notion image](https://www.notion.so/image/https%3A%2F%2Fwww.lesstif.com%2Fsystem-admin%2Ffiles%2F24445064%2F100205441%2F1%2F1610982384000%2Fimage2021-1-19_0-6-23.png?table=block&id=11494ab1-efbe-4914-a67b-362bd26229e5&cache=v2)
- 시스템 데몬 위치:
/etc/systemd/system
에 설치되어 있음
- 유저 데몬 위치:
/usr/lib/systemd/system
에 설치되어 있음
데몬 파일 설정#
파일 위치
/usr/lib/systemd/system/multi-user.target.wants/your-application.service
[Unit]
Description=애플리케이션 이름
Documentation=https://github.com/eunchurn/your-application
After=network.target
[Service]
Type=simple
EnvironmentFile=/home/ec2-user/your-application-folder/.env
WorkingDirectory=/home/ec2-user/your-application-folder
ExecStart=/home/ec2-user/.nvm/versions/node/v12.13.0/bin/node /home/ec2-user/your-application-folder/dist/index.js
RestartSec=0
Restart=always
[Install]
WantedBy=multi-user.target
데몬 등록
- 데몬 등록
sudo systemctl enable your-application
- 데몬 해제
sudo systemctl disable your-application
데몬 Reload
수정된 파일이 있으면 데몬을 리로드 함
sudo systemctl reload-daemon your-application
데몬 시작 및 중지
- 데몬 시작
sudo systemctl start your-application
- 데몬 중지
sudo systemctl stop your-application
- 데몬 재시작
sudo systemctl restart your-application
Logging#
- 추가적인 메시지(에러 혹은 이벤트)와 함께 로그의 가장 끝 부분을 확인
journalctl -xe
- 특정 데몬의 로그 확인
journalctl -u your-application
- 로그 Following 옵션:
f
- 로그 시간 역순 옵션:
r
journalctl
옵션#
a
: 표시할 수 없는 문자가 있거나 매우 긴 경우에도 모든 Log 내용을 출력
b
: 마지막 부팅 후의 Log만 출력-r : 최신항목이 먼저 표시되도록 역순으로 출력
c
: 커서가 지정한 저널의 위치부터 Log 표시를 시작
f
: 가장 최근 Log만 표시하고 새롭게 추가되는 Log는 계속 출력
k
: 커널 메시지만 출력 (dmesg랑 같음)
q
: 일반 사용자로 실행될 때 접근할 수 없는 시스템 저널에 관한 경고메시지를 표시하지 않음
u
: unit으로 systemctl list-units에서 출력되는 첫번째 항목
p
: 메시지의 우선순위로 log level을 의미emerg=0
,alert=1
,crit=2
,err=3
,warning=4
,notice=5
,info=6
,debug=7
o
: Log 출력 형식을 설정
short
: 기본값으로 syslog파일의 형식과 동일하다. 한 행에 하나의 Log만 출력
short-iso
: short와 비슷하지만 ISO 8601의 시간 형식으로 출력
short-precise
: short와 비슷하지만 마이크로 초 단위로 시간 출력
short-monotonic
: short와 비슷하지만 단조로운 시간 형식으로 출력
verbose
: 전체 Log를 모두 자세하게 출력
export
: Log내용을 내보낸다. (백업 및 전송에 적합한 바이너리 스트림으로 직렬화)
json
: 한줄에 하나씩 JSON 데이터 구조로 형식화
json-pretty
: JSON 데이터 구조로 형식화 하지만 여러줄로 형식을 지정하여 사람이 읽을 수 있게 한다.
json-see
: JSON 데이터 구조로 형식화 하지만 Server-Sent Events에 적합한 형식으로 한다.
cat
: 매우 간결한 출력을 생성하며 메타 데이터가 없고 Log만 표시하며 시간은 표시하지 않음
l
: 출력되는 Log의 필드를 줄일때 사용, 기본값은 전체 필드를 표시하여 사용자가 해당 필드를 붙이거나 자를 수 있도록 한다.
_UID= 33
: 33번 UID를 가진 프로세스에 대한 Log를 출력
- `--disk-usage`` : 저널 파일의 디스크 사용량을 표시 (압춘된 모든 더널 파일과 사용중인 저널 파일의 합계를 표시)
journalctl
설정파일#
- 위치:
/etc/systemd/journald.conf
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse= -> journal log 파일의 최대 Size를 지정
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month -> journal log 파일의 최대보관일수를 지정
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
journalctl
고급 사용법#
- 마지막 부팅 후 로그 보기
journalctl -b
- 오늘 날짜 로그 보기
journalctl --since=today
- 특정 기간별 로그 보기
journalctl --since "2017-05-25 00:00:00" --until "2017-05-30 10:30:00"
journalctl --since "1 hour ago"
journalctl --since "2 days ago"
- 특정 서비스 데몬 로그 보기
journalctl -u sshd
- 특정 이벤트 속성 조회
journalctl -p crit
- 특정 서비스데몬 및 속성과 날짜 로그 보기
journalctl -u libvirtd --since=yesterday -p err
- Error 로그 자세히 보기
journalctl -p err -o verbose
- 특정 이벤트 조회
journalctl /sbin/crond
- 밑에서부터 로그 보기
journalctl -f
journalctl -r -b
- UID 로 검색 (id)
journalctl _UID=108
journalctl
이 느릴때(btrfs
) 대처 방법#
BTRFS
로 포맷된 파티션에 Arch Linux를 설치해 사용중이라면 journalctl
의 속도가 늦려지는 현상을 겪을 수 있다.이는 로그를 저장하는 파일 데이터베이스에 디스크 단편화가 심하게 되어 일어나는게 원인이다.
따라서 단편화 제거를 하면 개선되는 것을 확인 할 수 있다.
- Log의 크기를 확인
journalctl --disk-usage
- 로그를 저장하는 파일 데이터베이스에 단편화를 확인
filefrag /var/log/journal/*/*
- 단편화를 제거
btrfs fi defrag -v -f -clzo /var/log/journal/*/*