2013年11月10日日曜日

Python 3.3.2でmysql-connector-pythonを試す

Python3.3.2でmysql-connnector-pythonを試してみました。

1. pipでインストール

pip install mysql-connector-python
pipではインストールできませんでした。ドキュメントでは3.1は対応しているようなのですが無理っぽいですね。
$ pip install mysql-connector-python
途中省略
error: invalid command 'egg_info'

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_user/mysql-connector-python
Storing complete log in /path/to/.pip/pip.log

2. MySQL Connector/Pythonを確認

ChangeLogを確認したところ
1.1.0の開発版からprint()文に変更されているので、Python3系の対応が行われているっぽい
http://dev.mysql.com/doc/relnotes/connector-python/en/news-1-1-0.html

いずれにせよ安定版ではないので、少しでもバグフィックが多い最新バージョンの1.1.2をインストールしてみます。
Changes in MySQL Connector/Python 1.1.2 (2013-10-23)

ちなみにまだリリースされていない1.1.3の情報では、sjisなどバックスラッシュ(0x5c)問題があるようなので、sjisを扱う場合は導入はまだ難しいようです。
Changes in MySQL Connector/Python 1.1.3 (Not yet released)

3. ソースコードでインストール

ソースコードはこちらから http://dev.mysql.com/downloads/connector/python/
curl -L -o mysql-connector-python-1.1.2.tar.gz "http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.1.2.tar.gz/from/http://cdn.mysql.com/"
tar zxfv mysql-connector-python-1.1.2.tar.gz
mysql-connector-python-1.1.2
python setup.py install

4. 動作確認

$ python
Python 3.3.2 (default, Nov  3 2013, 19:17:12)
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mysql.connector
>>> config = {
...    'user': 'username',
...    'password': 'password',
...    'host': '127.0.0.1',
...    'database': 'databasename',
... }
>>> cnx = mysql.connector.connect(**config)
>>> cur = cnx.cursor(buffered=True)
>>> cur.execute("SHOW STATUS LIKE 'Uptime'")
>>> print(cur.fetchone())
('Uptime', '678')
>>> cur.close()
True
>>> cnx.close()
簡単な動作確認ですが、動作しました。

2013年10月26日土曜日

Mac OS X 10.8 (Mountain Lion) -> 10.9 (Mavericks) アップグレードしてみた

新しいOSが出たらすぐにアップデート派なので、
発表されてすぐに10.8 (Mountain Lion) -> 10.9 (Marvericks)アップグレードしました。

当然新しいOSにはトラブルがつきもので、
もちろん覚悟はしていたのですが以外に無くてびっくりしています。
また機能的にはデスクトップやマルチモニタ環境の改善がすごく気に入っています。

が、しかし、100%問題無いということは無いので、アプリケーションの対応状況について実際に動作させて気になった点をご紹介いたします。

以下クリーンインストールではなく10.8からのアップデートという前提となります。

まずは致命的な所からのご紹介です。


Intel HAXM [×]

http://software.intel.com/en-us/forums/topic/477793

Intel HAXMのように致命的なものもあったりするので、仕事で使っているMacの場合は、使用しているアプリケーションが正式対応するまで待った方が安全かと思います。ちなみに実際に試してみましたがIntel HAXMを使用しているエミュレータ等を起動するとカーネルパニックになって電源OFF,ONしか復旧できません。Titanium MobileとかTizenなど開発に影響が出ているようです。

でも、こちらも中の人が反応してくれているので、
近いうちに10.9対応版がリリースするのではないかと思います。

追記 2013-10-29
Intel HAXM teamがMavericksとWindows8.1対応版をテスト中らしいです。

アンインストール方法

sudo /System/Library/Extensions/intelhaxm.kext/Contents/Resources/uninstall.sh

追記 2013-11-06
Mavericks用のhotfix(バージョン1.0.7)を適用したら動作しました。
http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager


MacPorts [△]
対応しているバージョンは、2.2.1以上ですね。
しかも、再ビルドが必要な場合が多いようです。
けっこうな手間ですが、今後のために再構築します。

ソースコード
https://distfiles.macports.org/MacPorts/MacPorts-2.2.1.tar.bz2
パッケージ
https://distfiles.macports.org/MacPorts/MacPorts-2.2.1-10.9-Mavericks.pkg

いろいろ問題はあるようでこちらにまとめられています。
http://trac.macports.org/wiki/MavericksProblems

