AWSの監視系サービスが一気に学べる公式ワークショップに新コンテンツが追加されたのでやってみた

2021.04.30

以前、AWSの監視系のサービスが一気に学べる 公式Workshopをご紹介しました。

こちらのWorkshopに新コンテンツが追加されたようなので、日本語版でやってみたいと思います。

新コンテンツの内容

今回追加されたのは以下3章です。

AMAZON MANAGED SERVICE FOR PROMETHEUS (AMP)とAMAZON MANAGED SERVICE FOR GRAFANA (AMG)は昨年のre:Invent 2020で発表された新サービスですね。両者ともまだパブリックプレビューである点は要注意です。AWS DISTRO FOR OPENTELEMETRYは、CNCFの一部であるOpenTelemetry、これは分散トレースとメトリクスの収集のためのオープンスタンダードの定義に取り組んでいるプロジェクトなのですが、その仕様に準じた方法でAWSの各種サービスが利用できるようになるディストリビューションです。

やってみた

3章ともやろうとしたのですが、AMPの章だけのレポートになってしまいました。。AMPだけで結構色々な箇所でハマってしまい、またAMGがAWS SSOを有効化したアカウントでないと使えないということを後から知り、AMGとAWS DISTRO FOR OPENTELEMETRYの章は断念しました、ご了承ください。以下、基本的に私がワークショップの指示通りやってうまく行かなかった箇所をレポートしていきます。

準備

追加された3章はその章単体で(=他の章をやる必要なく)で学ぶことができます。が、環境のセットアップだけは必要なので、ここ以下からCloud9のセットアップを行なってください。

セットアップ手順内に以前このWorkShopをやった際にはリリースされていなかったCloudShellが登場していました。ちゃんとこのあたりもアップデートされてるんですね。 workshop-cloudshell

トラフィックジェネレーターはいずこ?

前回このワークショップをやった際は、環境のセットアップ時に併せてトラフィックジェネレーターも作成しました。その名の通りトラフィックジェネレーターがトラフィックを自動生成してくれるので、確認すべきメトリックやログやトレースがいい感じに存在していました。

現在はトラフィックジェネレーターの設定方法の記載箇所を見つけることができませんでした。が、 アプリケーションのデプロイ終了後以下方法で設定することができました。

  1. Cloud9でNew Terminalを開く
  2. $ cd workshopfiles/one-observability-demo/PetAdoptions/trafficgenerator/trafficgenerator/
  3. $ docker-compose up

AMAZON MANAGED SERVICE FOR PROMETHEUS (AMP)

東京リージョン未対応

最初のワークスペースの作成ですが、AMPがまだ東京リージョンに来ていないので、別リージョンで作業する必要があります。 amp-is-not-in-ap-northeast-1

ファイル名間違い

途中 「15.2 EKS メトリクスの取り込み」の「IAM ロールと Kubernetes サービスアカウントのセットアップ」で以下エラーになりました。

$ ./resources/setup-irsa-eks-amp.sh
bash: ./resources/setup-irsa-eks-amp.sh: No such file or directory

これは実行ファイル名が間違っているためです。ファイル名を書き換えましょう。

$ ./resources/amp-setup-irsa-eks.sh 
arn:aws:iam::111111111111:role/amp-iamproxy-ingest-role

Role名間違い

続いての 新しいサーバーのセットアップとメトリクスの取り込み開始でも、IAM Role名を書き換える必要があります。

- aws iam get-role --role-name iamproxy-ingest-role | jq .Role.Arn
+ aws iam get-role --role-name amp-iamproxy-ingest-role | jq .Role.Arn

リージョン指定

さらに、Cloud9とAMPを別リージョンに作成した場合(例えばCloud9は東京リージョンに作成したが、AMPは東京に来ていないのでバージニア北部リージョン(us-east-1)に作成した場合など)は、その後のワークスペースを一覧表示するコマンドにリージョン指定が必要です。AMPを作成したリージョンを指定します。

- aws amp list-workspaces
+ aws amp list-workspaces --region us-east-1

ADOTコレクタのセットアップ時のファイル書き換え

ADOT コレクタのセットアップにて、 ./resources/amp-eks-adot-prometheus-daemonsetファイルを開いて編集する箇所があります。

  • <AMP_REMOTE_WRITE_URL> を、作成したワークスペースの Ingest URL に置き換えてファイルを保存します」とあります。Ingest URLとはワークスペースの詳細画面で確認できる、「エンドポイント - リモート書き込み URL」のことです。 what-is-ingest-url
  • 同ファイル内に「<AWS_REGION>」と書かれた箇所(41行目)もあるので、こちらも書き換えましょう。ワークスペースを作成したリージョン名に書き換えます。

http://127.0.0.1:8080 に移動する方法

途中「http://127.0.0.1:8080 に移動して…」という箇所がありますが、Cloud9では「Preview > Preview Running Application」をクリックします。 preview-running-application-on-cloud9

localhost から Prometheus サーバーコンテナに接続するコマンドも修正が必要です。

- kubectl port-forward -n prometheus pods/prometheus-chart-server-0 8080:9090
+ kubectl port-forward -n prometheus pods/amp-prometheus-chart-server-0 8080:9090

amp_query_override_values.yamlファイル内容書き換え

ここからは「15.3 Grafana を利用したメトリクスの視覚化」のページの内容です。「Grafana サーバーを更新して AWS 署名プロキシを使用する」内でamp_query_override_values.yamlファイルを作成しますが、その中の ${IAM_PROXY_PROMETHEUS_ROLE_ARN}echo $IAM_PROXY_PROMETHEUS_ROLE_ARNで取得できるIAM RoleのArnに書き換えてください。

GrafanaのPod名

「Grafana コンソールにログインしてメトリクスを視覚化」ですが、GRAFANA_POD_NAMEは1つ前のhelm upgradeコマンドの出力結果にその取得方法が記載されています。以下のハイライトしている行をご確認ください。

$ helm upgrade --install grafana-for-amp grafana/grafana -n grafana -f ./amp_query_override_values.yaml
Release "grafana-for-amp" has been upgraded. Happy Helming!
NAME: grafana-for-amp
LAST DEPLOYED: Fri Apr 30 09:20:10 2021
NAMESPACE: grafana
STATUS: deployed
REVISION: 2
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace grafana grafana-for-amp -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:

   grafana-for-amp.grafana.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:

     export POD_NAME=$(kubectl get pods --namespace grafana -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana-for-amp" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace grafana port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin
#################################################################################
######   WARNING: Persistence is disabled!!! You will lose your data when   #####
######            the Grafana pod is terminated.                            #####
#################################################################################

なので、以下コマンドで代替可能です。

$ export POD_NAME=$(kubectl get pods --namespace grafana -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana-for-amp" -o jsonpath="{.items[0].metadata.name}")
$ kubectl port-forward -n grafana pods/${POD_NAME} 5001:3000

http://localhost:5001 にアクセスする方法

Cloud9でこのURLにアクセスする方法がわかりませんでした。Previewだとローカルの5001にアクセスできないようなので、kubectl port-forwardのポートを8080:3000にしてみたのですがそれでもエラーになります。

代わりにGrafanaのサービスのタイプをLoadBalancerにして外部からアクセスできるようにしました。

$ kubectl patch -n grafana service/grafana-for-amp -p '{"spec":{"type":"LoadBalancer"}}'
$ kubectl get  -n grafana service/grafana-for-amp 
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)        AGE
grafana-for-amp   LoadBalancer   10.100.167.172   a2b26f977f97a41c7804fb63a3d2507b-248802392.ap-northeast-1.elb.amazonaws.com   80:31851/TCP   34m

EXTERNAL-IP列のCLBのFQDNにブラウザアクセスするとGrafanaのダッシュボードのログイン画面に遷移できます。 grafana-login

AMP データソースの設定

ログイン後、真ん中屋や右にある「DATA SOURCES」パネルをクリックします。 grafana-export

ワークショップの指示通りにAMPデータソースの設定を埋めていって、最下部の「Save & Test」を押下したところ、Bad Gatewayエラーになってしまいました。 http-error-bad-gateway

修正方法がわからなかったので、「SigV4 Auth Details」の「Authentication Provider」を「Access & secret key」に変え、AdministerAccess権限のIAMユーザーのキーで埋めたところ、「Data source is working」と成功しました。おそらく私のService Account周りの設定が何か間違っているのだと思います。 sigv4