젠킨스 빌드 로그 관리 플러그인
결론부터 이야기하자면, 오래된 로그는 제때제때 삭제해야한다.
플러그인 추천
1. 오래된 빌드 삭제 정책 플러그인
Discard Old Build
This plugin enables detail configuration to discard old builds like using logfile size / status / days/ intervals days / build num / logfile regular expression.
plugins.jenkins.io
젠킨스를 사용하는 프로젝트라면 대부분 사용하고 있을 것 같다. 일반적으로 사용하는 정책은 두가지다.
- N일 이상 지난 빌드 ( days )
- M개 이상의 빌드 ( build num )
2. 빌드 로그 사이즈 체커 플러그인
build log file size checker
This plugin allows builds to be automatically terminated after the specified size of the log file has elapsed.
plugins.jenkins.io
진행되는 빌드 출력 파일( 로그 파일 )의 크기를 모니터링하면서, 로그파일이 미리 정해둔 크기보다 커지만 빌드를 중지하는 플러그인이다. 젠킨스 전체(글로벌) 설정도 가능하고, 개별 잡 설정도 가능하다.
게임회사에서 Jenkins를 사용해서 빌드를 하면서 빌드 소요 시간이 24시간이 넘어가기도 하고, 빌드 파일크기가 수십기가가 되는 일이 비일비재했다. 특히 행이 걸렸을 때 등 무한루프에 빠져서 무의미한 빌드를 계속할 때나 로그 파일이 너무 커지면 중지를 해야하는데, 애플리케이션 단에서 문제가 수정되는게 베스트지만 세상일이 다 원하는대로 되지는 않기때문에, 이런 플러그인을 사용했다.
플러그인 적용 팁
개별 잡마다 플러그인 설정하는게 귀찮을 때가 많다.
1.GroovyScriptConsole 사용하기
GitHub - samrocketman/jenkins-script-console-scripts: A repository of one-off script console scripts for Jenkins.
A repository of one-off script console scripts for Jenkins. - GitHub - samrocketman/jenkins-script-console-scripts: A repository of one-off script console scripts for Jenkins.
github.com
2.JenkinsRestAPI 사용하기
Python Jenkins — Python Jenkins 1.8.0 documentation
© Copyright 2010, Willow Garage Revision 70dc3e4f.
python-jenkins.readthedocs.io
my_job = server.get_job_config('cool-job')
server.reconfig_job('empty_copy', jenkins.RECONFIG_XML)
로그 용량 관리 주의하기
플러그인 주의하기(경험담)
(1) disk usage plugin
disk-usage
This plugin counts disk usage.
plugins.jenkins.io
정확히 이 플러그인이 맞는지는 잘 기억이 안난다.
평화로운 아침 8시 일어났더니, 젠킨스가 접속이 안된다는 제보가 들어와있었다. 급하게 출근을 하고 확인해보니, 젠킨스 마스터서버의 메모리가 100%를 치고 있었다. 시스템로그와 그라파나를 확인해보니 특정 시점부터 접근 실패 에러가 급증하고, 리소스 사용률이 올라가있었다. 해당 시점은 disk-usage(또는 이름을 찾지 못한 플러그인) 플러그인의 설치 및 적용 시점부터었다.
직접적인 원인은 플러그인 설치고, 구체적인 원인을 파헤쳐보니 삭제되지 않은 로그의 개수가 매우 많은데 용량도 컸던게 문제었다.
이때 취한 액션은 크게 두가지였다.
- 플러그인 관리
- disk-usage(또는 이름을 찾지 못한 플러그인) 플러그인 삭제
- 용량이 큰 로그 삭제 -> build log file size checker 플러그인 설치 및 로그 용량 제한
- 오래된 빌드 삭제 정책 -> discard old build 플러그인 설정
- 슬랙 알림 추가
- 그라파나 - 메모리/CPU 사용률이 특정 기준을 넘어갈 경우 슬랙 알림 전송
- 젠킨스 - 잡 추가 및 삭제가 잦았기 때문에, 주기적으로 도는 잡(cron job)을 생성해서 특정 잡이 기준을 충족하지 않으면(플러그인 사용 및 설정 등등) 슬랙 알림 전송
물론 오래된 빌드를 삭제하는게 늘 답이 되지는 않는다. 빌드 로그를 감사등의 이유로 보관이 필요하기도 하니까.
(2) statistics gatherer plugin
Statistics Gatherer
Captures Statistics related to Jenkins Builds, Build Step, SCM checkouts, Jobs and Queue and sends them where you want.
plugins.jenkins.io
Jenkins shared library 를 최적화하기 위해서 선택한 젠킨스 모니터링 플러그인이다.
젠킨스 사용량이 많지 않은 경우에는 문제가 되지 않았지만, 특정 시간에 젠킨스 사용이 몰릴 경우 젠킨스가 느려지는 현상이 발생했다.
위의 플러그인(disk-usage)을 설치했을 때 처럼, 그라파나로 확인해본 결과 네트워크 트래픽이 비정상적으로 올라가고 젠킨스가 느려지곤 했다.
우선 사용 빈도가 높은 젠킨스에서는 해당 플러그인을 제거하고, 사용 빈도가 낮은 젠킨스에서는 별다른 문제가 되지 않았기 때문에 플러그인을 지속해서 사용했다.
이 경험을 통해 꼭 바로 장애가 발생하지 않더라도, 이상현상이 보이면 주의해야 한다는걸 뼈져리게 느끼게 됐다. 단순히 알고 있는거랑 몸으로 한번 느낀거에는 큰 차이가 있었다.
위의 문제가 있었지만 수집하는 데이터를 통해 좋은 데이터를 수집해서, 많은 부분을 개선했기때문에 나쁜 플러그인은 아니다. 좋은 플러그인인데 잘 모르고 썼던게 문제였다. 추후 설정을 일부 변경하니 젠킨스 사용량이 많아도 문제가 없었다.