Postfixのログをfluentdを使ってTreasureDataに送る

★★★ お知らせ ★★★

◆ Cassandra Dayに登壇 6/1(木) ◆
6月1日開催のイベント Cassandra Day - Tokyo に当社のエンジニアが登壇します!
今回「Cassandra適用のポイントと実案件での苦労話」と題して、RDBMSでは実現困難であった顧客要件をCassandraで簡単に実現できる実例を踏まえて、その適用のポイントをわかりやすく解説します。
⇒ イベント詳細はこちらから

◆ 6月のPS Liveは決済サービスStripeのデモ!◆
決済サービスのStripeでサブスクリプションの支払い機能を作ってみた
Stripeの機能の一部を切り出して、簡単なサブスクリプションを作るとどうなるのかを、デモをまじえてご紹介します。
⇒ 詳細はこちらから

◆【セミナー開催】 可視化ツールGrafana~初めてのダッシュボード作成◆
デモンストレーション付き!
本セミナーでは、売上データを用いて、4種類のパネル作成方法をお見せします。
⇒ お申込みはこちらから

◆ エンジニア業務環境アンケート結果 ◆
エンジニアが自分の働き方にどういったことで満足していて、不満を感じているのか、働きたい会社像として何を求めているのか、業務環境調査を実施しました。ぜひご覧ください。
⇒ アンケート結果はこちらから

こんにちは、SSTDの髙橋です。 前回の更新から日が空いてしまいましたが、引き続き継続して情報発信をしていきたいと思います。

さて、社内メールにGmailなどのクラウドサービスを使うことは一般的になってきましたが、それでも社内メールサーバと連携することは一般的です。 そうした中で、メールサーバに障害が発生した際に、SSHしてメールサーバのログを必死に読み解いていくはなかなか面倒です。 そこで今回は、Postfixのログをfluentdを使ってTreasureDataに送ってみたいと思います(td-agentをご利用の方はfluentdの箇所をtd-agentと読み替えて御試し下さい)。

Ta1

 


実行環境

Postfixやfluentdの設定は既に設定済みであるとします。

  • Mac OS 10.9.4
  • Postfix 2.9.4
    • smtpにはgmailを設定済
  • fluentd 0.10.52
    • fluent-plugin-multi-format-parser 0.0.1
    • td 0.11.2

Postfixのログ内容

Postfixから出力されるログは下記に例を示します。 ログを確認すると、一つのログにも複数のフォーマットが混在している点が複雑です。

fluentd.confの内容

複数のフォーマットが混在しているログに対しては、fluent-plugin-multi-format-parserが便利です。 このプラグインによって、postfix/smtpとその他のフォーマットのログも細かめにとれるようにしています。 設定ファイルを下記に示します。設定ファイルの正規表現には、こちらのgistを参考にさせて頂きました。


結果データ

さきほどのログを、上記設定ファイルを使ってファイルに出力した場合のの結果は下記になります。

  • 1番目のPatternでマッチされた結果
2014-08-16T00:39:31+09:00 td.log.mail {"host":"mail.local","ident":"postfix/smtp","pid":"2505","key":"45A22B1F475","address":"takahashi@test.com","relay":"smtp.gmail.com[74.125.25.108]:587","delay":"6","delays":"0.01/0.01/4/2","dsn":"2.0.0","status":"sent (250 2.0.0 OK 1408117171 xq3sm28810269pab.0 - gsmtp)"}
  • 2番目のPatternでマッチされた結果
2014-08-16T00:17:29+09:00 td.log.mail {"host":"mail.local","ident":"postfix/pickup","pid":"2301","message":"668B8B1C353: uid=501 from="}

TreasureData上の結果

結果をTreasureDataに入れた場合は、下図のように格納されます。

  • テーブル情報

Ta2

 
  • レコード情報

Ta3

 

まとめ

このように一つのログ内に複数のフォーマットが存在する場合でも、fluendを使うことでうまくパースすることができ、それだけでなく、TreasureDataを使うことで長期保存や後での集計が簡単にできるようになりますね。

アバター画像
About Kai
マーケティング業務を担当。セミナー、勉強会の企画運営、情報発信を行う。API事業を中心に、リード獲得、ナーチャリングに注力。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる