Zabbixによるオートスケーリングクラスタ監
視と
オペレーション自動化
ZabbixアグリゲーションとアクションによるEC2制御
2017/11/17
 CN:九龍真乙(くりゅうまおと)
 所属:自宅ラック勉強会
 :株式会社サーバーワークス
 Twitter: @qryuu
 クックパッド: https://cookpad.com/kitchen/4142562
 好きなAWSサービス:RDS,SystemsManager
著者紹介
2017/11/17
 全自動Zabbix
https://www.slideshare.net/qryuu/zabbix-20563483
 AutoScalingも怖くない、Zabbix自動登録
 http://blog.serverworks.co.jp/tech/2014/05/29/zabbix-auto-
registration/
 全自動Zabbix完全版
 https://qiita.com/qryuu/items/39548aa77ef0e8152630
 全自動Zabbix2.2&2.4
 https://www.slideshare.net/qryuu/zabbix2224
既出資料
2017/11/17
 Zabbixオートスケーリング監視のポイント
 Agent自動登録
 アグリゲートアイテム
 ディスカバリ自動削除
 オペレーション自動化のポイント
 AWS CLIの実行
 ホストインベントリの利用
目次
2017/11/17
Zabbixオートスケーリング監視のポイン
ト
2017/11/17
 Agent自動登録EC2UserData
 自動登録アクション設定
Agent自動登録の設定
2017/11/17
 #!/bin/bash
 zabbix_version=3.0 #Zabbixバージョン
 zabbix_server_ip=172.31.8.28 #ZabbixServer/ProxyのローカルIP
 zabbix_matadata=web #HostMataData
 echo [serverworks-zabbix] >> /etc/yum.repos.d/serverworks.repo
 echo name=Serverworks-Zabbix >> /etc/yum.repos.d/serverworks.repo
 echo baseurl=https://s3-ap-northeast-1.amazonaws.com/serverworks-yum-repos/zabbix/$zabbix_version/$basearch >>
/etc/yum.repos.d/serverworks.repo
 echo gpgcheck=0 >> /etc/yum.repos.d/serverworks.repo
 yum update
 yum install zabbix-agent zabbix-get zabbix-sender -y
 sed -i -e 's/LogFileSize=0/LogFileSize=10/g' /etc/zabbix/zabbix_agentd.conf
 sed -i -e 's/# EnableRemoteCommands=0/EnableRemoteCommands=1/g' /etc/zabbix/zabbix_agentd.conf
 sed -i -e 's/# LogRemoteCommands=0/LogRemoteCommands=1/g' /etc/zabbix/zabbix_agentd.conf
 sed -i -e "s/Server=127.0.0.1/Server=$zabbix_server_ip/g" /etc/zabbix/zabbix_agentd.conf
 sed -i -e "s/ServerActive=127.0.0.1/ServerActive=$zabbix_server_ip/g" /etc/zabbix/zabbix_agentd.conf
 sed -i -e 's/Hostname=Zabbix server/# Hostname=Zabbix server/g' /etc/zabbix/zabbix_agentd.conf
 sed -i -e 's/# HostnameItem=system.hostname/HostnameItem=system.hostname/g' /etc/zabbix/zabbix_agentd.conf
 sed -i -e "s/# HostMetadata=/HostMetadata=$zabbix_matadata/g" /etc/zabbix/zabbix_agentd.conf
 sed -i -e 's/# RefreshActiveChecks=120/RefreshActiveChecks=60/g' /etc/zabbix/zabbix_agentd.conf
 chkconfig zabbix-agent on
 service zabbix-agent start
EC2UserData
2017/11/17
 アプリケーションをインストールしたAMIを利用し、先ほどのホスト
メタデータを投入することで、ZabbixAgentのインストールおよび起
動が完了します。
 EC2 Auto Scalingの起動設定にUserDataを設定することで、
Auto Scalingされたインスタンスが自動的に監視対象となる
ようになります。
EC2UserData
2017/11/17
 自動登録アクションの条件にUserDataで指定したHostMataDataを登
録します。
自動登録アクション
2017/11/17
 ホストの登録先グループ、リンクさせるテンプレートを指定します。
自動登録アクション
2017/11/17
 Zabbix 3.0 から自動登録アクションでインベントリモードの設定が
行えるようになりました。
 インベントリ情報を利用したコマンド実行が設定しやすくなりまし
た。
自動登録アクション
2017/11/17
 AutoScalingを利用する環境では、複数のサーバーによるリソースス
ラスタが組まれます。
 その場合、ホストグループ内の最大値、最小値、平均値を監視でき
