CloudWatch 사용자 지정 지표에 sidekiq 및 unicorn 프로세스 모니터링 추가

소개



현재 작업중인 프로젝트는 EC2 인스턴스를 모니터링하는 데 CloudWatch를 사용합니다.
이번에는 sidekiq나 unicorn 등의 프로세스도 CloudWatch에서 감시할 수 있도록 했으므로 정리하겠습니다.

AWS에서 사전 준비



이번에는 aws cli를 사용하여 CloudWatch에 사용자 지정 지표로 프로세스 수를 보냅니다.
IAM 역할을 생성하고 EC2 인스턴스에 정책을 연결하는 등의 사전 준비에 대해서는 다음 문서를 참조하십시오.
Run Command에서 여러 EC2 인스턴스의 사용자 지정 메트릭을 일괄 설정 | Developers.IO

프로세스 모니터링 쉘 스크립트



SSM을 사용하지 않는다면 아래 스크립트를 서버에 넣고 cron을 설정하는 것만으로도 괜찮습니다.

주로 이쪽의 기사를 참고로 했습니다
CloudWatch에서 EC2의 프로세스 모니터링 - 합작회사 조토
#!/bin/bash

NAMESPACE="Ec2Process"
UNIT="Count"
REGION=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'`
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
DIMENSIONS="InstanceId=$INSTANCE_ID"

# 監視対象プロセスリスト
PROCESS_LIST=(sidekiq unicorn)

PUT_COMMAND="aws cloudwatch put-metric-data"

# 監視対象プロセス毎にプロセス数をカウントしてCloudWatchに格納する
for PROCESS in ${PROCESS_LIST[@]}; do
  COUNT=`ps aux | grep $PROCESS | grep -v grep | wc -l`
  echo $PROCESS:$COUNT
  $PUT_COMMAND --metric-name $PROCESS --namespace $NAMESPACE --dimensions $DIMENSIONS --value $COUNT --unit $UNIT --region $REGION
done

이번에는 서버에 로그인하여 작업하는 것이 번거롭기 때문에 SSM을 사용하여 cron을 설정합니다.

AWS Systems Manager(SSM)를 사용하여 cron 구성



AWS Systems Manager > 명령 실행 > AWS-RunShellScript를 선택하고 명령 매개변수에 다음을 붙여넣습니다.
# ディレクトリ作成
mkdir -p /opt/cw-monitoring

# ユーザーがいなければ作成
if ! id cw-mon >/dev/null 2>&1; then
  useradd cw-mon
fi

# メモリ使用率カスタムメトリクス送信スクリプト作成
tee /opt/cw-monitoring/processCounter.sh << "EOF" > /dev/null
#!/bin/bash

NAMESPACE="Ec2Process"
UNIT="Count"
REGION=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'`
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
DIMENSIONS="InstanceId=$INSTANCE_ID"

# 監視対象プロセスリスト
PROCESS_LIST=(sidekiq unicorn)

PUT_COMMAND="aws cloudwatch put-metric-data"

# 監視対象プロセス毎にプロセス数をカウントしてCloudWatchに格納する
for PROCESS in ${PROCESS_LIST[@]}; do
  COUNT=`ps aux | grep $PROCESS | grep -v grep | wc -l`
  echo $PROCESS:$COUNT
  $PUT_COMMAND --metric-name $PROCESS --namespace $NAMESPACE --dimensions $DIMENSIONS --value $COUNT --unit $UNIT --region $REGION
done
EOF

# オーナー、グループ、パーミッション設定
chown -R cw-mon:cw-mon /opt/cw-monitoring
chmod 744 /opt/cw-monitoring/processCounter.sh

# cron設定
tee /var/spool/cron/cw-mon << EOF > /dev/null
*/1 * * * * /opt/cw-monitoring/processCounter.sh
EOF

위 스크립트에서는 다음 작업을 수행합니다.
  • 스크립트를 실행하기위한 사용자 만들기
  • 스크립트를 저장할 디렉토리 만들기
  • 스크립트 만들기
  • cron 설정

  • 앞으로 시작하려는 프로세스가 늘어나더라도 PROCESS_LIST에 추가하면 괜찮습니다

    '실행'을 잡고 CloudWatch> 지표를 보러 가면,

    사용자 지정 메트릭에 "Ec2Process"가 추가되어 각 인스턴스에서 값이 검색되는지 확인할 수 있습니다



    그리고는 임계값을 설정해 Alerm 되도록(듯이) 하면 사활 감시할 수 있네요.

    이상

    참고


  • Run Command에서 여러 EC2 인스턴스의 사용자 지정 메트릭을 일괄 설정 | Developers.IO
  • CloudWatch에서 EC2의 프로세스 모니터링 - 합작회사 조토
  • AWS로 구축한 환경에 흔한 쉘 스크립트들 정리 | Developers.IO
  • 좋은 가감 기억하자. command > /dev/null 2>&1의 의미 - Qiita
  • bash - Find out if user name exists - Super User
  • bash - Only mkdir if it does not exist - Stack Overflow
  • 좋은 웹페이지 즐겨찾기