Monit 설치 & 활용

in #monit6 years ago (edited)

Monit 은 데몬은 모니터링하고 제어할수 있는 기특한 아이다.

SLA 계약을 충족하기 위해 서비스가 7x24x365 돌아가야 하는데 가장 문제가 되던걸 Monit으로 해결 한듯 싶다.

아 신난다. 이제 부담 없이 떠날 수 있을 것 같다.

Node의 경우 프로세스 데몬을 관리하는 PM2, forever 등아름다운 아이들이 많이 있었는데..
Tomcat 자바로 개발된 서비스가 허구하날 죽는다.
개발된 어플을 보면 정말 죽을수 밖에 없게 만들어져 있다. 몇 차례 수정을 했지만.. 아주 그냥 신나게 임계치를 찍는다. 이게 Report 용 서버는 상관이 없는데 실제 사용되는 서비의 경우에는 물건을 팔수 없는 상황에 오게 된다.
처음에는 Docker통해서 L4 로드벨런싱하고 각각의 데몬은 모니터링해서 응답이 3번 없으면 서비스를 리스타트 형태로 진행하려다가 그냥 Monit으로만 구성.

logo.png

Cent OS기준
1. Monit 설치
# yum install monit

만약 못찾을 시

# yum install epel-release  
2. Catalina.sh에 PID 얻어오기
# vi /opt/tomcat/bin/catalina.sh

add

JAVA_OPTS=""
CATALINA_PID=/yourlocation/tomcat.pid

위치 모르겠으면

# find / -name 파일명
3. shutdown.sh에 강제 종료 추가
# vi /yourlocation/shutdown.sh

add

exec "$PRGDIR"/"$EXECUTABLE" stop -force "$@"
4. 방화벽에서 2812 포트 추가

이건 각자 서비스 구성도에 따라서, 본인의 경우 os 의 방화벽과, 장비의 방화벽 2다 복합적으로 쓰기때문에

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT

2812 포트 열어주고
네트워크 장비 들어가서
해당포트 열어줌

5. 커스터마이즈 된 Tomcat 모니터링 추가
 # vi /etc/monit.d/tomcat
 check process [서비스이름] with pidfile "pid경로"
  start program = "startup.sh 경로" as uid root gid root
  stop program = "shutdown.sh 경로" as uid root gid root
  if failed port 8080 then alert // 8080 포트가 열지리 않을시 alert를 줌
  if failed
     port 8080
     protocol http
     request "/url/"
     for 3 cycles
   then restart
   alert [email protected]
  • 만약 http://localhost:8080/url/ 3번 접속실패하면 맨위 프로세스대로 재시작, 그리고 admin에게 메일 전송
    ** alert에 추가된 사용자에게 메일 발송, alert로 추가하지 않으면 monit.conf의 관리자 메일로만 메일 감
6. Monit.conf 파일 수정
# vi /etc/monit.conf

메일 서버 추가

set mailserver smtp.gmail.com port 587
        username "[email protected]" password "password"
        using tlsv1
        with timeout 30 seconds

Gmail의 경우
https://myaccount.google.com/lesssecureapps?pli=1
사이트 들어가 해당 계정
Allow less secure apps: ON
으로 변경 필수

  • 그외에 본인이 원하는 것들 사이클 주기라던지 기본적으로 제공하는 모니터링 기능들 켜고싶으면 주석 제거하고
    monit reload 해주면 끝
    ** 외부라던지 내부에서 접속하게 하고 싶으면 httpd 수정하면 가능
    *** use address 부분을 주석 처리해버리면 privite public ip 둘다 사용해서 접속가능
7. Monit service 시작

시작 순서,

  1. Tomcat 정지
  2. Tomcat 시작 ->PID 값 제대로 불러오는 확인
  3. Monit 시작
8. logging
# tail -f /var/log/monit &

뒤에 & 붙이면 실시간으로 다른짓 하면서 볼수 있음

9. 명령어
monit reload // 제일 편하다 서비스 재시작 할필요 없음, conf파일 변경 후나 데몬 추가했을때 
# monit reload
monit syntax check // 잘못된거 없나 체크
# monit -t
monit status // 상태 확인
# monit status
monit summary // 서머리
# monit summary

결과 정말 쉽게 재연됨.. ㅋㅋㅋㅋㅋ

[WIB May 15 01:00:59] warning  : 'Tomcat' failed protocol test [HTTP] at [localhost]:8080/url/ [TCP/IP] -- HTTP: Error receiving data -- Resource temporarily unavailable
[WIB May 15 10:58:48] warning  : 'Tomcat' failed protocol test [HTTP] at [localhost]:8080/url/ [TCP/IP] -- HTTP: Error receiving data -- Resource temporarily unavailable
[WIB May 15 10:59:28] warning  : 'Tomcat' failed protocol test [HTTP] at [localhost]:8080/url/ [TCP/IP] -- HTTP: Error receiving data -- Resource temporarily unavailable
[WIB May 15 11:00:08] error    : 'Tomcat' failed protocol test [HTTP] at [localhost]:8080/url/ [TCP/IP] -- HTTP: Error receiving data -- Resource temporarily unavailable
[WIB May 15 11:00:13] warning  : Cannot translate ‘HOSTNAME’ to FQDN name, please set a sender address using 'set mail-format' -- Name or service not known
[WIB May 15 11:00:20] info     : 'Tomcat' trying to restart
[WIB May 15 11:00:20] info     : 'Tomcat' stop: '/opt/tomcat/bin/shutdown.sh'
[WIB May 15 11:00:28] info     : 'Tomcat' start: '/opt/tomcat/bin/startup.sh'
[WIB May 15 11:00:29] error    : 'Tomcat' failed protocol test [DEFAULT] at [localhost]:8080 [TCP/IP] -- Connection refused
[WIB May 15 11:00:34] warning  : Cannot translate ‘HOSTNAME’ to FQDN name, please set a sender address using 'set mail-format' -- Name or service not known
[WIB May 15 11:01:11] info     : 'Tomcat' connection succeeded to [localhost]:8080/url/ [TCP/IP]
[WIB May 15 11:01:16] warning  : Cannot translate ‘HOSTNAME’ to FQDN name, please set a sender address using 'set mail-format' -- Name or service not known

최종적으로 3번 시도후에 서비스 재부팅이 되는것을 볼수 있다. 허나 서비스가 런칭 되는데 시간이 걸린다면 Delay를 줄 수도 있다. 이걸 조정 안하면 무한루프에 빠진다. 시스템이 올라오는데 시간이 걸리는데, 그동안 monit은 해당 서비스가 죽었다고 판단하여 인피니티 ㅋㄷㅋㄷ

기특하게 잘 돌아가고 있고, 3~5분이면 문제가 해결되고 메일로 통보까지 되니 쓸만하다.

MMonit은 일단 퇴근하고 담에 쓰는걸로.
참고로 오픈소스중엔 supervisor도 있다.

자 이제 떠나자 한국가고싶다.

추가 자료

Monit Documentation

Sort:  

주말 모니터링 결과,
10개의 host중에 1개의 서버 재부팅한 케이스 발견, 1분 30초만에 해결되고 정상화
해당 시점 cat 로그 분석 및 전달 -> 방어코드로 1차적 해결 -> 근데 왜 10개 서버 셋팅 어플리케이션 버젼이 다 똑같은데 요 서버만 맨날 발생하는걸까?

RHEL/CentOS 6 32-Bit

# wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm

RHEL/CentOS 6 64-Bit

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64383.21
ETH 3098.60
USDT 1.00
SBD 3.89