[ 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
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 🌥️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
      • 2022 공부 로그 🐯
      • 2023 공부 로그🐰
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    ansible
    N1
    JLPT N1
    deprecation warning
    ansible galaxy
    JLPT
    content collection
    멱등성
    jlpt n1 도전기
  • 최근 댓글

  • 최근 글

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

티스토리툴바