ソースコードをビルドすると次のようにtclで止まります。おそらくオプションつければいけるとは思いますが、ここは素直にパッケージで導入しました。
checking for Tcl configuration... configure: error: Can't find Tcl configuration definitions

VMWare Fusion [△〜◯]

4系は動作しないという情報も目にしたのですが、私の場合は、動作しています。
WindowsXPもWindows8.1も動作上は問題ないですね。

追記 2013-10-29
既存環境が動作する分には問題ないですが、設定変更などができませんでした。

5系は、仕事用のMacで使用していて、こちらはまだアップデートしていないのですが、Marvericksのマルチモニタ機能には対応していないようですが、動作しないということはなさそうですね。
https://discussionsjapan.apple.com/message/100804960#100804960

6系で正式に対応ってことですね。

追記 2013-10-29
正式にMavericksとWindows8.1対応版がリリースされました。
http://t.co/y0Aazo1vyn

VirtualBoxとVagrant [◯]

以前バージョンでは下記のようなエラーが出て起動しませんでした。
こちらも最新バージョンにアップデートして解決しました。

VirtualBox 4.3
https://www.virtualbox.org/wiki/Downloads
追記 2013-11-02
インストーラに含まれるVirtualBox_Uninstall.toolで前のバージョンをアンインストールしてから4.3.2をインストールする

直らない場合は、次のコマンドで回避できそう。私の環境は不要でした。
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.plist

Vagrant 1.3.5
http://downloads.vagrantup.com/tags/v1.3.5

VirtualBoxバージョンアップ前
vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface
VBoxManage: error: Context: "int handleCreate(HandlerArg*, int, int*)" at line 68 of file VBoxManageHostonly.cpp

Vagrantバージョンアップ前
$ vagrant up
Vagrant has detected that you have a version of VirtualBox installed
that is not supported. Please install one of the supported versions
listed below to use Vagrant:

プログラミング言語  [個人的に◎]

とりあえずバージョンをさらしてみます。
perl -v
This is perl 5, version 16, subversion 2 (v5.16.2) built for darwin-thread-multi-2level (with 3 registered patches, see perl -V for more detail)

php -v
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38)

python --version
Python 2.7.5

ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
個人的にはどれもすぐに開発で使えるバージョンですね。
こういうの地味に助かるんじゃないでしょうか。

あと、Chrome, Firebox, Safari, Dropbox, Evernote, Office2011, SublimeText, Coda2, mi, などなど・・・今のところ問題なくアッグレードはすごく満足度が高いものとなりました。



2013年10月14日月曜日

OSX CPU情報の取得

OSXでCPU情報を取得する機会があったのでメモ

sysctl -a | grep cpu

かなりいろいろな情報が取れるがいくつかを抜粋すると

物理コア数
hw.physicalcpu: 8

論理コア数
hw.logicalcpu: 16

ブランド名
machdep.cpu.brand_string: Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz

クロック数
hw.cpufrequency: 2260000000

system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: Mac Pro
      Model Identifier: MacPro4,1
      Processor Name: Quad-Core Intel Xeon
      Processor Speed: 2.26 GHz
      Number of Processors: 2
      Total Number of Cores: 8
      L2 Cache (per Core): 256 KB
      L3 Cache (per Processor): 8 MB
      Memory: 6 GB
      Processor Interconnect Speed: 5.86 GT/s
      Boot ROM Version: MP41.0081.B07
      SMC Version (system): 1.39f5
      SMC Version (processor tray): 1.39f5
      Serial Number (system): ****************
      Serial Number (processor tray): ****************
      Hardware UUID: ********-****-****-****-************
こちらは[ユーティリティ]->[システム情報]で参照できる情報に近いですね。
同じものを参照しているのかもしれません。

詳しくはこちら https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/system_profiler.8.html
CPU以外にも取得できるデータ型は次のコマンドで確認できます。
system_profiler -listDataTypes

Available Datatypes:
SPParallelATADataType
SPUniversalAccessDataType
SPApplicationsDataType
SPAudioDataType
SPBluetoothDataType
SPCameraDataType
SPCardReaderDataType
SPComponentDataType
SPDeveloperToolsDataType
SPDiagnosticsDataType
SPDiscBurningDataType
SPEthernetDataType
SPExtensionsDataType
SPFibreChannelDataType
SPFireWireDataType
SPFirewallDataType
SPFontsDataType
SPFrameworksDataType
SPDisplaysDataType
SPHardwareDataType
SPHardwareRAIDDataType
SPInstallHistoryDataType
SPNetworkLocationDataType
SPLogsDataType
SPManagedClientDataType
SPMemoryDataType
SPModemDataType
SPNetworkDataType
SPPCIDataType
SPParallelSCSIDataType
SPPowerDataType
SPPrefPaneDataType
SPPrintersSoftwareDataType
SPPrintersDataType
SPConfigurationProfileDataType
SPSASDataType
SPSerialATADataType
SPSPIDataType
SPSoftwareDataType
SPStartupItemDataType
SPStorageDataType
SPSyncServicesDataType
SPThunderboltDataType
SPUSBDataType
SPNetworkVolumeDataType
SPWWANDataType
SPAirPortDataType

