GrafanaとCloudWatchメトリックダッシュボードの展開について


計量の柱


メトリクスは、我々がより多くの分散されたアプリケーション・アーキテクチャを採用するとき、ますます重要である観測可能性の主要な構成要素のうちの1つです.あなたがちょうどあなたの可観測性の旅に出発していて、datadogのような支払われたSaaSサービスの正当化を見つけるか、克服する厳しいバリアをすり減らすのを見つけるならば、あなたは簡単に最初に、あなたにメトリックコレクションがどのように働くかについてより良い把握をすることができて、あなたの現在のシステムに若干の洞察を提供するためにダッシュボードをつくることができるオープンソース解決を使用することから始めることができます.
このポストでは、我々はコミュニティによって作成されたダッシュボードで、最小限の労力でAWS弾性Kubernetesサービス(EKS)クラスタにGrafanaを展開するのに役立ついくつかの迅速なレシピを通過する予定です.それで、始めましょう.

目次

  • Requirements

  • The quick 5-minute build
  • What you get
  • Setup
  • Cloudwatch IAM Role

  • Grafana
  • Installing Grafana
  • Show me the UI!
  • Whats next?

  • The 10-minute build
  • What you get
  • Setup
  • Postgres RDS
  • Grafana
  • Logging in
  • Wrapping up
  • 要件

  • Kubernetesクラスタ、好ましくはAWS
  • 地形
  • クイック5分ビルド


    何を得る

  • グラファナインスタンス
  • CloudWatchメトリクス
  • CloudWatchダッシュボードAWSサービスの監視( EBS , EC 2など)
  • セットアップ


    ライノノアラ / レシピ


    可観測性ツールを設定するためのレシピ集


    レシピ


    AWSとEKSのリソースを設定するためのレシピのコレクション
    これは、人々に観察可能なツールを導入しようとして、それらをできるだけ簡単に彼らの基盤にそれらを加えるためのレシピを提供しようとすることの試みです、あなたがこれらのセットアップのほとんどがあなたの生産ニーズ(例えば、HA考慮、メンテナンスプロセス)のためにあまりに単純であるかもしれないとわかるかもしれないように、そして、私がこれらをよりよくして、レシピに単純化することができる方法を考えることができるならば.私は私の将来のセットアップで自分自身のためのレシピガイドとして、このリポジトリを更新します.

    要件


    このリポジトリには、すでに以下のツールがインストールされており、必要なIAM権限(管理者が望ましい)をterraformで使用することを前提としています
  • terraform > = v 0.12.29
  • terragrunt >= v 0.23.6
  • Kubectl > = 1.18
  • ヘルム>3.3.0
  • ノート

    This is not a free tier compatible setup and any costs incurred will be bared by you and you…


    View on GitHub
    レシピリポジトリをクローンgithub.com/ryanoolala/recipes , この投稿を通してセットアップを参照するために使用します

    IWAMの役割


    私たちは、まず最初に、CloudWatchからメトリクスを取得するためにパーミッションを備えたIAMロールを作成します.そして、我々は役割を提供するためにTerraformを使用しています.そして、私の場合では、私は使用をしていますterragrunt , しかし、簡単に入力をコピーすることができ、代わりにterraformモジュール変数の入力に.
    module "cloudwatch-iam" {
      source = "git::https://gitlab.com/govtechsingapore/gdsace/terraform-modules/grafana-cloudwatch-iam?ref=1.0.0"
      allow_role_arn = arn:aws:iam::{{ACCOUNT_ID}}:role/ryan20200826021839068100000001
      name = "ryan"
    }
    
    The grafana cloudwatch iam モジュールはEKS ARNロールを受け取ります.これは、我々のGrafanaアプリケーションがノード上で動作し、このCloudWatchの役割を仮定することができ、AWS APIからメトリックをプルする権限があるからです.これは、grafana_role_arn = arn:aws:iam::{{ACCOUNT_ID}}:role/grafana-cloudwatch-role-ryan

    グラファナ


    ここでは興味深いことに、私たちはヘルム3を使用してgrafana展開されます.確認してくださいkubectl コンテキストをクラスタに設定し、このサービスをホストしたい場合、IAMの役割を作成したAWSアカウントに属します.
    データソースを作成します.YAMLファイルに以下の値を付けてくださいassumeRoleArn 上記からのあなたの出力で.
    # file://datasource.yaml
    datasources:
      datasources.yaml:
        apiVersion: 1
        datasources:
          - name: Cloudwatch
            type: cloudwatch
            isDefault: true
            jsonData:
              authType: arn
              assumeRoleArn: "arn:aws:iam::{{ACCOUNT_ID}}:role/grafana-cloudwatch-role-ryan"
              defaultRegion: "ap-southeast-1"
              customMetricsNamespaces: ""
        version: 1
        # <bool> allow users to edit datasources from the UI.
        editable: true
    
    これはGrafanaを使用するように設定されているCloudWatchデータソースから始めることができますassumeRoleArn CloudWatchメトリックの取得について

    グラファナのインストール


    $ helm install grafana stable/grafana -f https://github.com/ryanoolala/recipes/blob/master/metrics/grafana/5min/k8s/grafana/values.yaml -f datasource.yaml --create-namespace --namespace grafana
    
    またはリポジトリをクローンした場合、場所datasource.yaml into ./metrics/grafana/5min/k8s/grafana ラン
    $ cd ./metrics/grafana/5min/k8s/grafana && make install.datasource
    
    少しの間、あなたはGrafanaを走らせます
    $ kubectl get pod -n grafana
    NAME                          READY   STATUS     RESTARTS   AGE
    grafana-5c58b66f46-9dt2h      2/2     Running    0          84s
    
    ダッシュボードへのアクセスを取得するには
    $ kubectl port-forward svc/grafana -n grafana 8080:80
    Forwarding from 127.0.0.1:8080 -> 3000
    Forwarding from [::1]:8080 -> 3000
    

    私にUIを見せてください!


    移動するhttp://localhost:8080 そして、あなたはあなたのGrafana UIを見ます

    あなたがこれらのダッシュボードがどこにロードされるかについて疑問に思っているならば、私は彼らを見つけましたgrafana's dashboard site , いくつかを選んで、values.yaml
    # https://github.com/ryanoolala/recipes/blob/master/metrics/grafana/5min/k8s/grafana/values.yaml#L364
    
    dashboards:
      default:
        aws-ec2:
          url: https://grafana.com/api/dashboards/617/revisions/4/download
        aws-ebs:
          url: https://grafana.com/api/dashboards/11268/revisions/2/download
        aws-cloudwatch-logs:
          url: https://grafana.com/api/dashboards/11266/revisions/1/download
        aws-rds:
          url: https://grafana.com/api/dashboards/11264/revisions/2/download
        aws-api-gateway:
          url: https://grafana.com/api/dashboards/1516/revisions/10/download
        aws-route-53:
          url: https://grafana.com/api/dashboards/11154/revisions/4/download
        aws-ses:
          url: https://grafana.com/api/dashboards/1519/revisions/4/download
        aws-sqs:
          url: https://grafana.com/api/dashboards/584/revisions/5/download
    

    次は?


    UIが編集して新しいダッシュボードを追加することができますが、この設定の永続的なストアを提供していないので、変更は永続的ではありません.それをよりよくしましょう!

    10分体制


    変更を保存するには、いくつかの方法があります.ブロックストア(EBS)ボリュームをインスタンスに付けて、ディスクに格納されている設定が最も簡単です.しかし、EBSはReadWriteMany ストレージドライバは、可用性ゾーンと異なるEKSノード間でgrafanaインスタンスをスケールアウトできません.次の最も簡単な解決策は、私の意見では、AWSリレーショナルデータベースサービス(RDS)を利用して、Grafanaのための永続的なレイヤとして、自動バックアップと高可用性(HA)を完全に管理します.

    何を得る

  • とグラファー
  • セットアップ


    Postgres RDS


    この例でPostgreresを使用しますが、GrafanaはMySQLとSQLITE 3をサポートしています.あなたが私がどのようにインスタンスを展開するためにterraformを使用したかについてわかっているならば、あなたは私のより多くを読むかもしれませんREADME .
    あなたがterraformに慣れていないならば、これはわずかに複雑になるかもしれません、したがって、私はあなたがこれを必要とする10分の努力の下でそれを保つために非常により簡単でより速いであるAWSコンソールを使っているPostgresをつくることを提案します.

    グラファナ


    Postgresデータベースの設定があるので、Kubernetes秘密のオブジェクトを作成して、接続に必要な資格情報を格納します.
    $ cd ./metrics/grafana/10min/k8s/grafana
    $ make secret
    Removing old grafana-db-connection...
    secret "grafana-db-connection" deleted
    Postgres Host?: 
    mydbhost.com
    Postgres Username?: 
    myuser
    Postgres Password? (keys will not show up in the terminal): 
    Attempting to create secret 'grafana-db-connection'...
    secret/grafana-db-connection created
    
    この秘密grafana-db-connection で使用されますvalues.yaml また、環境を設定しますGF_DATABASE_TYPE to postgres .
    # https://github.com/ryanoolala/recipes/blob/cf7839e9e919735c72fee77450d891f8ee13ef17/metrics/grafana/10min/k8s/grafana/values.yaml#L268
    ## Extra environment variables that will be pass onto deployment pods
    env:
      GF_DATABASE_TYPE: "postgres"
    
    # https://github.com/ryanoolala/recipes/blob/cf7839e9e919735c72fee77450d891f8ee13ef17/metrics/grafana/10min/k8s/grafana/values.yaml#L282
    envFromSecret: "grafana-db-connection"
    
    これらの変更を行うと、現在の配備されているGrafanaをhelm upgrade grafana stable/grafana -f values.yaml --namespace grafana , または、あなたが新鮮なセットアップから始めているならば、
    $ helm install grafana stable/grafana -f https://github.com/ryanoolala/recipes/blob/master/metrics/grafana/10min/k8s/grafana/values.yaml --create-namespace --namespace grafana
    
    または、あなたが倉庫をクローン化したならば
    $ cd ./metrics/grafana/10min/k8s/grafana && make install
    
    この新しいGrafanaでは、システムの変更を行い、DataSourcesとダッシュボードを追加し、データベース内のこれらの変更を保存することができます.したがって、インスタンスの再起動について心配する必要はなく、再度やり直す必要があります.

    ログイン


    編集するには、管理者ユーザーを使用してログインする必要があります、デフォルトのユーザー名とパスワードをインストール中に、次の変更によって設定することができますvalues.yaml
    # Administrator credentials when not using an existing secret (see below)
    adminUser: admin
    adminPassword: strongpassword
    
    Grafanaが開始された後、我々は代わりにUI上のパスワードを変更することができますし、新しいパスワードは、将来のログインセッションのデータベースに格納されます.

    ラッピング


    うまくいけば、これはあなたがGrafanaのヘルムチャートを使用してCloudWatchメトリックダッシュボードを表示するように設定する方法のアイデアを与えた.
    次のパートでは、私たちはPrometheusを配備することについてより多くを共有します.そして、それは我々にKerbernetesクラスタの中でより多くの洞察を提供します.これらの情報は、我々の配備されたアプリケーションをよりよく理解する助けとなるでしょう.