【초보자】Amazon CloudWatch Synthetics 사용해보기

목적


  • 요 전날 AWS 도쿄 리전의 장해가 있어, 「감시는 AWS 도쿄 리전의 밖에서 하는 것이 좋을지도…

  • Amazon CloudWatch Synthetics란(자신 이해)


  • 외부로부터 Web 서버등의 상태 감시를 할 수 있는 서비스.
  • 감시의 설정(canary)을 만들면, 실체로서는 Lambda Function이 작성된다.
  • 선인의 기사 「 Amazon CloudWatch Synthetics를 사용해 보았습니다. 」나 「 CloudWatch Synthetics로 온프레미스 프록시 서버를 통해 모니터링 」를 읽고 , 이미지를 잡고 나서 실기로 확인한다.
  • 감시 대상의 WEB 서버가 SrcIP 제한을 걸고 있는 경우를 상정하여 고정 IP로 액세스할 수 있도록 VPC Lambda + Nat Gateway에서의 검증 환경 설정으로 한다.

  • 했던 일


  • 모니터링 할 웹 서버 생성 (일반 EC2 인스턴스/nginx)
  • 모니터링되는 웹 서버와는 별도의 VPC에서 NAT 게이트웨이에서 인터넷을 빠져 나갈 수있는 서브넷을 만듭니다.
  • CloudWatch Synthetics 모니터링 스크립트 (canary) 생성 (위의 서브넷을 lambda의 작동 위치로 지정)
  • 고정 SrcIP (NAT 게이트웨이를 통해)에서 모니터링 대상 웹 서버의 상태를 모니터링 할 수 있는지 확인
  • 웹 서버에서 연결이 끊어지면 오류를 감지 할 수 있는지 확인합니다.

    구성도





    절차



    사전 준비


  • 구성도와 같이 다음 환경을 작성한다.
  • VPC1/Subnet1: 웹 서버(EC2 인스턴스/nginx)를 시작하기 위한 Subnet. (Public Subnet)
  • VPC2/Subnet2: canary(감시 스크립트)의 실체가 되는 Lambda를 기동시키기 위한 Subnet. Nat Gateway에서 인터넷에 액세스할 수 있습니다.


  • 모니터링 대상 웹 서버 만들기


  • 감시 대상의 WEB 서버(nginx)를 작성해, EIP를 부여해 인터넷 공개한다.
  • index.html의 내용은 다음과 같다.

  • index.html
    - <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
        <head>
            <title>Test Page for the Nginx HTTP Server on Amazon Linux</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        </head>
        <body>
            <h1>Synthticsからアクセスされるページ</h1>
            <p>
            <a href="mikan.html">mikan: みかんの説明ページ</a>
            </p>
            <p>
            <a href="ringo.html">ringo: りんごの説明ページ</a>
            </p>
        </body>
    </html
    



    CloudWatch Synthetics에 대한 모니터링 스크립트(canary) 생성


  • CloudWatch - Synthetics - Canary 만들기를 선택하고 모니터링 스크립트(canary)를 만듭니다.
  • 설계도 사용 (초보자이므로)
  • 청사진 : 링크 끊기 검사기
  • 응용 프로그램 또는 끝점 URL : 모니터링되는 웹 서버의 EIP
  • VPC 설정 : 만든 VPC2/Subnet2를 지정합니다.





  • 동작 확인



    정상시 동작


  • 모니터링 액세스가 성공하면 성공으로 계산되고 스크린 샷 등이 획득됩니다. (내 환경에서는 일본어가 깨져 있지만 ...)


  • 웹 서버 측의 액세스 로그에는 캐나리의 ARN이 저장됩니다.

  • /var/log/nginx/access.log
    x.x.x.x - - [12/May/2020:16:03:22 +0000] "GET /mikan.html HTTP/1.1" 404 3665
     "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Hea
    dlessChrome/75.0.3738.0 Safari/537.36 CloudWatchSynthetics/arn:aws:synthetics:ap
    -northeast-1:xxxxxxxxxxxxxx:canary:mksamba-canary" "-"
    

    링크 끊김 발생시의 동작


  • WEB 서버에서, index.html내에서 링크처로서 지정하고 있는 ringo.html를 삭제 후, 다시 감시 액세스를 실시하면 에러가 된다. ringo.html이 404 Not Found가되어 오류가 발생했음을 나타냅니다.



  • 소감


  • 감시 대상과는 다른 리전에서 기동하면 리전 장애의 영향을 받지 않고 감시를 할 수 있을 것.
  • 간단한 감시는 곧 할 수 있을 것 같지만, 감시 항목을 제대로 정해 동작시키기 위해서는, 생성되는 Lambda Function(node.js)의 내용 이해나 커스터마이즈가 필요할지도….
  • 좋은 웹페이지 즐겨찾기