system_profiler SPHardwareDataType

2013年10月5日土曜日

pip listのAssertionError

メモから再開する逆襲のエンジニアブログ

久しぶりにOSXでpython環境を作成したところ、
いきなりpip listでAssertionError

追記 2013-10-06 Debian 7.1でも同様のAssertionErrorを確認
$ pip list
distribute (0.6.49)
pip (1.4.1)
Exception:
Traceback (most recent call last):
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/basecommand.py", line 134, in main
    status = self.run(options, args)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 80, in run
    self.run_listing(options)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 127, in run_listing
    self.output_package_listing(installed_packages)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 136, in output_package_listing
    if dist_is_editable(dist):
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/util.py", line 347, in dist_is_editable
    req = FrozenRequirement.from_dist(dist, [])
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/__init__.py", line 194, in from_dist
    assert len(specs) == 1 and specs[0][0] == '=='
AssertionError

もうstackoverflowなしじゃ生きていけない・・・
http://stackoverflow.com/questions/18542633/pip-list-error-124-installing-on-mac-os-x

というわけで、distributeをアップデートして対策完了
$ pip install -U distribute

$ pip list
distribute (0.7.3)
pip (1.4.1)
setuptools (0.6c11)
stevedore (0.12)
virtualenv (1.10.1)
virtualenv-clone (0.2.4)
virtualenvwrapper (4.1.1)

2013年6月29日土曜日

これじゃないスタートボタン (Windows 8.1 Preview Build 9431)

Windows 8.1 Previewを試してみましたが、
先日の悲報通り、これじゃないスタートボタンでした。
日常的には使わない項目のオンパレードです。

やはり、期待していた従来の階層化メニューは実装されませんでした。
まだ、Previewなので今後の改善もあるかも・・・。

しかも、これボタンを右クリックしないと出てこないんですよ
左クリックするとメトロUIの「スタート画面」が出ます。
確かに7以前も管理系は右クリックでしたが。
これじゃない・・・。

あえて言うなら、サードパーティー的にはよかったんでしょうか。
Windows8のスタートメニューのシェア80%獲得しましたとか・・・。
そういう市場もあるんでしょうか。
ただし、無料に限り。
スタートメニューに広告掲載決定ですね。


起動時のスタート画面


ちなみに、スタート画面はデスクトップかどうか選べるオプションが増えているようです。
これもサードパーティは実装済みですが、デフォルトで設定できる点で改善されていると言ってよいかと思います。

既存の機能で階層化スタートメニューを実装してみた


とりあえず、今回のPreview版では階層化が実現しないので、
既存の機能で階層化メニューを作ってみました。

1. タスクバーを右クリックして[ツールバー]->[新規ツールバー(N)...]をクリックする


2. フォルダの欄に次のパスを入力して[フォルタの選択]ボタンをクリック

C:¥ProgramData¥Microsoft¥Windows¥Start Menu¥Programs

3. タスクバーにプログラムのメニューが作成されました

でも、これじゃないんだ・・・。
あまり便利な方法ではないので、サードパーティのスタートメニューアプリをインストールするのが不安な人は、こういう方法もあるのでご活用ください。



2013年6月11日火曜日

hooks/post-updateでsudoコマンドによるgit pull

hooks/post-updateでpullしようとしてちょっとはまったのでメモ 次のようにpost-updateを設定
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
sudo -u [user name|] git update-server-info
cd /path/to
sudo -u [user name|] git --git-dir=/path/to/.git pull

/var/log/secureに出力されるログ


git pushすると次のようなエラーがsecureログに出力されpullに失敗した。
sorry, you must have a tty to run sudo
sudoコマンドの実行にはttyが必要らしい・・・
ログインしていないと動かないということなのか?

/etc/sudoersの変更


sudoersの設定を見直したところ、それっぽいのがあった。
visudoで次の一行をコメントアウトでエラーが解消され動作しました。
#Defaults    requiretty

