post Image
boto3からaws-sdk-goにしただけでCPU使用率が75%->10%になった

概要

  • 社内の ZABBIX server の CPU 使用率が高くなってきたので、最小工数で解決したい
  • CloudWatch からメトリクスを取得するスクリプトが python(boto3) で書かれてる
  • とりあえずこのスクリプトを go(aws-sdk-go) に書き換える

CPU 使用率が 75% から 10% に下がった。
chart3.png

結論

簡単なスクリプトがボトルネックになってそうなら、go で書き換えれば良いと思いました。

以下詳細 

弊社のメトリクスの取得方法

  1. プロジェクト毎に ZABBIX proxy を立て、proxy 経由で ZABBIX server が各メトリクスを取得・保存
    zabbix構成図改.png

  2. 1 で取得できないものは、ZABBIX server が全プロジェクト分 CloudWatch api で取得

CloudWatch でのメトリクス取得について

  • 1回の api で取得しているのは、1インスタンスの 1メトリック
  • api は基本的に 300秒に 1回、CPU 使用率のような細くほしいものは 60秒に 1回
  • RDS であれば、1インスタンスあたり10個ほどのメトリクスを取得している
  • Python boto3 で書かれていた

go で書き換えるに当たって

  • 最小工数でいくために ZABBIX の設定を変えなくても済むよう、引数と出力を python スクリプトと同じにする
  • 最低限の開発環境は整える(外部パッケージのバージョン管理とか)

以下 go に関すること

version
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
  • パッケージ管理はシンプルなもので良かったので、https://github.com/mattn/gom を使用
  • 1 回のコマンド実行で 1 度しか api が実行されないので、service の使い回しとかも考えない
  • 関数は全部で 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 するだけ

以上


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。