728x90
개요
전통적인 리눅스 로그 관리: syslog
유닉스 및 리눅스 시스템은 오랜 기간 동안 syslog 시스템을 활용하여 로그를 관리해왔습니다. 이는 로그 메시지를 제출하기 위한 표준화된 인터페이스를 어플리케이션에 제공하며, 메시지를 분류하여 파일에 저장하거나 네트워크를 통해 다른 호스트로 전달하는 기능을 포함합니다.
하지만 현실적으로 어플리케이션, 네트워크 데몬, 시동 스크립트 등은 자신만의 로그 파일을 관리하며, 완전한 통합이 이루어지지 않는 경우도 많습니다.
현대적인 로그 통합: systemd의 journal
현대적인 로그 통합: systemd의 journal
systemd의 등장과 함께 journal 시스템은 더욱 효율적인 로그 통합 관리 방식을 제공하게 되었습니다. 주요 특징은 다음과 같습니다:
- 효율적인 저장 및 검색: 로그 메시지를 압축된 바이너리 형태로 저장하여 공간 효율성을 높이고 검색 속도를 개선합니다.
- 인덱싱: 메시지 속성을 자동으로 인덱싱하여 검색이 용이합니다.
- 명령어 제공: journalctl 명령어를 통해 로그를 보고 필터링할 수 있습니다.
journalctl 명령어 사용 예시
- 특정 서비스 로그 확인
- 실시간 로그 출력
- 디스크에서 저널 크기 확인
- 최근 100개의 로그 항목 확인
- 부팅 목록 확인
- 특정 부팅 세션의 로그 확인
# journalctl -u ssh
# journalctl -f
# journalctl --disk-usage
# journalctl -n 100 /usr/sbin/sshd
# journalctl --list-boots
# journalctl -b -1 -u ssh
systemd 저널 환경 설정
/etc/systemd/journald.conf 파일을 편집하여 journal의 동작 방식을 설정할 수 있습니다. 예를 들어, 로그 저장 위치를 /var/log/journal로 변경하려면 아래와 같이 설정합니다
# cat /etc/systemd/journald.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.
[Journal]
#Storage=auto -> 해당 부분을 수정(경로 설정)
Storage=/var/log/journal
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
변경 후 디렉토리를 생성하고 권한을 설정합니다.
# ls /var/log/journal
ls: cannot access '/var/log/journal': No such file or directory
# mkdir /var/log/journal
# ls /var/log/journal
a31d78a00b8b46a39880b4b1a9082715
# ls /var/log/journal
a31d78a00b8b46a39880b4b1a9082715
# ls /var/log/journal/a31d78a00b8b46a39880b4b1a9082715/
system@0b7c824134b04c5dab37343b0ffd6269-0000000000000001-00062ba7a5469f47.journal
system@0b7c824134b04c5dab37343b0ffd6269-00000000000210d3-00062baa466204f6.journal
system@0b7c824134b04c5dab37343b0ffd6269-0000000000042225-00062bace9634fbb.journal
system@0b7c824134b04c5dab37343b0ffd6269-00000000000633ca-00062baf8ddbb11e.journal
system@0b7c824134b04c5dab37343b0ffd6269-000000000008456f-00062bb236f4c2c7.journal
system.journal
user-2000.journal
syslog: 전통적인 로그 관리의 핵심
syslog는 IETF 표준 로깅 프로토콜(RFC5424)을 기반으로 한 포괄적인 로깅 시스템입니다. 주요 기능은 다음과 같습니다:
- 개발자에게 로그 파일 작성 메커니즘 제공
- 시스템 관리자에게 로깅 통제권 제공
- 메시지를 소스 및 중요도에 따라 정렬하여 다양한 목적지로 경로를 전환 및 내용을 변경 가능
메시지 확인 명령어
# cat /var/log/syslog
logrotate: 로그 파일 관리
logrotate는 로그 파일 관리를 자동화하는 유틸리티로, 다양한 관리 정책을 제공합니다. 주요 옵션은 다음과 같습니다:
- compress: 이전 버전의 로그 파일을 압축
- daily, weekly, monthly: 로그 파일 회전 주기 설정
- rotate n: 최대 n개의 로그 파일 버전 유지
- copytruncate: 기존 로그 데이터를 복사 후 초기화
logrotate 설정 예시
vi /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
대규모 로그 관리
서비스 규모가 커짐에 따라 로그 관리는 더욱 복잡해집니다. 특히 오토 스케일링 환경에서는 동적으로 생성 및 삭제되는 서버의 로그를 효과적으로 관리해야 합니다.
ELK 스택
- 구성 요소:
- Elasticsearch: 로그 데이터를 저장 및 검색
- Logstash: 로그 수집 및 변환
- Kibana: 로그 시각화 및 대시보드 제공
- 장점:
- 강력한 로그 검색 및 분석 기능
- 대규모 데이터 처리 가능
- 단점:
- 초기 설정 및 유지보수 비용이 높음
SaaS 기반 서비스
- Splunk, Sumo Logic, Loggly, Amazon CloudWatch Logs 등의 서비스는 간편한 설정으로 로그 관리가 가능합니다.
- 운영 인력이 적은 조직에 적합하나, 비용이 높은 편입니다.
'OS > Linux' 카테고리의 다른 글
[Linux]iproute2: 현대적인 네트워킹 명령어 (1) | 2025.01.20 |
---|---|
[Linux] 로그 데몬 만들기 실습 (0) | 2025.01.19 |
[Linux] 리눅스 프로세스와 쓰레드 관리 (0) | 2025.01.17 |
[계정 관리] 서버 간 계정 동기화하기 (0) | 2025.01.16 |
[Linux]컨테이너를 구성하는 3가지 주요 리눅스 기술 (0) | 2024.12.31 |