capistrano で引数から設定した値が定義済みかどうか確認する

capistrano でコマンドラインから値を渡すのに -S foo=bar のようにしますが、この値が定義されているかどうかを確認したくて defined? してみたものの常に未定義になる。でも値は取れる。 # config/deploy.rb if defined? foo puts "foo is defined. foo=#{…

[perl] リクエスト処理前後のメモリ使用量を調べる Plack::Middleware::GTop::ProcMem を書いてみた

https://github.com/fujiwara/Plack-Middleware-GTop-ProcMemPlack アプリケーションが、どれかの処理でメモリを使いすぎてプロセスが太るらしい。でもそれがどのURLを処理したときなのかが分からない、という場合にこんな Middleware を使えば調べられるか…

Monitoring Casual Talk #1 で im.kayac.com の話他をしてきました

同僚の @kenjiskywalker が運用と監視の勉強会をしたい!といいだして、でも弊社には外部の人を呼んで勉強会ができる適当な場所がないなあと悩んでいたら @oranie さんと @masudaK さん、@nakashii_ さんが会場を提供していただけるということで、とんとん拍…

cron で > /dev/null して椅子を投げられないための3つの方法

(タイトルは釣りです)いい加減、>/dev/null 2>&1と書くのをやめたらどうか - DQNEO起業日記 この記事のタイトルが twitter で流れてきたのを見て、「そうだ!出力を /dev/null に捨てるなんてとんでもないよね!」と思ってよく読んだら /dev/null に間違いな…

munin-node → Fluentd → GrowthForecast でオレオレモニタリングツールへの道?

できるかなと思って、とりあえず繋げてみたのでメモ。中途半端。 munin-node → Fluentd munin-ruby で取得した値をまるごと fluentd に送信するスクリプトをcronで1分ごとに実行。 #!/usr/bin/env ruby require "munin-ruby" require "fluent-logger" host =…

標準入力から読んでFluentdに送信するにはfluent-agent-liteが便利

標準入力から受けたログを syslog に送信する場合に使えるのが logger(1) コマンドです。 $ echo "log message" | logger -t myapp -p local0.info自分のところではバッチ処理の出力や、daemontools で起動したコマンドの出力を log/run で logger に渡して …

[fluentd] #Fluentd Casual Talks で「fluentdでWebサイト運用を楽にする」話をしてきました

id:tagomoris さんにお声がけいただきまして、Fluentd Casual Talks にて「fluentdでWebサイト運用を楽にする」というタイトルで発表させていただきました。発表資料はこちら 主催者の id:tagomoris さん、会場を提供していただいた DeNA 様、いろいろ準備を…

fluent-plugin-zabbix リリース

fluentd の出力プラグイン、fluent-plugin-zabbix をリリースしました。 Github fujiwara/fluent-plugin-zabbix https://github.com/fujiwara/fluent-plugin-zabbix fluent-plugin-zabbix | RubyGems.org https://rubygems.org/gems/fluent-plugin-zabbix] …

[perl] Class::Method::Modifiers で WWW::Mechanize の送信するリクエスト内容をロギング

WWW::Mechanize がどんなリクエストを送っているのか、をログに出力してデバッグに使いたいという話。Class::Method::Modifiers を使って、LWP::UserAgent::send_request を hook してあげるとうまくいった。(WWW::Mechanize は LWP::UserAgent の子クラス) …

#fluentd で maillog を読み込んで MongoDB に投入

MTA が吐く maillog は普段あまり見ないのだけど、トラブルがあったときには大変重要。これも Mongo に入れれば、問い合わせがあったアドレスで検索してログを管理画面で見るとかできて便利!ということでやってみた。 # fluentd.conf <source> type tail path /var/</source>…

[nginx] nginx で upstream を active backup 構成

nginx で振り分けるのに、いままで自分の作った構成だと backend はすべて active でロードバランスしてたけど、都合により active-backup 構成にしたくて調べたら簡単だった。一応メモ。HttpUpstreamModule - Nginx Community backup - (0.6.7 or later) on…

[perl] コマンドラインから Day One に投稿する

最近 Day One ってメモアプリが人気なんでしょうか。便利ですよね。とりあえず Dropbox 同期している場合限定ですが (iCloud の仕組みをよく知らない)、コマンドラインから投稿するスクリプトを書いてみました。 $ perl dayone.pl 標準入力からテキストを入…

Parallel::Benchmark というモジュールを書きました

プロセスを並列に立ち上げて負荷を掛けるようなベンチマークを実行することって、よくありますよね。(例 : クエリキャッシュを切ったほうがいイカ? ベンチマークしてみた - 酒日記 はてな支店)Perl で Parallel::ForkManager を使うとそういう処理も簡単に…

warn() で吐かれるログを捕まえて投げる

