[AWS] amazonlinux2의 로그(/var/log)를 AWS cloudwatch logs로 백업하기
IT/AWS

[AWS] amazonlinux2의 로그(/var/log)를 AWS cloudwatch logs로 백업하기

반응형

Intro

오늘은 amazonlinux2의 Log에 대해 설명드리고 Cloudwatch Logs로 백업 방법에 대해 알려드리도록 하겠습니다.
대부분의 enterprise기업에서 제공하는 B2C형태의 대외서비스는 ISMS인증심사를 받게됩니다. ISMS인증 요구 사항 중 시스템로그 백업이 있는데, 여러가지 방법이 있겠지만 AWS를 사용하였을때 가장 cloud native한 방법을 알려드리고자합니다.

AWS cloud의 VM(virtual machine)서버 단위인 EC2에서 발생하는 log를 Cloudwatch agent를 사용하여 AWS Cloudwatch logs로 백업할 수 있으며, AWS관리콘솔에서 해당 log를 검색 조회할 수 있습니다.

linux log란?

linux OS에서 log는 사용자 및 서버의 활동기록과 시스템 공격에 대한 흔적 기록, 서버 장애에 대한 흔적 등을 기록하는 역할을 합니다.
amazonlinux2 OS의 로그는 레드헷 계열의 리눅스와 동일하게 /var/log 경로 에 로그를 기록합니다.

syslog 체계

amazonlinux2의 경우 centos7이 호환되는 OS로 생성되는 시스템로그는 syslog.d가 아닌 rsyslog.d 데몬에 의해서 총괄하여 관리가 됩니다. /etc/rsyslog.conf 파일을 보면 어디에서 메세지가 생성이 되면 어디에 메세지를 남겨라 라고 설정이 되어 있습니다.

syslog 종류

/var/log/messages

시스템에서 발생하는 거의 모든 표준 메시지가 기록되는 파일로, 대부분의 로그가 이 파일에 저장됩니다.

/var/log/secure

보안관련 로그 파일입니다. ssh, telnet 등으로 서버에 접속하는 사용자 접근 정보가 기록됩니다.

/var/log/maillog

메일 서버로 사용할 경우 메일에대한 송, 수신 내용이 기록됩니다.

/var/log/cron

cron이 동작할때 발생하는 로그가 기록됩니다.

/var/log/boot.log

서비스 데몬들의 부팅에 관련된 정보(시작,종료,실패)가 기록됩니다.

/var/log/dmesg

리눅스 부팅 시의 로그가 기록됩니다.

/var/log/wtmp

최근의 접속 사항이 기록되며, last 명령어에 의해 출력되는 내용이 기록되어 있습니다.

/var/log/lastlog

사용자의 마지막 login 내용이 기록되어 있습니다. 파일을 직접 확인할 수 는 없으며 lastlog명령어를 통해 확일 할 수 있습니다.

xferlog

FTP 데몬을 사용하여 파일을 전송한 정보가기록됩니다.

/var/log/httpd/access_log

Apache를 설치하여 사용할때 생성되는 로그이며, Apache 서비스 접근에 대한 정보가 기록됩니다.

/var/log/httpd/error_log

Apache를 설치하여 사용할때 생성되는 로그 이며, Apache 서비스의 에러 정보가 기록됩니다.

Log보관 주기

linux 운영체제에 할당되어있는 저장공간이 무한하지 않기 때문에 생성되는 Log를 지속적으로 지워줘야 합니다. 이것을 담당하는 것이 logroate입니다. Amazonlinux2의 경우 /etc/logrotate.conf 에 설정이 아래와 같이 설정이 되어있으며 이를 해석하면 1주일별로 로그파일을 관리하며, 최근 4주치의 로그까지만 저장됩니다.

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

syslog를 Cloudwatch Logs로 백업

  1. Cloudwatch agent를 다운로드 받아서 설치 합니다.
    wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm 
    sudo rpm -U /usr/local/share/amazon-cloudwatch-agent.rpm
  2. Cloudwatch logs로 백업할 정보를 json형태로 저장합니다. (messages, secure로그만 저장하는 예시)
    sudo echo '{"logs": {"logs_collected": {"files": {"collect_list": [{"file_path": "/var/log/messages","log_group_name": "/var/log/messages"},{"file_path": "/var/log/secure","log_group_name": "/var/log/secure"}]}}}}' > /opt/aws/amazon-cloudwatch-agent/bin/logs.json
  3. 2번에서 생성한 json 설정으로 Cloudwatch agent를 실행합니다.
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/logs.json -s
  • EC2에 IAM Role을 적용합니다. (CloudWatchAgentServerPolicy)

AWS Cloudwatch Logs 확인

AWS Cloudwatch Logs보관주기 설정

retention설정을 통해서 보관주기를 설정할 수 있습니다.

반응형