AWSにはCloudWatchがありますが、データの保存期間がたったの2週間しかありません。
それでは運用を続けていくにあたって短すぎるので、Zabbixサーバを構築してCloudWatchから値を取得しつつ、Zabbixからも監視を行うようにします。
公式ドキュメント
動作確認構成
-
EC2(c3.large)
- CentOS 6.6
- Zabbix 2.4.3
- PHP 5.6.5
- nginx 1.6.2
-
RDS(db.m3.medium)
- MySQL 5.6.22
RDS
Security Group作成
- ZabbixサーバからPort 3306へのアクセスが必要
Type | Protocol | Port Range | Source |
---|---|---|---|
3306 | TCP | 3306 | Zabbixサーバ |
DB Subnet Group作成
- 既存のVPC Subnetを追加したDB Subnet Groupを作成
Parameter Group作成
-
Parameter Groups
->Create Parameter Group
- パラメータを適宜設定
Option Group作成
-
Option Groups
->Create Group
- オプションを適宜設定
RDS起動
- RDS ->
Launch a DB Instance
->MySQL
-
Do you plan to use this database for production purposes?
で適宜選択 - Backup/Maintenanceは適宜設定
EC2起動
IAM Role作成
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"autoscaling:Describe*",
"cloudwatch:Describe*",
"cloudwatch:Get*",
"cloudwatch:List*",
"logs:Get*",
"logs:Describe*",
"logs:TestMetricFilter",
"sns:Get*",
"sns:List*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
EC2起動
- 作成したIAM Roleを指定した上でEC2を起動
- c3.large
- CentOS 6.6
- Secutiry GroupにてTCP Port 22/443をIP限定して開放
- 既存のVPCに所属させる
- EIPを付与
PHP 5.6 インストール
# rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# yum install --enablerepo=remi,remi-php56 php php-cli php-common php-gd php-pdo php-mysql php-xml php-bcmath php-mbstring php-fpm php-devel
# php --version
PHP 5.6.5 (cli) (built: Jan 21 2015 17:50:29)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
# vi /etc/php.ini
/etc/php.ini
-max_execution_time = 30
+max_execution_time = 300
-max_input_time = 60
+max_input_time = 300
-post_max_size = 8M
+post_max_size = 32M
-;always_populate_raw_post_data = -1
+always_populate_raw_post_data = -1
+date.timezone = Asia/Tokyo
MySQLクライアント インストール
MySQL公式リポジトリを有効化
# rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
MySQL最新版をインストール
# yum install mysql
# mysql --version
mysql Ver 14.14 Distrib 5.6.22, for Linux (x86_64) using EditLine wrapper
Zabbix 2.4 インストール
Zabbix公式リポジトリを有効化
# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
Zabbix最新版をインストール
# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-web-japanese zabbix-get
Zabbix データベース作成
# mysql -u root -p -h zabbix-db-1.xxxxxx.ap-northeast-1.rds.amazonaws.com
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@'10.0.%' identified by 'xxxx';
schema定義/データ投入
# cd /usr/share/doc/zabbix-server-mysql-2.4.3/create
# mysql -u root -p -h zabbix-db-1.xxxxxx.ap-northeast-1.rds.amazonaws.com zabbix < schema.sql
# mysql -u root -p -h zabbix-db-1.xxxxxx.ap-northeast-1.rds.amazonaws.com zabbix < images.sql
# mysql -u root -p -h zabbix-db-1.xxxxxx.ap-northeast-1.rds.amazonaws.com zabbix < data.sql
Zabbix Server設定
# vi /etc/zabbix/zabbix_server.conf
DBHost=zabbix-db-1.xxxxxx.ap-northeast-1.rds.amazonaws.com
DBName=zabbix
DBUser=zabbix
DBPassword=xxxx
Zabbix Server起動
# chkconfig zabbix-server on
# service zabbix-server start
Zabbix Agent起動
# chkconfig zabbix-agent on
# service zabbix-agent start
nginx インストール
ここではstableの1.6系をインストールする。
ただ、nginx作者いわく、stableよりmainlineを使うべきということなので、mainlineの方がいいかも。
nginxリポジトリをインストール
# rpm -ivh http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm
nginx最新版をインストール
# yum install nginx
# nginx -v
nginx version: nginx/1.6.2
シンボリックリンク作成
# ln -s /usr/share/zabbix /usr/share/nginx/html/zabbix
SSL証明書作成
-
Organization Name
やCommon Name
などは適宜設定すること
# openssl req -new -days 365 -x509 -sha256 -newkey rsa:2048 -nodes -keyout /etc/nginx/zabbix-cert.key -out /etc/nginx/zabbix-cert.crt
Generating a 2048 bit RSA private key
................................+++
.........+++
writing new private key to '/etc/nginx/zabbix-cert.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Minato
Organization Name (eg, company) [Default Company Ltd]:Enigmo Inc.
Organizational Unit Name (eg, section) []:System
Common Name (eg, your name or your server's hostname) []:zabbix.example.com
Email Address []:
# chmod 400 /etc/nginx/zabbix-cert.*
# openssl x509 -in /etc/nginx/zabbix-cert.crt -text -noout | grep "Signature\|Public-Key"
Signature Algorithm: sha256WithRSAEncryption
Public-Key: (2048 bit)
Signature Algorithm: sha256WithRSAEncryption
Zabbix用の設定
# vi /etc/nginx/conf.d/zabbix.conf
server {
listen 80;
listen 443 default_server ssl spdy;
root /usr/share/nginx/html;
ssl on;
ssl_certificate /etc/nginx/zabbix-cert.crt;
ssl_certificate_key /etc/nginx/zabbix-cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS;
ssl_prefer_server_ciphers on;
server_name zabbix.example.com;
index index.html;
access_log /var/log/nginx/zabbix-access_log main;
error_log /var/log/nginx/zabbix-error_log error;
location /zabbix {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
基本的なチューニング
# vi /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
-worker_processes 1;
+worker_processes 2;
+worker_rlimit_nofile 100000;
events {
worker_connections 1024;
+ multi_accept on;
+ use epoll;
}
http {
- #tcp_nopush on;
+ tcp_nopush on;
- #gzip on;
+ gzip on;
+ gzip_vary on;
+ gzip_comp_level 6;
+ gzip_min_length 1024;
+ gzip_types text/plain application/javascript text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
+
+ open_file_cache max=100000 inactive=20s;
+ open_file_cache_valid 30s;
+ open_file_cache_min_uses 2;
+ open_file_cache_errors on;
+
+ server_tokens off;
}
設定ファイルチェック
# service nginx configtest
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx, php-fpm起動
# chkconfig nginx on
# service nginx start
# chkconfig php-fpm on
# service php-fpm start
AWS監視用パッケージ インストール
AWS CLI インストール
- EPEL設定
# rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# vi /etc/yum.repos.d/epel.repo
/etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
-enabled=1
+enabled=0
- python-pipをインストール
# yum --enablerepo=epel install python-pip
- awscliをインストール
# pip install awscli
- 確認
# aws --version
aws-cli/1.7.3 Python/2.6.6 Linux/2.6.32-504.1.3.el6.x86_64
AWS CLI設定
作成したUserのAccess Key/Secret Access Keyを設定する。
# sudo -u zabbix aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]:
# aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]:
jq インストール
# yum --enablerepo=epel install jq
Zabbix設定
Web UIにアクセス
Zabbix Server初期設定
Next
Next
- User/Passwordを入力後、
Test connection
でOK
と表示されることを確認。 Next
- 識別用の名前を指定する場合は
Name
に入力 Next
Next
Finish
- Username: Admin, Password: zabbix
Sign in
メール送信設定
Postfix設定
ホスト名設定。
# vi /etc/postfix/main.cf
/etc/postfix/main.cf
+myhostname = zabbix.example.com
# service postfix check
# service postfix reload
DNSレコード設定
- TXTレコードにZabbixサーバのEIPを追加
- ZabbixサーバのAレコードを設定
- zabbix.example.com -> ZabbixサーバのEIP
- Postfixで設定したホスト名と合わせること
AWSでメール送信制限の解除申請
- Elastic IP Address 1 -> ZabbixサーバのEIP
- Reverse DNS Record for EIP 1 -> zabbix.example.com
- 受理されると以下のようなメールが送られてくる
Your AWS Inquiry
We have configured the reverse DNS record(s) you requested. Your request was mapped for xxx.xxx.xxx.xxx. :zabbix.example.com. Please note that propagation of this update to DNSBL services that Amazon works with may take up to a week.
If you also requested removal of the email sending limitations on your account, these have also been removed for any IPs and instances under your account.
SMTP設定
- 管理 -> Email
- SMTPサーバー: localhost
- SMTP helo: zabbix.example.com
- 送信元メールアドレス: zabbix@example.com
監視設定
以下を利用・参考にして設定。
クライアント側
監視される側で行う作業は以下。
Zabbix公式リポジトリを有効化
# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
Zabbix Agentインストール
# yum install zabbix-agent
Zabbix Agent設定
# vi /etc/zabbix/zabbix_agentd.conf
/etc/zabbix/zabbix_agentd.conf
-Hostname=Zabbix server
+#Hostname=Zabbix server
+EnableRemoteCommands=1
+HostMetadataItem=system.uname
Zabbix Agent起動
# chkconfig zabbix-agent on
# service zabbix-agent start
監視対象ホストを自動登録する場合
下記手順を元に設定する。
https://www.zabbix.com/documentation/2.4/manual/discovery/auto_registration
サーバ側でアクション設定
Web UIにて以下を実施。
-
設定
->アクション
-
イベントソース
のプルダウンメニューで自動登録
を選択 アクションの作成
-
アクション
タブ内の名前
で、アクションに名前を付ける -
アクションの実行条件
タブで、任意の条件を指定(指定しない場合は全てのホストが対象となる)- ホスト名やホストメタデータ(HostMetadata or HostMetadataItem)などを条件とすることが可能
-
アクションの実行内容
タブで、以下の実行を追加- ホストを追加
- ホストグループに追加
- テンプレートとリンク
- ユーザーグループにメッセージを送信
クライアント側で設定確認
- /etc/zabbix/zabbix_agentd.conf内の
ServerActive
でZabbix ServerのIPが指定されていることを確認
# grep ^ServerActive /etc/zabbix/zabbix_agentd.conf
ServerActive=xxx.xxx.xxx.xxx
- 設定を変更した場合はZabbix Agentを再起動
# service zabbix-agent restart
Zabbixサーバのリソース
まだ監視対象が少ないので余裕がある状態です。
- host: 10台
- 監視項目数: 4.96/秒