モバイルアプリにAmazonEC2を使用しています。特定の時点でのアプリケーションの負荷によっては、コストを節約するために、新しいインスタンスを生成し、負荷が低いときにそれらを停止する場合があります。
このような動的な環境のNagios構成にどのように対応しますか?管理対象ハードウェアを扱う場合、構成ファイルは予測可能です。この場合、Nagios、Capistrano、およびその他の多数の構成ファイルを追加する必要があります。 Capistranoは、アプリサーバーの新しいビルドをどこにデプロイするかを知る必要があります。 Nagiosは、監視のために既存のインスタンスを削除するか、新しいインスタンスを追加することを知っている必要があります。 Nagiosは、ノードが意図的に停止されたかどうか、またはエラーが原因でホストが停止したかどうかも知る必要があります。
これは、VPS /動的インスタンスの素晴らしい世界でどのように行われますか?
ノード情報からNagios構成を書き出す構成管理ツール(この場合はChef)を使用します。
Nagios構成をファイルに書き込む自分の小さなphpスクリプトのセットを作成しました。 Nagiosはテキストファイルだけなので簡単なので、サーバーの種類ごとにテンプレートを作成するだけです。次に、サーバーが起動したら、テンプレートを使用してファイルを追加します。ファイル内で変更される唯一のデータは、ホストのIPと名前です。
より静的なサーバーについては、ec2-describe-instances
を実行し、返されたインスタンスごとにファイルを作成するスクリプトを作成しました。各インスタンスはtag:Purpose = XXXXでマークされているので、適用するテンプレートがわかります。
自動スケーリンググループでは、メッセージをSQSキューに送信するas-put-notification-configuration
コマンドを使用して通知を設定します。 phpスクリプトはcrontabによって実行されます。スクリプトが実行されると、キューに新しいサーバーがないかチェックされます。新しいサーバーが見つかるたびに、新しいファイルが作成されます。サーバーが削除された場合も同じことが起こります。すでにChefを使用している場合は、おそらくChefなどを使用する方が簡単ですが、使用していない場合は、数日で私のような単純なphpサービスを作成できます。
いくつかの方法。
事前設定されたAmazonEC2テンプレートの使用。
可変化されたテンプレートでパペットマニフェストを使用する。
NagiosネットワークとAmazonVMの間にVPNをセットアップします。その後、すべてのAmazon VMには静的IPがあり、DNSをセットアップすることもできます。nagiosを実行してすべてを監視しています。 Amazonインスタンス。elastic-ipも必要ありません。VPNの出力にはopenvpnを使用します。
外部コマンドをリッスンするNagiosをビルドし、それに応じて構成を更新します。最終的に、マシンはNagiosで自分で登録、登録解除、一時停止、再開できるようになります。
Opsview を使用します。これは、さらに別のnagios + database + rest-apiラッパーです。これがすべての人(または私たち)にとって最善の解決策であるかどうかはわかりませんが、ノード(または他の管理ノードからの単純なREST API)を介してNagiosサーバーを動的に構成できます)起動したら、構成から削除します。Opsview(/ Nagios)サーバーのPuppetマニフェストの一部としてホストテンプレートの定義を使用し、監視対象のホストはそれに登録して、の一部として適切なホストテンプレートに参加します。彼らの人形マニフェスト。
より「一般的な」アプローチは、元のNagiosとその静的ファイルでもほとんどすべてで機能するはずですが、 Puppet Stored Configuration -これにより、スクリプトを作成して、好きなツールを構成できます。 puppetがマニフェストから収集する情報に基づいています。
フォレンジックの目的で、ノードが停止したときにノードの構成を完全に削除するのではなく、ノードと、起動中に収集された監視情報をアーカイブすることをお勧めします。
Nagiosでこの問題を解決するための特効薬はありません。ただし、capistranoには capify-ec2 があります。これは、Amazonのタグ付け機能を使用してサーバーの役割リストを解決するcapistranoの拡張機能です。