Perl では $SIG{__WARN__} という疑似シグナルハンドラを使って、warn() で出力されようとする内容をトラップして処理することができます。 package MyWorker; my $logger = Fluent::Logger->new; sub work { my $job = shift; local $SIG{__WARN__} = sub {…

Perl から Fluentd にログ出力 - Fluent::Logger リリース

皆さん、ログ書いてますか!?(挨拶)Fluentd meetup in Japan も開催間近、最近大変熱いイベントログ収集システム Fluentd なわけですが、Perl からログを出力する Fluent::Logger というモジュールを CPAN にリリースしたのでお知らせします。 (最初の版は …

KVM guest VM が突然 paused になった

何も前触れもなく、KVM の guest VM が突然 paused (suspend した状態) になってしまって何事かなのか悩んでいたところ。 VM 置いてるファイルシステムがいっぱいになったときになりました。RT @fujiwara: 【緩募】KVMのguest VMが何もしてないのにいつの間…

クエリキャッシュを切ったほうがいイカ? ベンチマークしてみた

カジュアル!(挨拶) このエントリは MySQL Casual Advent Calendar 2011 の18日目の記事です。昔、専ら PostgreSQL を使っていた頃、MySQL のクエリキャッシュって簡単に性能上がるしみたいだし羨ましいなあ、と思っていました。そのため、1年ほど前から業務…

HAProxy で graceful restart する方法

haproxy には起動後に設定ファイルを読み込み直したりする機能がないので、バランス先を追加するなどの変更が無停止ではできない、と思い込んでいたのだけど実は違った、というお話。実際、同一プロセスで読み込み直すことはできないのだけども、以下のよう…

USB HDD が認識できなかったので mknod

メモです。サーバに USB HDD を繋いで、USBデバイスとしては認識されているのに usb_storage としては見えなかったのでなぜだろうかと。modprobe usb_storage してもだめ。 kernel: usb 1-5: new high speed USB device using ehci_hcd and address 3 kernel…

[perl] YAPC::Asia 2011 で発表しました #yapcasia

年に一度の Perl のお祭り YAPC::Asia で発表してきました。スライドはこちら (IE以外のブラウザ推奨) Perlで構築された中規模サイトのDC引っ越し記録 100万PV/日、数十Mbps 程度の中規模サイトを サーバ構成をリファクタリングしつつ なるべく止めずに 新DC…

mysql コマンドの履歴を残したくない場合は MYSQL_HISTFILE=/dev/null

タイトルで内容を全部書いてしまった。SQL を直接 mysql コマンドから発行する場合、デフォルトでは履歴が $HOME/.mysql_history に残ります。次回起動した場合にも履歴をさかのぼれるわけですが、たとえば「本番データベースに繋いで更新、削除系の操作を実…

#isucon ではどんなことを考えながら作業していたか

前のエントリ #isucon で優勝してきました は当日夜に酔っ払った頭で勢いで書き上げたので、少し冷静に振り返ってまとめてみます。 最初のボトルネック発見 DB が CPU 4コアをフルに使って回っているのですぐに Query が重いのは分かった 重いクエリはキャッ…

#isucon で優勝してきました

なんでもありのWebアプリケーション高速化バトル、#isucon に会社の同僚 @Songmu @sugyan と3人で、fujiwara組として参戦してきました。結果、幸いにも優勝を勝ち取ることが出来ました。こんなに楽しいイベントを企画、運営していただいた Livedoor の皆様、…

MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは

前回の記事 MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか の続きです。master : slave = 1 : 1 で参照を slave に分散してもまったく美味しくないわけですが、では参照の負荷分散を行いたい場合の slave は何台で構成するとよい…

MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか

MySQLのmasterとslave 1:1にして参照をslave向けるのってやりたがる人多いみたいだけど、性能たいして上がらない割に可用性落ちるだけだからやめようキャンペーン2011-06-19 00:16:30 via YoruFukurouMySQL はレプリケーションが簡単に構成できるのですが、…

Unbound で一部の名前だけ置き換える DNS cache サーバを立てる

とある特定の名前だけ、本来のとは別の IP アドレスを返したい場面というのが開発中によくあります。 (追記) PCならば hosts を書き換えればいいのですが、iPhoneなどそういう手段が容易にとれない端末に対して行いたいUnbound を使ってそのような DNS cache…

Webアプリケーションのログについてあれこれ

社内勉強会で話したスライドをおいておきます。(IE以外のブラウザ推奨)http://dl.dropbox.com/u/224433/kayac-01-log/index.html初心者向けというか、かなりざっくりしたスピリチュアルな話でございます。要約すると、 後で役に立つからログは出しておけ ロ…

rsyslogの式ベースフィルターで小ハマりしたメモ

そろそろ rsyslog の便利機能も試してみるかと思っていじってたら、式ベースフィルターで小ハマりしたのでメモ。Ubuntu Server 10.04 LTS の rsyslogd 4.2.0.式ベースフィルターでメッセージにマッチさせる設定をこのように書いたら、 # NG if $msg contains…

SIGNALを考慮してないTheSchwartz Job workerをなるべく安全に停止する

TheSchwartz の worker はシグナルに対してデフォルトでは何もしないので、再起動させようと SIGHUP を送信したりすると job 処理の途中で割り込まれて死ぬ可能性があります。自前でトラップして安全に再起動する方法は過去に TheSchwartz の worker を安全…

[qpstudy] #qpstudy Lite 1周年記念LT大会に参加しました

qpstudy 1周年おめでとうございます!今回はほぼずっと LT のタイムキーパーとしてタイマー操作しながら、一番前の特等席でビールを飲むという簡単なお仕事でした。樽生ビールはやっぱり美味いですね。例によって LT もしてきました。HTML + JavaScript で資…