エンジニアリング

Metricbeatを使用したAWS EC2の監視

7.0以降、アマゾン ウェブ サービスを監視する新しいモジュールをMetricbeatに導入します。7.0.0-beta1の初期リリース時に、Metricbeatを使用してCloudWatchからAWS EC2監視メトリックを収集し、それをec2という名称のメトリックセットに保存する機能を提供したのはこのAWSモジュールでした。インスタンスに直接Metricbeatをインストールせずに、これらのメトリックにより、リージョンにわたり全EC2インスタンスの可視性が得られます。

背景

Amazon Elastic Compute Cloud (EC2) インスタンスは、AWSプラットフォームに作成される仮想サーバーであり、安全でサイズ変更が可能なコンピューティング容量をパブリッククラウドで提供します。EC2は、AWSが提供する数百のサービスの中で間違いなく最も重要なサービスです。ほとんどの人は、コンピューティングリソースそのものに直接アクセスする必要があります。

ユーザーが問題を検知してデバッグできるようにEC2インスタンスを一元的に監視することは困難です。すでに、Metricbeatでsystemモジュールを使用して詳細なリソースメトリックを収集することは可能ですが、この場合は各EC2インスタンスにMetricbeatインスタンスをインストールすることが必要です。そこで収集されるメトリックは非常に詳細かつきめ細かいものですが、EC2インスタンスのすべてのリソース使用状況の概要をすばやく可視化できる方法が必要な場合があります。

これに役立つのがAWS CloudWatchです。CloudWatchは自動的に、EC2インスタンスのすべてからリソースの使用状況に関する基本的なメトリックを収集し、一元管理します。データはデフォルトで5分間ごとの細かさで収集されますが、さらに細かく、さらに高度なメトリックを収集する場合は詳細モニタリングを有効化することができます。

Metricbeat AWSを構成する

Metricbeatの使用を開始するには、実行されているElastic Stackが必要です。Elastic Stackには、データの保存とインデックスのためのElasticsearchと、データの閲覧のためのKibanaが含まれています。このために、Elastic Cloud上のElasticsearch Serviceでクラスターを作成するか、ローカルマシン上でElastic Stackをセットアップすることができます。

Kibanaをロードしたら、ホーム画面から[Add Data UI]にナビゲーションし、表示されるAWSモジュールセットアップ手順に従います。

AWS EC2用のMetricbeatを導入する

このブログではさらに詳しく説明していきます。

AWSモジュールを有効化

Metricbeatのそのままの設定では、systemモジュールのみがデフォルトで有効化されるため、明示的にAWSモジュールを有効化する必要があります。以下のコマンドで、MacOSおよびLinuxシステムでmodules.dディレクトリ内にAWS設定を有効化できます。

./metricbeat modules enable aws

構成ファイルにAWS認証情報を設定

AWS認証情報には異なる2つの種類、アクセスキー一時的セキュリティ認証情報があります。アクセスキーを構成するのは、アクセスキーIDとシークレットアクセスキーの2つです。これらはIAMユーザーまたはAWSアカウントのルートユーザーがAWS APIコールを実行する際の認証に使用される長期的な認証情報です。一時的セキュリティ認証情報は、アクセスキーID、シークレットアクセスキー、およびセキュリティトークンで構成されており、有効期限があります。

一時的セキュリティ認証情報は短期間使用できるものであり、有効期限が切れた後は新しい認証情報を生成して、modules.d/aws.yml構成ファイルをその新しい認証情報に修正する必要があります。Metricbeatでライブリローディング機能が有効化されていない場合は、構成ファイルを更新した後、Metricbeatを手動で再起動する必要があります。古い認証情報の有効期限が切れる前に、構成ファイルを新しい認証情報に更新しないと、この作業によってデータ収集が停止してしまいます。 そのためMetricbeatについては、頻繁に新しい一時的セキュリティ認証情報を生成して構成ファイルを更新しなくて済むように、構成ファイルのアクセスキーを使用してAWSモジュールがAWS APIコールを実行できるようにすることを推奨します。

IAMポリシーを作成する

