2013年5月11日土曜日

クラウド AWS EC2 Zabbix グラフ文字化け対処

  [Zabbix]
    ・グラフの日本語が文字化けを対処
      
      - 日本語フォントのインストール
       $ sudo aptitude install otf-ipafont
       > Unpacking otf-ipafont-gothic (from .../otf-ipafont-gothic_00302-10_all.deb) ...
       > Selecting previously deselected package otf-ipafont-mincho.
       > Unpacking otf-ipafont-mincho (from .../otf-ipafont-mincho_00302-10_all.deb) ...
       > Selecting previously deselected package otf-ipafont.
       > Unpacking otf-ipafont (from .../otf-ipafont_00302-10_all.deb) ...
       > Setting up otf-ipafont-gothic (00302-10) ...
       > update-alternatives: using /usr/share/fonts/opentype/ipafont/ipag.ttf to provide /usr/share/fonts/truetype/ttf-japanese-gothic.ttf (ttf-japanese-gothic.ttf) in auto mode.
       > Setting up otf-ipafont-mincho (00302-10) ...
       > update-alternatives: using /usr/share/fonts/opentype/ipafont/ipam.ttf to provide /usr/share/fonts/truetype/ttf-japanese-mincho.ttf (ttf-japanese-mincho.ttf) in auto mode.
       > Setting up otf-ipafont (00302-10) ...
       > [master a7bc0e5] committing changes in /etc after apt run
       >  Author: ubuntu <ubuntu@ip-172-31-27-207.localdomain>
       >  2 files changed, 2 insertions(+), 0 deletions(-)
       >  create mode 120000 alternatives/ttf-japanese-gothic.ttf
       >  create mode 120000 alternatives/ttf-japanese-mincho.ttf
        ⇒もともと日本語フォントはあったぽい
         > /usr/share/fonts/opentype/ipafont/ipag.ttf  ※ゴシック?
         > /usr/share/fonts/opentype/ipafont/ipagp.ttf ※ゴシックプロポーショナル?
         > /usr/share/fonts/opentype/ipafont/ipam.ttf  ※明朝?
         > /usr/share/fonts/opentype/ipafont/ipamp.ttf ※明朝プロポーショナル?
        ⇒今回インストールされたのは、
         > /usr/share/fonts/truetype/ttf-japanese-gothic.ttf -> /etc/alternatives/ttf-japanese-gothic.ttf
         > /usr/share/fonts/truetype/ttf-japanese-mincho.ttf -> /etc/alternatives/ttf-japanese-mincho.ttf
      
      - zabbixのフォルダにリンクを貼る
       $ sudo ln -s /usr/share/fonts/truetype/ttf-japanese-gothic.ttf /usr/share/zabbix/fonts/
      
      - zabbixがグラフに使用するフォントを変更
       $ sudo nano /usr/share/zabbix/include/defines.inc.php
       (変更前) > define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans')
       (変更後) > define('ZBX_GRAPH_FONT_NAME', 'ipag');
      
        ⇒日本語が表示された!

2013年5月6日月曜日

クラウド AWS EC2 環境構築

[Elastic IP]
  ・固定のグローバルIPアドレスを確保してくれるサービスであるElastic IPを使用する
   ※Elastic IPのサービスはインスタンスに紐付けている限り無料、逆に言えば、固定IP確保だけを行って紐付けしないと料金が発生
  
  ・左のタブの"Elastic IPs"をクリック、"Allocate New Address"をクリック、確認画面が出るので"Yes, Allocate"をクリックで確保される
    ⇒"54.249.106.XXX"
   "Associate Address"をクリック、稼働中のインスタンスを選択(i-6c6fb56e)、"Private IP Address"を選択して、
   "Allow Reassociation"にチェックを入れて、"Yes, Allocate"をクリック
    ⇒"ec2-54-249-106-115.ap-northeast-1.compute.amazonaws.com"
   ※"Associate Address"をクリックの手順はインスタンスの再起動ごとに必要になる操作であることに注意