そういえば、そうだった気がする。

2013年6月3日月曜日

はてなダイアリー、WordpressからBloggerに引っ越ししました

はてなダイアリーとWordpressの過去ブログをBloogerに引っ越ししてみました。

といっても、ただ変換してインポートしただけなので、
ほとんど手間はかかっていませんが、レイアウトは期待していません。
結果は、見ての通りというか、まあ想像通りですね。

今回は、こちらのコンバーターを利用させていただきました。

コンバーターのダウンロード

こちらからソースをダウンロードする
https://code.google.com/p/google-blog-converters-appengine/

ダウンロードしたファイル
https://google-blog-converters-appengine.googlecode.com/files/google-blog-converters-r89.tar.gz

ダウンロードしたファイルを解凍します。

はてなダイアリー to Blogger

1. はてダで、[データ管理]->[Movable Type形式]->[ダウンロード]リンクをクリックして、MT形式でエクスポートする。
2. MT形式でダウンロードしたファイルを次のコマンドで変換します。
./movabletype2blogger.sh /path/to/[MT形式のファイル].txt > hateda.xml
3. Bloggerの[設定]->[その他]->[ブログツール]->[ブログをインポート]機能を使用して変換したファイルを読み込み完了です。

ただし、作成日がうまく取り込めなかったので、取り込んだ後に手動で修正しました。

Wordpress to Blogger

1. [ツール]->[エクスポート]で既存データをダウンロードする。
2. ./wordpress2blogger.sh /path/to/web.wordpress.2013-06-02.xml > wordpress.xml
3. Bloggerの[設定]->[その他]->[ブログツール]->[ブログをインポート]機能を使用して変換したファイルを読み込み完了です。

こちらは作成日も正しくインポートできているようです。
文字データだけでも引っ越しできたのでよしとします。

2013年6月2日日曜日

Redmine 2.0.3を2.3.1にアップグレード

脆弱性放置のRuby on Railsが標的に、Webサーバを狙うボット攻撃が横行
http://www.itmedia.co.jp/enterprise/articles/1305/30/news029.html

らしいです・・・。
RedmineはRailsで動作しているアプリケーションなのでバージョンアップすることにしました。
この脆弱性について詳しくはこちら
http://jarmoc.com/blog/2013/05/28/ror-cve-2013-0156-in-the-wild/

Redmine2.0.3とRailsも3.2.6の組み合わせで使用していたので、
脆弱性放置・・・の対象になります。

まずは、既存環境のバックアップからです。

1. redmineのインストールディレクトリをバックアップ

cp -r /path/to/redmine-2.0.3 /path/to/redmine-2.0.3-20130530


2. データベースをバックアップ

mysqldump --default-character-set=binary redmine > redmine_20130530.sql


3. redmineの最新版(2013-05-30現在2.3.1)をダウンロード

cd /path/to
curl -L -O http://rubyforge.org/frs/download.php/76933/redmine-2.3.1.tar.gz
unzip redmine-2.3.1.tar.gz

4. プラグインのダウンロード

私の場合は、前のバージョンで使用していたプラグインはコピーした場合に動作しなかったため最新版をダウンロードしました。
cd /path/to/redmine-2.3.1/plugins
e.g.
git clone git://github.com/backlogs/redmine_backlogs.git
その他、いくつか。

5. 定義ファイルの設定

こちらは旧バージョンのコピーでも問題ないかもしれませんが、
バージョンが離れていたので新規のものに再定義しました。
こちらは環境により異なります。
・ /path/to/redmine/configuration.yml
・ /path/to/redmine/database.yml

6. モジュールのインストールおよびアップデート

cd /path/to/redmine
bundle update


7. dbのマイグレーション

rake generate_session_store
rake db:migrate RAILS_ENV="production"
rake db:migrate_plugins RAILS_ENV=production
rake redmine:plugins:migrate RAILS_ENV=production
rake tmp:cache:clear
rake tmp:sessions:clear

8. railsのバージョン確認

rails -v
Rails 3.2.13

Webサーバを再起動して完了です。
脆弱性対応済みのバージョンにアップグレードできました。

まとめ

Redmineだけ使っているとRails環境をあまり意識しないので、Railsの脆弱性にも日頃から気をつけなくてはいけないですね。
Redmine環境を構築するときに細かいトラブルがあったりしたのでアップグレードが面倒に感じることもありますが、バックアップさえ取得できていれば動作しなかった場合はすぐに戻せるので、脆弱性は放置せず対応する必要がありますね。
反省・・・しております。


