0

タイトルが私の実際の問題を表現するのに最適な方法であるかどうかはわかりません。これが一般的すぎる質問である場合はお詫びしますが、何かを行う方法に頭を悩ませています。

私がやろうとしていること:アイデアは、私が監視を担当している何千ものサーバーの「停止」のMySQLデータベースを作成することです。これにより、ダウンタイムの履歴が記録され、何が起こったかをさかのぼって簡単に知ることができます。データベースは、日付やサーバーのホスト名などでこれらの停止を参照できる非常に単純なPHPフォームによって照会されます。

これまでのところ:定期的にcronとして実行されてPingdom APIを呼び出し、pingdomサービスによって報告された現在のダウンアラートのリストを取得するPythonスクリプトがあります。ダウンアラートごとに、ホスト名、タイムスタンプ、pingdomチェックIDなどを含む行がデータベースに挿入されます。次に、ダウンアラートを照会するために正常に機能する単純なphpフォームがあります。

問題:私が今持っているものにはいくつかの重要な機能が欠けており、私が探しているものではありません。現在、このデータベースにクエリを実行すると、次のようなダウンアラートの簡単なリストが表示されます。

2012-05-01から2012-06-30までのTest_CheckのPindomアラート:

test_checkは2012-05-2400:11:11にDOWNと報告されましたtest_checkは2012-05-2400:17:28にDOWNと報告されましたtest_checkは2012-05-2400:25:24にDOWNと報告されましたtest_checkはでDOWNと報告されました2012-05-24 00:25:48

代わりに私が欲しいのはこのようなものです:

test_checkは15分間報告されました(2012-05-2400:11:11から2012-05-2400:25:48)(この停止に関するコメントへのリンク)(この停止に関する情報へのリンク)。

この理想的な最終結果では、停止ID、サーバーpingdomのホスト名が報告されている行、そのボックスが最初に報告されたときのタイムスタンプ、および'コメントとともに再度報告されたときのタイムスタンプを含む1つの行があります。 'フィールドI(および他の管理者)は、事後にこの特定のイベントに関するメモを追加するために使用します。pingdomからアラートをプルするときにこれを実行する必要があるのか​​、それとも新しいテーブルにデータを入力するためにアラートを収集した後でアラートを再処理する必要があるのか​​がわかりません。また、どのように処理するのかよくわかりません。それらのオプションの。

短期間に発生するいくつかのダウンアラートを単一の「停止」に結合し、現在個々のダウンアラートが存在する既存のMySQLデータベースの別のテーブルに挿入する方法について少し迷っています。保存されています。これにより、コメントを付けたり、将来の参照用に特定の詳細を追加したりできるようになり、通常、これがはるかに使いやすくなります。pingdomからアラートをプルするときにこれを実行する必要があるのか​​、それとも新しいテーブルにデータを入力するためにアラートを収集した後でアラートを再処理する必要があるのか​​がわかりません。また、どのように処理するのかよくわかりません。それらのオプションの。

私はこれを行う方法を理解しようとして頭を悩ませてきました。単純な概念のように見えますが、私はやや経験の浅いプログラマー(私は専門職によるLinux管理者です)であり、この時点で困惑しています。

私は、正しい方向に向けるために、ここでやろうとしていることについての考え、アドバイス、例、またはさらに技術的な説明を探しています。これが理にかなっていることを願っています。アドバイスを事前に感謝します:)

4

2 に答える 2

0

現在のセットアップでの最も基本的な解決策は次のとおりです。

  • サーバー ID 順、次にイベントの時間順のすべてのイベントのリストを取得します。
  • 次の場合に、そのリストをループして、新しいデータベースの新しいイベントの開始/古いイベントの終了を記録します。
    1. サーバー ID が変更されます
    2. 現在のイベントと同じサーバーからの前のイベントの間の時間が、設定した特定のしきい値よりも大きい。
    3. 監視していた古いイベントを新しいデータベースに保存します

唯一の複雑な点は、次回スクリプトを実行するときに、スクリプトを最後に実行したときにまだ発生していたイベントを引き続き監視する必要があることです。

于 2012-07-04T13:09:14.090 に答える
0
  1. 停止データの保存とクエリの観点から、最適なデータベース スキーマを定義します。(間隔ベース。)
  2. Pindom イベントを記録するという観点から最適なストアド プロシージャ シグネチャ (パラメーター) を定義します。(イベントベース。) 成功した ping も必ず記録して、2 つの短い停止から長い停止を見分けることができるようにします。
  3. 指定された手順に従って実装してください。
  4. 各 ping の後にプロシージャを呼び出します。

プロシージャの本体は、大まかに次のようになります (疑似コード)。

-- First, select the last interval as o1, and update it if the status is unchanged
UPDATE Interval SET ended = CURRENT_TIMESTAMP
FROM Interval AS o1 LEFT JOIN Interval o2 ON o2.ended > o1.ended
WHERE o2 IS NULL AND o1.status = @currentStatus

-- If the status changed, insert a new interval with the current status
IF ROW_COUNT() = 0 THEN
    INSERT INTO Interval VALUES (...) 
END IF
于 2012-07-04T13:14:16.850 に答える