httpプロキシ経由でgitリポジトリをhttpsプロトコルから取得する時の注意(Ubuntu)

proxy経由で https://git-wip-us.apache.org/repos/asf/deltacloud.git
をcloneしようとして失敗した。

以下の記事によると、Ubuntuに標準でインストールされているlibcurl3-gnutlsの不具合らしい?
libcurl3-gnutls-7.21からlibcurl3-gnutls-7.22にバージョンアップすることでgit cloneに成功しました。
http://stackoverflow.com/questions/8403792/git-behind-proxy-remote-head-refers-to-nonexistent-ref-unable-to-checkout

失敗した時に表示されるエラーはこのような感じ

$ git clone https://git-wip-us.apache.org/repos/asf/deltacloud.git
Cloning into deltacloud...
warning: remote HEAD refers to nonexistent ref, unable to checkout.

http://packages.ubuntu.com/en/precise/amd64/libp11-kit0/download
http://packages.ubuntu.com/en/precise/amd64/libgnutls26/download
http://packages.ubuntu.com/en/precise/amd64/libcurl3-gnutls/download
ここから必要なlibp11-kit0,libgnutls26,libcurl3-gnutlsをダウンロード。

# dpkg -i libp11-kit0_0.10-1_amd64.deb libgnutls26_2.12.14-5ubuntu2_amd64.deb libcurl3-gnutls_7.22.0-3ubuntu2_amd64.deb

でインストールします。

git cloneする前に、gitでプロキシの設定を行なって下さい。

$ git config --global http.proxy "http://[proxy ip]:[port]"

あとは、通常のgit cloneを実行します。

$ git clone https://git-wip-us.apache.org/repos/asf/deltacloud.git

ちなみに、corkscrewなどの設定を行なって、gitプロトコル経由でcloneしてくる場合には必要ない対応です。

今回試した環境はUbuntu 11.10の64bit版です。
記事中に示したサイトでは11.04でも同様に発生するようです。

vmwareのsnmpの拡張MIBを設定する

VMware ESXiの情報をsnmpwalkなどで取得すると、このような感じでどの値が何を示しているのかわからない。

SNMPv2-SMI::enterprises.6876.2.1.1.2.32 = STRING: "test-server"
SNMPv2-SMI::enterprises.6876.2.1.1.3.32 = STRING: "/vmfs/volumes/4zzz7faxxx6-xxxxxx2-cxxxx-4xxxxf6e3a/test-server/test-server.vmx"
SNMPv2-SMI::enterprises.6876.2.1.1.4.32 = STRING: "centos64Guest"
SNMPv2-SMI::enterprises.6876.2.1.1.5.32 = INTEGER: 2048
SNMPv2-SMI::enterprises.6876.2.1.1.6.32 = STRING: "poweredOn"
SNMPv2-SMI::enterprises.6876.2.1.1.7.32 = INTEGER: 32
SNMPv2-SMI::enterprises.6876.2.1.1.8.32 = STRING: "running"
SNMPv2-SMI::enterprises.6876.2.1.1.9.32 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.2.2.1.3.32.1000 = STRING: "SCSI Controller 0"
SNMPv2-SMI::enterprises.6876.2.2.1.4.32.1000 = STRING: "lsilogic"
SNMPv2-SMI::enterprises.6876.2.3.1.3.32.2000 = STRING: "Hard Disk 1"
SNMPv2-SMI::enterprises.6876.2.4.1.3.32.4000 = STRING: "Ethernet 1"
SNMPv2-SMI::enterprises.6876.2.4.1.3.32.4001 = STRING: "Ethernet 2"
SNMPv2-SMI::enterprises.6876.2.4.1.4.32.4000 = STRING: "internal"
SNMPv2-SMI::enterprises.6876.2.4.1.4.32.4001 = STRING: "service"
SNMPv2-SMI::enterprises.6876.2.4.1.5.32.4000 = STRING: "monitor_dev"
SNMPv2-SMI::enterprises.6876.2.4.1.5.32.4001 = STRING: "monitor_dev"
SNMPv2-SMI::enterprises.6876.2.4.1.6.32.4000 = STRING: "true"
SNMPv2-SMI::enterprises.6876.2.4.1.6.32.4001 = STRING: "true"
SNMPv2-SMI::enterprises.6876.2.4.1.7.32.4000 = Hex-STRING: 00 0C 29 Ex Cx 8x 
SNMPv2-SMI::enterprises.6876.2.4.1.7.32.4001 = Hex-STRING: 00 0C 29 Ex Cx 9x 
SNMPv2-SMI::enterprises.6876.2.6.1.3.32.3002 = STRING: "[] /vmfs/volumes/3c3xxxxe8-fvvvv42a-1xxx0-vvvvdcb26d3a/packages/4.1.0/vmtools/linux.iso"
SNMPv2-SMI::enterprises.6876.2.6.1.4.32.3002 = STRING: "false"

