Grafana Mimirを使いメトリクスをS3に保存する
要件
Grafana Mimirを使いメトリクスをS3に保存する
タスク
helmを使いGrafana Mimirをデプロイする
Grafana Mimirを使いメトリクスをS3 に保存する
参考記事
▼まずはドキュメント!!
▼こっちのドキュメントも本番運用にする時用に確認
▼Mimirとは
▼Mimirのセットアップ
▼これもMimirの実装方法 良さそう
https://www.youtube.com/watch?v=rZNNUWxpdTQ
▼Mimirの良いところ
▼ 数少ない日本語の記事 Mimirの記事ありがたい、、
▼helmの前にまずはdockerでローカルでチャレンジ
▼Mimir vs VictoriaMetrics
学べること
Grafana Mimirについて
S3にメトリクスを保存する
安くメトリクスを保存する方法
helmの使い方
ヒント
▼AWS CLIを使用してS3のエンドポイントを確認
aws s3api get-bucket-location --bucket <バケット名>
{ "LocationConstraint": "us-west-2" }
この場合、エンドポイントは s3.us-west-2.amazonaws.com です。
▼overrideしたhelmの設定 ( 自分はこれで動いた)
serviceAccount:
name: sample-sa
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::xxxxxxxxxxxx:role/loki_s3_role"
mimir:
structuredConfig:
common:
storage:
backend: s3
s3:
region: ap-northeast-1
bucket_name: samplle-metrics-bucket
endpoint: s3.ap-northeast-1.amazonaws.com
minio:
enabled: false
ruler:
enabled: false
alertmanager:
enabled: false
手順(EKS内にhelmを使ってMimirを立ち上げる)
(1)helmでMimirを立ち上げる
ちなみにhelmでMimirを立ち上げても、最初は以下のようになると思います。この状態を解決するために2つのことを行います。
(2)EKS内のPodがAWSのリソースであるEBSを操作するためのRBACの設定を行う
oidc:
eksctl utils associate-iam-oidc-provider --region=ap-northeast-1 --cluster=sample-cluster --approve
ebs-setting:
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster sample-cluster\
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EBS_CSI_DriverRole
addon:
eksctl create addon --name aws-ebs-csi-driver --cluster sample-cluster --service-account-role-arn arn:aws:iam::xxxxxxxxxxxx:role/AmazonEKS_EBS_CSI_DriverRole --force
※上記はMakefileです。
上記の設定を行うことでStatusがPendingだったものがRunningになります
ちなみにまだエラーが出ているのは、Mimirで作られたPodからS3にアクセスる権限がないのでエラーが出ます。以下の画像をご参照ください
(3)Mimir関連のpodからS3にアクセスできるようにな設定を行う
helmで以下のようなoverrideするyamlを用意する
rbac:
create: false
serviceAccount:
name: mimir-sa
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::xxxxxxxxxxxx:role/mimir_s3_role"
mimir:
structuredConfig:
common:
storage:
backend: s3
s3:
region: ap-northeast-1
bucket_name: metrics-bucket-from-prometheus
endpoint: s3.ap-northeast-1.amazonaws.com
minio:
enabled: false
ruler:
enabled: false
alertmanager:
enabled: false
以下のコマンドでkubernetesのServiceAccountとAWSのIAMを紐付ける
mimir-setting:
eksctl create iamserviceaccount \
--name mimir-sa \
--cluster sample-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess \
--role-name mimir_s3_role \
--approve
podに認証情報が入るのがpodが起動されるタイミングなので、helmでMimerを一度uninstallして、起動しなおせば以下のように表示されるます!
ハマりポイント
EKS内にhelmでmimirを立ち上げる際に、内部的にEBSも使われているので以下の設定も必要。EKSがEBSを操作できるような設定。メトリクスの保存はS3でも、EBSの設定も必要なのね、、
oidc:
eksctl utils associate-iam-oidc-provider --region=ap-northeast-1 --test-sample-cluster --approve
ebs-setting:
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster test-sample-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EBS_CSI_DriverRole
addon:
eksctl create addon --name aws-ebs-csi-driver --cluster test-sample-cluster --service-account-role-arn arn:aws:iam::xxxxxxxxxxxx:role/AmazonEKS_EBS_CSI_DriverRole --force
▼podで以下のようなエラーがでいるならRBAC
Unable to successfully connect to configured object storage (will retry)" err="blocks storage: unable to successfully send a request to object storage: Access Denied"
▼RBACで詰まったら、この記事で復習してみましょう!