ヤマムギ vol.10 (AWS)EC2モニタリングハンズオン 手順
このブログは2020/5/6に開催しました、「ヤマムギ vol.10 (AWS)EC2モニタリングハンズオン勉強会」の手順です。
「AWSではじめるLinux入門ガイド」出版 & 「AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー」出版一周年記念勉強会を開催しました。
解説は、勉強会内で説明しますので、こちらのブログには手順のみを記載します。
※個人検証向けとしての設定です。
目次
環境準備
デフォルトVPCのEC2にSystemsManager セッションマネージャーから接続します。
AWSアカウントをお持ちでない方は、「ヤマムギ vol.7 AWSアカウント作成 & 最初の設定ハンズオン 手順」をご参考の上、作成してください。
検証用のEC2インスタンスは「ヤマムギ vol.8 (AWS)EC2でLinuxサーバー構築 手順」をご参考の上、作成してください。
やること
EC2のCloudWatch Agentをインストールして、カスタムメトリクスと、CloudWatch LogsでSecure Logを収集し、メトリクスフィルタで不正アクセス試行をアラーム検知します。
ダッシュボードも作成します。
IAMロールにポリシーを追加
1). EC2インスタンスに割り当てているIAMロールに、ポリシーを追加します。
追加するポリシーは CloudWatchAgentAdminPolicy にしてください。
“cloudwatchagent”などで検索すると表示されます。
CloudWatchAgentServerPolicyとの違いは、パラメータストアに書き込めるかどうかです。
このハンズオンでは、CloudWatchAgentの設定を、パラメータストアに書き込んで管理しますので、CloudWatchAgentAdminPolicyにします。
CloudWatch Agentのインストール
「ヤマムギ vol.8 (AWS)EC2でLinuxサーバー構築 手順」で起動したEC2インスタンスに、CloudWatch Agentをインストールします。
2). サービスで検索して、SystemsManagerダッシュボードにアクセスします。
“sys”とかで出てきます。
3). 左ペインで[マネージドインスタンス]を選択すると、EC2インスタンスが確認できます。
4). 左ペインで[Run Command]を選択して、[Run command]ボタンを押下します。
5). コマンドドキュメント AWS-ConfigureAWSPackage を選択します。
“AWS-Con”などで検索すると出てきます。
6). ドキュメントのバージョン、Action、Installtion Typeはデフォルトのままです。
Nameに AmazonCloudWatchAgent、Versionに latest と入力します。
7). ターゲットは[インスタンスを手動で選択する]で、インスタンスを直接選択します。
8). 今回は検証なので、S3バケットへの書き込みは、オフにしておきます。
[実行]ボタンを押下します。
9). コマンド実行が成功したことを確認します。
CloudWatch Agentの設定
10). セッションマネージャでEC2インスタンスに接続します。
11). amazon-cloudwatch-agent-config-wizard を実行します。
1 2 |
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
============================================================= = Welcome to the AWS CloudWatch Agent Configuration Manager = ============================================================= On which OS are you planning to use the agent? 1. linux 2. windows default choice: [1]: Trying to fetch the default region based on ec2 metadata... Are you using EC2 or On-Premises hosts? 1. EC2 2. On-Premises default choice: [1]: Which user are you planning to run the agent? 1. root 2. cwagent 3. others default choice: [1]: Do you want to turn on StatsD daemon? 1. yes 2. no default choice: [1]: Which port do you want StatsD daemon to listen to? default choice: [8125] What is the collect interval for StatsD daemon? 1. 10s 2. 30s 3. 60s default choice: [1]: What is the aggregation interval for metrics collected by StatsD daemon? 1. Do not aggregate 2. 10s 3. 30s 4. 60s default choice: [4]: Do you want to monitor metrics from CollectD? 1. yes 2. no default choice: [1]: Do you want to monitor any host metrics? e.g. CPU, memory, etc. 1. yes 2. no default choice: [1]: Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply. 1. yes 2. no default choice: [1]: Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available? 1. yes 2. no default choice: [1]: Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file. 1. 1s 2. 10s 3. 30s 4. 60s default choice: [4]: Which default metrics config do you want? 1. Basic 2. Standard 3. Advanced 4. None default choice: [1]: Current config as follows: { "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "collectd": { "metrics_aggregation_interval": 60 }, "disk": { "measurement": [ "used_percent" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 10, "service_address": ":8125" } } } } Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items. 1. yes 2. no default choice: [1]: Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration? 1. yes 2. no default choice: [2]: |
ここまでデフォルト選択のまますすめてきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Do you want to monitor any log files? 1. yes 2. no default choice: [1]: Log file path: /var/log/secure Log group name: default choice: [secure] Log stream name: default choice: [{instance_id}] Do you want to specify any additional log files to monitor? 1. yes 2. no default choice: [1]: Log file path: /var/log/messages Log group name: default choice: [messages] Log stream name: default choice: [{instance_id}] Do you want to specify any additional log files to monitor? 1. yes 2. no default choice: [1]: 2 |
12). ログの設定です。
サンプルとして、 /var/log/secure と /var/log/messages を指定しました。
他のログファイルをさらに追加して設定してもいいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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? 1. yes 2. no default choice: [1]: What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy) default choice: [AmazonCloudWatch-linux] Trying to fetch the default region based on ec2 metadata... Which region do you want to store the config in the parameter store? default choice: [ap-northeast-1] Which AWS credential should be used to send json config to parameter store? 1. ASIA2KU4567JRKB76G42(From SDK) 2. Other default choice: [1]: Successfully put config to parameter store AmazonCloudWatch-linux. Program exits now. |
13). パラメータストアに書き込むか、聞かれますのでデフォルトのまま、書き込む設定ですすめて完了です。
必要パッケージのインストール
1 2 3 |
$ sudo amazon-linux-extras install -y epel $ sudo yum -y install collectd |
14). CloudWatchAgentを実行するために必要なパッケージをインストールしておきます。
CloudWatchAgentの開始
SystemsManagerダッシュボードに戻ります。
15). SystemsManager左ペインで[パラメータストア]を確認してみましょう。
16). AmazonCloudWatch-linux が作成されています。
17). 値のセクションを見ると、ターミナルで設定した情報が格納されています。
例えば、モニタリングするログファイルを追加したいときには、この値を編集することで追加できます。
18). 左ペインで[Run Command]を選択して、[Run command]ボタンを押下します。
19). コマンドドキュメントは、 AmazonCloudWatch-ManageAgent を選択します。
20). Optional Configuration Location でパラメータ名 AmazonCloudWatch-linux を入力します。
他はデフォルトです。
21). ターゲットは[インスタンスを手動で選択する]で、インスタンスを直接選択します。
23). 今回は検証なので、S3バケットへの書き込みは、オフにしておきます。
[実行]ボタンを押下します。
24). 成功を確認します。
メトリクスフィルタの作成
25). CloudWatchにアクセスします。
26). ロググループを選択します。
27). secure を選択して、[メトリクスフィルターの作成]ボタンを押下します。
28). フィルターパターンに、 Invalid user と入力して、[メトリクスの割り当て]ボタンを押下します。
29). メトリクス名を任意に設定して、[フィルターの作成]ボタンを押下します。
30). [アラームの作成]を選択します。
31). 条件を「1以上」などにします。
32). 通知先のSNSトピックは、メールエンドポイントをサブスクリプションにしている、既存のSNSトピックがあればそれを利用してもいいですし、新規で作成してもいいです。
新規の場合は、確認メールの承認が必要ですので、受信メールを確認して、Confirmしておきましょう。
33). アラーム名を任意で入力して、[次へ]ボタンを押下して、次の確認画面でアラームを作成します。
ダッシュボードを作成
34). [ダッシュボード]を選択して、[ダッシュボードの作成]ボタンを押下します。
35). ダッシュボード名を任意で入力して、[ダッシュボードの作成]ボタンを押下します。
36). [線]を選択して[設定]ボタンを押下します。
37). メトリクスが選択できます。
CloudWatchAgentによって収集されているカスタムメトリクス「CWAgent」もあります。
38). 例として、[EC2]-[インスタンス別メトリクス]-[CPUUtilization]を選択して、[ウィジェットの作成]ボタンを押下します。
39). 他のメトリクス(例えば、カスタムメトリクスのメモリ使用量など)も、[ウィジェットの追加]ボタンから追加できます。
ウィジェットの追加が完了すれば、[ダッシュボードの保存]ボタンで保存しておきます。
40). 右上の時間設定で、[現地タイムゾーン]が選択できます。
41). 右上の更新設定で、[自動更新]とすることもできます。
動作テストをしてみる
42). セッションマネージャでEC2に接続します。
1 2 |
$ ssh user@172.31.32.238 |
43). EC2自身のプライベートIPアドレスに対して、存在しないユーザーでsshコマンドを実行してみましょう。
適当にいろんなユーザー名で数回行ってみましょう。
初回の「Are you sure you want to continue connecting (yes/no)? 」メッセージは yes ですすめましょう。
「Permission denied (publickey,gssapi-keyex,gssapi-with-mic).」となります。
44). secureログを確認すると、
1 2 3 4 5 6 |
$ sudo cat /var/log/secure ~省略~ May 5 23:28:12 ip-172-31-32-238 sshd[10375]: Invalid user user from 172.31.32.238 port 34918 May 5 23:28:12 ip-172-31-32-238 sshd[10375]: input_userauth_request: invalid user user [preauth] May 5 23:28:12 ip-172-31-32-238 sshd[10375]: Connection closed by 172.31.32.238 port 34918 [preauth] |
45). 「Invalid user」文字列が出力されています。
46). CloudWatchのLogMetricsを確認してみましょう。
(反映が遅れる場合もあります)
47). メトリクス画面から[アクション]-[ダッシュボードに追加]もできます。
48). 例えば、ウィジェットタイプ数値などで追加します。
49). SNSトピックの通知先で設定したメールアドレスに、アラームメールが送信されていることを確認します。
リソースの削除
メトリクス以外は削除できますので、必要なければ忘れないように削除しておきましょう。
カスタムメトリクスは送信が止まれば課金が止まりますので、EC2インスタンスを停止、終了すればOKです。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
Java SE 7 Silver対策勉強をしながらメモ 2015/2/6
本日は例外の続き。 これで参考書の章立てはとりあえず終了!! 明日からは模試と練 …
-
ゴールデンウィーク10日連続デモ解説勉強会にチャレンジします
これまでに執筆した書籍の関連デモを解説する30分の勉強会を4/29~5/8の10 …
-
「UbieとSmartHRが語る プロダクトデザイナーのリアル」に参加しました
UbieさんとSmartHRさんの「UbieとSmartHRが語る プロダクトデ …
-
AWS Application Discovery Serviceのエージェントを実行
本来はオンプレミスのサーバーにエージェントをインストールして、自動でアプリケーシ …
-
AWS Organizations SCPで許可ポリシーの設定をし継承の関係を確認する
ユーザーガイドのサービスコントロールポリシーの例にはDeny(拒否)ばっかりでA …
-
AWS Summit Tokyo 2017 聴講したセッションのメモ
2017年6月に参加しましたAWS Summitで聴講したセッションのメモを記し …
-
「【大阪リージョンオープン記念】AWS Expert Online for JAWS-UG #14」に参加しました
AWS Expert Online for JAWS-UG #14に参加しました …
-
Amazon Linux にnodejsとmongoDBをインストールする
EPEL リポジトリを利用してnodejsとnpmをインストールする [bash …
-
Microsoft TeamsのIncoming Webhooksを使ってAWS Lambda(Python)からFeedlyの記事を自動投稿する
Microsoft Teamsの検証を始めましたので、Slackで自動化している …
-
Amazon EC2のAMIイメージを自動取得して保持日数が過ぎたら削除
画像の保存をEC2に戻した事もあってEC2のバックアップの自動取得を勉強がてらや …