見出し画像

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つのことを行います。

helmでMimirを立ち上げた時の状態

(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になります

RBACの設定後の状態

ちなみにまだエラーが出ているのは、Mimirで作られたPodからS3にアクセスる権限がないのでエラーが出ます。以下の画像をご参照ください

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して、起動しなおせば以下のように表示されるます!

Mimrが全て起動する


ハマりポイント

  • 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で詰まったら、この記事で復習してみましょう!


関連タグ

#Grafana #Mimir #メトリクス #S3 #helm

この記事が気に入ったらサポートをしてみませんか?