LinuxアプリケーションログをAWSCloudWatchに送信する方法

AWS CloudWatchは、AWSクラウドによって提供されるモニタリングサービスです。 AWSは、CPU使用率、ネットワーク入力、ネットワーク出力などのサーバーパラメーターのデフォルトのモニタリングを提供します。AWSCloudWatchは、ディスク使用率やメモリ(RAM)使用率などのカスタムモニタリングに使用できます。カスタム監視の場合、いくつかの手順に従って監視する必要があります。

同様に、AWSCloudWatchを使用してサーバーまたはアプリケーションのログを監視できます。これは明らかな理由でAWSのデフォルト機能ではないため、要件に従って設定できます。モニタリングのためにAWSCloudWatchに送信する必要のあるログはユーザーによって異なります。

AWSリソースに限定されません

AWS CloudWatchがAWSサービスであっても、EC2インスタンスにのみ使用できるという意味ではなく、他のクラウドプロバイダーのVMや物理ドライブ上のVMからアプリケーションまたはサーバーログを送信するように設定することもできます。 。

アプリケーションまたはサーバーのログをAWSCloudWatchに送信する方法

アプリケーションまたはサーバーのログをAWSCloudWatchに送信するには、CloudWatchエージェントをそれぞれのサーバーにインストールする必要があります。このブログの目標を達成するために、AWSEC2インスタンスを使用します。

ステップ

  1. AWSCloudWatchと通信するためにインスタンスにアタッチされる適切なロール
  2. AWSCloudWatchエージェントのインストール
  3. AWSCloudWatchエージェントの設定
  4. AWSCloudWatchポータルでのログのテスト

IAMの役割

アプリケーションまたはサーバーのログをAWSCloudWatchに送信するには、適切なパーミッションでEC2インスタンスにロールをアタッチする必要があります。このロールにより、AWSCloudWatchで変更を加えることができます。

以下のポリシーが含まれている必要があります。

  • CreateLogStream
  • DescriptionLogStream
  • CreateLogGroup
  • PutLogEvents

AWSIAMでロールを作成しましょう。

AWSコンソールの[サービス]リストから[IAM]セクションに移動します。 AWSアカウントをまだお持ちでない場合は、ここから作成してください。

サービスリストからIAMを選択します

IAMダッシュボードで、[ポリシー]、[ポリシーの作成]の順に移動します。

[ポリシーの作成]ページで、タブから[JSON]を選択し、デフォルトのポリシーを削除して、以下のJSONポリシーを貼り付けます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
    ],
      "Resource": [
        "arn:aws:logs:*:*:*"
    ]
  }
 ]
}

ポリシーは次のようになります。完了したら、ページの下部にある[ポリシーの確認]ボタンをクリックします。

次のページで、ポリシーに名前を指定する必要があります。

完了したら、ページの下部にある[ポリシーの作成]ボタンをクリックします。

ポリシーを作成すると、IAMロールページにリダイレクトされます。必要なポリシーがすでに作成されているので、インスタンスにアタッチされるロールを作成します。

 

[ロールの作成]ページで、[EC2]を選択します。 EC2インスタンスにロールをアタッチします。

ページの左下にある[次へ:許可]ボタンをクリックします。

次のページで、ロールにポリシーを添付するように求められます。前の手順で指定したポリシーの名前を検索します。見つかったら、リストからポリシーを選択します。

 

完了したら、ページの下部にある[次へ:タグ]ボタンをクリックします。

次のページで、役割にいくつかのタグを付けるように求められます。これはオプションの手順であるため、役割にタグを付けず、手順をスキップしました。

[次へ]をクリックすると、役割に名前を付けるように求められます。

あなたの役割は数秒で作成されます。

インフラストラクチャ側から必要なセットアップが完了したので、EC2インスタンスでAWS CloudWatchAgentを設定しましょう。

このステップでは、実行状態のEC2インスタンスが必要です。必要な方法でインスタンスに接続します。インスタンスに接続する方法は複数あります。 こちらで確認できます。

Amazon Linuxインスタンスをお持ちの場合は、以下の手順に従ってください。

インスタンスに初めてログインする場合は、必ず以下のupdateコマンドを実行してください。

以下の手順では、 AmazonLinuxマシンについて説明します

sudo yum update -y

更新が完了したら、以下のコマンドを実行してawslogsパッケージをインストールします。

sudo yum install -y awslogs

パッケージがインストールされたら、 / etc / awslogs /awscli.confファイルでリージョンを変更できます。

ここで、AWS CloudWatchに送信するログを設定するには、ファイル/etc/awslogs/awslogs.confを開き、次の行を確認します。

[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = Amazon-Linux-2

上記の設定は、システム/ var / log / messagesからのログファイルパスがAWSCloudWatchにアップロードされることを示しています。上記の設定では、 log_group_nameパラメータに記載されている名前でAWSCloudWatchにロググループが作成されます。また、 log_stream_nameに記載されている階層がありますバッファ時間については、 buffer_durationの値を変更できます buffer_durationのデフォルト値は5000msです。

変更を行ったら、以下のコマンドを実行してアプリケーションを再起動します。 awslogアプリケーションが再起動し、エージェントがAWSCloudWatchへのログのアップロードを開始します。

$ sudo service awslogsd start

AWS CloudWatchAgentをRHELまたはCentOSにインストールして設定するには、以下の手順に従います。

以下のコマンドを実行して、パッケージをダウンロードします。

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O

現在の場所にawslogs-agent-setup.pyという名前のファイルがあります。ダウンロードしたファイルはPythonスクリプトであるため、次の手順のためにPythonをマシンにインストールする必要があります。 Pythonパッケージがインストールされていることを確認してから、以下のコマンドを実行します。以下のコマンドで地域を指定する必要があります。必要に応じて、後で構成を変更することもできます。

python ./awslogs-agent-setup.py --region ap-south-1

上記のコマンドを実行すると、いくつかの入力を求められます。要件と同じように言及します。

上記のスクリプトは、構成ファイル/var/awslogs/etc/awslogs.confを生成します。スクリプトで指定した詳細は、構成ファイルに保存されます。

要件に応じて、構成ファイルを変更することもできます。

すべての変更が完了したら、以下のコマンドを実行してエージェントを再起動します。

# systemctl start awslogs

構成済みのセットアップを確認します

1.AWSアカウントに再度ログインします。

2.サービスリストでCloudWatchを検索します。

3.左側のメニューから[ロググループ]オプションを選択します。

4.構成のlog_stram_nameパラメーターで指定した値を検索します。

5.ログがサーバーからAWSCloudWatchにプッシュされていることがわかります。

結論

サーバーからAWSCloudWatchにプッシュされるように任意のログファイルを設定できます。これは、AWSクラウド上にないサーバー用に設定できます。つまり、Azure、GCP、その他のクラウドプロバイダー、またはオンプレミスサーバーでホストされている任意のサーバーからログをプッシュできます。

Source