るアグリゲートアイテムの利用が適しています。
アグリゲートアイテム
2017/11/17
 AutoScalingを利用する環境では、複数のサーバーによるリソースス
ラスタが組まれます。
 その場合、ホストグループ内の最大値、最小値、平均値を監視でき
るアグリゲートアイテムの利用が適しています。
アグリゲートアイテム
2017/11/17
 アグリゲートテンプレートを作成する際にホストグループをマクロ
化して作成しておくと、汎用テンプレートとして利用可能です。
アグリゲートアイテム
2017/11/17
 特定のクラスタを表すホストを作成し、ホストマクロでホストグ
ループ名を
設定します。
アグリゲートアイテム
2017/11/17
 Auto Scaling環境では自動登録だけではなく、自動削除も必要です。
 自動削除にはネットワークディスカバリ機能を利用します
 ネットワークディスカバリを行う場合、グローバルIPではなくプラ
イベートIPが適しています。
 Zabbixサーバ/Zabbixプロキシを同一もしくはピアリングされたセグ
メントに配置します。
ディスカバリ自動削除
2017/11/17
 Auto scalingの頻度に合わせて、ディスカバリ周期およびディスカバ
リ範囲を設定します。
ディスカバリ自動削除
2017/11/17
 Auto scalingの頻度に合わせて、ディスカバリ周期およびディスカバ
リ範囲を設定します。
ディスカバリ自動削除
2017/11/17
 インスタンス削除後にメトリクス分析などを行いたい場合は、
削除ではなく無効化を行うように設定します。
ディスカバリ自動削除
2017/11/17
 インスタンス削除後にメトリクス分析などを行いたい場合は、
削除ではなく無効化を行うように設定します。
ディスカバリ自動削除
2017/11/17
 インスタンス削除後に監視設定も不要な場合は、削除を行います。
ディスカバリ自動削除
2017/11/17
 インスタンス削除後に監視設定も不要な場合は、削除を行います。
ディスカバリ自動削除
2017/11/17
オペレーション自動化のポイント
2017/11/17
 今回の構成では、インスタンスの再作成はAuto Scalingで実施します。
 Zabbixは障害が発生した際に、インスタンスのTerminateを実施しま
す。
AWS CLIの実行
2017/11/17
 Zabbixサーバもしくは、ZabbixProxyインスタンスにIAMロールをア
タッチしておきます。
 IAMロールにより、認証情報を明示せずにAWS CLIが実行可能になり
ます。
 実行したいAWS CLIは以下のものになります。
 aws ec2 terminate-instances --instance-ids <インスタンスID> --
region ap-northeast-1
 IAMロールでは aws configure によるデフォルトリージョンが指定出
来ないので、コマンド内でリージョンを明示します。
AWS CLIの実行
2017/11/17
 インスタンスIDを自動的にコマンドに入れる方法
 system.runを利用し、インベントリメタデータからインスタンスIDを
取得します。
 system.run["curl -s http://169.254.169.254/latest/meta-data/instance-
id"]
ホストインベントリの利用
2017/11/17
 アイテムとして取得しただけでは、アクションで利用しづらいので、
このデータを任意のホストインベントリに登録します。
ホストインベントリの利用
2017/11/17
 ホストインベントリマクロを利用し、AWS CLIを設定します。
 aws ec2 terminate-instances --instance-ids
{INVENTORY.HARDWARE} --region ap-northeast-1
ホストインベントリの利用
2017/11/17
 リージョン情報も同様にインスタンスメタデータとホストインベン
トリで設定することも可能です。
ホストインベントリの利用
2017/11/17
 障害を検知するとアクションでコマンドが実行されます。
コマンドの実行結果
2017/11/17
 インスタンスローンチをクラウド側に任せることで、
スクリプト開発やアプリ開発を行わなくても、Zabbixの基本機能を
組み合わせるだけで、オペレーションの自動化が可能です。
 既存のAutoScalingよりもより細かな監視ポイントなどを利用して、
健全なクラスタを維持することが可能になります。
Zabbixでのオペレーション自動化
2017/11/17
 今回の設定で利用しているZabbixTemplate
 Linux base: https://1drv.ms/u/s!AvJ4teJDyD_Q0F9RHIMemZajwRzF
 Linux OS: https://1drv.ms/u/s!AvJ4teJDyD_Q0F0HS2AqvFJiYWLU
 Linux Aggregate: https://1drv.ms/u/s!AvJ4teJDyD_Q0F6eHwLe6ecpkjeX
参考Template
2017/11/17

Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化