서버 성능에 문제가 발생하면 가장 먼저 리눅스 로그를 확인 해야 합니다 . 시스템 로그에는 커널이나 다양한 서비스와 같은 운영 체제의 여러 구성 요소에서 발생하는 유용한 진단 메시지가 포함되어 있으므로, 대부분의 경우 로그에서 문제의 원인을 찾을 수 있습니다.
로그의 모든 메시지는 운영 체제의 특정 이벤트의 결과로 생성됩니다. 사용자, 권한 부여, 서비스 종료 또는 애플리케이션 실패. 이러한 이벤트는 중요도에 따라 우선순위가 다릅니다. Linux에는 다음과 같은 유형의 이벤트가 있습니다.
emerg- 실패, 최우선순위;alert- 긴급 경고crit- 중요 사건;err- 일반적인 오류;warn- 일반 경고;notice- 알림;info- 정보 메시지;debug- 디버깅 정보
현재 리눅스에서 주요 로그 수집 서비스는 rsyslog 와 systemd-journald 입니다 . 이들은 대부분의 최신 배포판 패키지에 포함되어 있으며 독립적으로 작동합니다.
rsyslog
이 서비스의 로그는 일반 텍스트 파일 형태로 " /var/log/ " 폴더 에 저장됩니다 . 로그 메시지는 이벤트 유형에 따라 다른 파일에 저장됩니다. 예를 들어, " /var/log/auth.log "에는 시스템에서 사용자의 권한 부여에 대한 정보가 포함되고, " /var/log/kern.log "에는 커널 메시지가 포함됩니다. 파일 이름은 배포판 패키지에 따라 다를 수 있으므로, " /etc/rsyslog.d/50-default.conf " 설정 파일을 살펴보면 어떤 내용이 어디에 저장되는지 알 수 있습니다 .
이 규칙들은 각 유형의 로그 메시지가 포함된 파일을 보여줍니다. 왼쪽 부분에는 " [소스].[우선순위] " 형식으로 메시지 유형이 표시되고, 오른쪽 부분에는 로그 파일 이름이 표시됩니다. 메시지 유형을 작성할 때 " * " 문자를 추가할 수 있습니다. 이는 빈 값 또는 " 없음 "을 의미하며 목록에서 해당 메시지를 제거합니다. 이제 첫 번째와 두 번째 규칙을 자세히 살펴보겠습니다.
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
첫 번째 규칙은 인증 메커니즘에서 수신된 모든 메시지가 " /var/log/auth.log " 파일 에 기록된다는 것을 의미합니다 . 모든 인증 시도(성공 여부와 관계없이)가 이 파일에 기록됩니다. 두 번째 규칙은 인증과 관련된 메시지를 제외한 모든 메시지가 " /var/log/syslog " 파일에 기록된다는 것을 나타냅니다. 이 두 파일은 일반적으로 가장 많이 사용되는 파일입니다. 다음 규칙들은 커널 로그 " kern.* "와 메일 서비스 로그 " mail.* " 의 저장 경로를 정의합니다.
로그 파일은 less , cat , tail 과 같은 텍스트 편집기를 사용하여 열 수 있습니다 . 이제 " /var/log/auth.log " 파일을 열어 보겠습니다.
less /var/log/auth.log
파일의 모든 줄은 애플리케이션이나 서비스에서 수신한 별도의 메시지입니다. 출처와 관계없이 모든 메시지는 하나의 형식을 가지고 있으며 5개의 부분으로 구성됩니다. 스크린샷에서 강조 표시된 메시지를 예로 들어보겠습니다.
- 메시지 타임스탬프 - “12월 06일 18:33:XNUMX”
- 메시지를 보낸 컴퓨터의 이름 - “vds”
- 메시지를 보낸 애플리케이션 또는 서비스의 이름 - “sshd”
- 프로세스 ID - [653]
- 메시지 텍스트 - “188.19.42.165 포트 2849 ssh2에서 mihail의 비밀번호가 수락되었습니다.”
이는 SSH에 성공적으로 연결된 예입니다.
로그인 시도가 실패한 경우의 결과는 다음과 같습니다.
이 파일에는 고급 권한이 있는 명령도 기록됩니다.
/var/log/syslog 파일을 열어 보겠습니다.
스크린샷에서 강조 표시된 메시지는 네트워크 인터페이스 종료에 대한 메시지입니다.
긴 텍스트 파일에서 정보를 검색하려면 grep 유틸리티를 사용하십시오. pptpd 서비스에서 수신한 모든 메시지는 " /var/log/syslog " 파일 에서 찾을 수 있습니다.
grep 'pptpd' /var/log/syslog
진단 과정에서 `tail` 유틸리티를 사용하여 파일의 마지막 몇 줄을 표시할 수 있습니다. ` tail -f /var/log/syslog` 명령어를 사용하면 실시간으로 기록되는 로그를 확인할 수 있습니다.
rsyslog 서비스는 매우 유연하고 강력합니다. 로컬 시스템뿐만 아니라 엔터프라이즈 수준에서도 로그를 수집하는 데 사용할 수 있습니다. 자세한 내용은 공식 웹사이트 (https://www.rsyslog.com/ )에서 확인할 수 있습니다.
Linux에서의 로그 회전
로그 기록은 지속적으로 이루어지기 때문에 파일 크기가 끊임없이 증가합니다. 로그 순환 메커니즘은 오래된 로그를 자동으로 보관하고 새 파일을 생성합니다. 설정된 규칙에 따라 매일, 매주, 매월 또는 파일 크기 제한에 따라 순환이 실행될 수 있습니다. 새 로그가 생성되면 오래된 로그는 삭제되거나 이메일로 전송될 수 있습니다. 로그 순환은 logrotate 유틸리티를 통해 수행됩니다. 주요 설정은 " /etc/logrotate.conf " 파일 에서 확인할 수 있습니다 . 또한, " /etc/logrotate.d/ " 폴더 의 파일 내용도 관리됩니다.
새로운 규칙은 메인 설정 파일에 기록할 수 있습니다. 하지만 " /etc/logrotate.d/ " 디렉터리에 별도의 파일을 만드는 것이 가장 좋습니다. 기본적으로 이 디렉터리에는 몇 개의 파일이 있습니다.
rsyslog 서비스 의 로그 순환 규칙이 포함된 파일 " /etc/logrotate.d/rsyslog " 를 살펴보겠습니다.
첫째, 규칙에는 로그 파일의 경로가 포함되어야 하며 그 다음에 곡선 괄호로 묶인 모든 지침이 있어야 합니다.
- 회전 7 - 보관할 파일 수 - 7
- 매일 - 매일 새 파일을 만듭니다
- 압축 - 오래된 파일을 압축하고 보관합니다.
스크린샷에서 볼 수 있듯이 " /var/log/ " 폴더에는 기본 로그 파일인 " syslog "와 설정 파일의 규칙에 해당하는 7개의 아카이브 파일이 있습니다 .
logrotate에 대한 더 자세한 설명은 " man logrotate " 명령을 실행하여 매뉴얼에서 확인할 수 있습니다.
Linux 로그 수집 - journald
로그 수집 서비스인 systemd-journald는 초기화 시스템 systemd 의 일부입니다 . Linux 로그 파일은 " /var/log/journal/ " 디렉터리 에 특수한 형식으로 저장되며 journalctl 유틸리티를 사용하여 열 수 있습니다 . 레코드 형식은 rsyslog 와 완전히 동일합니다.
속성 없이 `journalctl` 명령어를 사용하면 모든 레코드가 표시되지만, 로그 크기가 큰 경우에는 적합하지 않습니다. 이 유틸리티의 몇 가지 옵션을 살펴보겠습니다.
journalctl -b- 마지막 시작 이후의 모든 레코드 표시journalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- 특정 기간 내의 기록을 보여줍니다journalctl -u pptpd- 특정 서비스의 기록을 보여줍니다journalctl -k- 커널 메시지 표시journalctl -p err- 특정 우선순위의 메시지를 표시합니다. 이 경우 우선순위가 더 높은 메시지(crit, alert, emerg)를 표시합니다.journalctl -f- 실시간으로 메시지 표시
더 나은 유연성을 위해 이러한 옵션들을 조합할 수 있습니다. pptpd 서비스 의 모든 오류를 보여드리겠습니다.
journalctl -u pptpd -p err
실행 파일의 경로를 속성으로 지정하면 해당 파일에서 보낸 모든 메시지가 표시됩니다. 2020년 2월 18일 04시 15분 이후 " /usr/bin/sudo " 파일에서 보낸 모든 메시지를 표시해 보겠습니다. 실제로는 더 높은 권한으로 실행된 모든 명령이 표시됩니다.
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
다음 명령을 실행하여 로그 파일이 차지하는 디스크 공간의 양을 확인하세요.
journalctl --disk-usage
로그 파일을 1Gb로 제한하려면 다음 명령을 실행하세요.
journalctl --vacuum-size=1G
바이너리 파일 열기
이제 모든 로그인 시도가 저장되는 " /var/log/ " 폴더 에 있는 몇 가지 특수 파일을 살펴보겠습니다 . 이 파일들은 바이너리 파일이므로 특수 프로그램으로만 열 수 있습니다.
/var/log/wtmp 파일 에는 성공적인 로그인 시도에 대한 정보가 포함되어 있습니다. last 유틸리티를 사용하여 해당 파일을 열 수 있습니다.
/var/log/btmp - 모든 로그인 실패 시도 기록이 포함되어 있습니다. lastb 명령어로 고급 권한으로 열 수 있습니다. -n 속성은 파일 끝에서부터 표시할 줄 수를 지정합니다.
/var/log/lastlog - 각 계정 기록의 마지막 로그인 시간이 기록되어 있습니다. lastlog 명령어 로 열 수 있습니다.