プログラマでありたい

おっさんになっても、プログラマでありつづけたい

何故、fluentdなのか?


 最近、fluentdという言葉を聞くことが多いと思います。fluentdは、それぞれのサーバからログを収集し集約する為のアプリケーションです。fluentdは「Log everything in JSON」を合言葉に、全てのログをJSON形式で扱います。また一緒に聞くキーワードとしては、大規模とかリアルタイムとかがあると思います。この時点で関係ないやと思って、興味を失った人も多いと思います。しかし、今後のログ管理は、fluentdが主流になるか解りませんが、同様の集約するフレームワークが中心になると思います。

何故、fluentdが必要か?



 まずはオンプレミスの世界から見て行きましょう。ログはサーバーにたまり、管理者はサーバにログインしてログを参照します。特に問題はありません。


 次にAutoScalingを使わないAWSの世界です。これも同様に、ログはサーバーにたまり、管理者はサーバにログインしてログを参照します。特に問題はありません。


 問題は、AutoScalingを使うケースです。サーバーは負荷に応じて増減します。負荷が下がると自動的にサーバはシャットダウンされます。その間のログはどこに行くのか?そこが問題です。


 そこでfluentdを導入すると、ログは一箇所に集約されます。管理者は、集約されたログを(直接or間接的に)見れば良いですね。

重要なのは、サーバーにログインしないこと



 ここまでは、一般的なfluentdのメリットです。俺、AutoScalingしないし、いーらねと思ったと思います。そんな人にfluentdで、もう1つ注目して欲しいことがあります。それは、管理者がログを見る時に直接サーバにログインしなくて良いことです。今までログを参照するためには、サーバにログインする必要がありました。そうなると運用の観点からは、管理者が誤操作をしてサーバの障害を起こさない為の仕組みや、情報漏えい対策に監査証跡など色々なことを考える必要がありました。fluentdでログを集約すれば、その参照の管理だけしておけば、基本的に安全です。楽ですね。

まとめ



 ということで、最近はchefと共にfluentdのノウハウ蓄積中です。chef-serverやknife-soloとfluentdを組み合わせれば、サーバにログインせずにサーバを管理出来る夢のような状態になれます。もちろん例外ケースもあるし、一筋縄ではないと思います。が、せっかくAWSのお陰でサーバの立ちあげまで自動化&省力化して近代化したのだから、それ以降も部分も近代化したいですね。ということで、最近はfluentdで集約したログのビューワーが何が良いか検討中です。


See Also:
運用視点でChef ServerかChef Solo + Knife Soloのどちらが良いか考えてみた
手動でサーバの設定をすることを禁ずる。入門Chef Solo
初めてのVagrant



ソースの自動生成に関する本質的な違和感

 定期的に出てくるテーマの一つにソースコードの自動生成ってのがあります。
私としては、強く強い違和感を感じます。一言で言うと、自動生成出来るレベルなら、そもそもコードを書く必要がないんじゃないと。Rails等の最近のフレームワークで言うと(Railsが最近のフレームワークかどうかは置いておいて)、自動生成というより決まりきったことはそもそも書かないで済ます方向にあると思います。そこに自動生成のコードで生産性がアップしますよと言われても、違和感ありありです。


私がソースコードの自動生成に否定的な理由は、下記の3点です。
・自動で生成出来るような内容は、そもそもソースとして必要ないのでは?
  自動生成出来るレベルのソースは、ソースとして生成する必要がなくなっています。
  周りくどい言い方ですが、既に定形となっているので機能の一つとして呼び出してしまえば良いのです。


・開発に占めるコーディングと、微調整・デバッグ・テストの比率
  開発フェーズに占めるコーディングと微調整・デバッグ・テスト(含むユニットテスト)の割合の比率を比べましょう。
  コーディングの方が圧倒的に高いとなったら、その開発を見なおした方がよいです。
  特にWebの開発なんて、細かいUIの調整に命を賭けてるといって過言ではないです。
  そんな所に定形機能が出来ますよと言われても、ああそうですかで終わります。

  
・ソフトウェアのライフサイクルにおける、初期開発と保守の比率
  色々な自動生成のソースを見てきましたが、えてして機械的に生成されたコードはヒューマンフレンドリーではないです。
  ソフトウェアのライフサイクルで、初期開発と保守の比率で言えばどちらかが大きいといえば、
  (全うにいけば)保守フェーズです。そこで自動生成のソースを保守する人間の気持ちになってくださいよ。あなた


 一応、自動生成の擁護をすると、人間がコーディングしないといけない領域は間違いなく少なくなっています。昔は1から10まで作らないといけないところが、6とか7くらいまで作らないで済むようになっています。ただソースの自動生成を売りにしているところは、その6から7を自動生成のよく解らないコードを生成しているのです。それは、既にソースとして書かなくて済むのに関わらず。それをドヤ顔して持って来られても、困るとしか言いようがないのです。
 困ったことに、なぜか世の中の受けは良いのですよね。ジオングの足と申しましょうか。


