やりたかったこと
EC2やRDSの監視をzabbixでやりたかったが、RDSにはZabbixAgentが載せられないので
RDSのメトリクスを取得して監視を試みた。
awsコマンドでメトリクスを取得するスクリプトを作って、Zabbixの外部チェックでスクリプトを設定し定時実行する流れです。
環境
CentOS7
※ EC2ではなくローカルのVM
ハマったこと
基本的な設定は以下の記事をなぞりましたが、自分の場合はもう少し考慮が必要でした。
恐らくEC2の環境ならあまり気にしなくて良いのだと思います。
zabbixの設定が〜というよりはLINUX関連のハマりです。
zabbixユーザでawsコマンドが実行できない
スクリプトがきちんと動くか確認をとったところ、awsコマンドがうまく動かなかった。
$ sudo -u zabbix /usr/lib/zabbix/externalscripts/cloudwatch.sh -n AWS/RDS -m ReadLatency -s Maximum
/usr/lib/zabbix/externalscripts/cloudwatch.sh: line 16: aws: command not found
問題:
rootユーザにawscliをインストールしていたので、zabbixでawsが実行できなかった。
zabbixはnologinユーザなのでインストール方法を変える必要があった。
解決:
インストールのoptionを変える。
## これだとuser限定でインストールされちゃう
$ sudo pip install awscli --upgrade --user
$ echo 'export PATH=$PATH:~/.local/bin' >> ~/.bash_profile
$ source ~/.bash_profile
$ which aws
/root/.local/bin/aws
## これなら誰でも使える
$ sudo pip install awscli --ignore-installed six
$ which aws
/bin/aws
認証情報がない
awsが実行できたので再度実行してみるも、認証情報がないと怒られた。
$ sudo -u zabbix /usr/lib/zabbix/externalscripts/cloudwatch.sh -n AWS/RDS -m ReadLatency -s Maximum
Unable to locate credentials. You can configure credentials by running "aws configure".
.aws
をどこに格納したら良いのか。 /usr/lib/zabbix/.aws
か?
とも思ってやりましたが違うようで、試しに以下のコマンドを打ったらどこに格納すべきか判明しました。
$ sudo -u zabbix aws configure
AWS Access Key ID [None]:****
AWS Secret Access Key [None]:****
Default region name [None]:
Default output format [None]: json
[Errno 13] Permission denied: '/var/lib/zabbix'
なるほどそこか!
あとは色々作って完成です。
$ mkdir /var/lib/zabbix
$ mkdir /var/lib/zabbix/.aws
$ vim /var/lib/zabbix/.aws/config
$ vim /var/lib/zabbix/.aws/credentials
$ chmod 755 /var/lib/zabbix/.aws/config
$ chmod 755 /var/lib/zabbix/.aws/credentials
$ sudo -u zabbix /usr/lib/zabbix/externalscripts/cloudwatch.sh -n AWS/RDS -m ReadLatency -s Maximum
0.0118
zabbixの画面でも無事に取得できているようでした。めでたしめでたし。
最後に
認証情報でハマりましたが、監視サーバをEC2でzabbixを使うなら
アクセスキーを使わずIAMロールで接続できるようにすることをお勧めします。
そうすればaws configure
の設定は不要になります。