Terraform을 통해 Datadog이 Slack에 보내는 알림을 관리합니다. "경고 설정이 엉망진창입니다."소멸시키다

안녕하세요, 저는 오프티안 주식회사의 호의리입니다.
이 기사는 OPTIMIND x Acompany Advent Calendar 2021의 12일째 보도다.
사적인 일이지만 12월 12일이 제 생일이에요❤️만약 당신이 나를 위해 이 일을 할 수 있다면 나는 매우 기쁠 것입니다.

本記事のスコープ


Terraform으로 Datadog Monitor를 만들어 슬랙에 경고를 알립니다.
간단히 보기 위해 Terraform을 로컬에서 실행합니다.

범위 밖

  • 모듈식 및 디렉토리 구조의 모범 사례
  • Datadog 대시보드의 코드 관리
  • Giithub Actions, Terraform Cloud, Atlantis의 GiitOps 활용
  • 참조문
    Pull Request의 명령으로 Terraform 실행!아틀란티스를 해봤어요.
    5인 이내 무료!Terraform Cloud 사용
  • 해결하고 싶은 과제


    매일 서비스를 사용하는 과정에서 경보와 모니터링의 변경이 발생한다.
    변경 내용 반복 후
    왜 이렇게 됐지?
    언제 누가 변했죠?
    ・같은 감시지만 임계값에 약간의 차이가 있습니까?
    이 감시가 대체 뭘까?
    나는 이런 일이 발생할 것이라고 생각한다.
    이럴 때 전임자가 없으면 쉽지 않아요.
    Terraform을 통한 데이터 dog 관리
    누가 언제 어떤 이유로 변경되었는지 이력을 남길 수 있다.
    엄밀히 말하면 테라form의 관리라기보다는git 등 버전 관리 도구의 하사품이니 개의치 마세요.
    또 코드 관리를 통해 이블라투가 새로운 서비스 감시를 여러 차례 변경하고 설정할 때의 오류 감소와 집중력 보존(SRE도 사람이기 때문에 생산성이 비교적 효과적)을 실현할 수 있도록 했다.

    단점(코드 관리가 필요 없는 경우도 있다.)


    나는 모든 팀과 서비스로 코드를 관리해야 한다고 생각하지 않는다.
    결점으로 삼다
    · 학습 비용이 GUI로 찰칵찰칵 하는 것보다 높다.
    ・공사시간이 필요합니다.
    그래서 특히 초반에 MVP를 조기에 출시해 시장의 반응을 보려고 하면 시간 낭비라고 생각한다.
    또한 AWS 등 서버 리소스와 달리 이후 코드 관리로 변경하는 것이 쉬우니 안심하십시오.
    OSS에서는 기존 설정을 Terraform 형식으로 import할 수도 있습니다.
    참고 자료:
    https://engineering.mercari.com/en/blog/entry/2019-12-09-122134/

    방법


    그럼 실제로 구축해 보세요.이번에는 다음과 같은 절차에 따라 진행할 것이다.
    1. SlackとDatadogを連携
    2. 阿部寛さんのHPをGETするDatadog Monitorを作成
    3. 動作確認
    
    ※ 매우 가벼워 아부관의 홈페이지를 이용했다.만약 이 보도를 참고하여 구축한다면, 아부관 씨에게 폐를 끼치지 마십시오.

    0. 도구 사용


    % terraform -v
    Terraform v1.0.11
    on darwin_amd64
    
    デバイス:mac OS Catalina
    Slack WorkSpace名:Optimind
    Slack チャンネル名:togari_book
    

    1. Slack과 Datadog 협력


    먼저 Datadog에서 Slack에 알리기 위해 Slack과 Datadog을 결합하십시오.
    Datadog→Integrations→Slack에서 "Connect Slack Accent"를 클릭합니다.

    Slack 과 Datadog 의 협력을 허용합니다.
    이 보도는 내가 속한 낙관적인 정신의 슬랙과 합작할 것이다.

    합작이 완료되면 이전에 없었던 Acount:Optimd를 추가합니다.
    Add Channel 을 클릭하여 알릴 채널을 추가합니다.본 보도 #togari북이 추가되었습니다.

    지금까지 슬라이드와 Datadog의 합작이 이루어졌습니다.

    2. 아부폭 홈페이지를 획득한 Datadog Monitor 만들기


    GET 아부폭의 HP, 응답 상태 코드를 만드는 데 200이면 문제가 없고, 200 이상이면 슬랙에 알려주는 합성 테스트.
    ※ 합성 테스트: 합성 테스트 혹은 외형 테스트로 불린다.어폐를 두려워하지 않는다면 GET 등의 반응을 확인하는 테스트이기 때문에 외형 테스트는 이해하기 쉽다.
    Datadog에서 Organization Settings에서 api로key(API Key), app_키를 만듭니다.
    https://docs.datadoghq.com/ja/account_management/api-app-keys/
    좋아하는 목록에 모니터가 있어요.tf를 만듭니다.오작동을 방지하기 위해서 나는 빈 디렉터리가 비교적 좋다고 생각한다.
    monitor.tf
    terraform {
      required_providers {
        datadog = {
          source = "DataDog/datadog"
        }
      }
    }
    
    # Configure the Datadog provider
    # api_key, app_keyを入れてください
    # 実際に運用するときは変数化しましょう
    provider "datadog" {
      api_key = "xxx"
      app_key = "yyy"
    }
    
    resource "datadog_synthetics_test" "access_check_to_abe_hiroshi" {
      name = "阿部寛さんのサイトにアクセス"
      type = "api"
      locations = ["aws:ap-northeast-1"]
      status          = "live"
      subtype         = "http"
      options_list {
        accept_self_signed   = false
        allow_insecure       = false
        follow_redirects     = false
        min_failure_duration = 0
        min_location_failed  = 1
        tick_every           = 900
      }
      request_definition {
        method = "GET"
        url    = "http://abehiroshi.la.coocan.jp/"
      }
    
      assertion {
        operator = "is"
        target   = "200"
        type     = "statusCode"
      }
    
    # スラックに通知するの場合は、@slack-[Workspace名]-[チャンネル名]となっております
    message = <<EOF
    {{#is_alert}} 障害を検知しました {{/is_alert}}
    {{^is_alert}} 復旧しました {{/is_alert}} 
    
    @slack-Optimind-togari_book
    EOF
    }
    
    
    monitor.tf가 존재하는 디렉터리에서 다음 명령을 실행합니다.
    % terraform init
    % terraform apply
    
    # terraform apply の前に terraform planを実行するとDry runができるため
    # 安全に既存リソースとの差分の確認が行えます。
    
    Datadog→Monitor를 통해 확인하면 Synthetic Test가 만들어졌는지 확인할 수 있습니다.
    (엄밀히 말하면 모니터와 Synthetic Test는 다르지만 이번엔 얘기하지 않겠다)

    3. 동작 확인


    이번에는 다음과 같은 방법으로 동작 확인을 진행한다.
    3.1. 間違ったURLにGETをするTestをアプライする。
    3.2. アラートがSlackに通知されることを確認する。
    

    3.1. 잘못된 URL에 GET의 Test를 제출합니다.


    GET가 불가능한 URL로 변경됩니다.
    주제 밖의 말은 차분에 문법을 덧붙이는 기능이 매우 보기 쉽다.
    monitor.tf
    terraform {
      required_providers {
        datadog = {
          source = "DataDog/datadog"
        }
      }
    }
    
    # Configure the Datadog provider
    # 実際に運用するときは変数化しましょう
    provider "datadog" {
      api_key = "xxx"
      app_key = "yyy"
    }
    
    resource "datadog_synthetics_test" "access_check_to_abe_hiroshi" {
      name = "阿部寛さんのサイトにアクセス"
      type = "api"
      locations = ["aws:ap-northeast-1"]
      status          = "live"
      subtype         = "http"
      options_list {
        accept_self_signed   = false
        allow_insecure       = false
        follow_redirects     = false
        min_failure_duration = 0
        min_location_failed  = 1
        tick_every           = 900
      }
      request_definition {
        method = "GET"
    +    url    = "http://404.abehiroshi.la.coocan.jp/"
    -    url    = "http://abehiroshi.la.coocan.jp/"
      }
    
      assertion {
        operator = "is"
        target   = "200"
        type     = "statusCode"
      }
    
    message = <<EOF
    {{#is_alert}} 障害を検知しました {{/is_alert}}
    {{^is_alert}} 復旧しました {{/is_alert}} 
    
    @slack-Optimind-togari_book
    EOF
    }
    
    

    3.2. 확인 경보가 슬랙에 통지되었습니다.


    슬랙 확인하고 경보 확인하고 알렸어.

    최후


    끝까지 읽어주셔서 감사합니다.
    실제로 운용하려면 이번에는 범위 밖의 GitOps를 사용해야 한다.그리고 tfstate를 어디에 두는지 등 논의해야 할 일이 많지만, 본 기사가 그 전 단계의 접촉이 된다면 기쁠 것 같습니다.
    혹시 모르는 게 있으면 메모 기다리세요.

    그럼 개발자 생활 즐겁게 하세요!


    주식회사는 엔지니어와 합작 파트너를 모집하고 있다.
    우리도 여가 면담을 매우 환영하니 언제든지 우리에게 알려주세요.
    "개방의식은 어떤 회사인가요?"시작
    현재 모집 중인 위치는여기.

    좋은 웹페이지 즐겨찾기