[ Logging ] 쉘스크립트로 로깅 진행하기(+ 로그로테이트)

2024. 7. 24. 09:25·🌥️Cloud Study🌥️/Etc

로깅 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"
        }
    }
}

 

master일 경우에는 그냥 git '링크.git'으로 끝난다.

인스턴스 프라이빗 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
'🌥️Cloud Study🌥️/Etc' 카테고리의 다른 글
  • [ Network ] 호스트간 통신 살펴보기 (중간 부분 수정하기)
  • [ Network ] Cisco 패킷 트레이서 소개와 환경설정
  • [ Monitoring ] Prometheus와 Grafana를 활용한 모니터링
  • [ sudo 권한 ] 권한과 관련된 글
L_Chae
L_Chae
🎮😻🤓🖥✨
  • L_Chae
    Cherish
    L_Chae
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Working in Japan
      • 🌥️Cloud Study🌥️
        • AWS
        • NHN
        • KT
        • Microsoft (Azure 900)
        • TroubleShooting
        • IaC
        • Etc
      • STUDY
        • English
        • Japanese
        • 개인정보보호 관련
      • 초등학교 AI 교육 진행
        • 2024학년도 1학년-2학년
        • 2025학년도 4학년
      • 2024 KDT 📕
        • Lecture
        • Study 📗
        • Study-JAVA
        • Project
        • etc
      • INTERLUDE ✦
        • 2022 SYSTEM STUDY
        • 2022 Winter Study
        • 2023 AutoMobility STUDY
        • 2023 Summer Study (CPPG)
        • 2023 Reversing STUDY
        • etc
      • Private🔒
        • MacBook 💻
        • Screenshot 🩷
        • Photo 🖼️
        • FFXIV - Backup 🎮
        • Tistory
      • PBL 📗
        • 논문 스터디
        • Backup
      • Project 🖤
        • 2022-2) 개인정보보호 소학회
        • 2022-2) winter GURU2 - iOS
        • 2023-1) PBL 3
        • 2023-2) PBL 4
        • 2024-1) SW-AI교육 실습 일지
      • CTF 🚩
        • 2022
        • 2023
      • News scrap 📰
        • 2022
        • 2023
        • 2025
      • 2022 공부 로그 🐯
      • 2023 공부 로그🐰
  • 블로그 메뉴

    • 글쓰기
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    엔드포인트보안
    바이브코딩
    앱성능관리
    기지네트웍스
    주스재킹
    초이스재킹
    좀비자산
    보안부채
    content collection
    웨이크락
    파일리스 악성코드
    ansible galaxy
    안드로이드 바이탈스
    deprecation warning
    ansible
    보안뉴스
    국가망보안체계
    APT 공격
    엘라스틱 서치
    뉴스스터디
    공공기관 보안
    jlpt n1 도전기
    클라우드리스크
    KT침해사고
    재해복구DR
    디지털권위주의
    그림자AI
    ai에이전트
    인포스틸러
    개인정보보호
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
L_Chae
[ Logging ] 쉘스크립트로 로깅 진행하기(+ 로그로테이트)
상단으로

티스토리툴바