Datadog & APIGateway & LambdaでNginxの自動再起動を実装してみた

Introduction

こんにちは、JJ(@JJ_1123_I)です! 仕事柄、自社クラウドはじめ、AWSなど様々なクラウドサービスを利用する機会が多いのですが、今はモニタリングサービスにも手を出してます。 そこで今一番が関心があるのが「Datadog」です!
AWSやAzureのほか、250以上の環境やツールとのAPI連携で簡単に連携出来るし、インフラだけではなくフロントまでもDatadogのダッシュボード画面上で統合的にモニタリング可能なところがかなり良さげです。 今回は、このサイトを参考にDatadogを活用し、 EC2で走っているNginxプロセスが停止した際、自動で再起動する仕組みを実装してみようと思います。

完成イメージ

undefined.jpg
このサイトでやっている事を再現したい。

EC2準備

「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」の「t2.micro」で立てました。
作成方法よくわからない方はここを参考まで。

エージェントをインストール

1. EC2にSSH接続

下記コマンドをエディタから実行し、「Amazon Linux AMI」と表示されればOKです。

2. Nginxをインストール

下記コマンドをエディタから実行してください。
無事完了出来ていれば、Nginxがインストールされています。

3.Datadog Agentをインストール

下記コマンドをエディタから実行し、「Complete!」と表示されればOKです。
めっちゃ簡単です!
undefined.jpg
Instructions > Agent > Amazon Linux

4. Datadog Live Process Monitoringを有効化

process検知はデフォルト無効となっているのでLive Process Monitoringを有効に変更します。
エディタでコンフィグファイルを開きます。 「process_config:」と「enabled: “true”」を有効にしてあげてください。
undefined.jpg
少し時間を置いた後にプロセス一覧で該当サーバのnginx processが取れていればOKです!
Infrastructure > processes

API Gatewayの実装

1. API Gatewayの作成

API Gatewayを利用してLambdaを叩くAPIを作成します。
undefined.jpg
AWS マネージメントコンソールからAPI Gateway > APIの作成
今回は「REST」「新しいAPI」「任意のAPI名」「リージョン」で作成しました。

2. リソース作成

undefined.jpg
アクション > リソースの作成 でAPIのリソースを作成します。
「任意のリソース名」のみ入れて作成しました。

3.メソッド作成

undefined.jpg
アクション > メソッドの作成 で先ほど作ったリソースにメソッドを追加します。
今回はPOSTにしてます。
ここまでやったら次はLambdaを作成していきます。

Lambdaの実装

1. Lambdaの作成

undefined.jpg
AWS マネージメントコンソールからAPI Gateway > 関数作成
今回は「一から作成」を選択し、以下のように項目を埋めてます。IAMロールはこのサイトを参考に作成しました。

2. Lambdaにコードをデプロイ

Lambdaにはコードをパッケージ化してアップロードします。
対象のEC2サーバへSSH接続し、ソースコードを作成します。 ソースコードは参考サイトを元にこんな感じです。 次にparamikoを使っているので有効にしていきます。
必要なライブラリがあるのでyumでインストールしておきます。 paramikoをインストールします。 最後にLambda Functionを含め、ルートディレクトリ以下を全てzipファイルにまとめてLambdaへデプロイします。 次にソースの通り、キーペアをS3から取得しているのでこれをやっていきます。

S3のバケットにキーペアを保管

undefined.jpg
S3バケットを作成し、該当サーバのキーペアを保管します。
バケット名は上記ソースで指定したパケット名にしてください。
保管したら、LambdatとAPI Gatewayのテストでこんな感じで成功すればOKです。
undefined.jpg
Lambda
undefined.jpg
API Gateway

Datadogのアラート設定

1. DatadogでProcessのアラート設定

undefined.jpg
Monitor > Process から設定を行います。
undefined.jpg
こんな感じで閾値が1以下であれば、アラートをあげるようにすれば良いかと思います。

2.Webhooksの設定

undefined.jpg
Integrations > Webhooks から設定を行います。
URLは、APIGatewayの入れればOKです!
APIGatewayでAPIキーを有効にしている場合は、HeadersにAPIキーをいれてあげてください。

動作確認

動作確認は、EC2にSSH接続し、Nginxを落として再起動が自動で行われる事を確認します。
以下のコマンドをエディタに入力し、Nginxを停止させます。 5分待ちDatadog上でエラーを検知し、1分後に復旧の通知を確認出来ればOKです。

まとめ

ほぼ素人の当方でもなんとか実装出来ました。
プロセス再起動を自動化できたのはかなり勉強になったので、今後もこういった自動化の仕組みを検討し、実装していこうと思います。

参考

https://blog.mmmcorp.co.jp/blog/2017/06/30/integrate_datadog_lambda/
https://dev.classmethod.jp/etc/datadog-live-process-monitoring/
https://dev.classmethod.jp/etc/aws-lambda-paramiko
https://qiita.com/Quikky/items/2897573a42fd71cfc47f

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です