【導入実績300社以上】AWS 構築・運用保守サービス

【導入実績300社以上】AWS 構築・運用保守サービス

【CMS】WordPress専用 クラウド / サーバー『WebSpeed』

【CMS】WordPress専用 クラウド / サーバー『WebSpeed』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【CPU】AMD EPYC 技術検証(PoC)サービス

【CPU】AMD EPYC 技術検証(PoC)サービス

【Webシステム / サービス開発】SEKARAKU Lab(セカラクラボ)

【Webシステム / サービス開発】SEKARAKU Lab(セカラクラボ)

【取材記事】サーバーサイド・バックエンドエンジニアを募集中

【取材記事】サーバーサイド・バックエンドエンジニアを募集中

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

CloudWatch Logsで特定の文字列を監視しよう!

目次


*麺処 にしむら(大阪市鶴見区)

こんにちは!
株式会社ビヨンド大阪オフィスのラーメン王、ヒデです。
今回が6回目の投稿です。

前回はCloudwatchアラームをChatbotを使ってSlackに通知することについて話しました!
ブログ記事では、Chatbotという便利ツールを使って通知する面白い記事を書いたので、
興味ある方は、ぜひ見てくださいね!

AWS ChatbotでCloudWatchアラームをslackへ通知しよう!!

 

 

 

 

 

CloudWatch Logsの文字列監視とは?

CloudWatch Logsは、AWSリソースの監視をしているCloudWatchにある機能の一部で、
EC2にあるアプリケーション・アクセスログ等を簡単に収集してクラウド上に保存できる機能となっています。
クラウド上に保存できるので、特定のログを確認したい時に簡単に検索することが可能です。
また、収集したログを一つのサービスで一元管理が可能であるので、管理に労力がかからないのも魅力です。

次に文字列監視とは、業務効率化をするために収集したアプリケーション・アクセスログ等をリアルタイムに監視をして、出力された一定の形式や特定の文字列などを条件にして検知したら、コミュニケーションツールに通知する監視方法のことを指します。
万が一、問題が発生した場合でも早期検知できるので、問題を素早く解決することが可能です。

CloudWatch Logsでログ監視を実装することは、とても手軽に行うことができますので、
一緒に手順を見ていきましょう!

 

 

 

 

 

 

構成図

 

EC2の中にCloudWatch Logsに使用するエージェントをインストールして、エージェントがEC2内に存在するログをコンソールに送ります。
次に、コンソールで設定している特定の文字列を含む条件に沿って、アラートが送信されるという流れになります。
構成を見てもそこまで難しくないと思いますので、頑張って設定していきましょう!

 

 

 

 

 

 

 

構築手順

①IAMロールを作成

①-①IAM>ロールに移動して【ロール作成】をクリック

 

 

 

 

 

①-②以下を選択して【次へ】をクリック

信頼されたエンティティタイプ:AWSのサービス
ユースケース:EC2

 

 

 

 

 

①-③【CloudWatchFullAccess】を選択して【次へ】をクリック

 

 

 

 

 

①-④ロール名と説明を記入して【ロールを作成】をクリック

 

 

 

 

 

①-⑤EC2>作成したインスタンス選択>アクション>セキュリティ>IAMロールを変更をクリック

 

 

 

 

①-⑤先ほど作成したIAMロールを選択して【Update IAM role】をクリック

 

 

 

 

*作成したインスタンスのセキュリティタブで以下になっていれば、適用完了です。

 

 

 

 

 

 

②CloudWatchLogs エージェント設定

②-①サーバーにログイン

 

 

 

②-②CloudWatch Logs エージェントをインストール

*Amazon Linuxの場合は下記コマンドでインストールできます

yum install amazon-cloudwatch-agent

 

*Amazon Linux以外のOSの場合はインストール方法が違います。
CentOSの場合は公式を参考にインストール方法を記載しておりますので以下を参照してください。

 

1.CloudWatch エージェントをダウンロード

*OSごとにダウンロードリンクが違うので、こちらを参照してください

wget https://s3.amazonaws.com/amazoncloudwatch-agent/centos/amd64/latest/amazon-cloudwatch-agent.rpm

 

 

2.CloudWatch エージェントをインストール

rpm -U ./amazon-cloudwatch-agent.rpm

 

 

*また、以下エージェントは非推奨になりますので、上記でインストールするようにしてください

yum install awslogs

 

 

 

 

②-③セットアップ用wizardを起動する

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

 

 

 

 

②-④エージェント設定をする

================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
On which OS are you planning to use the agent?
(どのOSでエージェントを使用する予定ですか?)
1. linux
2. windows
3. darwin
default choice: [1]:*Linuxの場合は1を選択してください
1
Trying to fetch the default region based on ec2 metadata...

