もっと詳しく

AWSクラウドインフラストラクチャが成長するにつれて、数十のAWSサービスを監視することは困難で退屈になり、AWSリソースを監視する必要があります。 幸い、AWS CloudWatchサービスは、広大なAWSインフラストラクチャを監視するための優れたツールです。

AWS CloudWatchは、AWSインフラストラクチャのリソース使用率、アプリケーションパフォーマンス、および運用状態を監視するためのサービスです。

このチュートリアルでは、TerraformCloudWatchモジュールを使用してAWSCloudWatchとそのコンポーネントをAWSCloudでプロビジョニングする方法を学習します。

前提条件

この投稿は、ステップバイステップのチュートリアルになります。 フォローしたい場合は、次のことを確認してください。

  • コードエディタ–任意のテキストエディタを使用してTerraform構成ファイルを操作できますが、使用を検討してください Visual Studio(VS)コード HCLTerraform言語をよく理解しているからです。
  • テラフォーム –このチュートリアルでは、Ubuntu 20.04LTSで実行されているTerraformv1.1.5を使用していますが、Terraformを搭載したオペレーティングシステムであればすべて動作するはずです。
  • IAMの役割 Ubuntu 20.04 LTSに接続され、AWS Elastic File System(EFS)および関連コンポーネントを作成するための完全な権限があります。
  • 監視電子メール通知を受信するための電子メールアカウント。

TerraformCloudWatchモジュールの設定を構築する

Terraformは、構成を介してインフラストラクチャを構築、変更、およびバージョン管理できるコードツールとしてのインフラストラクチャです。 Terraform CloudWatchモジュールを使用してAWSCloudでCloudWatchメトリクスとアラームを作成するため、最初にAWSCloudWatchのTerraform設定を構築する必要があります。 次のようにTerraform構成の構築を開始します。

1.お気に入りのSSHクライアントを使用してUbuntuマシンにログインします。

2.次に、以下のコマンドを実行して、〜/terraform-cloudwatch-demoという作業ディレクトリを作成しますこのフォルダーには、このチュートリアルで作業するすべての構成ファイルが含まれます。

mkdir ~/terraform-cloudwatch-demo
cd ~/terraform-cloudwatch-demo

3.好みのコードエディタを開き、というファイルを作成します main.tf 〜/terraform-cloudwatch-demo内 ディレクトリ。

次の構成をコピーして貼り付けます main.tf ファイルを作成し、変更を保存します。 これ main.tf fileは、AWSCloudWatchのTerraform設定です。

以下のTerraform構成は、以下のリソースを作成します。

  • CloudWatchダッシュボード:CloudWatchダッシュボードには、CPU使用率に基づいて、実行中のすべてのAWSEC2インスタンスのすべてのメトリクスが表示されます。
  • CloudWatchメトリクスアラーム:まず、CPUしきい値の70%など、AWSリソースにメトリクスを設定する必要があります。次に、メトリクスアラームがCloudWatchメトリクスを監視し、それに基づいてアラートを生成します。
  • CloudWatchロググループ:AWS CloudWatchでは、ロググループには同じモニタリングとアクセスコントロール設定を含むログストリームが含まれます。 ログストリームは、同じソースを共有する一連のログイベントであり、ロググループは、同じ保持を共有するログストリームのグループです。
  • 複合アラーム: 作成した他のアラームのアラーム状態を考慮するルール式が含まれています。 複合アラームは、リソースのしきい値がすべてのルールの条件を満たしている場合にのみALARM状態になります。

注:以下のTerraform構成は、このチュートリアルとそれが使用するAWSサブスクリプションに固有のものです。 必要に応じて、またはエラーが発生した場合は、必ず構成をカスタマイズしてください。


resource "aws_cloudwatch_dashboard" "EC2_Dashboard" {
  dashboard_name = "EC2-Dashboard"

  dashboard_body = <<EOF
{
    "widgets": [
        {
            "type": "explorer",
            "width": 24,
            "height": 15,
            "x": 0,
            "y": 0,
            "properties": {
                "metrics": [
                    {
                        "metricName": "CPUUtilization",
                        "resourceType": "AWS::EC2::Instance",
                        "stat": "Maximum"
                    }
                ],
                "aggregateBy": {
                    "key": "InstanceType",
                    "func": "MAX"
                },
                "labels": [
                    {
                        "key": "State",
                        "value": "running"
                    }
                ],
                "widgetOptions": {
                    "legend": {
                        "position": "bottom"
                    },
                    "view": "timeSeries",
                    "rowsPerPage": 8,
                    "widgetsPerRow": 2
                },
                "period": 60,
                "title": "Running EC2 Instances CPUUtilization"
            }
        }
    ]
}
EOF
}