[root環境構築]
  ・rootユーザのパスワードを設定する
   $ sudo passwd
   > Enter new UNIX password:
   > Retype new UNIX password:
   > passwd: password updated successfully
  
  ・rootでログインする
   $ su -
   > Password:

[WinSCP環境構築]
  ・ダウンロードした秘密鍵(XXX.pem)をPuTTY形式に変換する
    - スタートメニューからPuTTYgenを起動
    - Conversions → Import keyをクリックして、XXX.pemを開く
    - Key passphrase、Confirm passphraseにパスワードを入力
    - Save private keyをクリック
  
  ・rootユーザでログインできるようにする
   $ sudo less /etc/ssh/sshd_config
   > Subsystem sftp /usr/lib/openssh/sftp-server
   
   $ sudo visudo
   (変更前) > %admin ALL=(ALL) ALL
   (変更後) > %admin ALL=(ALL) NOPASSWD:ALL
    ⇒sudoでパスワードを聞かれないようにする(WinSCPのログインでsudoするとパスワードを聞かれるが入力できないため)
   
   (追加) > Defaults:%admin !requiretty
    ⇒ttyでログインしたユーザにsudoさせる設定
   
   WinSCPの設定
    - 環境→SFTP→SFTPサーバに"sudo /usr/lib/openssh/sftp-server"を設定
     ⇒root権限でログインできた

[ubuntu上でパケットキャプチャ]
  ・Interfaceのリレーサーバのパケットを除外する
   # ping interface.silentsystem.jp
   > 54.248.35.221
   ※Temp  :OID 1.3.6.1.4.1.37510.0.1、コミュニティ public54017、更新間隔 120秒
   ※Humidity:OID 1.3.6.1.4.1.37510.0.2、コミュニティ public54017、更新間隔  30秒
  
  ・tcpdumpでパケットをキャプチャする
   ※SNMPポート(161番)のみ:port 161
   ※名前解決をしない:-n
   ※Interfaceのリレーサーバを除外:not host 54.248.35.221
   # tcpdump -n port 161 and not host 54.248.35.221
   > 20:36:04.389879 IP 49.105.23.9.30161 > 172.31.27.207.161:  SetRequest(49)  .1.3.6.1.4.1.37510.0.1=249 .1.3.6.1.4.1.37510.0.0.0=1234
   > 0x0000:  4500 005c 238a 0000 6c11 1aa7 3169 1709  E..\#...l...1i..
    ⇒ 3169 1709はSRC IPアドレス
   > 0x0010:  ac1f 1bcf 75d1 00a1 0048 334a 303e 0201  ....u....H3J0>..
    ⇒ ac1f 1bcfはDST IPアドレス、75d1はSRC PORT 00a1はDST PORT、0048はパケット長、334aはチェックサム、それ以降はデータ
    ⇒ 303e:データ列+長さ3E(62)
      020100:SNMPバージョンV1 ※00は次行
   > 0x0020:  0004 0670 7562 6c69 63a3 3102 0201 0d02  ...public.1.....
    ⇒ 04 0670 7562 6c69 63:文字列+public
      a3 31:Set Request+長さ31(49)
      02 0201 0d:連番+010d
   > 0x0030:  0100 0201 0030 2530 1006 0a2b 0601 0401  .....0%0...+....
    ⇒ 02 0100:エラーコード+00
      0201 00:エラーインデックス+00
      30 25:データ列+長さ25(37)
      30 10:データ列+長さ10(16)
      06 0a:OID+長さ0a(10)
      2b 0601 0401 82a5 0600 01:1.3.6.1.4.1.37510.0.1
   > 0x0040:  82a5 0600 0102 0200 f930 1106 0b2b 0601  .........0...+..
    ⇒ 02 0200 f9:温度データ+00f9(249)
      30 11:データ列+長さ11(17)
      06 0b:OID+長さ0b(11)
      2b 0601 0401 82a5 0600 0000:1.3.6.1.4.1.37510.0.0.0
   > 0x0050:  0401 82a5 0600 0000 0202 04d2            ............
    ⇒ 0202 04d2:デバイスID 04d2(1234)

