ZabbixからのアラートメールをSESで!

最近、年下のエンジニアに「ザビオ」と呼ばれるザビオです。

東京では、「クラウドコンピューティングの専門展 日経BP Cloud Days 2012 fall 」が開催されて
おり、大変賑わっているのでは無いでしょうか?
今回の Cloud Days は東京だけではなく、福岡でも初開催されます。
私も参加しますので、興味がある方は是非!(完全にステマ)


Cloud Days Fukuoka 2012
会期:2012年10月17日(水)〜18日(木) 10:00〜17:30
会場:FFBホール

さて、早速本題。
僕は、Zabbixという・・・は割愛して、ZabbixからのアラートメールをSES経由で送ってみましょう!

Zabbixからアラートメールを送信する設定についてはここから
http://www.zabbix.jp/node/1441

Zabbixからアラートメールを送信する際は大きく2種類あります。

Zabbixサーバ上のSMTPサーバを利用する場合

この場合は、下記ブログを参考にすれば必ず設定できます!wステマ
Amazon SESをSMTPインターフェースとして使う時のまとめ - okochangの馬鹿でありがとう

Zabbixサーバ以外のサーバ上で動作しているSMTPサーバを利用する場合

この場合は、若干スクリプトを編集しないといけません。


#!/usr/bin/php
IsSMTP();

$mailer->Host = $MAIL_SMTP_HOST;
$mailer->SMTPAuth = true;
#$mailer->SMTPAuth = false;
$mailer->Username = $MAIL_SMTP_USER;
$mailer->Password = $MAIL_SMTP_PASS;
$mailer->From = $MAIL_FROM;
$mailer->AddAddress($MAIL_TO);

$mailer->FromName = mb_encode_mimeheader(mb_convert_encoding($MAIL_FROMNAME,"JIS","UTF-8"),"JIS");
$mailer->Subject = mb_encode_mimeheader(mb_convert_encoding($MAIL_SUBJECT,"JIS","UTF-8"),"JIS");
$mailer->Body = mb_convert_encoding($MAIL_MESSAGE,"JIS","UTF-8");
// $mailer->AddReplyTo($email, $from);

if(!$mailer->Send()){
print "failed: " . $mailer->ErrorInfo . "\n";
}else{
print "success" . "\n";
}
?>

というわけで、テストメール
php sendmessage_smtp_php.sh 'nakatake@**********' 'test' 'test'

と、簡単にできるので、使ってみてください!

SESについての参考
Amazon SES(Simple Email Service)でメールを送ってみなイカ? | Pocketstudio.jp log3
memorycraft: SESってなんじゃ?(SMTPがサポートされました)

EIPを100回取得してみた

全世界63億人のAWSユーザ諸君
久しぶりだ、私の名前はザビオだ。

今日は諸君らにとっておきの秘密を公開しようと思う。

とあることでEIPの取得を行なっていたのだ
取得し、削除し、取得し、削除を繰り返してた。
そうするとEIPに何かしらの法則があるのではないかと思ったんだ!

私は夏休みの期間を使って調べた。
取得し、取得結果はSimpleDBに保存し、削除しを繰り返した。
その結果がこちらだ。

もちろん、EIPが被ることも承知している。
その場合は値が重複するが、さすがSimpleDB問題ない。


value=54.243.193.119
value=54.243.193.122
value=54.243.193.130
value=54.243.193.226
value=54.243.193.246
value=54.243.193.251
value=54.243.194.37
value=54.243.194.67
value=54.243.194.72
value=54.243.197.12
value=54.243.198.74
value=54.243.199.44
value=54.243.201.122
value=54.243.202.202
value=54.243.202.81
value=54.243.203.100
value=54.243.203.249
value=54.243.203.40
value=54.243.203.97
value=54.243.204.23
value=54.243.204.250
value=54.243.205.174
value=54.243.205.27
value=54.243.205.8
value=54.243.206.152
value=54.243.206.171
value=54.243.206.27
value=54.243.206.94
value=54.243.206.97
value=54.243.207.250
value=54.243.207.26
value=54.243.208.164
value=54.243.209.149
value=54.243.210.244
value=54.243.210.245
value=54.243.210.51
value=54.243.210.57
value=54.243.212.121
value=54.243.212.222
value=54.243.212.227
value=54.243.213.144
value=54.243.213.180
value=54.243.213.181
value=54.243.213.186
value=54.243.213.197
value=54.243.213.198
value=54.243.213.52
value=54.243.213.77
value=54.243.214.102
value=54.243.214.104
value=54.243.214.113
value=54.243.214.118
value=54.243.214.133
value=54.243.214.140
value=54.243.214.145
value=54.243.214.149
value=54.243.214.157
value=54.243.214.16
value=54.243.214.161
value=54.243.214.169
value=54.243.214.175
value=54.243.214.220
value=54.243.214.234
value=54.243.214.38
value=54.243.214.71
value=54.243.214.72
value=54.243.214.74
value=54.243.214.87
value=54.243.214.98
value=54.243.215.100
value=54.243.215.102
value=54.243.215.109
value=54.243.215.111
value=54.243.215.153
value=54.243.215.155
value=54.243.215.35
value=54.243.215.36
value=54.243.215.65
value=54.243.215.68
value=54.243.215.7
value=54.243.217.112
value=54.243.217.117