2013年5月13日月曜日

見せてもらおうか、Debian 7.0「Wheezy」の性能とやらを

Debian 7.0「Wheezy」が2013/05/04にリリースしていたので、
インストールして使ってみました。

先日Google Compute EngineのデフォルトOSとして採用されたので、
ちょっと興味があったというのが理由だったります。
Google Compute Engineに採用されたというのは、Debianにとっても影響が大きいですよね。
これまでもAWSでは使えてますが、それがGoogleでも使えるということになります。

参考
Debian 7.0 (wheezy) リリースノート (64 ビット PC 用)
Debian GNU/Linux インストールガイド

ミニマム感がうれしいインストール




主にサーバ用途の場合ですが、
初めてのOSセットアップはできるだけミニマムな構成でインストールします。
これは必要なパッケージやソースを集めていると環境を把握することにもなるし、
そもそも不要なものが入りにいくのでライブラリの競合なども防げるというのが理由です。

そんなわけで、ミニマムでインストールしてみたところ、
やはり「Google Compute EngineがデフォルトOSとして採用したギークなOS」という感じがしますね。
他のOSではデフォルトで入っていると思われるパッケージも入っていません。
sudoもないんでよすね。
どうでもいいことなんですがミニマム感があふれていてちょっとうれしくなりました。

採用されているパッケージのバージョンが比較的新しい




安定板というと、通常は使い古されたバージョンのものが採用されることが多いですが、
今回のDebian7.0はわりと新しいものが採用されていて個人的にはうれしい限りです。
これにより、わざわざ最新版のソースをダウンロードしてコンパイルしたり、
パッケージが提供されているリポジトリを探したりしなくても良いわけです。
何よりバグフィックスとかあってもパッケージの更新だけで済みます。

リリースされる時期より採用されるバージョンが決まると思うんですが、
個人的にはタイミングがよかったようで、既存のパッケージだけでもすぐに使える感じがしました。

詳しくはこちら
ディストリビューションの最新情報

安定しています




まだ1週間ほどしか稼働していませんが安定しています。
安定版とはいえ、新しいOSを使い始めるとそれなりに問題が出てくるんですが今回は無いですね。

ちなみに今回は、新規インストールだからかもしれませんが、
パッケージのバージョンが新しいものになっているので、
バージョンアップすると悪い意味で全然違う結果になったかもしれませんね。

第4章 Debian 6.0 (squeeze) からのアップグレード
http://www.debian.org/releases/wheezy/i386/release-notes/ch-upgrading.ja.html

しばらくDebian使ってみます




個人的にはこれまではあまりよい印象ではなかったDebianですが、単なる食わず嫌いだったようです
更なる発展を期待しています。

2013年4月16日火曜日

Amazon Linux (EC2) で Fluentd(td-agent)を試す

php環境での使用を想定しているのでrubyのインストールはせず、
td-agentがAmazon Linuxで動作するか試してみた。
ちなみにrubyでも導入は簡単そうでした。

参考

http://docs.fluentd.org/articles/install-by-rpm
http://docs.fluentd.org/articles/php

検証環境

  • OS Amazon Linux 64bit
  • インスタンスの種類 マイクロインスタンス
  • ログの受信用サーバ1インスタンス
  • ログの送信用サーバ1インスタンス
  • PHP5.4から任意の値を送信(FuelPHP上で使ってみた)

1. td-agentのインストール

#次の1行をec2-userで実行した。
curl -L http://toolbelt.treasure-data.com/sh/install-redhat.sh | sh

ビルド済みのパッケージをインストールするだけなので、microインスタンスでもすぐに完了した。
Installing:
 td-agent            x86_64     1.1.12-0              treasuredata     20 M
Installing for dependencies:
 compat-libtermcap   x86_64     2.0.8-49.2.amzn1      amzn-main        16 k
 compat-readline5    x86_64     5.2-17.3.amzn1        amzn-main        156 k
 openssl098e         x86_64     0.9.8e-17.8.amzn1     amzn-main        894 k
 td-libyaml          x86_64     0.1.4-1               treasuredata     125 k

2. 設定ファイル(ログ受信側)

/etc/td-agent/td-agent.conf
<source>
  type forward
  port 24224
</source>
<match log.**>
  type file
  path /var/log/fluent/log
  time_slice_format %Y%m%d%H (1時間毎にファイル分割してみた)
  time_slice_wait 10m
  time_format %Y%m%d %H:%M:%S
  compress gzip
