はじめに
cloudwatchからprmetheusにmetricsを取得させてオートスケーリングな監視を実現する。
この仕組みはとある現場でたまたまできたものなのだが、とにかく手がかからない。
テスト環境や仮組みのときとかにちょろっと使えそうなので記載しておく。
※本手順はprometheus構築済みの環境を想定しています。
設定
IAM準備
まず以下のようなポリシーでユーザを作成してアクセスキーとシークレットキーを用意しておく。
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"tag:GetResources",
"cloudwatch:GetMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics"
],
"Resource": "*"
}
]
}
awscliインストール
yum install python3-pip
pip3 install awscli
aws configure
AWS Access Key ID [None]: [アクセスキー]
AWS Secret Access Key [None]: [シークレットキー]
Default region name [None]: ap-northeast-1
Default output format [None]:
yaceバイナリ配備
cloudwatchからmetricsを取得するexpoterはいくつかあるが、今回はyaceを使用する
yum install wget
wget https://github.com/ivx/yet-another-cloudwatch-exporter/releases/download/v0.26.3-alpha/yet-another-cloudwatch-exporter_0.26.3-alpha_Linux_x86_64.tar.gz
tar -zxf yet-another-cloudwatch-exporter_0.26.3-alpha_Linux_x86_64.tar.gz
mv yace /usr/local/
コンフィグ作成
discovery:
exportedTagsOnMetrics:
ec2:
- Name
jobs:
- type: ec2
regions:
- ap-northeast-1
period: 60
length: 300
delay: 60
nilToZero: true
searchTags:
- key: Name
value: .*
metrics:
- name: CPUUtilization
statistics:
- Maximum
- name: DiskReadBytes
statistics:
- Maximum
- name: DiskWriteBytes
statistics:
- Maximum
- name: NetworkIn
statistics:
- Sum
- name: NetworkOut
statistics:
- Sum
yaceサービス化
[Unit]
Description=yace
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/yace -config.file /etc/prometheus/yace.conf
[Install]
WantedBy=multi-user.target
selinux停止
yaceをサービス化するときにselinuxが騒ぐのであらかじめ停止しておく
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
reboot
サービス設定
systemctl enable yace
systemctl start yace
ここまでで作業完了。
これ以降AWSコンソール側でインスタンスを作成すると自動で監視が開始されようになる。
停止した場合はmackerelのような退役作業は必要なく、自動で監視がとまる。
(私はmackerelさんが大好きですよ!)
メモリ監視について
cloudwatchはデフォルトではメモリを監視していない。
この為、メモリ監視を行う場合cloudwatachエージェントなどで出力させる必要がある
例えばCloudWatch モニタリングスクリプトでメモリ監視を出力させた場合はyace.confに以下のように設定を追加することでprometheus側で取得させることが可能。
(ただしこれはインスタンス追加の度に設定が必要になる)
static:
- namespace: System/Linux
name: System/Linux
regions:
- ap-northeast-1
dimensions:
- name: InstanceId
value: [インスタンスID]
metrics:
- name: MemoryUtilization
statistics:
- Maximum
period: 600
length: 600
なお、CloudWatch モニタリングスクリプトは現在非推奨なので特別な理由がなければ使用しないでください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-scripts-intro.html
あとがき
今回スクリーンショットが用意できなかったので地味ですがいい感じにgrafana使っていると結構な便利感あります。
オートスケーリングといってもなんだかんだ手のかかるものの多い中でたまたまこんな仕組みができたので共有したいと思いました。
なお、今回紹介したyaceはEC2以外のサービスにも対応している為、ELBやRDSでもまったく同じことができます。
ひょっとしたらそちらで使用したほうが需要が多いかもしれないです。