Edited at

AWS ELBの正常稼働インスタンス数をチェックするrubyプラグイン

More than 1 year has passed since last update.

AWSでELB配下に複数のAPサーバを配置しているシーンで確認したいのがActiveなAPサーバ数。

正常稼働APサーバのしきい値以下になった際にアラートするようなNagiosプラグインをRubyで実装したので共有します。

動作確認をした環境情報


  • Ruby 2.3.3

  • aws-sdkのgemは2.8.0 (gem install aws-sdk -v2.8.0)

Rubyで書いたプラグインファイルはこちら。

/usr/local/nagios/etc/plugins/check_aws_elb_instances.rb

#!/usr/bin/ruby

require 'aws-sdk'

class MonitoringAwsElb
def initialize options = {}
# nagiosユーザのIAMを利用してください
@client = Aws::ElasticLoadBalancing::Client.new(
access_key_id: 'XXXXX',
secret_access_key: 'XXXXX',
region: options[:region]
)
@name = options[:name]
@count = options[:count]
end

def run
response = @client.describe_instance_health(load_balancer_name: @name)
in_services = response.instance_states.select{|instance| instance.state == 'InService'}.size
puts "In Service servers are #{in_services} instances."
if in_services >= @count
exit(0)
else
exit(2)
end
end
end
MonitoringAwsElb.new(name: ARGV[2], region: ARGV[3], count: ARGV[4].to_i).run

Nagiosプラグイン作成時のポイントは、終了コードの定義だけです。Nagiosでは以下のように定義されています。


  • 0:OK

  • 1:WARNING

  • 2:CRITICAL

  • 3:UNKNOWN

今回は、0と2のみを利用しています。

あと、プラグインに渡す引数の情報は以下の通り。


  • ARGV[2] : ELBのname、

  • ARGV[3] : ELBのregion

  • ARGV[4] : 正常に稼働とみなすActiveなAPサーバ数

プラグインができたので、あとは実際に監視しているホスト/サービスに設定を組み込みます。

まずはコマンドの定義。

define command {

command_name check_elb_instances
command_line /usr/local/nagios/etc/plugins/check_aws_elb_instances.rb -H '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$'
}

続いて監視対象サービスの設定。

define service {

use generic-service
host_name www.example.net
service_description AWS ELB
check_command check_elb_instances!sample-app-elb!ap-northeast-1!10

ここのcheck_commandのところで、今回作成したプラグインに渡す引数を定義します。

今回の例では、ap-northeast-1 で稼働する sample-app-elb という名前のELBに紐づくIn-Service状態のAPサーバが10台未満になったらアラートする設定 をしています。

たったこれだけです。

日頃からRubyのコードを書いている人にとってはとても簡単ですね。

Nagiosのプラグイン作成はとても簡単ですので、サービスの信頼性を高めたい方は独自の監視機構を実装してみてはいかがでしょうか。