Information Security Study
240723 젠킨스 파이프라인에서 .sh 실행하기, 크론탭으로 로깅 스크립트 실행하기, 로그로테이트 구현하기 본문
240723 젠킨스 파이프라인에서 .sh 실행하기, 크론탭으로 로깅 스크립트 실행하기, 로그로테이트 구현하기
gayeon_ 2024. 7. 23. 17:11젠킨스 파이프라인에서 .sh 실행하기
젠킨스 파이프라인에서 shell 스크립트를 작성해서 실행하면 구문이 복잡해지기 때문에
github에 shell 스크립트를 작성해 받아와서 실행하는 방식을 사용했다.
먼저 파이프라인 타입으로 아이템을 생성했다.
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
스크립트에는 위와 같은 형식으로 작성할 것이다.
이제 인스턴스 자원을 주기적으로 확인하고 로깅하는 셸 스크립트를 작성할 것이다.
cpu, 메모리, 디스크 사용량을 로깅하는 셸 스크립트이다.
이 스크립트는 /var/log/resource_usage.log 파일에 주기적으로 자원 사용량을 기록한다.
저장한 뒤 실행 권한을 부여했다.
젠킨스는 보통 jenkins 이름으로 스크립트 명령을 내리기 때문에 ubuntu 계정이 갖는 요소에는 쓰기 작업이 불가능한 경우가 있다.
그래서 jenkins로 sudo 명령을 편하게 쓸 수 있도록 visudo에서 권한을 부여했다.
jenkins 사용자에게 비밀번호 없이 sudo 명령을 부여하는 구문
pipeline {
agent any
stages {
stage('Clone github'){
steps {
git 'https://github.com/계정명/레포지토리명'
sh 'ls'
sh 'chmod +x resource_usage.sh'
sh 'chmod +x build.sh'
sh 'chmod +x test.sh'
sh 'chmod +x deploy.sh'
}
}
stage('Build') {
steps {
echo 'Building...'
sh './build.sh'
}
}
stage('Test') {
steps {
echo 'Testing...'
sh './test.sh'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
sh './deploy.sh'
}
}
stage('Logging'){
steps {
echo 'Logging...'
// jenkins 계정으로는 /home/ubuntu 하위 경로에 저장 불가이므로 sudo 필요
sh 'sudo ./resource_usage.sh'
echo '------------- process --------------'
// 조회시에도 jenkins 계정으로는 /home/ubuntu 하위 경로에 호출 불가이므로 sudo 필요
sh 'sudo cat /home/ubuntu/log_test/resource_usage.log'
}
}
}
}
깃허브 레포지토리에서 sh 파일을 받아서 실행한 뒤
로그 내역을 출력하는 파이프라인 스크립트이다.
빌드를 누르면 인스턴스의 /home/ubuntu/log_test/resource_usage.log 파일에 로깅이 되고
기록된 내역이 출력된다.
직접 powershell에서 cat으로 출력해도 동일한 결과가 출력된다.
젠킨스에서 console output으로 확인한 결과
크론탭으로 로깅 스크립트 실행하기
크론탭으로 셸 스크립트를 주기적으로 실행하도록 설정해봤다.
- 셸 스크립트를 작성하여 자원 사용량을 로그 파일에 기록한다.
- 스크립트를 실행 가능한 위치에 저장하고 실행 권한을 부여한다.
- 크론탭에 등록하여 스크립트를 주기적으로 실행한다.
크론탭 편집기를 연다.
크론탭 파일에 위와 같이 추가했다.
매 5분마다 위 경로에 있는 log_resource_usage.sh를 실행하는 구문이다.
저장 후 위 명령어로 변경된 크론탭을 확실히 실행시킨다.
이렇게 하면 매 5분마다 자원 사용량을 로깅할 수 있다.
크론탭 작업을 제거하는 셸 스크립트
작성한 뒤 실행권한을 부여한다.
위와 같이 실행하면 크론탭에서 특정 구문을 제거할 수 있다.
로그로테이트하기
로그 파일이 너무 커지면 디스크를 가득 채울 수도 있고 오래되어 불필요한 로그가 남을 수도 있다.
로그로테이트의 장점
- 최대 크기 지정으로 파일 비대화 방지
- 보존 기간 설정으로 오랜 로그 삭제
- 주기적 백업을 통한 유실 방지
- 오래된 로그 파일 압축을 통한 저장 효율화
먼저 해당 경로로 로그파일로 사용할 log.txt를 생성하고
권한도 부여한다.
셸 스크립트 작성 후 실행 권한을 부여한다.
그리고 로그로테이트 설정 파일을 작성해야 한다.
설정 파일은 /etc/logrotate.d/ 디렉토리에 있어야 한다.
- /var/log/myapp/log.txt: 관리할 로그 파일 경로이다.
- size 1M: 로그 파일이 1MB에 도달하면 회전한다.
- copytruncate: 원본 파일을 비운 후 내용을 복사하여 새로운 파일을 생성한다.
- rotate 7: 최대 7개의 로그 파일을 유지한다.
- compress: 로그 파일을 압축한다.
- missingok: 로그 파일이 없으면 오류를 무시한다.
- notifempty: 로그 파일이 비어 있으면 회전하지 않는다.
- daily: 로그 파일을 매일 회전한다.
- create 0644 root root: 새로운 로그 파일을 생성할 때의 권한과 소유자를 설정한다.
- olddir /var/log/myapp/old: 이전 로그 파일을 이동할 디렉토리다.
compress 옵션을 사용하면 로그 파일이 압축되어 저장된다.
로그로테이트 설정 테스트 명령어
테스트 모드로 설정을 검사하며 실제로 로그를 회전하지 않는다.
테스트모드에서 문제가 발견되지 않았다면 위 명령어로
로그로테이트를 수동으로 실행한다.
위 명령어로 스크립트가 정상적으로 설정되었는지 확인할 수 있다.
이제 셸 스크립트를 실행한다.
실행하면 초당 100번씩 로깅되며 1MB를 초과하는 로그 파일을 자동으로 회전하고, 압축하고, 일주일 이상된 로그 파일을 삭제한다.
cat /var/log/myapp/log.txt
파일 용량을 확인하는 명령어
1M가 넘어가면
old 디렉토리에 압축파일로 로그로테이트된 로그파일이 저장된다.
그리고 다시 log.txt의 용량을 확인하면 다시 낮아진 것을 확인할 수 있다.
압축 옵션을 지우면 어떻게 저장되는지 확인해봤다.
수동으로 실행
압축 없이 바로 저장된 것을 확인했다.
'네트워크 캠퍼스 > NHN클라우드-Jenkins' 카테고리의 다른 글
240725 인그레스 엔진엑스 설정하기, 프로메테우스와 그라파나로 모니터링하기, 그라파나로 메일 알림 보내기 (0) | 2024.07.25 |
---|---|
로그로테이트하기 (0) | 2024.07.23 |
크론탭으로 로깅 스크립트 실행하기 (0) | 2024.07.23 |
젠킨스 파이프라인에서 .sh 실행하기 (0) | 2024.07.23 |
240711 ~ 12 파이프라인으로 배포 고도화하기, 스크립트로 CI/CD 실습하기(롤백 트러블슈팅) (0) | 2024.07.12 |