2009-08-14 17 views
0

ユーザー、管理者、サポートスタッフは、Cで開発されたデーモンから詳細なランタイム情報と監視情報を必要とします。Cデーモンのランタイム情報

  • 現在のシステムの健全性、スループット(MB /秒)のように、既に書き込まれたデータ、...
  • 現在の設定

私は(Javaの世界とのprocfsでJMXを使用しますまたはsysfs)インタフェースを使用することができます。ログファイルは最善の方法ではないようです。

Cデーモンのような情報インタフェースのための最善の方法は何ですか?

ソケットを開いてベアメタルのhttpやxmlrpcサーバーを実装しようと思っていましたが、それは過剰なものです。代替案は何ですか?

+0

通常、ログファイルが最善の一次ソリューションです。 –

+0

共有メモリはどうですか? – philant

答えて

1

あなたはUNIXドメインソケットに耳を傾け、それに接続されて誰にも現在の状態(たとえば1秒に1回)を書き、定期的に書くことができます。 HTTPやXMLRPCのようなプロトコルを実装する必要はありません。通信は一方通行であるため、状態を含むプレーンテキストの1行を定期的に書きます。

1

とにかくリレーショナルデータベースを使用している場合は、別のテーブルを作成し、必要なほど頻繁に現在の状態でそれを埋めます。リレーショナルデータベースを持っていない場合は、ファイルにステータスを書き込んで、その時点で誰かが読み取ったファイルを上書きしないようにローテーションスキームを実装します。

+2

ロギングにRDBMSを使用するのは良い考えではありません。どのように "データベース接続の失敗"を記録しますか?ログは、利用可能な最も単純なメカニズムを使用する必要があります。 –

+0

私はそれをロギングに使用することを提案しなかったし、OPはロギングを要求しなかった。代わりに、彼は現在のステータス(歴史的なものではない)を照会することを望んでいました。私はエラー報告が非常に単純なメカニズムを使用すべきだと完全に同意します - しかし、私はこれが疑問ではないと信じています。 –

+0

OK、私は、RDBMSはリアルタイムでプロセス間で情報を共有するための悪い解決策であると確信しています。あなたのGUI(または何でも)がステータス変更のためにデータベースをポーリングすることは、貧弱な解決策である、IMHOです。 –

0

ファイルに書きます。ファイルロックプロトコルを使用して、原子の読み書きを強制します。あなたが同意するものはすべて動作します。あなたが使用できるUUCPロックライブラリがおそらく存在します。以前の人生で私はLinux用のものを見つけました。私も最初からそれを実装しました。それはあまりにも簡単です。

Linuxのlockdev(3)ライブラリを確認してください。これはデバイス向けですが、プレーンファイルでも機能します。

+0

通常、ログのロックは必要ありません。 –

+0

私はOPがログファイルを使用するよう提案していませんでした。私は言及されたデータのスナップショットを含む小さなファイルを考えていた。ファイルは固定サイズであり、すべてのデータは既知の場所にあります。したがって、それを更新するには、無効な読み取りを防止するために何らかの形式のロックが必要です。 –

4

あなたは、USR1を言って反応し、スクリーン/ログ/ネットに情報をダンプあなたのデーモンでシグナルハンドラを使用することができます。このようにして、情報が必要なときはいつでもプロセスにUSR1シグナルを送ることができます。

+0

+1。 SIGINFOは素晴らしい選択です。 – outis

0

私はソケットのアイデアが一番好きです。 HTTPやRPCプロトコルをサポートする必要はありません。要求された情報を返す単純なアプリケーション固有のプロトコルを作成できます。サーバーが常に同じ情報を返す場合、着信要求を処理するのは簡単ですが、可能なクエリを拡張したい場合は、問題が発生する可能性があります。既存のプロトコルを使用する主な理由は、既存のライブラリとツールを活用することです。

レバレッジと言えば、SNMPを使用してデーモンに管理対象コンポーネントとしてアクセスすることもできます。デーモンをリモートで照会/管理する必要がある場合は、このオプションには利点がありますが、それ以外の場合はHTTPサーバーよりも大きな過度の負荷になる可能性があります。

関連する問題