See Also:
超高速開発と聞いて思うところ。或いは、アジャイル開発が目指すところ

スパムメールが無くなる時は、人類が滅ぶ時?

スパムメールの収益性が明らかに

 同チームのデータと分析は、さまざまな「男性機能強化」製品の平均支払額100ドル前後の販売を28件行うのに、350万通のスパムメールが必要だったことを示している。この比率から推測すると、Stormボットネットによる医薬品の年間販売額は約350万ドルとなる。

 コンバージョン率0.0008%。かなり低いですね。昔、ニュースの記事を元にどれくらいのコンバージョン率か計算してみましたが、その際は0.001%。どちらも極小ですが80倍は違います。スパムフィルターが進化してきたということでしょうかね。
 注目すべきは、その確率でもスパム業者が儲かることが出来る構造だと思います。メールの送信コストが限りなく0に近づいているので、どんなにコンバージョンが下がっても利益が出るんでしょうね。後は、厳罰化するなど法令でのコストをあげることでしょうが、国をまたいで送信されるのでこれもむずかしいでしょうね。結論としては、Eメールがある限り無くならないでしょう。

スパムメールの経済学

スパムメールの経済学

 GmailでもCAPTCHA破り? 悪用のスパムが倍増の記事を読んで、ちょっと真面目にスパムメールについて考えてみた。なんでスパムが無くならないんじゃろと

スパムの定義

まず、スパムメールの定義について。一番核心をついているのが、Life is beautifulの中島さんのlスパムメールに関する一考察

・内容は何であれ、ユーザーにスパムだと思われたらそれはスパム
・スパムだと思われたら読んでもらえない
・読んでもらえないメールを送ってもしかたがない

本質的に受け取った人がうっとおしいと感じたら、それはスパムメールなのだ。この辺りは、セクハラの定義と一緒。

スパムメールの内容

 最近は、トラックバックスパムやスプログなど色々あるけど、ここではスパムメールに限定。実は、日本と海外ではスパムメールの内容が結構違う。日本の傾向は、ワンクリック詐欺に始まり、最近は会員制出会いサイト、逆援助サイトなどのアダルト系が大半。増えてきている所では、情報系商材の販売など。
 これに対して、アメリカだとバイアグラの販売から、不動産ローンの借り換え、グリーンカードの取得から、学位の販売まで割と多種多様。そしていつまでたっても無くならないナイジェリアスパムとか。
 スパムをずーっと読み続けていると解るのだけど、世相を反映して大体半年くらいで内容が微妙に変わってくる。最初の頃は、単純に出会い系だったのが、今は逆援助に変わったりとか。となると、スパム業者は何らかのフィードバックを受け取って、反応がある方にシフトしていっているのだろう。面白いところで、スパムメールはゴールデンウィークや正月中には流通量が減る。量自体も去ることながら、新着のスパムが激減する。となると、スパムを送っている人は普通の会社員であったりするのだろうか。

スパマーの利益

 スパマーは何故、スパムメールを送るのだろう?もちろん儲かるから。最近、たまに逮捕者が出るので、おおよその利益が解るようになった。
摘発で明らかになったワンクリック料金請求spamの効率

Anonymous Coward曰く、"朝日新聞と読売新聞の記事によると、1億8000万通以上のメールを無差別に送って全国の約2600人から計約7500万円を詐取していた、いわゆる「ワンクリック料金請求」の業者が、詐欺と児童ポルノ禁止法違反の容疑で大阪府警に逮捕されたそうだ。
容疑者の供述によると、「メールを100万通送ると1000人がサイトを訪れ、10〜20人が金を払った」という。ということは、サイトを訪れた人が騙される割合は1〜2%で、spamメールがサイトアクセスにつながる割合は0.1%程度だということになる。こんなくだらないことのために99.9%以上の私たちが迷惑を被っていることがなんともやりきれない気持ちだ。"

迷惑メール送信で男逮捕=22億件、2000万利益か−捕まると思わず・警視庁

同容疑者は2006年5月から昨年12月の間、1日約400万件、計約22億件の迷惑メールを送信。受信者が利用登録をすると、サイトを運営する広告主から手数料約2000円が入る仕組みで、計約2000万円の利益を得た。海外旅行や車購入に使ったという。

迷惑メール54億通、「タクミ通信」逮捕の舞台裏を千葉県警に聞く

 驚くのはその送信数だ。この会社では中国の黒竜江省のビルに128台のパソコンを設置して、遠隔操作で迷惑メールを送信していた。送信数は1日約 9000万通というとてつもない数字だった。2006年の7、8月には合計で約54億通もの迷惑メールを送信していたようだ。もっともこの業者は「もっと悪い業者もいる」と話しているが。

 今回の事件では、1カ月で約1億2000万円もの収益があったようだ。この会社ではほかの業務なども特に手がけておらず、ほぼ出会い系のみでこれだけの収益をあげていたと考えている。

 大体クリック率は、0.1%程度。クリックした中で1%くらいはお金を払っている模様。1億8千万件のケースでは、1通あたり0.42円。22億件のケースでは、1通あたり0.009円。タクミ通信の場合、1通あたり0.44円の利益。ばらつきがあるのは、送っているメールの種類によるのだろう。共通しているのは、送れば送るほど儲かる仕組みに落とし込んでいること。1メールあたりの送信コストが、1メール辺りの利益を上回らない限り、スパムは無くならないだろう。