君達は気づいただろうか?

おっとこれ以上は何も言えない。
では、また10月くらいに会おう。


【環境】
Amazon linux
Amazon SimpleDB command line interface(amazon-simpledb-cli)
Google Code Archive - Long-term storage for Google Code Project Hosting.

SimpleDB command lineインストール

cpanmインストール


mkdir /test
cd /test
curl -LOk http://xrl.us/cpanm
chmod +x cpanm
./cpanm local::lib
./cpanm Getopt::Long
./cpanm Pod::Usage
./cpanm Digest::SHA1
./cpanm Digest::HMAC
./cpanm XML::Simple
./cpanm Time::HiRes

cpanm自身のupgrade


cpanm --self-upgrade

Amazon SimpleDB用のPerlモジュールのインストール


curl -Lo amazon-simpledb-perl-library.zip http://amazon-simpledb-perl-library.notlong.com
unzip amazon-simpledb-perl-library.zip
sitelib=$(perl -MConfig -le 'print $Config{sitelib}')
cp -r AmazonSimpleDB-*-perl-library/src/Amazon $sitelib/

simpledbコマンドのインストール


curl -Lo /usr/local/bin/simpledb http://simpledb-cli.notlong.com
chmod +x /usr/local/bin/simpledb

環境変数のセットアップ


export AWS_ACCESS_KEY_ID='xxxxxxxxxxxxxxxxx'
export AWS_SECRET_ACCESS_KEY='xxxxxxxxxxxxxxxxxxxx'

シェルスクリプト


#!/bin/sh
for i in `seq 1 100`; do
IP=`ec2-allocate-address | awk '{ print $2 }'`
/usr/local/bin/simpledb put zabbio 111 name='IP' value=$IP
echo $IP
ec2-release-address $IP
done

Amazon Linuxにtd-agentインストールスクリプト編(Nokogiri対応)

どっちかというとぽっちゃり系が好きなザビオです。
皆様、いかがお過ごしでしょうか?
今日は東京にいますが、東京は熱くて、スーツなんて着てたら溶けちゃいます。

さて、そんなこんなで、最近はfluentdで遊んでおります。
fluentdの安定版?でtd-agentたるものが流行っているみたいです。
ハード・コアAWSユーザとしては、Amazon Linuxにtd-agentをインストールするのですが、
td-agent自体は動作するのですが、s3-pluginについては、
下記エラーメッセージが出てきて、どうも言うことを聞いてくれません。
WARNING: Nokogiri was built against LibXML version 2.6.32, but has dynamically loaded 2.7.6
※s3-pluginはaws-sdk(nokogiri)を利用しています。


どうも、Nokogiri君が、LibXMLのバージョンが変わっているから、私は動きたくない!と言っているので、nokogiriの再インストールをしてあげてください。

/usr/lib64/fluent/ruby/bin/gem install nokogiri -- --with-xml2-lib=/usr/lib64 --with-xml2-include=/usr/include/libxml2/ --with-xslt-dir=/usr/include/libxslt

で、毎回、Amazon Linuxにtd-agentインストールするのめんどくさいので、td-agent、インストール用のスクリプト作ったので
使いたい人はどうぞー。最近のAmazon Linuxは動作確認済みですー。
td-agent.install.sh

Zabbix2.0でRDSを監視する〜外部スクリプトパート2〜

最近ようやく修羅モードを超えた気がします。
久しぶりにブログ書きます。
書きたいことがたくさんあるんですが、先にzabbixの外部スクリプトを・・・

