Top Banner
Prometheus on AWS
19

Prometheus on AWS

Jan 07, 2017

Download

Technology

Mitsuhiro Tanda
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Prometheus on AWS

Prometheus on AWS

Page 2: Prometheus on AWS

自己紹介• 反田 光洋• グリー株式会社 インフラストラクチャ部• AWS で Prometheus を運用 ( 約 1 年 )• Grafana committer• @mtanda

Page 3: Prometheus on AWS

Prometheus の特徴• multi-dimensional data model• flexible query language• pull model over HTTP• service discovery• Prometheus values reliability

Page 4: Prometheus on AWS

AWS モニタリングの課題• インスタンスのライフサイクルが短い• Auto Scaling でインスタンスが増減する• AZ の違いなどにより負荷傾向が異なる

Page 5: Prometheus on AWS

AWS に適している点• multi-dimensional data model & flexible

query language– Role や AZ ごとにメトリクスを集計して比較– 負荷傾向が異なるインスタンスを検出

• pull model over HTTP & service discovery– Role などを条件にモニタリング対象を設定– モニタリング対象増加への対応が容易

Page 6: Prometheus on AWS

multi-dimensional data model

• インスタンスのメタデータを label に記録key valueinstance_id i-1234abcdinstance_type ec2, rds, elasticache, elb, …instance_model t2.large, m4.large, c4.large,

r3.large, …region ap-northeast-1, us-east-1, …availability_zone ap-northeast-1a, ap-northeast-1c,

…role (instance tag) web, db, …environment (instance tag) production, staging, …

Page 7: Prometheus on AWS

avg(cpu) by (availability_zone)

Page 8: Prometheus on AWS

cpu{role="web"}

Page 9: Prometheus on AWS

avg(cpu) by (role)

Page 10: Prometheus on AWS

Service Discovery

• モニタリング対象を自動検知する機能• 環境にあわせて使用する SD を選択する– ec2_sd, consul_sd, kubernetes_sd,

file_sd

• (Pull だからこそ必要な機能 )

Page 11: Prometheus on AWS

ec2_sd• ec2:DescribeInstances API でインスタンスを検知• AZ やタグなどから柔軟にモニタリング対象を設定• web Role のみをモニタリング対象とする例- job_name: 'job_name' ec2_sd_configs: - region: ap-northeast-1 port: 9100 relabel_configs: - source_labels: [__meta_ec2_tag_Role] regex: web.* action: keep

Page 12: Prometheus on AWS

Prometheus の設定方法

Prometheus(for web)

Prometheus(for db)

Role=web Role=db

pack

upload

deploy

edit

このロゴは Jenkins project (https://jenkins.io/) に帰属します。

Page 13: Prometheus on AWS

CloudWatch 対応• CloudWatch のメトリクスも Prometheus に取り込んでいる• cloudwatch_exporter は Java に依存しているので使わない• aws-sdk-go を使って exporter を作成• メトリクスの timestamp 記録が問題

– CloudWatch のメトリクス送出は数分単位で遅れる– timestamp を記録しようとすると、古いメトリクスとして扱われ、

Prometheus に取り込めないことがある– 現状は妥協して、一部メトリクスは timestamp を記録していない

Page 14: Prometheus on AWS

運用時の構成• インスタンスは t2.micro – t2.medium• EBS は gp2 で 50-100GB• 50-100 台程度の規模なら、 t2.medium で十分• t2.small 以上が推奨

– t2.micro ではメモリ不足– storage.local.memory-chunks を調整する必要あり

• 突発的な負荷はバーストで対応– T2 インスタンスのバースト– EBS(gp2) のバースト

Page 15: Prometheus on AWS

ディスク書き込み負荷

Page 16: Prometheus on AWS

ディスク使用量• モニタリング対象 1 台あたりで計算• 1 台あたり 150 – 300 メトリクス• メトリクスの scrape 間隔は 15 秒• 1 ヶ月のディスク消費は約 200MB

Page 17: Prometheus on AWS

メトリクスの長期保存• rrdtool のようにデータをサマライズする機能はない• メトリクスの保持期間に応じてデータサイズは増加• デフォルトでは 15 日経過時点で削除される• メトリクスの長期保存は想定されていない• 長期保存する場合

– Remote Storage (Graphite など ) を利用する– 長期保存用の Prometheus に、サマライズして保存する

Page 18: Prometheus on AWS

1 年間運用して• 運用について

– 負荷は安定している– 運用の手間はほとんどない

• バージョンアップ時の対応– 新しい書式に対応する必要が何度かあった– 1.0 までは非互換な変更がある

• 新規要件への対応– 必要に応じて exporter を作成– 強力なクエリのおかげで、 exporter 自体はシンプルに作れた