2017-02-08 5 views
1

高可用性を確保するため、私のアプリケーションは複数のEC2インスタンスで動作します。デフォルトのログレベルは、アプリのINFOです。しかし、時にはデバッグの目的で、ログレベルをDEBUGに更新したいと考えています。ログレベルを更新する要求はElasticLoadBalancerを通過し、要求は複数のEC2インスタンスのいずれか1つに委譲されます。そのインスタンスで実行されているアプリのログレベルは更新されますが、他のインスタンスのアプリはまだレベルINFOでログに記録されます。私はすべてのアプリのログにDEBUGレベルを記録したい。複数のEC2インスタンスでのログレベルの更新

私はSpring、SLF4J、Logbackを使用しています。

もし私がどうにかして集中化されたログレベルの情報を作成し、その要求が集中化された場所のレベルを更新しても、アプリケーションはログレベルを要求しないので、変更に関するすべてのインスタンスの親密なアプリケーション。あなたはZookeeperを見てみることをお勧めします

答えて

0

インスタンスのタグがあります。いくつかのタグがデフォルトで存在し、独自のタグを作成することができます。したがって、アプリケーションが現在実行されているすべてのインスタンスを識別するタグを追加すると、すべてのインスタンスのIPアドレスを簡単に取得できます。

DescribeInstancesRequest request = new DescribeInstancesRequest(); 

Filter filter1 = new Filter("tag:Environment", Collections.singletonList("Sandbox")); 
Filter filter2 = new Filter("tag:Application", Collections.singletonList("xxxxx")); 
Filter filter3 = new Filter("tag:Platform", Collections.singletonList("xxxx")); 

InstanceProfileCredentialsProvider mInstanceProfileCredentialsProvider = 
       new InstanceProfileCredentialsProvider(); 
AWSCredentials credentials = mInstanceProfileCredentialsProvider.getCredentials(); 

AmazonEC2 ec2Client = new AmazonEC2Client(credentials); 
List<String> privateIps = new ArrayList<>(); 

ec2Client.describeInstances(request.withFilters(filter1, filter2, filter3)).getReservations().forEach(
       reservation -> reservation 
         .getInstances() 
         .forEach(instance -> privateIps.add(instance.getPrivateIpAddress()))); 

for (String privateIp : privateIps) { 
    hitTheInstance(privateIp); 
} 

ここでは、3つのタグを使用してインスタンスを除外しています。

1

のZooKeeperは、命名分散同期を提供し、グループのサービスを提供し、設定情報を維持するための中央集中型のサービスです。

セットアップが簡単で、小さなものから始めるのは簡単です。あなたのEC2ノードで動作するアプリケーションは、 "リスナ/ウォッチャ"インタフェースを実装するだけです。これにより、設定が変更されたときにアプリに通知されます(たとえば、グローバルログレベルをDEBUGに設定することを決めた場合)。

この設定変更に基づいて、各ノードが更新するようにELBバイパス手作業REST呼び出しのすべての種類を思いつくことなく、すべてのノードがローカルログレベルを更新します

実装するたびに、必然的に発生するバグや競合状態を修正する作業がたくさんあります。これらの種類のサービスを実装することが難しいため、アプリケーションは当初はそれに気を取られていました。変更の存在下では脆弱になり、管理が難しくなります。正しく実行されたとしても、これらのサービスの実装が異なると、アプリケーションのデプロイ時に管理が複雑になります。


これはあなたのために働く場合は、必要に応じて、あなたが展開されたアプリにパッケージまたはそれらと一緒にコピーする必要がある設定の量を制限し、飼育係に追加の設定を追加することができます。

2

AWSソリューションが必要な場合は、snsを利用できます。

アプリがインスタンス化されたら、http通知のsnsトピックにエンドポイントを登録します(プライベートIPを使用)。 したがって、ロード・バランサを介してLOGレベルを変更する代わりに、snsメッセージを出すことができ、メッセージは登録されたエンドポイントに送信されます。

アプリが終了すると、snpからhttpエンドポイントを登録解除することに注意してください。

0

Amazons Remote Management(実行コマンド)では、インスタンスでコマンドを実行できます。ログレベルを変更するには単純なスクリプトが必要です。

しかし、それを設定し、すべての必要なIAM rightsを付与設定することは容易ではない。

関連する問題