そこで、VMwareの公式サイトで公開されているMIBファイルを取得し、
もう少しわかりやすく表示できるようにしてみます。

http://downloads.vmware.com/d/details/esx40_snmp_mib_dt/ZHcqYmQqaCViZCpwcA==
ここからMIBファイル群をダウンロードします。

MIBファイルをsnmpwalkを実行する際に読み込まれるように設定します。

MIBファイル取得&配置

$ cd /tmp
$ wget http://download3.vmware.com/software/esx/VMware-esx-mibs-1.0.1-237711.zip
$ unzip VMware-esx-mibs-1.0.1-237711.zip
$ mkdir -P ~/.snmp/mibs
$ mv /tmp/esx ~/.snmp/mibs/esx4

MIBファイル読み込み設定

$ vim ~/.snmp/snmp.conf
mibdirs /usr/share/snmp/mibs:$HOME/.snmp/mibs/mibs/esx4
mibs all

この設定をしてsnmpwalkを実行してみると以下のようにMIBの情報が反映されて表示されます。

VMWARE-VMINFO-MIB::vmwVmDisplayName.32 = STRING: test-server
VMWARE-VMINFO-MIB::vmwVmConfigFile.32 = STRING: /vmfs/volumes/4zzz7faxxx6-xxxxxx2-cxxxx-4xxxxf6e3a/test-server/test-server.vmx
VMWARE-VMINFO-MIB::vmwVmGuestOS.32 = STRING: centos64Guest
VMWARE-VMINFO-MIB::vmwVmMemSize.32 = INTEGER: 2048 megabytes
VMWARE-VMINFO-MIB::vmwVmState.32 = STRING: poweredOn
VMWARE-VMINFO-MIB::vmwVmVMID.32 = INTEGER: 32
VMWARE-VMINFO-MIB::vmwVmGuestState.32 = STRING: running
VMWARE-VMINFO-MIB::vmwVmCpus.32 = INTEGER: 1
VMWARE-VMINFO-MIB::vmwHbaNum.32.1000 = STRING: SCSI Controller 0
VMWARE-VMINFO-MIB::vmwHbaVirtDev.32.1000 = STRING: lsilogic
VMWARE-VMINFO-MIB::vmwHbaTgtNum.32.2000 = STRING: Hard Disk 1
VMWARE-VMINFO-MIB::vmwVmNetNum.32.4000 = STRING: Ethernet 1
VMWARE-VMINFO-MIB::vmwVmNetNum.32.4001 = STRING: Ethernet 2
VMWARE-VMINFO-MIB::vmwVmNetName.32.4000 = STRING: internal
VMWARE-VMINFO-MIB::vmwVmNetName.32.4001 = STRING: service
VMWARE-VMINFO-MIB::vmwVmNetConnType.32.4000 = STRING: monitor_dev
VMWARE-VMINFO-MIB::vmwVmNetConnType.32.4001 = STRING: monitor_dev
VMWARE-VMINFO-MIB::vmwVmNetConnected.32.4000 = STRING: true
VMWARE-VMINFO-MIB::vmwVmNetConnected.32.4001 = STRING: true
VMWARE-VMINFO-MIB::vmwVmMAC.32.4000 = STRING: 0:c:29:ex:cx:8x
VMWARE-VMINFO-MIB::vmwVmMAC.32.4001 = STRING: 0:c:29:ex:cx:9x
VMWARE-VMINFO-MIB::vmwCdromName.32.3002 = STRING: [] /vmfs/volumes/3c3xxxxe8-fvvvv42a-1xxx0-vvvvdcb26d3a/packages/4.1.0/vmtools/linux.iso
VMWARE-VMINFO-MIB::vmwCdromConnected.32.3002 = STRING: false

ちなみに上記のMIBファイルはVMwareESXi4.0,4.1に対応したものです。
このMIBファイルでVMwareESXi5.0のSNMP情報を取得すると、ある程度表示はされるようですが、
一部詳細に表示できない項目がありました。

4系のMIBファイルで5系のSNMPの項目を取得した場合

VMWARE-ENV-MIB::vmwEnv.100.0 = INTEGER: 3
VMWARE-ENV-MIB::vmwEnv.101.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.102.0 = Timeticks: (0) 0:00:00.00
VMWARE-ENV-MIB::vmwEnv.103.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.104.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.105.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.106.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.107.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.108.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.109.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.110.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.111.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnv.111.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