resource "aws_cloudwatch_composite_alarm" "EC2" {
  alarm_description = "Composite alarm that monitors CPUUtilization "
  alarm_name        = "EC2_Composite_Alarm"
  alarm_actions = [aws_sns_topic.EC2_topic.arn]

  alarm_rule = "ALARM(${aws_cloudwatch_metric_alarm.EC2_CPU_Usage_Alarm.alarm_name}) OR ALARM(${aws_cloudwatch_metric_alarm.EBS_WriteOperations.alarm_name})"

  depends_on = [
    aws_cloudwatch_metric_alarm.EC2_CPU_Usage_Alarm,
    aws_sns_topic.EC2_topic,
    aws_sns_topic_subscription.EC2_Subscription
  ]
i}


# Creating the AWS CLoudwatch Alarm that will autoscale the AWS EC2 instance based on CPU utilization.
resource "aws_cloudwatch_metric_alarm" "EC2_CPU_Usage_Alarm" {
# defining the name of AWS cloudwatch alarm
  alarm_name          = "EC2_CPU_Usage_Alarm"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Defining the metric_name according to which scaling will happen (based on CPU) 
  metric_name = "CPUUtilization"
# The namespace for the alarm's associated metric
  namespace = "AWS/EC2"
# After AWS Cloudwatch Alarm is triggered, it will wait for 60 seconds and then autoscales
  period = "60"
  statistic = "Average"
# CPU Utilization threshold is set to 10 percent
  threshold = "70"
alarm_description     = "This metric monitors ec2 cpu utilization exceeding 70%"


resource "aws_cloudwatch_log_group" "ebs_log_group" {
  name = "ebs_log_group"
  retention_in_days = 30
}


resource "aws_cloudwatch_log_stream" "ebs_log_stream" {
  name           = "ebs_log_stream"
  log_group_name = aws_cloudwatch_log_group.ebs_log_group.name
}


resource "aws_sns_topic" "EC2_topic" {
  name = "EC2_topic"
}

resource "aws_sns_topic_subscription" "EC2_Subscription" {
  topic_arn = aws_sns_topic.EC2_topic.arn
  protocol  = "email"
  endpoint  = "[email protected]"

  depends_on = [
    aws_sns_topic.EC2_topic
  ]
}

4.で別のファイルを作成します 〜/ terraform-cloudwatch-demo 名前付き Provider.tf、 以下の内容をファイルに入力します。

プロバイダー.tf ファイルに含まれています テラフォームプロバイダー Terraformは、クラウドプロバイダーまたはAPIサービスに接続または対話するためにプラグインに依存しているためです。

すべての構成値を単一の構成ファイルに含めることができます。 ただし、開発者と管理者が物事を明確に保つために、ロジックと変数を別々のファイルに分割することをお勧めします。

# Declaring the AWS Provider
provider "aws" {
   region = "us-east-1"
 }

このチュートリアルでは、us-east-1リージョンにリソースを作成します。 しかし、のリスト AWSがサポートするリージョン もご利用いただけます。

5.最後に、treeコマンドを実行して、 〜/ terraform-cloudwatch-demo 以下に示すように、ディレクトリ。

TerraformCloudWatchモジュールを使用したモニターとロググループの作成

Terraform設定ファイルと変数ファイルを設定したので、Terraformを開始し、AWSCloudWatchとそのコンポーネントを作成します。

他のすべてのTerraform設定と同様に、Cloudwatch Dashboard、ロググループ、メトリクスアラームなどのAWS CloudWatchコンポーネントをプロビジョニングするために、Terraformは3つのコマンドを順番に使用します(テラフォーム初期化テラフォームプラン、 と テラフォームが適用されます)。

作成したTerraform構成ファイルが正しくフォーマットされていない場合は、 テラフォームfmt それらを修正するコマンド。

1.〜/でterraforminitコマンドを実行しますテラフォーム-バックエンド-デモ リソースの操作に必要なプラグインとプロバイダーを初期化するためのディレクトリ。

すべてがうまくいくと、以下に示すように、Terraformが正常に初期化されたことを示すメッセージが出力に表示されます。

Terraform初期化の実行
Terraform初期化の実行

2.次に、terraform planコマンドを実行して、構成ファイルの構文が正しいことを確認し、インフラストラクチャーにプロビジョニングするリソースの青写真を提供します。

コマンドが完了すると、「計画」のようなメッセージが表示されます。「X」は追加、「Y」は変更、「Z」は破棄します。 以下の計画は、作成する4つのリソースとして追加する4を示しています。

テラフォーム計画の実行
テラフォーム計画の実行

3.最後に、テラフォームを実行し、コマンドを適用して、各設定を使用してAWS CloudWatchと関連コンポーネントをプロビジョニングします(* .tf)現在のディレクトリにあります。

–auto-approveパラメーターは、コマンドの実行中にすべてのプロンプトを自動的に受け入れます。

terraform apply --auto-approve
Terraform構成の適用
Terraform構成の適用

CloudWatchAlarmを使用したEC2およびその他のAWSサービスのモニタリング

Terraformを使用してAWSCloudWatchと関連コンポーネントを作成しておく必要があります。 しかし、それらがAWSクラウドに存在することをどうやって知るのでしょうか? AWSマネジメントコンソールを手動でチェックして、AWSCloudWatchサービスとコンポーネントを確認します。

1.お気に入りのWebブラウザーを開き、にログインします。 AWSマネジメントコンソール

2.コンソールのホームページで、検索ボックスをクリックし、「CloudWatch」を検索してクリックし、CloudWatchダッシュボードにアクセスします。 ブラウザは自動的にページをCloudWatchダッシュボードにリダイレクトします。

AWSCloudwatchServiceページに移動する
AWSCloudwatchServiceページに移動する

3. CloudWatchページが表示されたら、左側のナビゲーションメニューの[ダッシュボード]をクリックします。 作成したEC2ダッシュボードが表示されます。 EC2-ダッシュボードをクリックしてダッシュボードを表示します。

CLoudWatchダッシュボードでのEC2-ダッシュボードの表示
CLoudWatchダッシュボードでのEC2-ダッシュボードの表示

4. EC2-Dashboardをクリックすると、ページがダッシュボードを開き、AWSアカウントで実行中のすべてのインスタンスのCPU使用率を表示します。

以下に示すように、アカウントには3つの事前構成されたインスタンスがあり、3つの異なる色の線が過去9時間のCPU使用率を示しています。

Cloudwatchダッシュボードでの3つの異なるAWSEC2インスタンスのCPU使用率の表示
Cloudwatchダッシュボードでの3つの異なるAWSEC2インスタンスのCPU使用率の表示

5.次に、以下に示すように[すべてのアラーム]メニューをクリックすると、Terraformで指定したEC2_CPU_Usage_alarmsが表示されます。

CLoudwatchページでアラームを表示する
CLoudwatchページでアラームを表示する

6.ここで、作成したCloudWatchロググループがCloudWatchページにあるかどうかを確認します。 確認するには、[ロググループ]をクリックすると、ebs_log_groupが表示されます。

AWSコンソールでCloudWatchロググループを確認する
AWSコンソールでCloudWatchロググループを確認する

7.さらに、ebs_log_groupロググループをクリックすると、保持、作成時間、ロググループARNなどのロググループのすべての詳細が表示されます。 また、ロググループ(ebs_log_stream)に存在するログストリームが表示されます。

CLoudwatchでのロググループの詳細とログストリームの表示
CLoudwatchでのロググループの詳細とログストリームの表示

8.を確認するには Amazon Simple Notification Service(SNS) 作成したトピックをAWS管理コンソールのSNSページに移動すると、左側のサイドバーにトピックが表示されます。 CPU使用率がしきい値を超えてアラームをトリガーすると、このトピックはSNSサブスクリプションを通じて通知します。

SNSトピックを検証して電子メール通知を送信する
SNSトピックを検証して電子メール通知を送信する

CPUがしきい値を超えると、メールアカウントに以下のようなメールが届きます。

このリンクにアクセスして、電子メール通知の設定について学ぶことができます。

CloudWatchアラームがトリガーされたときにAWSからAWSSNSを使用してメールを受信する
CloudWatchアラームがトリガーされたときにAWSからAWSSNSを使用してメールを受信する

結論

このチュートリアルでは、AWS Cloud Watchコンポーネントをセットアップし、CloudWatchページに保存されているデータをモニタリングする方法を学びました。 また、CloudWatchDashboard内のさまざまなパネルのさまざまなビジュアライゼーションでメトリクスをモニターする方法も学びました。

これで、AWSアカウントに完全に機能するAWSCloudWatchコンポーネントができました。 CloudWatchダッシュボードとその機能を使って、できる限りのことを試してみてください。

The post TerraformCloudwatchモジュールを介してAWSを監視する appeared first on Gamingsym Japan.