일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리눅스
- S3 PrivateLink
- push-gateway
- node pod 분리
- x lock s lock
- BastianHost
- bWAPP install
- AWS Resolver
- ix is lock
- bWAPP arm
- DNS Resolver
- CrossSiteScript
- Route53 Endpoint
- 마운트
- Terraform
- s3 sync
- bWAPP M1
- ec2
- sessionManager
- DXGW
- SessionManager 터널링
- S3 Interface Endpoint
- S3 Gateway Endpoint
- 푸시게이트웨이
- S3 private통신
- s3
- 다이렉트 커넥트
- VGW
- Route53 Resolver
- 도커
- Today
- Total
이것이 점프 투 공작소
리눅스 로그에 대해 알아보자 본문
리눅스 log저장 방식(flow)
이벤트발생 -> /dev/log -> systemd-journal -> rsyslogd 또는 journalctl -> 로그파일
syslog
전통적인 로그관리 시스템입니다.
기본적으로 로그는 /var/log/syslog에 저장됩니다.
syslog설정
/etc/rsyslog.d 에 로그설정 파일들이 존재합니다.
50-default.conf
소스(중요도) - 저장위치 daemon.* /var/log/daemon.log 형식으로 설정되있습니다.
추가설명필요
cloud-init.conf
:로그태그값, 조건, 인자, 보낼위치
특정 조건에 맞는 인자가 있다면 특정 위치에 로그를 저장시킬 수 있습니다.
journal
syslog보다 개선된 방식, 메시지를 효율적으로 수집, 저장 및 검색합니다.
바이너리 형태로 로그 메시지를 저장, 커멘드라인 인터페이스 journalctl제공합니다
기본 저장 위치는 /var/log/journal 디렉토리에 저장되며, /etc/system/journal.conf 파일에서 저장위치 변경 가능합니다.
명령어 | 설명 | ||
journalctl -u 서비스명 | 해당 서비스(유닛)에 대한 로그 출력 | ||
journalctl -f | follow명령 | ||
journalctl --disk-usage | 디스크에 저장된 journal스토리지 공간 크기 확인 | ||
journalctl /usr/sbin/sshd | 특정 위치에서 로그 확인 | ||
journalctl --list-boots | 부팅에 대한 로그 확인, 0은 현재 부팅 journalctl -b -1 -u ssh : 저번 부팅에서의 ssh로그 확인 |
journalctl -u ssh.service 로 ssh의 로그를 조회 가능합니다
logrotate
리눅스 배포판의 표준로그 관리 유틸리티
/etc/logrotate.d 디렉토리에서 cron에 의해 매일 1회 수행됩니다
많아지는 로그를 관리하기 위해 사용됩니다.
명령어 | 설명 | ||
compress | 현재 버전이 아닌 모든 log파일 압축 | ||
daily, weekly, monthly | 지정된 일정대로 로그 파일들을 로테이션 | ||
delaycompress | 현재와 가장 최근 버전을 제외한 모든 버전 압축 | ||
endscript | prerotate나 postrotate스크립트 끝을 표시 | ||
errors emaiaddr | 지정된 이메일로 오류 알림 메시즈를 보냄 | ||
missingok | 로그파일이 존재하지 않을때 오류처리 x | ||
notifempty | 로그파일이 비어 있으면 로테이트 처리 하지 않음 | ||
postrotate | 로그 로테이션이 완료된 후 실행할 스크립트 | ||
prerotate | 로그 파일의 변경 전 실행될 스크립트 | ||
rotate n | 최대 n개 버전의 로그파일 유지 | ||
size logsize | 로그파일이 logsize 크기를 넘어선 경우 로테이션 | ||
copytruncate | 로그 데이터를 새로운 파일로 카피하고, 기존파일로 비움 |
구동 앱 로그 설정법
앱 소스
어플리케이션 폴더와 파일을 생성해줍니다.
fast-api를 사용하여 진행하였습니다.
sudo apt update
sudo apt install python3-pip
sudo pip3 install "uvicorn[standard]" gunicorn fastapi
폴더 : ~/demo
파일명 : ~/demo/main.py
서비스 소스
모든 서비스 파일은 /etc/systemd/system에 존재합니다.
추가로 재부팅 후에도 서비스가 시작되도록 하려면 sudo systemctl enable 서비스명 을 실행시켜주시면 됩니다.
파일 : /etc/systemd/system/hello.service
Unit : 구동할 서비스와 관련 문서 작성
Description : systemctl status로 서비스 확인 시 로그 상단에 표시되는 이름
After, Before : 부팅 과정 중 서비스 동작 전, 동작 후에 구동되어야하는 서비스 정의
EX) 하기 소스파일의 경우 network.target서비스 구동 후 실행되어야합니다.
Service : 실행 방식, 시작 시 구동할 스크립트 등 서비스 구동과 연관되는 부분을 작성합니다.
ExecStart : 서비스 구동 시 실행할 스크립트 지정
Restart : restart를 실행하는 상황에 정의하는 옵션
on - 재기동 상황시 별도 지정 X
on-failure - 비정상 종료시 재기동
on-success - 정상 종료시 서비스 재기동합니다,
SIGHUP, SIGINT, SIGTERM, SIGPIP나 SuccessExitStatus옵션에 정의 된 시그널을 받아 판단합니다.
on-abort - SuccessExitStatus, RestartPreventExitStatus에 정의되지 않은 종료 시그널 감지 시 재기동
always - 중단되면 무조건 재기동
Install : 기타 설정파일
WantedBy, RequestBy - 해당 서비스를 Enable로 전환할 경우 이 서비스들이 포함된 서비스 그룹을 지정합니다.
기본적으로 WantedBy=multi-user.target을 사용합니다.
서비스 시작, 동작 상태 확인
# 데몬 설정 다시 불러오기 init
sudo systemctl daemon-reload
# 해당 서비스 재시작
sudo systemct restart hello
# 서비스 상태확인
sudo systemctl status hello
rsyslog설정 추가
파일 : /etc/rsyslog.d/30-hello.conf
어플리케이션 소스에서 local7의 로그를 생성했으므로 해당 레벨의 모든 로그를 hello.log파일에 위치시킵니다.
rsyslog설정 추가 후 어플리케이션을 재시작해주면 로그를 확인할 수 있습니다.
로그이벤트 생성 logrotate
추가적으로 해당 log파일의 rotate도 설정해줍니다.
파일 : /etc/logrotate.d/hello
'리눅스' 카테고리의 다른 글
가상메모리에 대해 알아보자, 리눅스의 메모리 조회 명령어까지 (0) | 2022.12.18 |
---|---|
FD(File Descriptor)에 대해 알아보자 (0) | 2022.12.05 |
httpd의 설정 항목들을 정리해보자 (0) | 2022.10.21 |
리눅스와 네트워크 (1) | 2022.10.17 |
쉘 스크립트 개요 (0) | 2022.10.12 |