[ubuntu上でSNMPサーバのコンパイルから起動まで]
  ・スクリプトの内容:killserver
   # less killserver
   > #kill -9 `ps -fe|grep snmpserver|egrep -v grep|awk '{print $2}'`
   > pkill snmpserver
    ⇒pkillコマンド:指定したプロセスをkillする
  
  ・スクリプトの内容:serverstart
   # less serverstart
   > #!/bin/sh
   > /root/snmpserver $1 $2 $3 $4 $5 $6 &
  
  ・SNMPサーバプログラムのアップロード(コピペ)
   # cat > snmpserver_dk.c
    ⇒snmpserver.cの内容をコピーして貼り付け、完了したらCtrl+Dで終了(snmpserver_dk.cが生成される)
  
  ・SNMPサーバプログラムのコンパイル
   # gcc -o snmpserver_dk snmpserver_dk.c
    ⇒snmpserver_dkが生成される
  
  ・既存のSNMPサーバプログラムの停止
   # pkill snmpserver
  
  ・SNMPサーバプログラムの起動
   # snmpserver_dk &

2013年5月5日日曜日

クラウド AWS EC2 アカウント取得からサーバ起動まで

1年間無料で使えるクラウドサーバのアカウント取得からサーバ起動までの手順を書きます。
クラウドサーバにはAmazonのサービスを使います。

まずは、Interface2013年2月号を参考に、Interfaceが準備してくれている仮想マシンイメージをコピーして、動作を確認してみます。



札幌のどこかにセンシング装置を設置されているらしく、その装置から札幌の気温と湿度をInterfaceのリレーサーバに自動で送信しているそうです。

今回稼動させたサーバには最初からZabbixが動作していて、そのZabbixからSNMPでInterfaceのリレーサーバにデータを取得しにいってます。下図はそのZabbixのキャプチャです。




[用語]
  ・AWS(Amazon Web Service):EC2を含む多くのサービスを統合したもの
  
  ・EC2(Elastic Compute Cloud):Amazonが提供するクラウドサービス
  
  ・Elastic IP:固定されたグローバルIPを確保してくれるサービス
  
  ・Elastic:快活な、融通の利く
  
  ・Dashboard:必要最低限の機能を整理して配置したもの
  
  ・AMI(Amazon Machine Image):仮想マシンイメージ
  
  ・AZ(Availability Zone):データセンター

[無料の範囲]
  ・AWSに新規サインアップした場合のみ
  
  ・AWSにサインアップしてから12ヶ月無料
  
  ・AWSの各サービスについてそれぞれ無料範囲が決められている
  
  ・AWS EC2 Linuxの無料範囲:1ヶ月あたり750時間、750/24=31.25日、つまり常に無料
    ⇒ただし1インスタンスにつき上記時間がかかるため、2インスタンスを稼動していると15日ちょっとしか無料にならない
  
  ・AWS EC2 Microsoft Windows Serverの無料範囲:Linuxと同様、1ヶ月あたり750時間(つまり常に無料)
  
  ※注意:停止しているインスタンスに対してElastic IP(グローバルIP)を割り当てると1時間につき$0.01(約1円)課金される
  
  ※注意:IPアドレスの割り当てしなおしを月に100回を超えると$0.10(約10円)課金される

[サインアップ(アカウント取得)]
  ・日本のAmazonのアカウントがあっても新たにアカウント取得が必要(米国アカウントがあれば不要らしい)
  
  ・メールアドレスを入力して、"I am a new user."を選択して、"Sign in using secure server"をクリック
  
  ・"My name is"に名前を入力、
   "My e-mail address is"、"Type it again"にメールアドレスを入力、
   "Enter a new password"、"Type it again"にパスワードを入力、
   "Continue"をクリック
  
  ・"氏名*"に名前を入力、"国*"にJapanを選択、
   "住所1*"に住所を入力、
   "市区町村*"に市を入力、"都道府県*"に県名を入力、
   "郵便番号"に郵便番号を入力、"電話番号*"に電話番号を入力
   "セキュリティチェック"に画像の英字を入力、"AWSカスタマー利用規約"にチェックを入れて、
   "アカウントを作成して続行"をクリック
  
  ・クレジットカード情報を入力
  
  ・電話による身元確認
   "国コード"に"Japan(+81)"を選択して、"確認用に自分に電話をする"をクリック
   電話がかかってくるので、"画面に表示された暗証番号4桁"を"電話機"に入力、
   "続ける"をクリック
  
  ・完了:登録したメールアドレスにアカウント作成完了の通知が届く

