AWS でのZabbix自動構築
2分でZabbixServer構築
 CN:九龍真乙(くりゅうまおと)
 所属:自宅ラック勉強会
 Twitter: @qryuu
 クックパッド: https://cookpad.com/kitchen/4142562
 ZabbixShare:https://share.zabbix.com/owner/li_GGKiuT6LNj
 好きなAWSサービス:RDS,SystemsManager
自己紹介
2018/11/162
まずは構築デモをご覧ください。
EC2のUserDataを利用してAmazon
Linux/Amazon Linux2 に任意の
ZabbixServerを構築します。
2018/11/163
とりあえずデモ
 変数設定
 変数によりバージョン指定、php タイムゾーン、ZabbixDBの設定が可能
です。
2018/11/164
スクリプト解説
#変数宣言
version=3.0 #Zabbixメジャーバージョン
minorversion=latest #Zabbixマイナーバージョン or latest
amazonlinux=amzn2 #AmaznLinuxバージョン amzn1 or amzn2
database=ec2 #利用BD ec2 or RDS or Aurora(ec2 onry now)
timezone="Asia/Tokyo" #フロントエンドタイムゾーン
agentname=zabbix-server #ZabbixAgent名
dbhost=localhost #DBホスト
dbname=zabbix #ZabbixDB名
dbuser=zabbix #ZabbixDBユーザ名
dbpassword=zabbix #ZabbixDBパスワード
 変数設定
 Agent-Server間の通信暗号化も指定できます。
2018/11/165
スクリプト解説
encryption=unencrypted #暗号化方式 unencrypted or psk or cert
#暗号化方式pskの場合入力
pskid= #pre-shared keysアイデンティティ
#暗号化方式certの場合入力 ※ファイルをダウンロード可能な場所に配置してください。
cafile= #CA証明書URL
certfle= #Server証明書URL
keyfile= #秘密鍵ファイルURL
 リポジトリ登録
 リポジトリとして、s3を指定しています。
 このリポジトリはZabbix LLCの公式SRPMを元に
Amazon Linux/Amazon Linux 2 用に構築していますので、
コンパイルオプションは公式パッケージと同一です。
2018/11/166
スクリプト解説
#リポジトリ登録
echo [amazon.zabbix] >> /etc/yum.repos.d/zabbix.repo
Echo name=Amazon-Zabbix >> /etc/yum.repos.d/Zabbix.repo
Echo baseurl=https://s3-ap-northeast-
1.amazonaws.com/amazon.Zabbix/$amazonlinux/$version/$basearch >>
/etc/yum.repos.d/Zabbix.repo
Echo gpgcheck=0 >> /etc/yum.repos.d/zabbix.repo
 yumインストール
 変数指定を元に、最新バージョンまたは指定マイナーバージョンの
パッケージをインストールします。
2018/11/167
スクリプト解説
#パッケージインストール
yum update
if [ ${minorversion} = "latest" ] && [ ${amazonlinux} = "amzn1" ] ; then
yum install --enablerepo=epel iksemel iksemel-devel -y
yum install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-java-gateway zabbix-agent zabbix-get zabbix-sender mysql56 mysql56-
server httpd24 -y
elif [ ${minorversion} != "latest" ] && [ ${amazonlinux} = "amzn1" ] ; then
yum install --enablerepo=epel iksemel iksemel-devel -y
yum install zabbix-server-mysql-${minorversion} zabbix-web-mysql-${minorversion} zabbix-web-japanese-${minorversion} zabbix-java-gateway-
${minorversion} zabbix-agent-${minorversion} zabbix-get-${minorversion} zabbix-sender-${minorversion} mysql56 mysql56-server httpd24 -y
elif [ ${minorversion} = "latest" ] && [ ${amazonlinux} = "amzn2" ] ; then
amazon-linux-extras install epel -y
yum install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-java-gateway zabbix-agent zabbix-get zabbix-sender httpd mariadb
mariadb-server -y
else
amazon-linux-extras install epel -y
yum install zabbix-server-mysql-${minorversion} zabbix-web-mysql-${minorversion} zabbix-web-japanese-${minorversion} zabbix-java-gateway-
${minorversion} zabbix-agent-${minorversion} zabbix-get-${minorversion} zabbix-sender-${minorversion} httpd mariadb mariadb-server -y
fi
 DB起動
 Amazon Linux/Amazon Linux 2 の標準パッケージに合わせ
 Amazon LinuxではMySQL
Amazon Linux 2 ではMariaDBを起動しています。
2018/11/168
スクリプト解説
#MySql起動
if [ ${amazonlinux} = "amzn1" ] ; then
service mysqld start
else
systemctl start mariadb.service
fi
 DB-root
DBのrootパスワードにはランダム文字列を生成して設定しています。
2018/11/169
スクリプト解説
#MySql root ランダムパスワード生成
vMySQLRootPasswd="$(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 16 | tee -a
/home/ec2-user/.mysql.secrets)"
#MySql_secure_installation
mysql -u root --password= -e "
UPDATE mysql.user SET Password=PASSWORD('${vMySQLRootPasswd}') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1',
'::1');
DELETE FROM mysql.db WHERE Db='test' OR Db='test_%';
FLUSH PRIVILEGES;"
 DB-root
DBのrootパスワードにはランダム文字列を生成して設定しています。
 パスワードが必要な場合は不可視ファイル/home/ec2-user/.mysql.secretsを
