Monitoring前書き監視システム(ZabbixやNagiosなど)を使用している場合、監視の仕組みがわかります。簡単に言うと、次のように説明できます。/メモリ使用量、ネットワーク使用率など)を受け取ります。メトリックの1つの値が所定のしきい値を超えるとすぐに、対応するトリガーがアクティブになり、監視システムはメトリックの1つが通常の制限を超えていることを通知します。通常、各メトリックのしきい値は手動で設定されますが、必ずしも便利ではありません。このチュートリアルでは、リアルタイムの異常検出システムであるhttps://github.com/etsy/skyline[Skyline]をインストールおよび構成する方法を学習します。各しきい値を設定または調整することなく、一連のメトリックをリアルタイムで分析できます。常時監視が必要な多数の時系列(数十万)がある場所で使用するように設計されています。手動でしきい値を設定する監視システムの例を見てみましょう。次の図は、CPU負荷のグラフを示しています。破線はトリガーのしきい値を示します。*図1のポイント1でプロセスが開始され、CPU負荷が大幅に増加しました。トリガーがアクティブ化され、管理者はそれに気付きます。管理者は、正常な値の範囲内であると判断し、トリガーのしきい値を上の破線として示されているものに変更します。すると、図1のポイント2でトリガーが再び起動されます。管理者は、2番目のサービスが定期的にバックアップを作成し、負荷が増加していることを発見しました。次に、問題が発生します。しきい値を高くするか、そのままにしてアラームを無視しますか?ポイント3を見てみましょう。その瞬間、イベントの負荷は下がりますが、しきい値を超えていないため、管理者に通知されませんでした。トリガーが作動しませんでした。この単純なケースは、しきい値を設定しようとするといくつかの困難があることを示しています。偽陽性エラーまたは偽陰性エラーを引き起こさずにパフォーマンスの問題をキャッチするためにしきい値を調整することは困難です。一連のノンパラメトリックアルゴリズムを使用して、異常なメトリックを分類しています。Agent、およびWebappのコンポーネントで構成されています。Agentはデータの収集を担当します。pickle(TCP)とhttp://msgpack.org/[MessagePack](UDP)の2つの形式のデータを受け入れます。読み取った共有キューに入れます。ワーカーはデータをMessagepackにエンコードし、Redisデータベースに追加します。*を使用して古いメトリックを定期的にトリミングおよび削除します。これを行わないと、すべての空きメモリがすぐに使い果たされます。Agentは、データの分析を担当します。Redisからメトリックのリストを受け取り、いくつかのプロセスを実行し、それぞれにメトリックを割り当てます。各プロセスは、いくつかのアルゴリズムを使用してデータを分析します。各アルゴリズムは結果を報告します-データが異常であるかどうか。大半のアルゴリズムが現在のメトリックに異常があると報告した場合、データは「異常」とみなされます。異常なメトリックはすべてファイルに書き込まれます。このファイルに基づいて、画像が作成され、Webアプリケーションに表示されます。Analyzerは、通知を送信することもできます:電子メール、HipChat、またはPagerDuty。電子メール通知は、この記事の後半で構成されます。WebappSkylineは、異常なメトリックを表示する小さなWebアプリケーションを提供します。Flaskフレームワークを備えたPythonで書かれたシンプルなウェブアプリです。上部には、過去1時間と過去1日の2つのグラフが表示されます。グラフの下には、すべての異常なメトリックのリストがあります。RedisデータベースRedisは、オープンソースのキーと値のキャッシュおよびストアデータベースです。Skylineは、すべてのメトリックとエンコードされた時系列をRedisデータベースに保存します。`のデータポイントをMessagePackでエンコードされたバイナリ文字列にパックし、この文字列を適切なメトリックキーに追加します。_図2_は、スカイラインのコンポーネントの相互作用の図を示しています。*前提条件Skylineをインストールする前に、次の前提条件をすべて満たす必要があります。7ドロップレットを展開します。Setupチュートリアルに従って、sudoユーザーを追加します。このチュートリアルのすべてのコマンドは、この非rootユーザーとして実行する必要があります。[スワップスペースの追加]をサーバーに追加します。Graphiteをインストールし、https://www.digitalocean.com/community/tutorials/how-to-keep-effective-historical-logs-with-graphite-carbon-and-collectd-on-centos-の指示に従って収集します。7で収集した効果的な履歴ログを保持する方法]チュートリアル。Webサーバーを含む必要なアプリケーションをインストールします。libffi-develGitHubからSkylineの最新のソースファイルを取得します。https://github.com/etsy/skyline.gitいくつかの必要なPythonパッケージをインストールします。requirements.txt次のPythonパッケージをこの指定された順序でインストールします。msgpack-pythonそれらのほとんどは、科学技術計算に使用されるオープンソースのPythonライブラリです。+`パッケージが必要です。サンプルのスカイライン設定ファイルを正しいファイルの場所にコピーします。/opt/skyline/src/settings.py次のディレクトリを作成します。/var/dump/前述したように、SkylineはすべてのメトリックをRedisデータベースに保存するため、同様にインストールする必要があります。redisRedisの詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-redis[Redisのインストールおよび使用方法]を参照してください。SkylineおよびRedisサービスを開始します。startインストールをテストするには、付属のテストスクリプトを実行します。/opt/skyline/utils/seed_data.py次のような出力が表示されるはずです。working.Skylineのインストールと基本設定が完了しました。次に、データを送信する必要があります。前述したように、Skylineは2つの形式のデータを受け入れます:https://docs.python.org/2/library/pickle.html[pickle](TCP)およびhttp://msgpack.org/[MessagePack](UDP)。好みの監視エージェントに独自のスクリプトまたはモジュールを記述し、分析のためにSkylineに送信されるようにMessagePackでデータをエンコードすることができます。Skylineは、UDPを介したMessagePackエンコード文字列の形式のメトリックを受け入れます。MessagePackは、JSONのようなオブジェクトシリアル化仕様です。MessagePackには、ほとんどのプログラミング言語用のAPIがあります。[MessagePack公式サイト]にあります。このチュートリアルでは、Graphiteから収集したデータをSkylineに送信する方法を示します。グラファイトからデータを取得するグラファイトはいくつかのコンポーネントで構成されており、そのうちの1つが*カーボンリレー*サービスです。カーボンリレーは、受信メトリックを冗長性のために別のGraphiteインスタンスに転送します。そのため、Skylineが実行されているホストにカーボンリレーサービスを向けることができます。*図3に、データフローの概略図を示します。外部監視エージェントからのデータ(http://collectd.org/[collectd]、https://github.com/BrightcoveOS/Diamonds[diamond]、https://github.com/etsy/statsd[statsd]など)またはシステム(http://www.nagios.org/[Nagios]、https://www.icinga.org/[Icinga]、http://sensuapp.org/[Sensu]など)がGraphiteに転送されます。次に、カーボンリレーはデータをSkylineに転送します。Carbon-relay、carbon-cache、およびSkylineは、単一のホストまたは別のホストで実行できます。このデータフローを機能させるには、Graphite、collectd、およびSkylineを構成する必要があります。+`を以前にcarbon-relay設定ファイルの適切な場所にコピーしなかった場合、ここでそれを行う必要があります。/opt/graphite/conf/relay-rules.confSkylineホストを宛先のリストに追加します。SkylineホストのIPアドレスは次のとおりです。+`設定ファイルでも定義する必要があります。:2024...これらの変更を行ったら、カーボンリレーサービスを開始します。Webインターフェイスをパスワードで保護することを選択した場合、Skylineを機能させるには、パスワードなしでlocalhostからのアクセスを許可する必要があります。これを行うには、グラファイト構成ファイルを編集します。+`ブロックに次の赤の行を追加します。sammy</Location>次に、Apacheサービスを再起動します。httpd収集したデータを取得するデータをSkylineに送信するようにcollectdを構成することもできます。構成ファイルを開きます。.次にcollectdを再起動します。collectd.service混乱を避けるために、図4は正しいポート番号を使用した簡略化されたスキームを示しています。*正しいポート番号は次のとおりです。Agentは、ポート_2024_で_pickle_形式の着信データをリッスンしますステップ3-スカイラインのセットアップSkyline構成ファイルには多くの設定が含まれています。ファイルを編集用に開きます。/opt/skyline/src/settings.pyこのファイル内の各設定は、ファイル自体の有益なコメントによって文書化されます。少なくとも、次のパラメーターを設定して、赤のテキストを自分の値に置き換える必要があります。+他のオプションはデフォルト値のままにすることができます。それらは以下のとおりです。+-このオプションは、データをRedisに保存して分析する最大時間を指定します。分析にかかる時間は長くなりますが、ノイズを減らし、より正確な異常検出を提供できます。デフォルト値は「86400」秒です。+-このオプションはカーボンポートを指定します。デフォルト値は「2003」です。+-このオプションは、Skylineアナライザーが生成するプロセスの数を指定します。このパラメーターは、ホスト上のCPUの合計数よりも数少ない数に設定することをお勧めします。デフォルト値は「5」です。+-このオプションは、Horizo​​nキューから消費するワーカープロセスの数を指定します。デフォルト値は「2」です。+-このオプションは、グラファイトのピクルスをリッスンするTCPポートを指定します。+-このオプションは、MessagePackでエンコードされたパケットをリッスンするUDPポートを指定します。デフォルト値は「2025」です。webappのポートを指定します。デフォルト値は「1500」です。これらの変更を行った後、対応するアプリを再起動する必要があります。Webページを表示できます(図5)。検出された異常なメトリックが表示されます。」秒が経過するまで待つ必要があります。+`秒)に設定されています。異常の追跡を開始するには、少なくとも1時間待つ必要があります。これにより、Skylineに通常の負荷レベルに関する情報を蓄積する時間が与えられます。Skylineがベースラインを確立している間、システムに余分な負荷をかけないようにしてください。異常が消えるとすぐに、対応するメトリックがこのインターフェースから消えます。したがって、これらの異常を確認するにはWebページを監視する必要がありますが、これは必ずしも便利ではありません。メールアラートを設定して、見逃さないようにすることができます。これを行うには、Skyline構成ファイルを開きます。/opt/skyline/src/settings.pyアラートが有効になっていることを確認します。True次に、次のALERTSセクションを見つけて、次のスキーマを赤で追加します。1800)(^),)スキーマの最初の値は、監視するプロセスです。