Are you using EC2 or On-Premises hosts?
(EC2またはオンプレミスのホストを使用していますか?)
1. EC2
2. On-Premises
default choice: [1]:
*EC2の場合は1を選択してください
1

Which user are you planning to run the agent?
(どのユーザーでエージェントを実行する予定ですか?)
1. root
2. cwagent
3. others
default choice: [1]:
*rootで問題ない場合は1を選択してください
1

Do you want to turn on StatsD daemon?
(StatsDデーモンをオンにしますか?)
1. yes
2. no
default choice: [1]:
*カスタムメトリクスを収集するのに必要ですので、1を選択してください
1

Which port do you want StatsD daemon to listen to?
(StatsDデーモンはどのポートをリッスンしますか?)
default choice: [8125]
*問題なければEnterをクリック

What is the collect interval for StatsD daemon?
(StatsDデーモンの収集間隔を教えてください)
1. 10s
2. 30s
3. 60s
default choice: [1]:
*問題ない場合は1を選択してください
1

What is the aggregation interval for metrics collected by StatsD daemon?
(StatsDデーモンが収集するメトリクスの集計間隔を教えてください)
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:
*問題ない場合は4を選択してください
4

Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start?
(CollectDからメトリクスを監視しますか?警告:CollectDがインストールされていないと、Agentの起動に失敗します)
1. yes
2. no
default choice: [1]:
*cloudwatchlogsのみ使用するので2を選択してください
2

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
(CPUやメモリなど、ホストの指標を監視したいですか?)
1. yes
2. no
default choice: [1]:
*cloudwatchlogsのみ使用するので2を選択してください
2

Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
(移行用にインポートする既存のCloudWatch Log Agent(http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html)の設定ファイルはありますか?)
1. yes
2. no
default choice: [2]:
*cloudwatchlogsの設定ファイルはないので、2を選択してください
2

Do you want to monitor any log files?
(ログファイルを監視しますか?)
1. yes
2. no
default choice: [1]:
*cloudwatchlogsの設定ファイルが必要なので1を選択してください
1

Log file path:
*指定したいログのパスを記入してください
/var/log/messages

Log group name:
*指定したいロググループ名を記入してください
default choice: [messages]
cloudwatchlogs-test

Log stream name:
*指定したいログストリーム名を記入してください
default choice: [{instance_id}]
/var/log/messages

Log Group Retention in days
(ロググループの保存期間)
1. -1
2. 1
3. 3
4. 5
5. 7
6. 14
7. 30
8. 60
9. 90
10. 120
11. 150
12. 180
13. 365
14. 400
15. 545
16. 731
17. 1827
18. 2192
19. 2557
20. 2922
21. 3288
22. 3653
default choice: [1]:
*指定したいログの保持期間を記入してください(-1は無制限になります)
1

Do you want to specify any additional log files to monitor?
(監視するログファイルを追加で指定しますか?)
1. yes
2. no
default choice: [1]:
*設定ファイルを追加しない場合は2を選択してください
2
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
        "agent": {
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/messages",
                                                "log_group_name": "cloudwatchlogs-test",
                                                "log_stream_name": "/var/log/messages",
                                                "retention_in_days": -1
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "metrics_collected": {
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.

Do you want to store the config in the SSM parameter store?
(コンフィグをSSMパラメータストアに格納するか?)
1. yes
2. no
default choice: [1]:
*SSMに登録する必要がない場合は2を選択してください
2
Program exits now.

 

 

*補足資料

StatsDとは?

CollectDとは?

 

 

 

 

②-⑤エージェントを起動

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

 

 

 

 

②-⑥エージェントの状態を確認

systemctl status amazon-cloudwatch-agent

 

● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
   Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-08-05 06:33:34 UTC; 3min 46s ago
 Main PID: 1352 (amazon-cloudwat)
   CGroup: /system.slice/amazon-cloudwatch-agent.service
           mq1352 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent/etc/env-config.json -pidfile /opt/aws...

Aug 05 06:33:34 ip-172-31-39-31.ap-northeast-1.compute.internal systemd[1]: Started Amazon CloudWatch Agent.
Aug 05 06:33:34 ip-172-31-39-31.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1352]: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json does not exist or cannot read. Skipping it.
Aug 05 06:33:34 ip-172-31-39-31.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1352]: I! Detecting run_as_user...

 

 

 

 

 

 

③コンソールで収集されているか確認

③-①cloudwatch>Log groupsで指定したロググループを確認してクリック

 

 

 

 

③-②指定したログストリーム名でログが保存されていることを確認してクリック

 

 

 

 

③-③正常に収集できているかログを確認

 

 

 

 

 

④メトリクスフィルターを作成

④-①【メトリクスフィルターを作成】をクリック

 

 

 

④-②フィルターパターンを定義

*様々なパターンの定義方法があるので、こちらを参照してください

 

 

 

 

 