</match>

3. 設定ファイル(ログ送信側)

/etc/td-agent/td-agent.conf
<source>
  type unix
  path /var/run/td-agent/td-agent.sock
</source>
<match log.**>
  type forward
  send_timeout 60s
  recover_wait 10s
  heartbeat_interval 1s
  phi_threshold 8
  hard_timeout 60s
  <server>
    host 10.***.***.***(受信サーバのプライベートIPアドレス)
    port 24224
  </server>
  <secondary>
    type file
    path /var/log/fluent/forward-failed
  </secondary>
</match>

4. SecurityGroupsの設定

td-agentは、デフォルトで24224番ポートを使用するが、
TCPとUDPの両方を使用するので、両方開けておく必要がある。
http://docs.fluentd.org/articles/in_forward
http://docs.fluentd.org/articles/out_forward

5. td-agentの起動

送信、受信双方のtd-agentを起動する。
起動
/etc/init.d/td-agent start
停止
/etc/init.d/td-agent stop
再起動
/etc/init.d/td-agent restart
状態確認
/etc/init.d/td-agent status

自動起動
chkconfig --level 345 td-agent on

6. fluent-logger-phpのインストール

公式サイト掲載のパッケージをそのまま利用してみた。
git clone https://github.com/fluent/fluent-logger-php.git
cp -r src/Fluent /path/to/

7. ログを送信してみたサンプルコード

require_once '/path/to/Fluent/Autoloader.php';
use Fluent\Logger\FluentLogger;
Fluent\Autoloader::register();

$key = 'log.pv';
$val = array(
    'time'        => date('Y-m-d H:i:s'),
    'member_id'   => 'aaaaaaa',
    'useragent'   => $_SERVER['HTTP_USER_AGENT'],
    'ipaddress'   => $_SERVER['HTTP_X_FORWARDED_FOR'],
);
$logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock");
$logger->post($key, $val);

8. 試してみた感想

出力されるログは、JSON形式なので集計するときに取り扱いが簡単ですね。
また、追加したい値が増えてもこれなら気兼ねなく追加できます。
基本的なことでかつ重要なことですが、今のところログの取りこぼしがありません。
試しに受信側落としてみたらセカンダリーに出力してくれるし、設定によってはコピーして転送してくれたりで、
冗長化や障害時のリカバリーも可能ですね。

日々すごい量のトラフィックをさばいている次の企業で導入されているのも納得です。
http://docs.fluentd.org/articles/users

あと、td-agentならrubyではない環境でも簡単にfluentdが導入できそうです。
ただし、Windowsは除くようですが・・・。

Fluentd doesn't run on Windows.

2013年4月7日日曜日

FuelPHP 1.5.2と1.5.3の差分

2013/3/8にFuelPHP 1.5.3が出てたので内容を確認してみた
セキュリティー関連の設定に変更があったようです。



手元の1.5.2とdiffしてみた。

Files fuelphp-1.5.2/docs/assets/js/combined.js
Only in fuelphp-1.5.3/fuel/app/cache: fuel
Files fuelphp-1.5.2/fuel/app/config/config.php
Only in fuelphp-1.5.3/fuel/app/logs: 2013
Only in fuelphp-1.5.3/fuel/app/views: person
Files fuelphp-1.5.2/fuel/core/classes/fuel.php
Files fuelphp-1.5.2/fuel/core/classes/security.php
Files fuelphp-1.5.2/fuel/core/config/config.php


差分確認して該当のファイルを置き換えればよさそうです。

2013年2月12日火曜日

FuelPHP 1.5.1と1.5.2の差分

FuelPHP 1.5.2が出たので内容を確認してみた。

Hotfix release v1.5.2
fixed autoloader not properly loading and initializing classes are an…

autoload関連のバグフィックスらしい
手元の1.5.1とdiffしてみた。

diff -qr fuelphp-1.5.1 fuelphp-1.5.2
// パスは省略
Only in fuelphp-1.5.2: .gitignore
Only in fuelphp-1.5.2: .gitmodules
Only in fuelphp-1.5.2/docs: .gitignore
docs/assets/js/combined.js
docs/installation/download.html
fuel/core/base.php
fuel/core/bootstrap.php
fuel/core/classes/autoloader.php
fuel/core/classes/session/driver.php
fuel/packages/log/classes/log.php


アップデートした方がよさそう。
coreとlog.phpはコピーしておこう。