CentOS 7 서버를 운영하다 보면 특정 프로세스가 예기치 않게 종료되는 경우가 발생할 수 있습니다.
이때 ABRT(Automated Bug Reporting Tool)를 사용하면 크래시 원인을 빠르게 파악할 수 있습니다.
이번 글에서는 CentOS 7 환경에서 ABRT를 설치하고 설정하는 방법을 알아보겠습니다.
ABRT 설치하기
CentOS 7에서는 ABRT가 기본 설치되어 있지 않기 때문에 yum 패키지 관리자를 사용하여 설치합니다.
sudo yum install -y abrt abrt-cli abrt-addon-ccpp abrt-tui
- abrt: 프로세스 크래시를 감지하고 정보를 수집하는 ABRT 데몬입니다.
- abrt-cli: 커맨드라인 인터페이스로 ABRT를 제어할 수 있는 도구입니다.
- abrt-addon-ccpp: 프로세스의 크래시 데이터를 수집하는 핵심 애드온입니다.
- abrt-tui: 텍스트 기반 사용자 인터페이스로 로그 확인과 분석을 지원합니다.
설치가 완료되면 ABRT 데몬을 활성화하고 시작합니다.
sudo systemctl enable abrtd
sudo systemctl start abrtd
ABRT란 무엇인가?
ABRT는 프로세스가 크래시 나면 자동으로 정보를 수집하는 디버깅 도구입니다.
프로세스가 비정상 종료되면, ABRT는 코어 덤프와 명령어, 백트레이스 등 필요한 데이터를 수집하여 로그에 기록합니다.
ABRT 기본 설정 문제 해결
ABRT는 기본적으로 패키지화되지 않은 프로세스의 크래시 정보를 저장하지 않습니다. 직접 작성한 스크립트나 패키지화되지 않은 프로그램이 크래시 될 경우, ABRT는 데이터를 삭제합니다. 이때 아래와 같은 로그가 나타날 수 있습니다.
abrtd: 'post-create' on '/var/spool/abrt/pyhook-...' exited with 1
abrtd: Deleting problem directory ...
이는 패키지화되지 않은 프로세스의 데이터가 저장되지 않는 기본 설정 때문입니다.
이를 해결하려면 /etc/abrt/abrt-action-save-package-data.conf 파일의 설정을 변경해야 합니다.
OpenGPGCheck = no
ProcessUnpackaged = yes
- OpenGPGCheck = no: 패키지 서명 검사를 비활성화하여 패키지화되지 않은 프로세스도 크래시 정보를 저장하도록 설정합니다.
- ProcessUnpackaged = yes: 패키지화되지 않은 프로세스의 크래시 데이터를 저장하도록 설정합니다.
설정 파일을 수정한 후 ABRT 데몬을 재시작합니다.
sudo systemctl restart abrtd
예제: API 호출 중 타임아웃 처리
프로세스가 REST API 호출 중 연결 타임아웃(Connection Timeout)을 겪는 상황이 있습니다. backtrace 파일을 통해 타임아웃 발생 위치를 파악한 후 API 호출 부분에 예외 처리를 추가하여 문제를 해결할 수 있습니다.
import requests
try:
response = requests.post("http://example.com/api", timeout=5)
except requests.exceptions.Timeout:
# 타임아웃 예외 처리
print("Request timed out.")
ABRT의 backtrace 파일 분석하는 방법
ABRT에서 생성된 backtrace 파일은 프로세스 크래시의 원인을 파악하는 데 매우 중요한 정보를 제공합니다.
이 파일을 분석하면 크래시가 발생한 위치와 원인에 대해 더 자세히 알 수 있습니다.
1. backtrace 파일 위치 확인
크래시가 발생하면 ABRT는 /var/spool/abrt 디렉터리에 크래시 시점의 타임스탬프가 포함된 디렉터리를 생성합니다.
이 디렉터리 안에는 core_backtrace라는 파일이 포함되어 있습니다.
cd /var/spool/abrt/<crash-directory>
cat core_backtrace
2. backtrace 파일 구조 이해
backtrace 파일은 크래시가 발생한 시점의 스택 트레이스를 보여줍니다. 스택 트레이스는 함수 호출 순서와 함께 각 호출의 코드 위치를 나타냅니다. 일반적으로 파일의 구조는 다음과 같습니다.
- 스레드 정보: 문제가 발생한 스레드 ID와 함께, 여러 스레드가 있는 경우 각 스레드에 대한 정보가 나옵니다.
- 함수 호출 순서: 에러가 발생하기 직전까지 호출된 함수들이 순서대로 나열되어 있습니다.
- 에러 메시지: 문제가 발생한 위치의 에러 유형과 메시지가 기록됩니다.
3. 에러 발생 위치 찾기
스택 트레이스를 위에서 아래로 따라가면, 에러가 발생한 최종 위치를 확인할 수 있습니다.
이 위치는 크래시를 일으킨 함수와 파일, 그리고 해당 줄 번호를 나타내므로 디버깅에 필요한 핵심 정보입니다.
backtrace 정보를 바탕으로 예외 처리를 구현하면 됩니다.
ABRT의 활용 효과
ABRT는 프로세스가 크래시 할 때 자동으로 데이터를 수집하여 개발자가 빠르게 문제를 파악하고 해결할 수 있도록 돕습니다. 이를 통해 서버 운영 중 발생할 수 있는 다양한 프로세스 문제에 대한 디버깅 시간을 크게 줄일 수 있습니다.
특히 패키지화되지 않은 프로세스를 운영하는 경우, 기본 설정을 변경해 모든 크래시 정보를 수집하도록 설정하는 것이 좋습니다. 이를 통해 서버 운영의 안정성을 높이고, 문제가 발생할 경우 원인을 빠르게 추적할 수 있습니다.
'OS > Linux' 카테고리의 다른 글
Linux - OpenSSL 소스 설치 가이드: SSH 및 NTP 데몬 문제 해결과 올바른 설정 (0) | 2024.11.21 |
---|---|
Linux - Turnserver 프로세스 및 트래픽 문제 자동화 (0) | 2024.11.19 |
Linux - CentOS 8 네트워크 설정(NetworkManager / nmcli) (0) | 2024.11.13 |
Linux - Crontab에서 Command Not Found 오류 해결 (0) | 2024.11.12 |
Linux - 스크립트 명령어를 등록하고 버전 관리하는 법 (6) | 2024.11.01 |