terraform-provider-mackerel で監視を設定する Scrap
記事化したので Close しました
Fargateのサービス環境に監視を入れていく
やっていったことの情報源を書く
- terraform 1.0.4 -> 1.0.8
- terraform-provider-aws 3.52.0 -> 3.62.0
- terraform-provider-mackerel 0.0.3 -> 0.0.5
terraform-provider-mackerel で設定
Service・Role
Metadata
これ何だろう?と思ったけどこういうことか。使いどころはわかっていない。。
mkr でホストにシェルで Service:Role を一括設定する
# SES をこんな感じで設定した
mkr update --roleFullname ${SERVICE}:Mail $(mkr hosts | jq -r '.[] | select(.displayName=="SES") | .id')
# Redis はこんな感じ
mkr update --roleFullname ${SERVICE}:${ROLE} $(mkr hosts | jq -r '.[] | select(.name | startswith("production-hoge-redis-cluster-001")) | .id')
Channel・Alert(Group)
ここで1つリクエストを上げた
Monitor
Web外形監視 をいくつか設定
Notification Group
Channel の Slack 、毎回 replace になるのは・・・なんだろう?(バグ?)
issue を上げた
その後、Slack コミュニティにコメントがあり、API 経由での update ができないので channel リソースは再作成になってしまう
とのこと・・・
tfstate のディレクトリを別にして id を variable で参照するようにして「毎回replace」を回避
一度はなるほど、と思ったが、 email ではそう(毎回 replace)はならない・・・という疑問を投げておいた・・・
Fargate の Container を監視する(エージェントを入れる)
このあたりもありがたい
S3 から設定ファイルを参照するときの IAM ポリシー例(雑...)
{
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": "arn:aws:s3:::${var.config_bucket_name}/*"
}
],
"Version": "2012-10-17"
}
プラグインの利用
メトリックプラグイン、チェックプラグインが利用可能です。また、mackerel-container-agentでは 公式プラグインを同梱したDockerイメージ も公開しています。
plugins
> はlatest
に、vX.Y.Z-plugins
はvX.Y.Z
にプラグインを同梱したイメージとなります。
サイズだいたい倍(使う)
タスク定義に追加するコンテナ定義例 (ecspresso 前提)
{
"name": "mackerel-container-agent",
"image":"{{ must_env `MACKEREL_ECR_IMAGE_REPO_TAG` }}",
"memoryReservation": 128,
"essential": false,
"environment": [
{
"name": "MACKEREL_CONTAINER_PLATFORM",
"value": "fargate"
},
{
"name": "MACKEREL_AGENT_CONFIG",
"value": "s3://hoge-config-store/development/mackerel.yaml"
},
{
"name": "MACKEREL_AGENT_CONFIG_POLLING_DURATION_MINUTES",
"value": "5"
}
],
"secrets": [
{
"name": "MACKEREL_APIKEY",
"valueFrom": "{{ must_env `PARAM_STORE_PREFIX`}}{{`MACKEREL_API_KEY`}}"
}
]
}
ecspresso v1.6.0 対応の意図で CircleCI の Orb は v0.0.15 を使用
nginx と php-fpm を /nginx_status と /phpfpm_status エンドポイントでメトリック採取に成功
だがしかし、 30 メトリックを越えると +1 マイクロホストになってしまうので php-fpm の設定を無念のコメントアウト。
Monitor ふたたび
AWSインテグレーションで自動認識されたホスト(?)に Monitor (アラート閾値) 設定するときは custom.${Mackerel上でのメトリック名}
でホストメトリック監視を指定する
RDS
たとえば
- CPU使用率 : rds.cpu.used
- ディスク空き容量 : rds.aurora.storage.free
- DB接続数 : rds.database_connections.used
Redis
たとえば
- CPU使用率 : elasticache.cpu.used
- メモリ使用率 : elasticache.redis.memory_percentage.database
- Swap Usage : elasticache.swap.usage
参考情報
ECS
たとえば
- CPU使用率 : ecs.service_cpu_utilization.
#
.average - メモリ使用率 : ecs.service_memory_utilization.
#
.average - 稼働タスク数 : ecs.running_task.
#
.count
( #
には、ECSのサービス名が入る)
S3
メトリックは取るがとりあえずアラートはいいかな
ALB
たとえば
- 4xx エラー(多すぎだったら不正アクセス試行とか) : alb.httpcode_count.alb_4xx
- 5xx エラー(多すぎだったらどこかにバグか障害) : alb.httpcode_count.alb_5xx
(serverless-stns の Monitor)
Heroku の監視
↓の通りでいける。
スタンダードホスト扱いの料金
公式プラグインをインストールする方法は今のところなさそう(yum,debコマンドでは Dyno にインストールできない)