今回は、ZabbixにCloudwatchのスクリプト走らせてRDSのステータスを取得するってやつです。
https://github.com/zabbio/zabbix/tree/master/RDS
↑gitに公開しているので、使いたい人はどうぞー

Rubyで書いているので、Zabbixサーバに「gem install right_aws」 でインストールして使ってください。

使い方は前回と同様に、マクロでパラメータを渡してください。

今回は、アクセスキー、シークレットキー、RDSのidentiferを指定して実行しています。

個人的に気にいっているのは、


RDSのディスク容量の確認


DBEventsの取得

ですねー。Zabbixは文字列をトリガーに出来るので、例えばRDSをAZ構成にしていて、マスターが死んで、スレーブに切り替わった際も
アラート飛ばすことが出来るので若干便利なんじゃないかなーと思います!
他にもいくつか作成しているので、使ってみたい方はどうぞー!

Zabbix2.0でRDSを監視する〜外部スクリプト〜

あちぃぃすね。
いま福岡でブログ書いてます。
部屋の温度は30℃、あついよー。

そもそも今回なんでRDSをZabbixで監視しようと思ったかといいますと
・Cloud Watchだと監視値を2週間しか保存できない
・Zabbixで一元管理したい

というわけで早速ですが、Zaabbix2.0でRDSを監視してみましょう!
RDSの監視はAWSが提供しているCloud Watchというものがありますのでそちらを使って監視を行うこともできます。
Amazon CloudWatch(リソースとアプリケーションの監視と管理)| AWS

今回はZabbixの「外部スクリプト」を利用して、監視してみましょう!
外部スクリプトとは名前通り、外部チェック用スクリプトを使用して監視を行うことです。
まずはZabbixに外部チェック用のスクリプトを設置しましょう!

スクリプト設置場所

スクリプトを設置する際に気をつけないといけないことは
zabbix_server.confに設置するpathが記載されているので、指定されたpathにスクリプトを設置してください。
vim /etc/zabbix/zabbix_server.conf


ExternalScripts=/usr/lib/zabbix/externalscripts
今回は上記pathにスクリプトを設置します。
下記のような適当スクリプトを設置します。
vim /usr/lib/zabbix/externalscripts/rds-status.sh

#!/bin/sh

USER=$1
PASS=$2
HOST=$3
KEY=$4

mysqladmin -u $USER -p$PASS -h $HOST extended-status | awk '{if($2 == "'$KEY'") print $4}'

作成されたスクリプトにchmodでzabbixが実行できる権限を付与してください。

Zabbixでの設定

監視するRDSを登録しましょう!

すごく見難くて申し訳ないです。
設定する際に気をつけることは
DNS名をRDSのEndpointを指定してください。
・接続方法をDNSを指定してください。

続いて上記「マクロ」タブを選択してください。
Zabbixからスクリプトを実行する際にしている引数の値をマクロに登録しましょう。
今回は

{$RDS.HOST}=RDSのEndpoint
{$RDS.PASS}=RDSに接続する際のパスワード
{$RDS.USER}=RDSに接続する際のユーザ

をマクロで登録しています。

いよいよ監視項目を登録します。

大事な部分は
・タイプを外部チェックを選択してください。

キーの設定は下記の用に設定しています。
rds-status.sh[{$RDS.USER},{$RDS.PASS},{HOST.CONN},"Slow_queries"]

RDS.USER、RDS.PASSはマクロで登録した値が読み込まれます。
HOST.CONNは、監視項目で設定したHOSTの値が読み込まれます。今回の場合は、RDS.HOSTでも大丈夫です!
最後の値は、extended-status で取得したい値をKeyに渡しています。extended-statusで取得したい項目を記載してください。

実際取得できているか確認してみましょう!

とこんな感じで取得できます!
あとはテンプレート化して割り当てるとより便利に監視できます!
CloudWatchのAPI等でもっといろんな情報も取得できると思いますので興味がある方はぜひ!

JAWS九州弾丸ツアー in 2012 Summer is Over

というわけでJAWS九州ツアーにほぼ参加してきましたので、
簡単に概要を書こうと思います。
※うまくSlideshareが表示されないんですが。。。誰か知っている人教えて下さい!

私はJAWS大分、福岡、熊本、長崎、宮崎に行って来ましたので所感や勉強会の雰囲気を書きます。
これを見て、全国のAWS猛者達が九州ツアーに参加したくなったら嬉しいですー。

6月21日(木) JAWS-UG大分 (大雨)

外部からの講演者:堀内さん森さんザビオ

