boto3에서 aws-sdk-go로 한 것만으로 CPU 사용률이 75%->10%가 되었다

2727 단어 5zabbixAWS

개요


  • 사내 ZABBIX 서버의 CPU 사용률이 높아졌기 때문에 최소 시간으로 해결하고 싶습니다.
  • CloudWatch에서 메트릭을 검색하는 스크립트가 python (boto3)으로 작성되었습니다
  • 우선이 스크립트를 go (aws-sdk-go)로 다시 씁니다

  • CPU 사용률이 75%에서 10%로 떨어졌습니다.


    결론



    간단한 스크립트가 병목 현상이라면 go로 다시 쓰면 좋겠다고 생각했습니다.

    이하 상세



    당사의 지표를 얻는 방법


  • 각 프로젝트에 ZABBIX 프록시를 설정하고 프록시를 통해 ZABBIX 서버가 각 메트릭을 검색하고 저장합니다.
  • 1에서 얻을 수없는 것은 ZABBIX 서버가 모든 프로젝트 CloudWatch api에서 가져옵니다

  • CloudWatch에서 지표 검색 정보


  • 단일 api에서 가져온 것은 인스턴스 1개 메트릭
  • api는 기본적으로 300초에 1회, CPU 사용률과 같은 얇게 원하는 것은 60초에 1회
  • RDS의 경우 인스턴스 당 약 10 개의 메트릭을 얻습니다
  • .
  • Python boto3로 작성되었습니다

  • go로 다시 쓸 때


  • 인수와 출력을 python 스크립트와 동일하게 유지하기 위해 ZABBIX 설정을 변경할 필요가 없으므로 최소한의 작업을 수행 할 수 있습니다
  • 최소한의 개발 환경은 갖추어진다 (외부 패키지의 버전 관리라든지)

  • 이하 go에 관한 일





    버전


    go
    1.6.2

    aws-sdk-go
    1.4.15


  • 디렉토리 구성은 다음과 같습니다
  • .
    ├── Gomfile
    ├── Makefile
    ├── README.md
    ├── aws.go
    ├── bin
    │   └── cloudwatch_metrics
    ├── main.go
    └── vendor
        ├── bin
        ├── github.com
        └── pkg
    
  • 패키지 관리는 간단하고 좋았으므로 htps : // 기주 b. 코 m / 마 t / m 사용
  • 한 번의 명령 실행으로 한 번만 api가 실행되기 때문에 서비스를 사용하는 것이라고 생각합니다
  • 함수는 총 4개
  • init
  • main
  • createCloudWatchService
  • getMetrics

  • config 파일을 지정해야했지만 1.4.15에서는 환경 변수 "AWS_CONFIG_FILE"에 파일 경로를 설정해야하며 서버 측 변경을 최소화하고 싶었으므로 명령 내에서 환경 변수를 설정하기로 결정
  • // サーバー側の変更を最小限にしたかったので、コマンド内で環境変数を設定
    if err := os.Setenv("AWS_CONFIG_FILE", credentialFilePath); err != nil {
        return nil, fmt.Errorf("AWS_CONFIG_FILE could not be set, %s", err)
    }
    
    // credential ファイルパスはここで設定できる
    creds := credentials.NewSharedCredentials(credentialFilePath, *profile)
    conf := aws.NewConfig().WithCredentials(creds)
    
    s, err := session.NewSessionWithOptions(
        session.Options{
            Config:            *conf,
            Profile:           *profile,
            SharedConfigState: session.SharedConfigEnable,
        },
    )
    
  • 나중에 공식 문서 샘플처럼 CloudWatch service 인스턴스를 만들고 Input 인스턴스를 만들고 GetMetricStatistics 만

  • 이상

    좋은 웹페이지 즐겨찾기