④-③フィルターパターンをテストして問題がなければ【Next】をクリック

 

 

 

*テスト方法
1.テストするログデータを選択から【カスタムログ】か【ログストリーム名】を選択

 

 

2.【イベントメッセージをログ記録】にフィルターパターンに合うログを作成して【パターンをテスト】をクリック

 

 

3.テスト結果が反映されれば完了

 

 

 

 

 

 

④-④以下情報を記入する

フィルター名:フィルター自体の名前
メトリクス名前空間:CloudWatchがメトリクスを送信する名前空間の名前
メトリクス名:指定した名前空間下に作成されるメトリクスの名前
メトリクス値:メトリクスとして発行される際の数値
デフォルト値:パターンが一致しない時にメトリクスに発行される値。空白のままにすると値が発行されない

 

 

 

 

④-⑤問題がなければ【メトリクスフィルターを作成】をクリック

 

 

 

 

 

④-⑥以下のように作成されたら完了

 

 

 

 

 

 

⑤SNSを設定

⑤-①SNS>トピックで【トピックの作成】をクリック

 

 

 

 

⑤-②以下情報を設定して【トピックの作成】をクリック

タイプ:スタンダード
名前・説明:自由に指定してください

 

 

 

 

⑤-③【サブスクリプションの作成】をクリック

 

 

 

 

 

⑤-④以下情報を記入して【サブスクリプションの作成】をクリック

プロトコル:Eメール
エンドポイント:自身のメールアドレス

 

 

 

 

⑤-⑤確認メールが届くので【Confirm subscription】をクリック

 

 

 

 

 

⑤-⑥以下表示が出たら完了

 

 

 

 

 

 

⑥CloudWatchアラームを作成

⑥-①テストとしてサーバー内の指定したログファイルに特定の文字列を含むログを出力

*messagesを指定しているので、loggerコマンドを使っておりますが、ログを出力できるなら何でも構いません
*一度でもメトリクスフィルターで検知できないとアラーム作成の際にメトリクスを選択できないのでテストしています

logger "ERROR"

 

 

 

 

⑥-②CloudWatch>アラームで【アラームの作成】をクリック

 

 

 

 

 

⑥-③作成した名前空間>ディメンションなしのメトリクス>作成したメトリクス名を選択して【メトリクスの選択】をクリック

 

 

 

 

 

⑥-④条件を設定して【次へ】をクリック

*以下では1回以上特定の文字列を検知したら、アラームを通知するという条件にしています

 

 

 

 

 

⑥-⑤作成したトピックを指定して【次へ】をクリック

*文字列監視になるのでリカバリー通知設定は必要ありません

 

 

 

 

 

 

⑥-⑥作成したアラーム名を記入して【次へ】をクリック

 

 

 

 

 

 

⑥-⑦設定内容に問題がなければ【アラームの作成】をクリック

 

 

 

 

 

 

⑦動作確認

⑦-①テストとしてサーバー内の指定したログファイルに特定の文字列を含むログを出力

*messagesを指定しているので、loogerコマンドを使っておりますが、ログを出力できるなら何でも構いません

logger "ERROR"

 

 

 

 

⑦-②アラームが【アラーム状態】になっていることを確認する

 

 

 

 

⑦-③アラームに関するメールが届いているか確認する

*アラームメールが自分のメールアドレス宛てに届いていれば完了です

 

 

 

 

 

まとめ

いかがでしたでしょうか?
CloudWatchLogsで収集したログをメトリクスフィルターで特定の文字列を設定してアラームとして通知させることは、そんなに難しくなかったのではないかと思います。
AWSで文字列監視をする際は、CloudWatchを利用すると簡単に実際することができるので、
ぜひ、運用監視で活用してみてください!

また、通知させるところは、Eメール以外にもSlack・Teems・Chatworkにも通知できます。
設定方法は前回にブログでも書いているので気になる方はチェックしてくださいね!
ありがとうございました!

・CloudwatchアラームをTeams・Chatworkに通知してみた!

CloudwatchアラームをTeams・Chatworkに通知してみた!

・AWS ChatbotでCloudWatchアラームをslackへ通知しよう!!

AWS ChatbotでCloudWatchアラームをslackへ通知しよう!!

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
6
読み込み中...
6 票, 平均: 1.00 / 16
130
facebook twitter はてなブックマーク

この記事をかいた人

About the author

ヒデ@インフラエンジニア

超面白かった面接がきっかけで。
大阪のシステムソリューション部に中途入社した人
サーバー・クラウドの構築や運用を業務としています!
一応、LPIC1・AWS SAAを資格は持っています

実はラーメンが大好きで
大阪では60店舗以上潜入調査済み(。-∀-) ニヒ
ビヨンドのラーメン王を目指し奮闘中!!

Twitterもやっているのでフォローしてね(´∇`)
右角のTwitterマークをクリック!!