5系のMIBファイルを適用した場合

VMWARE-ENV-MIB::vmwEnvSource.0 = INTEGER: indications(3)
VMWARE-ENV-MIB::vmwEnvInIndications.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvLastIn.0 = Timeticks: (0) 0:00:00.00
VMWARE-ENV-MIB::vmwEnvOutNotifications.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvInErrs.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvIndOidErrs.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvCvtValueErrs.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvCvtSyntaxErrs.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvCvtOidErrs.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvGetClassErrs.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvPropertySkips.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvIndicationSkips.0 = Counter32: 0
VMWARE-ENV-MIB::vmwEnvIndicationSkips.0 = No more variables left in this MIB View (It is past the end of the MIB tree)

これらの項目は5系から追加で取得できるようになった項目のようです。
この項目に対しては5系のMIBファイルの適用が必要なので、可能であれば最新のMIBファイルを適用させておくのがいいかと思います。

VMwareESXi5.0に対応したMIBファイルは以下のページからダウンロード可能です。
5.0のMIBをダウンロードするにはログインが必要でした。
http://downloads.vmware.com/d/details/snmp_mibs/dHRAYnQlKmhiZHAlJQ==


これはVMware ESXiに限ったことではないので、
ネットワーク機器など拡張MIBが含まれる製品であればベンダーのサイトからMIBファイルを取得してきて同様にMIBファイルを配置すれば見れるようになります。

IPMItoolで接続できない時に状況を確認する方法

ipmitoolで接続できない時「-vv」オプションをつけて実行すると詳細な情報が見れていいです。

$ ipmitool -I lan -H xxx.xxx.xxx.xxx -U username -P password chassis power status -vv
ipmi_lan_send_cmd:opened=[0], open=[4519072]
IPMI LAN host xxx.xxx.xxx.xxx port 623
Sending IPMI/RMCP presence ping packet
Received IPMI/RMCP response packet: 
  IPMI Supported
  ASF Version 1.0
  RMCP Version 1.0
  RMCP Sequence 255
  IANA Enterprise 206158434750

ipmi_lan_send_cmd:opened=[1], open=[4519072]
Channel 02 Authentication Capabilities:
  Privilege Level : ADMINISTRATOR
  Auth Types      : 
  Per-msg auth    : disabled
  User level auth : enabled
  Non-null users  : enabled
  Null users      : disabled
  Anonymous login : disabled

Authentication type NONE not supported
ipmi_lan_send_cmd:opened=[1], open=[4519072]
Channel 02 Authentication Capabilities:
  Privilege Level : ADMINISTRATOR
  Auth Types      : 
  Per-msg auth    : disabled
  User level auth : enabled
  Non-null users  : enabled
  Null users      : disabled
  Anonymous login : disabled

Authentication type NONE not supported
Error: Unable to establish LAN session
Failed to open LAN interface
Unable to get Chassis Power Status

こういった結果になった場合、
サーバ側で許可するAuth Typeの設定がされておらず、
どんなAuth Typeでリクエストを投げても許可されていないのではじかれる。


正常に取得できる場合は以下のような結果が返ってくる

$ ipmitool -I lan -H xxx.xxx.xxx.xxx -U username -P password chassis power status -vv
ipmi_lan_send_cmd:opened=[0], open=[4508064]
IPMI LAN host xxx.xxx.xxx.xxx port 623
Sending IPMI/RMCP presence ping packet
Received IPMI/RMCP response packet: 
  IPMI Supported
  ASF Version 1.0
  RMCP Version 1.0
  RMCP Sequence 255
  IANA Enterprise 4542

ipmi_lan_send_cmd:opened=[1], open=[4508064]
Channel 01 Authentication Capabilities:
  Privilege Level : ADMINISTRATOR
  Auth Types      : MD2 MD5 
  Per-msg auth    : disabled
  User level auth : enabled
  Non-null users  : enabled
  Null users      : disabled
  Anonymous login : disabled

Proceeding with AuthType MD5
ipmi_lan_send_cmd:opened=[1], open=[4508064]
Opening Session
  Session ID      : 0200af00
  Challenge       : f5cd2e7c1ff758b43b1374d8663e9f88
  Privilege Level : ADMINISTRATOR
  Auth Type       : MD5
ipmi_lan_send_cmd:opened=[1], open=[4508064]

Session Activated
  Auth Type       : NONE
  Max Priv Level  : ADMINISTRATOR
  Session ID      : 0200b000
  Inbound Seq     : 00000001

