GitXplorerGitXplorer
m

logmux

public
2 stars
0 forks
0 issues

Commits

List of commits on branch master.
Unverified
5f9fb55c0358cb569760cd54907dbe5bba9313db

Listen するアドレスを :8888 や tcp://127.0.0.1:5678 などできるように.

mmethane committed 11 years ago
Unverified
c99a018feded2989a40dc0eb1ac59a4b1ded7a67

chmod +x unixcat.py

mmethane committed 11 years ago
Unverified
8f28fb94a6f2eb25dfab287d15b8db5b7f270c4e

README と Makefile を追加

mmethane committed 11 years ago
Unverified
509edd6afcb02d3ceabcdc9b058f001e734c1017

initial commit

mmethane committed 11 years ago

README

The README file for this repository.

Log Multiplexer

+--------+
| Worker +--+
+--------+  |
            |
+--------+  |   +-----------------+   +------------------+
| Worker +--+-->| Log Multiplexer +-->| external command |
+--------+  |   +-----------------+   +------------------+
            |
+--------+  |
| Worker +--+
+--------+

目的

ログを何かのコマンドに流し混む場合に考えないといけない、次のような問題を 解決するためのツールです。

  1. PIPE_BUF (Linux なら 4096バイト) 以上のログを書くと混ざるかも
  2. 外部プログラムが死んだ時に、Worker が外部コマンドを再起動すると、Worker数分プロセスが立ち上がってしまう.

これらの問題を真面目に解決しようとすると、 Worker は Master にログを転送し、 Master が 外部コマンドの管理をしないといけません。

nginx のように graceful にバイナリを差し替える機能を持ったサーバーの場合、 Master プロセスの切り替えが発生するので、外部プログラムの管理をどうするかという 問題も発生します。

Master-Worker型のプログラムを作成するたびにこの仕組みを実装するのは面倒なので、 外部に Multiplexer デーモンをおいて、 Worker が気軽にログを投げられるようにします。

使い方

Log Multiplexer は、 Unix Domain Socket を Listen します。 そこに書き込まれたデータを、行単位で、指定した外部コマンドにパイプします。

$ logmux ソケットのパス "実行するコマンド"

sample:

$ logmux /tmp/log.sock "cat -n >> /tmp/log.txt"

同梱している unixcat.py を使って動作を確認できます。

$ ./unixcat.py /tmp/log.sock
foo
bar
baz