Slide:Jaws大分

会場の雰囲気



桃園の誓い(副支部長&コアメンバーの決定)



大分名物:とりてん



大分の絶景




6月22日(金) JAWS-UG福岡 (晴れ)

外部からの講演者:堀内さん森さん得上さん@ponzuザビオ

Slide:Jaws福岡

会場の雰囲気の写真がなかったので得上さんの写真でご容赦ください



6月23日(土) JAWS-UG熊本 (雨)

外部からの講演者:堀内さん小室さん得上さん@ponzuザビオ

Slide:Jaws熊本

ハンズオンの光景とLTの光景です






熊本名物:太平燕(タイピーエン)



6月26日(火) JAWS-UG長崎 (曇)

外部からの講演者:堀内さん得上さん@ponzuザビオ

Slide:Jaws長崎

公演中






長崎名物:皿うどん



夜景が綺麗なんだな

6月29日(金) JAWS-UG宮崎 (大雨)

外部からの講演者:堀内さん得上さん@ponzuザビオ

Slide:脆弱性をついたもので資料は公開できません。。。

会場を無料で貸していただいたアラタナさん







集合写真


所感
今回JAWS九州を参加して3つのことを思いました。
・認知度:AWSAmazonが提供しているクラウドサービスというところまではだいたい知っている
・地域性:各コニュニティ勉強会の方法や雰囲気が様々
・拡張性:まだまだこれからが本番

認知度

事実、まだまだ東京や大阪に比べるとAWSの認知度は低いです。
実際使っている方も、EC2のみやS3だけ使っている方が多いのが現状です。
熊本でCDPにそった形でハンズオンをしてみたところ
「他のAWSサービスを組み合わせることの面白さやメリットを感じた」
「他のAWSサービスの使い方が良くわからなかったけど、今回のハンズオンでなんとなくわかった」
と声をいただきました。
AWSのサービスの使い方があまりわかっていないだけで、それをわかってしまえば
もっと使ってくれると思いますし、使われることでもっと広がるんじゃないかなーと思いました。

地域性

アメンバー毎に役割(企画、場所決め、告知等)が決まっているところもあれば、そもそもコアメンバーがいないところもありました。
やはり地域で苦労しているのは下記3つ

・集客
・発表者がいない
・負荷が支部長にほぼ全てかかる

集客については、平均20〜30名ほどです(福岡は100名を超えましたが・・・!)
集客方法については、各自治体に宣伝する、違う勉強会などで宣伝するなど行なっている模様ですが
地域によって効果が有るところもあれば無いところもありますので今後の課題かと思います。

発表者がいない点についても、喋れる人が引っ張っているのが現状です。
興味がある人が触れる用にするためにハンズオンは効果的かなーと思いました。

ただどの地域も大変そうではありますが、皆様楽しくやれているように見受けられました。

拡張性

九州はまだまだこれからです。
逆をいえばもっと盛り上げられます!!!

クラウドに興味がある人、オンプレミスから乗り換えようと思っている人、情報収集の人・・・
様々な思いがあって勉強会に参加していただいたと思います。
そういう目的がこのJAWS勉強会で達成できたかといえば達成できていないと思います!
「もっとこういう話がききたい」
「技術的な話がききたい」
聞きたい内容を教えていただければ、それにできるだけ沿った形でお話できると思いますので、ご意見頂戴出来ればいいなと思います。

まとめ

九州はまだまだこれからです!
今後、クラウドは間違いなく世界を変えていきますし、
その世界を変えていくクラウドのプラットフォームは間違いなくAWSがナンバーワンになると思っています!
そんな変化の中で、AWSを触ることになるのはほぼ必須です。
今のうちに皆でAWSを使い倒して、世界を変えていきましょう!

zabbix2.0をAmazonlinuxにインストールしたった。(rpm)

最近インストール記事しか書いていないザビオです。
もうちょっと技術よりなことを書きたいのですが忘れないために備忘録。
宮崎は最近梅雨入りしたっぽいのですが、東京はまだまだかしら。

今回はzabbix2.0をAmazonlinuxにインストールする記事を書こうとおもいます。
既にRHEL/CentOS向けのRPM@kodai74が公開しておりますので使いたい人は是非にご利用ください。

完全に私都合なのですが、業務上、AWSが提供しているAmazonlinuxというOSを利用する機会がたくさんあるのですが
上記rpmではインストールされません。
従いましてconfigureで頑張るか、sourceを修正する必要があるのですが。
悩んでいるところに