ipmi_lan_send_cmd:opened=[1], open=[4508064]
Set Session Privilege Level to ADMINISTRATOR

        opened=[1], open=[4508064]
Chassis Power is on
ipmi_lan_send_cmd:opened=[1], open=[4508064]
Closed Session 0200b000

サーバ側ではMD2とMD5のAuth Typeが有効になっていて、
MD5でリクエストを投げると正しく応答が返ってきているのがわかる。


そもそもIPMIのIPアドレスが無効であればipmipingチェックで応答が返ってこない。

$ ipmitool -I lan -H xxx.xxx.xxx.xxx -U username -P password chassis power status -vv
ipmi_lan_send_cmd:opened=[0], open=[4519072]
IPMI LAN host xxx.xxx.xxx.xxx port 623
Sending IPMI/RMCP presence ping packet
ipmi_lan_send_cmd:opened=[1], open=[4519072]

トラブルシューティングで使えそうです。

PHP Bug Lostを試してみた

PHP Bug Lostとは、PHPの開発に有用なログ情報やSQL実行状況、変数の情報などをブラウザから簡単に確認できるようにする開発ツールです。

導入

以下のサイトからPHP Bug Lostのソースコードをダウンロードしてきます。
http://pbl.elgatonaranja.com/home

取得したzipファイルを開発環境内の適当な場所に展開します。

開発コードへの埋め込み

導入が済めば、開発中のphpソースコード内に以下の2行を追記するだけで利用することが可能です。

include 'PHPBugLost.0.3/phpBugLost.0.3.php'; ←パスは環境に応じて変更して下さい

・・・コード本文

echo bl_debug();

例えばこんな感じのphpソースコードを書いたとします。



Hello World!



ブラウザから見るとこんな感じです。

ブラウザ上での見方

上記のコードは3行目にエラーを含んでいて、
4行目、5行目では変数に値を代入しています。

これをPHP Bug Lostで見てみると、
3行目のエラーに関するログが1件表示されます。

varをクリックすると変数に何の値が格納されているかが表示されます。

この他にもSQLの実行状況などもレポートされるので、
うまく使いこなせば便利かもしれません。

ZabbixでSNMP監視をする際の主要MIB(Linux,Windows,Ciscoスイッチ)

SNMP監視でよく使うOID、MIBの一覧をシステム毎にまとめてみました。
実際に監視するには、CPUやメモリ、ディスクそれぞれMIBの最後につけるindexを付与して下さい。
LinuxCentOSWindowsはWindowsServer2008,CiscoスイッチはCatalyst3560を対象としています。
OSや機器によっては異なることもあるかと思います。
なので、以下の情報は参考程度にご覧下さい。

システム種別 監視項目 OID MIB
Linux CPU関連 .1.3.6.1.4.1.2021.11.50 UCD-SNMP-MIB::ssCpuRawUser
.1.3.6.1.4.1.2021.11.52 UCD-SNMP-MIB::ssCpuRawSystem
.1.3.6.1.4.1.2021.10.1.3.1 UCD-SNMP-MIB::laLoad
Available Memory .1.3.6.1.4.1.2021.4.6 UCD-SNMP-MIB::memAvailReal
.1.3.6.1.4.1.2021.4.14 UCD-SNMP-MIB::memBuffer
.1.3.6.1.4.1.2021.4.15 UCD-SNMP-MIB::memCache
Disk Usage .1.3.6.1.4.1.2021.9.1.6 UCD-SNMP-MIB::dskTotal
※UCD-SNMP-MIB::dskPathの値から監視パーティション確認 .1.3.6.1.4.1.2021.9.1.8 UCD-SNMP-MIB::dskUsed
  .1.3.6.1.4.1.2021.9.1.9 UCD-SNMP-MIB::dskPercent
