見出し画像

CloudWatchのログとメトリクスをgrafanaで確認できるようにする

要件

CloudWatchのログをgrafanaで確認できるようにする

タスク

  • CloudWatchのログをgrafanaで確認できるようにする

  • CloudWatchのメトリクスをgrafanaで確認できるようにする

  • helmでgrafanaを立ち上げる

  • grafanaのpodからcloudwatchのログが確認できようにRBACの仕組みを使う

  • 以下のようにgrafanaでログを確認できるようにする

grafanaでcloudwatchのログを確認
  • 以下のようにgrafanaでメトリクスを確認できるようにする

grafanaでcloudwatchのメトリクスを確認

参考記事

▼まずはドキュメント


▼grafanaのhelmのvalues.yamlを確認して、「serviceAccount」の項目を確認する


学べること

  • grafanaでcloudwatchのログを確認する方法

  • grafanaでcloudwatchのメトリクスを確認する方法

ヒント

▼irsaの設定方法はいくつかあるのですが、自分は以下のようにterraformで設定しました

module "grafana-policy" {
  source = "./modules/grafana_policy"
}


#grafanaからcloudwatchのデータを取得するためのIRSA
module "irsa_grafana" {
  source = "github.com/aws-ia/terraform-aws-eks-blueprints//modules/irsa?ref=v4.24.0"

  create_kubernetes_namespace = false
  kubernetes_namespace        = "default"
  kubernetes_service_account  = "grafana-sa"
  irsa_iam_role_name          = "grafana_role"
  irsa_iam_policies           = [module.grafana-policy.policy_arn]
  eks_cluster_id              = module.eks_blueprints.eks_cluster_id
  eks_oidc_provider_arn       = module.eks_blueprints.eks_oidc_provider_arn
}


modules/grafana_policy/main.tf 

# ------------------------------
# grafanaでcloud watchのログとメトリクスを取得するためのポリシー
# ------------------------------
resource "aws_iam_policy" "this" {
  name = "grafana_policy"

  policy = jsonencode({
    "Version" : "2012-10-17",
    "Statement" : [
      {
        "Sid" : "AllowReadingMetricsFromCloudWatch",
        "Effect" : "Allow",
        "Action" : [
          "cloudwatch:DescribeAlarmsForMetric",
          "cloudwatch:DescribeAlarmHistory",
          "cloudwatch:DescribeAlarms",
          "cloudwatch:ListMetrics",
          "cloudwatch:GetMetricData",
          "cloudwatch:GetInsightRuleReport"
        ],
        "Resource" : "*"
      },
      {
        "Sid" : "AllowReadingLogsFromCloudWatch",
        "Effect" : "Allow",
        "Action" : [
          "logs:DescribeLogGroups",
          "logs:GetLogGroupFields",
          "logs:StartQuery",
          "logs:StopQuery",
          "logs:GetQueryResults",
          "logs:GetLogEvents"
        ],
        "Resource" : "*"
      },
      {
        "Sid" : "AllowReadingTagsInstancesRegionsFromEC2",
        "Effect" : "Allow",
        "Action" : ["ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions"],
        "Resource" : "*"
      },
      {
        "Sid" : "AllowReadingResourcesForTags",
        "Effect" : "Allow",
        "Action" : "tag:GetResources",
        "Resource" : "*"
      }
    ]
  })
}

modules/grafana_policy/output.tf

output "policy_arn" {
  value = aws_iam_policy.this.arn
}


▼grafanaのhelmの設定 自分はhelmfileでgrafanaを作成してます!

helmfile.yaml

releases:
  - name: grafana
    namespace: default
    chart: grafana/grafana
    values:
      - ./grafana.yaml

grafana.yaml

service:
  type: LoadBalancer
  port: 4000

serviceAccount:
  create: false
  name: grafana-sa
  annotations:
    eks.amazonaws.com/role-arn: "arn:aws:iam::xxxxxxxxxxxx:role/grafana_role"

datasources:
  datasources.yaml:
    apiVersion: 1
    datasources:
    - name: CloudWatch
      type: cloudwatch
      jsonData:
        authType: default
        defaultRegion: ap-northeast-1


ハマりポイント

  • cloudwatchのログやメトリクスを取得するためには、cloudwatch用のクエリがあるのでそれを書かないとログを取得できないよ、、


ログのクエリの参考例

メトリクスのクエリの参考例


関連タグ

#grafana #cloudwatch #aws #モニタリング #aws #kubernetes #helm

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