確認してください。
2018/11/1610
スクリプト解説
#MySql root ランダムパスワード生成
vMySQLRootPasswd="$(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 16 | tee -a
/home/ec2-user/.mysql.secrets)"
#MySql_secure_installation
mysql -u root --password= -e "
UPDATE mysql.user SET Password=PASSWORD('${vMySQLRootPasswd}') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1',
'::1');
DELETE FROM mysql.db WHERE Db='test' OR Db='test_%';
FLUSH PRIVILEGES;"
 DBチューニング
history テーブルおよびeventsテーブルに圧縮設定を行っています。
2018/11/1611
スクリプト解説
echo "ALTER TABLE history ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; ALTER TABLE
history_log ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; ALTER TABLE history_str
ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; ALTER TABLE history_text
ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; ALTER TABLE history_uint
ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; ALTER TABLE events ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE=8;" > /tmp/ALTERTABLE.sql
mysql --defaults-extra-file=/home/ec2-user/my.cnf-zabbix < /tmp/ALTERTABLE.sql
 psk暗号化が指定された場合、ランダム文字列を生成して登録しています。
構築後に/etc/zabbix/tls/.zabbix_agentd.pskを確認してWEB-GUIに登録し
てください。
2018/11/1612
スクリプト解説
#psk設定
if [ ${encryption} = "psk" ] ; then
sed -i -e "s/# TLSConnect=unencrypted/TLSConnect=psk/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# TLSAccept=unencrypted/TLSAccept=psk/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# TLSPSKIdentity=/TLSPSKIdentity=${pskid}/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# TLSPSKFile=/TLSPSKFile=/etc/zabbix/tls/.zabbix_proxy.psk/g"
/etc/zabbix/zabbix_agentd.conf
mkdir /etc/zabbix/tls
openssl rand -hex 128 > /etc/zabbix/tls/.zabbix_agentd.psk
chown zabbix.zabbix /etc/zabbix/tls/.zabbix_agentd.psk
chmod 400 /etc/zabbix/tls/.zabbix_agentd.psk
fi
 cert暗号化の場合は必要なファイルをwgetでダウンロードしてきます
ので、Serverがアクセス可能な場所にファイルを置いておいてくだ
さい。
2018/11/1613
スクリプト解説
#cert設定
if [ ${encryption} = "cert" ] ; then
sed -i -e "s/# TLSConnect=unencrypted/TLSConnect=cert/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# TLSAccept=unencrypted/TLSAccept=cert/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# TLSCAFile=/TLSCAFile=/etc/zabbix/tls/zabbix_ca_file/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# TLSCertFile=/TLSCertFile=/etc/zabbix/tls/zabbix.crt/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# TLSAccept=unencrypted/TLSKeyFile=/etc/zabbix/tls/zabbix.key/g" /etc/zabbix/zabbix_agentd.conf
mkdir /etc/zabbix/tls
cd /etc/zabbix/tls
wget -O zabbix_ca_file ${cafile}
wget -O zabbix.crt ${certfle}
wget -O zabbix.key${keyfile}
chown zabbix.zabbix /etc/zabbix/tls/*
chmod 400 /etc/zabbix/tls/*
fi
 タイムゾーン指定
 phpのタイムゾーンを自動設定します。
2018/11/1614
スクリプト解説
#Zabbix-WEB設定
sed -i -e "s/# php_value date.timezone Europe/Riga/php_value date.timezone
${timezone}/g" /etc/httpd/conf.d/zabbix.conf
 自動起動設定
自動起動設定を行い再起動を行います。このため、スクリプトが完
了すれば起動したZabbixServerにアクセスできます。
2018/11/1615
スクリプト解説
#自動起動設定
if [ ${amazonlinux} = "amzn1" ] ; then
chkconfig zabbix-server on
chkconfig httpd on
chkconfig zabbix-agent on
chkconfig zabbix-java-gateway on
chkconfig mysqld on
else
systemctl enable zabbix-server.service
systemctl enable zabbix-agent.service
systemctl enable httpd.service
systemctl enable zabbix-java-gateway.service
systemctl enable mariadb.service
fi
reboot
 スクリプトの実行時間は64秒から67秒程度です。
2018/11/1616
スクリプト解説
I would like you post it on
Zabbix Integrate!
https://github.com/qryuu/aws_on_zabbix
2018/11/1617
Alexei
 RDSを利用する。
 構築したインスタンスから、AMIを作成して、Zabbix-for-RDS.shを
UserDataに入力して再ローンチすれば自動的にRDSを利用した構成
に変更できます。
2018/11/1618
おまけ
 Zabbix Advent Calendar 2018への登録をお願いします
 https://qiita.com/advent-calendar/2018/zabbix
2018/11/1619
募集!
 Amazon Linux用Zabbixリポジトリ情報
 https://qiita.com/qryuu/items/b63fa774e8efcda4a681
 ZabbixServer自動構築スクリプト
 https://github.com/qryuu/aws_on_zabbix/blob/master/UserData/Launch-
ZabbixServer-on-AmazonLinux.sh
 ZabbixProxy自動構築スクリプト
https://github.com/qryuu/aws_on_zabbix/blob/master/UserData/Launch-
ZabbixProxy-on-AmazonLinux.sh
 MySQL on EC2 から RDSへの移行スクリプト
 https://github.com/qryuu/aws_on_zabbix/blob/master/UserData/Zabbix-
for-RDS.sh
参考リンク
2018/11/1620

Zabbixを2分でインストール