Disk I/O .1.3.6.1.4.1.2021.13.15.1.1.3 UCD-DISKIO-MIB::diskIONRead
※UCD-DISKIO-MIB::diskIODeviceから監視デバイスを確認 .1.3.6.1.4.1.2021.13.15.1.1.4 UCD-DISKIO-MIB::diskIONWritten
Network IO .1.3.6.1.2.1.2.2.1.10 IF-MIB::ifInOctets
※IF-MIB::ifDescrの値から監視NICを確認 .1.3.6.1.2.1.2.2.1.16 IF-MIB::ifOutOctets
Windows CPU (user usage) .1.3.6.1.4.1.9600.1.1.5.1.6.6.95.84.111.116.97.108 SNMPv2-SMI::enterprises.9600.1.1.5.1.6.6.95.84.111.116.97.108
CPU (system usage) .1.3.6.1.4.1.9600.1.1.5.1.5.6.95.84.111.116.97.108 SNMPv2-SMI::enterprises.9600.1.1.5.1.5.6.95.84.111.116.97.108
CPU (Load Average) .1.3.6.1.2.1.25.3.3.1.2 HOST-RESOURCES-MIB::hrProcessorLoad
Memory .1.3.6.1.2.1.25.2.3.1.5 HOST-RESOURCES-MIB::hrStorageSize
※HOST-RESOURCES-MIB::hrStorageDescrの値から監視するメモリの種別を確認 .1.3.6.1.2.1.25.2.3.1.6 HOST-RESOURCES-MIB::hrStorageUsed
Disk Usage .1.3.6.1.2.1.25.2.3.1.5 HOST-RESOURCES-MIB::hrStorageSize
※HOST-RESOURCES-MIB::hrStorageDescrの値から監視するパーティションを確認 .1.3.6.1.2.1.25.2.3.1.6 HOST-RESOURCES-MIB::hrStorageUsed
Disk IO .1.3.6.1.4.1.9600.1.1.1.1.15.2.67.58 SNMPv2-SMI::enterprises.9600.1.1.1.1.15.2.67.58 (Read)
※Cドライブの一例。システム毎にindexが異なる場合があるので要確認 .1.3.6.1.4.1.9600.1.1.1.1.18.2.67.58 SNMPv2-SMI::enterprises.9600.1.1.1.1.18.2.67.58 (Write)
Network IO .1.3.6.1.2.1.2.2.1.10 IF-MIB::ifInOctets
※IF-MIB::ifDescrの値から監視するNICを確認 .1.3.6.1.2.1.2.2.1.16 IF-MIB::ifOutOctets
Ciscoスイッチ CPU .1.3.6.1.4.1.9.2.1.57.0 OLD-CISCO-CPU-MIB::avgBusy1 (1分毎平均)
Free Memory .1.3.6.1.4.1.9.2.1.8.0 OLD-CISCO-MEMORY-MIB::freeMem
Network IO .1.3.6.1.2.1.31.1.1.1.6 IF-MIB::ifHCInOctets
※監視したいポート毎に値取得 .1.3.6.1.2.1.31.1.1.1.10 IF-MIB::ifHCOutOctets

WindowsのCPUやDiskの使用率をチェックするためにはSNMP-informantを導入する必要があります。(http://www.snmp-informant.com/)

Zabbix2.0での新機能 -ホストインベントリ機能-

Zabbix2.0からの新機能ホストインベントリ機能
まだリリースはされていませんが、Zabbix2.0の開発版であるZabbix1.9.8を導入して、
新機能であるホストインベントリ機能について動作確認してみました。

ホストのOSやHWの情報を管理しておく機能ですが、
最初、Hinemosのような感じを想定していました。

Hinemosの場合、ホストに関するSNMPの情報を登録してFindを実行すると、
自動的にOSが何で、NICやディスクのデバイス名が取得できたり、ファイルシステム名が取得できたりします。

これと似たような感じでZabbixにホストの基本監視設定をしておくとその辺りの情報が取れるのかなと思っていました。
ホストインベントリの管理画面は下記のようになります。

ここでAutomaticというのがあるのでホスト設定をすれば自動的に取れるのかと思っていました。
しかし、Zabbixのホストインベントリ機能はHinemosのものとは少し違います。
Zabbixの基本設定をしただけでは何も取れて来ません。

2 Inventory [Zabbix Documentation 2.0]

ここのマニュアルを読んでわかりました。

アイテムに監視設定を入れて、その監視結果をどこのインベントリ項目に登録するかをあらかじめ設定しておきます。
すると、ホストインベントリに自動的に登録されていくといった機能のようです。

例えば以下のようなアイテムを登録します。

重要なのは、「Item will populate host inventory field」の設定です。
ここで、どのインベントリ項目に監視結果を登録するのかを指定します。
上記のアイテムの場合、OSの情報が取得できるので、「OS」を指定します。

すると、ホストインベントリの画面で以下の図のようにOSの情報が登録されます。

Automaticに設定していると手動で値を変更することはできないようになります。
しかし、アイテムの設定を変更してItem will populate host inventory fieldの指定を解除するとこのように編集できるようになります。
そのかわり、動的に変更させることはできません。

このようにアイテムの監視結果と連動してインベントリを管理していく機能になっています。
ですので、あらかじめホストインベントリを作成するための監視テンプレートを作っておけば、
そのテンプレートを有効にするだけで自動的にホストインベントリに登録されていくので便利に活用できます。

とりあえずホストインベントリを登録することはできました。
今後は、この登録した情報をどう活用できるかを試していきたいと思います。