Datadog 및 WayScript를 사용한 DevOps 수정 사례 3가지

규모가 끊임없이 커지는 소프트웨어 회사로서 우리는 세계 각지에서 예측할 수 없는 플랫폼 사용의 절정기를 겪었다.이런 파동성은 실례 확장과 다른 핵심 개발 인프라의 복잡성을 증가시켰다.만약 우리의 실례가 정상적으로 확장되지 않는다면, 우리 사용자들은 성능이 비교적 나쁜 제품을 체험할 것이다.만약 우리의 서버가 너무 크다면 그것은 돈을 낭비하는 것이다.
Datadog과의 연계로 AWS 인프라에 대한 새로운 발견과 긴급한 견해를 갖게 되었습니다.또한 Datadog 이벤트 모니터링에 내장된 경고 기능을 통해 인프라 문제를 모니터링, 조사 및 최종적으로 해결할 수 있습니다.그러나 Datadog이 주의를 환기시키더라도 AWS infra를 수동으로 관리해야 합니다.Datadog 경고를 활용하여 infra의 과제를 자동화하는 플랫폼을 구축하는 것이 목표입니다.
...

WayScript를 사용한 Datadog 수정 사례


1) AWS EC2 인스턴스 관리 -


소개 단락에서 나는 이 용례를 피했다.주로 Datadog alerting 및 WayScript를 통해 사용자는 특정 인스턴스의 높은 또는 낮은 사용 수준에 대한 경고를 설정할 수 있습니다.이를 위해users quickly set up a Datadog trigger on WayScript.

Datadog 트리거를 설정하면 WayScript에서 셸 스크립트, Python, JavaScript, Java 또는 SQL 쿼리를 직접 실행할 수 있습니다.이 예에서, 우리는boto3python 라이브러리를 사용하여 각종 서로 다른 EC2 복구 함수 (와 ReadMe 를 자동화한다.
예를 들어, 인스턴스에 높은 트래픽 로드가 있다는 경고를 받으면 다음 코드 유형을 사용하여 시스템에 다른 EC2 인스턴스를 추가하는 스크립트를 자동으로 실행할 수 있습니다.
import boto3

def turn_instance_on( instance_id ):
    ec2 = build_client()
    current_state = check_instance_state( instance_id )
    if current_state == 'not running':
        try:
            response = ec2.start_instances(InstanceIds=[instance_id], DryRun=False)
            new_state = response.get('StartInstances')[0].get('CurrentState').get('Name')
            return 'Success'
        except ClientError as response:
            return response
    else:
        return 'Instance Already Running'
같은 유형의 논리를 실행해서 저량의 실례를 닫을 수 있습니다.
Full Example Here.

...


2) 관리자가 텍스트 메시지를 확인한 후 Circleci를 사용하여 이전 배치로 롤백합니다.


복구 도구를 구축할 때 우리는'인간 회로'의 상호작용을 혼합하는 자동화 작업이 필요하다는 것을 발견했다.Datadog 경고에 따라 운영 서버를 이전 버전으로 롤백하는 프로그램을 설계하고자 합니다.또한 경보가 우리의 백엔드에 도착하면 우리는 문자메시지를 생성하여 백엔드 개발팀의 지도자의 비준을 받기를 희망한다.문자 메시지의 승인을 받으면 스크롤은 CircleCI을 통해 시작됩니다.

그러면 이것은 어떻게 일합니까?먼저 Datadog에 배포된Rollbar 이벤트 보고서와 관련된 이벤트 경고를 설치했습니다.만약 이 사건이 abad_deploy로 표시된다면 우리의 트리거는 촉발될 것이다.다음으로python 스크립트는 이벤트를 설명하고 롤백이 필요한지 확인합니다.
event = variables['Event']
title = event.get('Title')
try:
    if 'bad_deploy' in title:
        status = 'bad'
        variables['status'] = status
    else:
        status = 'good'
except:
    variables['status'] = 'good'
롤백이 필요한 경우 Twilio API를 사용하여 백엔드 개발자에게 텍스트 메시지를 보냅니다.개발자가 "승인"에 응답하면,Circleci는 생산 시스템의 이전 작업 버전으로 되돌아갈 것입니다.
Full Example Here.

...


3) 사라진 데이터베이스 조회를 중지하고 문제를 기록한다.


우리가 끊임없이 확장됨에 따라, 우리는 예상치 못한 데이터베이스 문제, 예를 들어 장시간 운행하는 조회로 인한 잠금 해제에 부딪혔다.이런 유형의 이벤트는 우리 사용자군의 성능을 현저하게 떨어뜨릴 수 있다.따라서, 우리는 잠금 해제 과정을 기록하는 과정을 구축하기를 원하지만, 최종적으로 자동적으로 조회를 중지하기를 원한다. (사용자 범위 내의 강등보다 낫다고 우리는 확신한다.)

이를 위해 데이터베이스에 높은 CPU 사용률(다운그레이드 상태) 또는 높은 메모리 사용률에 대한 Datadog 경고를 설정합니다.이 경고가 WayScript를 클릭하면 여러 프로세스가 시작됩니다.
처음에, 우리는 파이톤과 SQL을 사용하여 데이터베이스 (AWS의 RDS) 에서 현재 실행 중인 모든 조회를 가져옵니다.첫 번째 과정은 조회 정보를 실행하는 데이터 프레임워크를 구축하여 하나의 파일에 저장한 다음에 이 파일을 전자 우편으로 백엔드 개발팀에 보냅니다.두 번째 절차는 예상 시간 한도값을 초과한 조회를 찾습니다.이러한 질의는 RDS ID에 따라 종료되는 세 번째 프로세스로 전달됩니다.
실행 중인 질의의 예 끌어오기:
import boto3
from botocore.exceptions import ClientError
def build_client():
    ec2 = boto3.client(
    'rds',
    region_name = 'us-east-2',
    aws_access_key_id=context['key_id'], #stored in .secrets
    aws_secret_access_key=context['key_secret'] # stored in .secrets
)
    return rds
rds = build_client()
response = rds.execute_statement(
    continueAfterTimeout=False,
    database='database-1',
    includeResultMetadata=False,
    resourceArn='aws:rds:us-east-<DB_ID>',
    schema='string',
    secretArn='string',
    sql='string',
    transactionId='string'
)
Full Example Here.

...


Datadog 경고를 활용하여 infra의 과제를 자동화하는 플랫폼을 구축하는 것이 목표입니다.
WayScript 사용자가 Datadog 모니터와 이벤트 트리거 프로세스를 통해 인프라 시설의 수요를 자동으로 만족시킬 수 있도록 한다.WayScript는 셸, Python 또는 JavaScript로 스크립트를 실행하고 EC2, Circleci, SQL Server 등 외부 서비스와 연결하는 가상 개발 환경입니다.

좋은 웹페이지 즐겨찾기