前回のウェビナーでは、monit.dを使用してログをどのように操作するかを尋ねられました。
長い遅延がありますが、まだ応答しています。
システムログ/変数/ログ/メッセージを処理し、特定のレコードが見つかった場合にアラートを送信するルールの例を次に示します。
処理例/ var / log / messagescheck file messages with path /var/log/messages if match 'OOM killed process' then alert if match 'temperature above threshold' then alert if match 'table full, dropping packet' then alert if match 'OOM killed process' for 2 cycles then exec "/bin/bash -c '/usr/bin/monit unmonitor messages && /bin/sleep 3600 && /usr/bin/monit monitor messages'" if match 'temperature above threshold' for 2 cycles then exec "/bin/bash -c '/usr/bin/monit unmonitor messages && /bin/sleep 3600 && /usr/bin/monit monitor messages'" if match 'table full, dropping packet' for 2 cycles then exec "/bin/bash -c '/usr/bin/monit unmonitor messages && /bin/sleep 3600 && /usr/bin/monit monitor messages'" if match 'time wait bucket table overflow' for 2 cycles then exec "/bin/bash -c '/usr/bin/monit unmonitor messages && /bin/sleep 3600 && /usr/bin/monit monitor messages'" if match 'blocked for more than 120 seconds' for 2 cycles then exec "/bin/bash -c '/usr/bin/monit unmonitor messages && /bin/sleep 3600 && /usr/bin/monit monitor messages'"
次の例では、monit.dは特定の条件下でスクリプトを実行するためにのみ必要です。
たとえば、2回の検証サイクル内にサーバーのLAが20を超える場合、スクリプトが呼び出されます。 monitでは、次のようになります。
if loadavg (5min) > 20 for 2 cycles then exec "/srv/southbridge/bin/highload-report.sh"
次に、スクリプト自体について説明します。 apache + nginx + mysqlサーバーがあるとします。 ある時点で、負荷が急激に増加しました。 Monitはこれを検出し、スクリプトを実行します。
実行の結果、以下を含むレターが生成されます。
-現在のデータベースクエリ。
-消費されたメモリでソートされたプロセスのリスト
-消費されたCPUでソートされたプロセスのリスト
-Apacheリクエストのリスト
-nginxステータス情報
-新しいtcp / udpセッションの数
-mysqlステータス
実際、これはすべて標準ユーティリティで行われます。 ps、mysql netstatなど
その結果、レターが特別なアドレスに送信され、そのメールがスクリプトによって解析され、redmineシステムでタスクが作成されます。