スパムメール送信のコスト

 送信の為のコストとして考えられるのが、メールアドレスを取得するコストと、実際に送信するコスト。前者については、自動収集のプログラムを組めば実質ただで手に入る。また、スパムメールを見ていると、メールアドレス100万件で、1万円なんて広告をよく見かける。仮に100万件で1万円としたら、収集のコストは1メールアドレスあたり0.01円。送信のコストは、色々工夫しれば1ヶ月のプロバイダ代くらいで済むだろう。そうすると送信する為のサーバ等を考えても、月あたり数万円というのが実情なのでは?
 あと考えられるのが、捕まった時の法的コスト。
迷惑メール:全面禁止に 罰金上限30倍、3000万円−−改正案を国会提出

 総務省は29日、増加する迷惑メールに対応するために、受信者の事前同意を得ていない広告・宣伝メール(出会い系サイトやアダルト関連を含む)の送信を全面的に禁止し、海外発の迷惑メールも適用対象とした「特定電子メール送信適正化法(迷惑メール法)」改正案を国会に提出した。違反業者への罰金額の上限も、従来の「100万円」から「3000万円」に引き上げる。総務省は、改正案を今国会で成立させ、年内の施行を目指す。

 費用対効果という点を考えれば、ちょっと効果ありそうな気がしてきた。

スパムを受け取ることの被害額

 スパムを受け取ることのメリットがないので考えるだけ無駄だけど、シマンテックの調査では、スパム処理で1年のうち2日間が無駄になっているらしい。日本の平均年収が447万円。実際にはスパムの被害が多いのは、平均より上の層が多いだろうけど、これで年間の稼働日を200日で計算すると、被害額は1人あたり43,700円。企業が従業員1人あたりに払うコストは、年収の1.5倍はいっているだろうから6〜7万円。けっこう馬鹿にならない金額。

スパムの対策コスト

 スパムの対策方法としては、ピンからキリまであるので何とも言えないけど、合理的に判断すれば対策をしない場合の被害額が対策のコストを上回る限りは、企業は何らかの対策をするはず。そうなると前述の内容から考えて、平均では6〜7万円を上限としてコストが掛かるのであろう。極端な話、年に何十億と稼ぐ人ならば、専用に人を雇うことも考えられる。(そういう人がメールを仕事に使ってるとしたら)

結論

 書いているうちに絶望的になってきたのだが、スパムメールは永遠になくなりそうになさそう。送信コスト < 利益の構造が無くならない限りスパマーは送り続けるだろう。一般人の出来る対策は、せいぜいスパムフィルターを使うくらいだ。ISPの対策としては、OP25Bなどで送りにくくすること。法律で出来ることは、罰金を大きくすること。
 スパムフィルターについては、本質的には新種が出てからの対策になるので後手後手になるのは否めない。そもそも導入しても本来1円の利益にもならない。後者2つの対策は、海外からのスパムに対しては、何の効果がない。
 抜本的には、送信コスト > 利益の構造にならないといけないけど、そうなる事態は誰もメールを使わない世の中じゃないのかな?IMやTwitterなど、わりとクローズな世界に移行して。

おまけ

 ちなみに誰でも思いつくスパムフィルターとして、GMailのスパムフィルターがあると思う。私も初めて使い始めた時は、感動した。しかし最近は、限界も見えてきた。googleの社是として、アルゴリズム万能で人手を介した処理は一切していない模様。そうなると、スパムかハムかの判断はどうしているのだろう?恐らくユーザーからのレポート。そう「迷惑メールを報告する」・「迷惑メールを解除する」で、それぞれのコーパスを集めているのだろう。で、それぞれ機械学習させているのだと思う。
 この方法は、9割方正しい。でも、最初のスパムの定義を振り返ってみる。

内容は何であれ、ユーザーにスパムだと思われたらそれはスパム

 これがある限り、完璧なスパムフィルターを作ることは不可能である。Aさんにとって楽天メールはスパムでも、Bさんにとっては大切なメールかもしれない。これがある限り、レピテーションベースの仕組みは限界がある。近いユーザー属性同士でクラスターを作って、ローカルのレピテーションでも作れば少しは効果があると思うけど、やはり限界がある。

スパムメールの収益モデル

迷惑メール送信で男逮捕=22億件、2000万利益か−捕まると思わず・警視庁

 1日約400万件。計22億件。アドレスを80万円で購入。1件登録で2000円の手数料。合計、広告収入2000万円。
1通あたり0.009円の利益。1000通送って9円。およそ1万人の人が登録したのか。
サイトを訪れて実際に登録する人を、100人に一人と仮定すると200万人が訪問。クリック率は、0.1%。スラドの検証と比べても、まぁ妥当な数字。