[接続、起動]
  ・まずは、サービス一覧が表示されるAWSの設定画面(AWS Management Console)にいく
   "右上のアカウント/コンソール"をクリックして"AWS Management Console"をクリック
  
  ・次にインスタンスの生成画面にいく
   "EC2 Dashboard"を選択して、右上にあるリージョンを"Tokyo"を選択して、
   "Launch Instance"をクリック
   "Classic Wizard"を選択して、"Continue"をクリック
  
  ・Interface 2013年2月号のサンプルを使用してインスタンスを選択する
   "Community AMIs"を選択して、"Viewing"を"All Images"を選択して、"Interface"で検索、
   "ami-a6e058a7"の"Select"をクリック
  
  ・インスタンスを生成する
   "Number of Instances"に"1"を入力し、"Instance Type"に"T1 Micro(t1.micro, 613MiB)"を選択し、
   "Subnet"に"No Preference (default subnet in any AZ)"(Tokyoには2つのアベイラビリティゾーンが存在、今回は非選択)を選択し、
   "Continue"をクリック
   ※T1 Micro:CPUユニットはUp to 2 ECUs、コア数は1Core、メモリは613MiB
  
  ・詳細設定はせずに"Continue"をクリック
  
  ・ストレージの設定もせずに"Continue"をクリック
  
  ・インスタンスに名前をつける
   "Key(Name)"に任意の名前(mai saba)を入力して、"Continue"をクリック
  
  ・キーペアの作成
   InterfaceではSSHでアクセスしないのでキーペアを作成しないとあるが、念のためキーペアを生成
   キーに"InterfaceSample"を入力して、"Create & Download your Key Pair"をクリック
  
  ・生成
   "Launch"をクリック、"Close"をクリック
  
  ・生成したインスタンスを確認
   左のチェックボックスにチェック(選択)を入れると、下に選択したインスタンスの状態が表示される
   
   ec2-54-249-39-113.ap-northeast-1.compute.amazonaws.com → 変動するアドレス、固定は"ec2-54-249-106-XXX.ap-northeast-1.compute.amazonaws.com"
  
  ・ファイアウォールの設定
   左のタブの"Security Groups"をクリックして、チェックボックスにチェック(選択)を入れる
   "Inbound"をクリック、"Create a new rule"で"HTTP"を選択して、"Add Rule"をクリック、"Apply Rule Changes"をクリック
    ⇒"SSH"も追加

[動作確認] 
  ・Apache2の接続確認
   "ec2-54-249-39-113.ap-northeast-1.compute.amazonaws.com"をブラウザに入力、"It works!"と表示されればApacheが動作してる
  
  ・Zabbixの動作確認
   トップのURLの末尾に"/zabbix/"を付けてアクセスする、
   IDに"admin"、パスワードに"zabbix"でログインして、
   "監視データ"タブの"ダッシュボード"をクリック
   "Sample Data Server:Temp & Humidity in Sapporo"をクリックするとグラフが表示される
   ※インスタンスを生成してから毎分で取得したデータのグラフとなるため、ある程度時間が経過してから見るとよい
  
  ・SSHの動作確認
   TeraTermを起動して、ユーザ名に"ubuntu"、パスワードにキーの値を入力して、
   "RSA/DSA鍵を使う"にチェックを入れて、"秘密鍵"にダウンロードした"XXX.pem"ファイルを指定して"OK"をクリック
    ⇒ログインできた