로깅 Logging
: 시스템의 동작을 기록하고, 발생한 이벤트나 문제를 추적하는 데 사용된다.
기능)
이벤트 기록 : 시스템 내에서 발생하는 다양한 이벤트(ex : 오류, 경고, 정보)를 로그 파일에 기록함
디버깅 : 개발자가 코드를 디버깅하거나 문제를 해결하는 데 도움이 됨
감사 추적 : 보안 및 규정 준수 목적으로 시스템 활동을 추적
장기 보관 : 로그를 장기적으로 보관하여 나중에 분석하거나 참조할 수 있음
예시)
웹 서버 로그 / 애플리케이션 로그 / 시스템 로그
로그로테이트 Logrotate
: 로그 파일을 주기적으로 회전(rotating)시켜 용량을 관리하는데 도움을 줌
기능)
로그 파일 로테이트 : 로그 파일이 일정 크기에 도달하거나 특정 기간이 경과하면, 새로운 로그 파일을 생성하고 이전 로그 파일을 백업함
백업 보관 : 오래된 로그 파일을 압축하거나 삭제하여 디스크 공간을 절약함
로그 파일 압축 : 개별 애플리케이션이나 서비스의 로그 파일에 대해 고유한 로테이트 정책을 설정할 수 있음
자동화 : cron과 같은 스케줄러를 사용하여 주기적으로 로그로테이트를 실행할 수 있음
기본 설정 파일은 `/etc/logrotate.conf`에 위치하며, 여기서 전역 설정을 할 수 있음.
개별 서비스나 애플리케이션의 설정 파일은 `/etc/logrotate.d/` 디렉토리에 위치함.
CPU 사용량, 메모리 사용량, 디스크 사용량을 로깅하는 쉘 스크립트를 작성해서 특정 시간마다 전송하도록 구현해보자.
우선 로깅을 수행할 인스턴스를 하나 만들어주었다. (그냥 있던거에 만들어줘도 되는데 나중에 다시 새로 만들어야 할까봐 ... 귀찮으니까...)
resource "aws_instance" "A_Logging" { // 로깅 서버
ami = "ami-056a29f2eddc40520"
instance_type = "t2.micro"
subnet_id = aws_subnet.Private_A2.id
key_name = "KDT_Project2_AWS"
vpc_security_group_ids = [aws_security_group.private.id]
tags = {
Name = "A_Logging"
}
사양은 위와 같다.
GitHub - lcl1380/Terraform_Code: [ KDT 2024 ] AWS Terraform 코드 백업
[ KDT 2024 ] AWS Terraform 코드 백업. Contribute to lcl1380/Terraform_Code development by creating an account on GitHub.
github.com
다음은 쉘 스크립트를 작성해야 하는데, 파이프라인을 이용할 것이므로 적당히 테라폼 코드 올려두던 깃허브에 올려주었다.
흐름은 다음과 같다 :
1. 깃허브 레포지토리에서 CPU 사용량 등을 로깅하는 쉘 스크립트를 작성한다.
2. 젠킨스 파이프라인에서 쉘 스크립트를 각 인스턴스로 전송한다.
3. 각 인스턴스에서는 쉘 스크립트를 실행하고, CPU 사용량 등을 로깅 및 로그로테이션 작업을 진행한다.
4. 로깅 된 내역들은 통합 인스턴스로 보내지고, 로깅 인스턴스는 이메일로 취합한 로그를 보낸다.
sudo 권한 설정
# Jenkins 인스턴스에서
sudo visudo
# root 권한 밑에 추가
jenkins ALL=(ALL) NOPASSWD: ALL
젠킨스는 기본적으로 jenkins라는 계정으로 스크립트 명령을 내리는데,
ubuntu 계정의 소유 요소에는 쓰기 작업 등에 대해 허가가 나지 않는 경우가 있다.
이를 방지하기 위해 jenkins에서 root 비밀번호 없이 사용할 수 있도록 사전에 권한을 부여해주자.
+ bash ./log_resource_usage.sh
./log_resource_usage.sh: line 21: /var/log/resource_usage.log: Permission denied
근데 권한 추가해줬음에도 불구하고 pipeline에서 배포를 진행하면 다음과 같은 문제가 발생한다:
눈아프니까 내일 해야지 ...
Pipeline 코드 작성
pipeline {
agent any
stages {
stage('Clone') {
steps {
git branch: 'main', url: 'https://github.com/lcl1380/Terraform_Code.git'
}
}
stage('Update Crontab') {
steps {
sh 'chmod +x log_resource_usage.sh'
sh 'bash ./log_resource_usage.sh'
}
}
stage('Build') {
steps {
sh 'chmod +x log_resource_usage.sh'
sh 'bash ./log_resource_usage.sh'
}
}
stage('Deploy') {
when {
expression { currentBuild.result == null || currentBuild.result == 'SUCCESS' }
}
steps {
sshagent(['KDT_Project2_AWS']) {
script {
def servers = [
'10.0.2.197',
'10.0.2.29'
]
servers.each { server ->
echo "Deploying to ${server}"
// Copy the script to the remote server
sh "scp -o StrictHostKeyChecking=no log_resource_usage.sh ubuntu@${server}:/home/ubuntu"
// Execute the script on the remote server
sh "ssh -o StrictHostKeyChecking=no ubuntu@${server} 'chmod +x /home/ubuntu/log_resource_usage.sh && /home/ubuntu/log_resource_usage.sh'"
}
}
}
}
}
}
post {
success {
echo "Deployment succeeded"
}
failure {
echo "Deployment failed"
}
}
}
인스턴스 프라이빗 IP와 github 프로젝트의 최상위 브랜치가 `main`인지 `master`인지에 따라 pipeline에서 사용하는 명령어가 다르므로 잘 확인해주자.
헷갈릴 경우 파이프라인 입력 박스 아래의 `Pipeline Syntax`를 활용하는 방법도 있다.
Cronjob 등록
'🌥️Cloud Study🌥️ > Etc' 카테고리의 다른 글
[ Network ] Cisco OS 알아보기 (0) | 2024.08.02 |
---|---|
[ Network ] 호스트간 통신 살펴보기 (중간 부분 수정하기) (0) | 2024.08.02 |
[ Network ] Cisco 패킷 트레이서 소개와 환경설정 (0) | 2024.08.02 |
[ Monitoring ] Prometheus와 Grafana를 활용한 모니터링 (0) | 2024.07.24 |
[ sudo 권한 ] 권한과 관련된 글 (0) | 2024.07.24 |