イケメンTNKさんがrpmを作ってくれましたー。
ありがとうございます。

早速インストールしようとしたのですが、若干ハマったのでブログに書きました。

環境

githubからSRPMをダウンロードします。


git clone https://github.com/atanaka7/zabbix-jp-amzn1.git

まず必要なミドルウェアをインストール


yum install rpm-build
yum groupinstall 'Development tools'
yum install mysql-devel net-snmp-devel openldap-devel sqlite-devel unixODBC-devel libssh2-devel java-devel curl-devel OpenIPMI-devel mysql
yum install php-cli php-mbstring php-common php-mysql php-xml php php-pdo php-gd php-bcmath

まず必要なrpmをインストール
下記から対象を選択。
i386用:
 http://www.zabbix.jp/binaries/relatedpkgs/rhel6/i386/fping-2.4b2-16.el6.JP.i686.rpm
 http://www.zabbix.jp/binaries/relatedpkgs/rhel6/i386/iksemel-1.4-2.el6.JP.i686.rpm
 http://www.zabbix.jp/binaries/relatedpkgs/rhel6/i386/iksemel-devel-1.4-2.el6.JP.i686.rpm
x86_64用:
 http://www.zabbix.jp/binaries/relatedpkgs/rhel6/x86_64/fping-2.4b2-16.el6.JP.x86_64.rpm
 http://www.zabbix.jp/binaries/relatedpkgs/rhel6/x86_64/iksemel-1.4-2.el6.JP.x86_64.rpm
 http://www.zabbix.jp/binaries/relatedpkgs/rhel6/x86_64/iksemel-devel-1.4-2.el6.JP.x86_64.rpm


wget http://www.zabbix.jp/binaries/relatedpkgs/rhel6/x86_64/fping-2.4b2-16.el6.JP.x86_64.rpm
wget http://www.zabbix.jp/binaries/relatedpkgs/rhel6/x86_64/iksemel-1.4-2.el6.JP.x86_64.rpm
wget http://www.zabbix.jp/binaries/relatedpkgs/rhel6/x86_64/iksemel-devel-1.4-2.el6.JP.x86_64.rpm
yum localinstall RPMファイル名

次にRPMをビルドするための環境構築します。
ここで必ずroot以外のユーザで作業してください。今回はec2-userで行なっています。


mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
vi ~/.rpmmacros
rpmbuild --rebuild zabbix-2.0.0-1.amzn1.src.rpm

.rpmmacrosの中身
%_topdir /home/ec2-user/rpmbuild
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS

/home/ec2-user/rpmbuild/RPMS/配下にrpmファイルが作成されます
zabbix-webのフォルダが分かれているので注意してください


├── noarch
│   └── zabbix-web-2.0.0-1.amzn1.noarch.rpm
└── x86_64
├── zabbix-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-agent-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-debuginfo-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-java-gateway-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-proxy-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-proxy-mysql-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-proxy-pgsql-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-proxy-sqlite3-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-server-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-server-mysql-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-server-pgsql-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-server-sqlite3-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-web-mysql-2.0.0-1.amzn1.x86_64.rpm
├── zabbix-web-pgsql-2.0.0-1.amzn1.x86_64.rpm
└── zabbix-web-sqlite3-2.0.0-1.amzn1.x86_64.rpm

rpmでインストール


sudo rpm -ivh zabbix-2.0.0-1.amzn1.x86_64.rpm zabbix-agent-2.0.0-1.amzn1.x86_64.rpm zabbix-java-gateway-2.0.0-1.amzn1.x86_64.rpm zabbix-server-mysql-2.0.0-1.amzn1.x86_64.rpm zabbix-server-mysql-2.0.0-1.amzn1.x86_64.rpm zabbix-web-mysql-2.0.0-1.amzn1.x86_64.rpm zabbix-web-2.0.0-1.amzn1.noarch.rpm

/usr/share/doc/zabbix-server-2.0.0/database/から対象のDBに流しこむ


sudo cat schema.sql | mysql -u ****** -p -h ~.ap-northeast-1.rds.amazonaws.com zabbix
sudo cat images.sql | mysql -u ****** -p -h ~.ap-northeast-1.rds.amazonaws.com zabbix
sudo cat data.sql | mysql -u ****** -p -h ~.ap-northeast-1.rds.amazonaws.com zabbix


これでzabbixをAmazonlinuxで使えるとおもいます。