IAMポリシーは、AWS環境内でのオブジェクトのパーミッションを定義するエンティティです。特定のパーミッションを規定した、Metricbeat用のカスタマイズされたIAMポリシーを作成することが必要です。詳細については、IAMポリシーの作成をご覧ください。Metricbeat IAMポリシーを作成した後は、前の手順で認証情報を提供したIAMユーザーにそのポリシーを追加する必要があります。

EC2メトリックセットでは、Metricbeat IAMポリシーに次の4つのパーミッションを追加する必要があります。

  • ec2:DescribeRegions
  • ec2:DescribeInstances
  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricData

Metricbeatを起動

MacおよびLinuxシステムで実行する場合の例:

./metricbeat -E setup.dashboards.enabled=true -e

注: GCP、AWS、またはAzureなど、クラウドインスタンス上の仮想マシンでMetricbeatを実行している場合は、metricbeat.yml内のエントリであるadd_cloud_metadataを削除またはコメントアウトする必要があります。

MetricbeatでEC2メトリックセットが適切なAWS認証情報で有効化されると、Metricbeatは定期的に、各インスタンスに関する情報を取得し、AWS CouldWatchからEC2監視メトリックを収集します。EC2メトリックセットのデフォルトの収集時間は300秒です。インスタンスの詳細モニタリングが有効化されている場合、EC2メトリックセットの収集時間は60秒に変更することが推奨されます。追加料金が必要なこのサービスでは、よりきめ細かいメトリックが収集されるからです。収集時間はmodules.d/aws.ymlファイルで設定します。以下に例を示します。

- module: aws
  period:60s
  metricsets:
    - "ec2"
  access_key_id: '${AWS_ACCESS_KEY_ID:""}'
  secret_access_key: '${AWS_SECRET_ACCESS_KEY:""}'
  session_token: '${AWS_SESSION_TOKEN:""}'
  default_region: '${AWS_REGION:us-west-1}'

EC2メトリックセットは自動的に新しいインスタンスを見つけ、それらのインスタンスからのメトリックの収集を開始します。EC2インスタンスが停止または終了された場合、EC2メトリックセットは次回の収集サイクル時にインスタンスの状態の変化を認識し、新しい状態のメトリックをElasticsearchに送信します。

Kibana AWSモジュールダッシュボードを使用

EC2メトリックセットには、[Metricbeat AWS] EC2 Overviewと呼ばれる、事前定義されたダッシュボードが含まれています。Metricbeat起動時にセットアップコマンドを実行すると、Kibanaでこれらのダッシュボードが自動的にセットアップされます。その詳細については、Kibanaダッシュボードのセットアップをご覧ください。

このダッシュボードはAWS EC2インスタンスの概要になります。インスタンスの状態およびステータスチェック、CPU使用率、ネットワーク、およびディスクのI/Oデータを表示します。また、特定のリージョン、アベイラビリティゾーン、またはマシンタイプにデータを絞り込むために適用できるフィルターもあります。

AWS EC2用のKibanaダッシュボード

このダッシュボードにより、問題を検知して、各インスタンスを用途に合わせて最適化することができます。たとえば、1つのインスタンスで継続的に高いCPU使用率になっていてパフォーマンスの問題が発生している場合は、CPUがボトルネックになっている可能性があり、このインスタンスにはさらに高い性能のCPUが必要です。また、長期間CPU使用率が低いインスタンスがある場合、そのインスタンスにはCPUの性能が高すぎるため、スケールダウンまたは他のインスタンスと統合することが可能だと考えられます。

次のステップ

さまざまなAWSサービスおよびリージョンからの監視メトリックを可視化する一元管理された場所があれば、リソース使用率を最適化し、より迅速に問題を検知して修正できます。ぜひ試用していただき、ご意見やフィードバックをお寄せください。また、その使用方法をBeatsフォーラムでお知らせください。

AWSモジュールのEC2メトリックセットは始まりに過ぎません。Amazon S3、SQS、RDSなど、一般的に使用されている他のサービスを監視するためのメトリックセットをさらに追加できるよう、すでに懸命に取り組んでいます。私たちが次に取り組むべき選択肢についてご意見がある場合、または貢献していただけるようであれば、遠慮なくBeats Githubリポジトリにご参加ください。