Ubuntu 16.04でTICKスタックを使用してシステムメトリックを監視する方法

前書き

The TICK stackは、時系列データベースhttps://www.influxdata.com/[InfluxDB]の開発者による製品のコレクションです。 次のコンポーネントで構成されています。

  • T elegrafは、さまざまなソースから時系列データを収集します。

  • I nfluxDBは時系列データを保存します。

  • C hronografは、時系列データを視覚化し、グラフ化します。

  • K コンデンサはアラートを提供し、時系列データの異常を検出します。

これらの各コンポーネントを個別に使用できますが、それらを一緒に使用すると、時系列データを処理するためのスケーラブルで統合されたオープンソースシステムになります。

このチュートリアルでは、このプラットフォームをセットアップして、オープンソースの監視システムとして使用します。 少しのCPU使用率を生成し、使用率が高くなりすぎると電子メールアラートを受信します。

前提条件

開始する前に、次のものが必要です。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04初期サーバーセットアップガイド]に従って、1つのUbuntu 16.04サーバーをセットアップし、sudo non- rootユーザーとファイアウォール。

  • 接続の詳細とともに、アラートを送信するためのSMTPサーバー。 持っていない場合は、 `+ sudo apt-get install sendmail `で ` sendmail +`をインストールできます。

  • 手順7で説明したようにChronografユーザーインターフェースを保護する場合は、GitHub組織の一部であるhttps://github.com [GitHub]アカウントが必要です。 https://help.github.com/articles/creating-a-new-organization-account/ [このチュートリアル]に従ってGitHub組織を作成します。

ステップ1-TICKスタックリポジトリの追加

TICKスタックコンポーネントは、デフォルトではパッケージマネージャーから利用できません。 すべてのTICKスタックコンポーネントは同じリポジトリを使用するため、インストールをシームレスにするためにリポジトリ構成ファイルを設定します。

次のコマンドを使用して、InfluxDataリポジトリを追加します。

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/lsb-release
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

新しいリポジトリを配置したら、パッケージリストを更新します。

sudo apt-get update

これで、InfluxDBをインストールして構成できます。

ステップ2-InfluxDBのインストールと認証の構成

InfluxDBは、高速で高可用性のストレージと時系列データの取得用に最適化されたオープンソースデータベースです。 InfluxDBは、運用監視、アプリケーションメトリック、およびリアルタイム分析に最適です。

次のコマンドを実行して、InfluxDBをインストールします。

sudo apt-get install influxdb

インストールが完了したら、InfluxDBサービスを開始します。

sudo systemctl start influxdb

次に、サービスが適切に実行されていることを確認します。

systemctl status influxdb

次のステータスが表示され、サービスが実行されていることが確認されます。

[secondary_label Output
●  - InfluxDB is an open-source, distributed, time series database
  Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled)
  Active:
    Docs: https://docs.influxdata.com/influxdb/
Main PID: 1619 (influxd)
  CGroup: /system.slice/influxdb.service
          └─1619 /usr/bin/influxd -config /etc/influxdb/influxdb.conf

InfluxDBは実行されていますが、ユーザー認証を有効にしてデータベースへのアクセスを制限する必要があります。 少なくとも1人の管理者ユーザーを作成できます。

InfluxDBコンソールを起動します。

influx

次のコマンドを実行して、新しい管理ユーザーを作成します。 パスワード「+ sammy_admin 」で「 sammy +」ユーザーを作成しますが、好きなものを使用できます。

CREATE USER "" WITH PASSWORD '' WITH ALL PRIVILEGES

ユーザーが作成されたことを確認します。

show users

次の出力が表示され、ユーザーが作成されたことを確認します。

Output    user  admin
   ----  -----
    true

ユーザーが存在するので、InfluxDBコンソールを終了します。

exit

エディタでファイル `+ / etc / influxdb / influxdb.conf +`を開きます。 これは、InfluxDBの構成ファイルです。

sudo nano /etc/influxdb/influxdb.conf

`+ [http] `セクションを見つけ、 ` auth-enabled `オプションのコメントを外し、その値を ` true +`に設定します。

/etc/influxdb/influxdb.conf

...
   [http]
     # Determines whether HTTP endpoint is enabled.
     # enabled = true

     # The bind address used by the HTTP service.
     # bind-address = ":8086"

     # Determines whether HTTP authentication is enabled.

...

次に、ファイルを保存し、エディターを終了して、InfluxDBサービスを再起動します。

sudo systemctl restart influxdb

InfluxDBが構成されたので、メトリクスを収集するエージェントであるTelegrafをインストールしましょう。

ステップ3-Telegrafのインストールと構成

Telegrafは、実行中のシステムまたは他のサービスからメトリックとデータを収集するオープンソースのエージェントです。 その後、TelegrafはデータをInfluxDBまたは他の出力に書き込みます。

次のコマンドを実行してTelegrafをインストールします。

sudo apt-get install telegraf

Telegrafサービスはインストール後に自動的に開始されます。

Telegrafはプラグインを使用してデータを入出力します。 デフォルトの出力プラグインはInfluxDB用です。 IndexedDBのユーザー認証を有効にしたため、Telegraf構成ファイルを変更して、構成したユーザー名とパスワードを指定する必要があります。 エディターでTelegraf構成ファイルを開きます。

sudo nano /etc/telegraf/telegraf.conf

`+ [outputs.influxdb] +`セクションを見つけて、ユーザー名とパスワードを入力します。

/etc/telegraf/telegraf.conf

   [[outputs.influxdb]]
     ## The full HTTP or UDP endpoint URL for your InfluxDB instance.
     ## Multiple urls can be specified as part of the same cluster,
     ## this means that only ONE of the urls will be written to each interval.
     # urls = ["udp://localhost:8089"] # UDP endpoint example
     urls = ["http://localhost:8086"] # required
     ## The target database for metrics (telegraf will create it if not exists).
     database = "telegraf" # required

     ...

     ## Write timeout (for the InfluxDB client), formatted as a string.
     ## If not provided, will default to 5s. 0s means no timeout (not recommended).
     timeout = "5s"


     ## Set the user agent for HTTP POSTs (can be useful for log differentiation)
     # user_agent = "telegraf"
     ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
     # udp_payload = 512

ファイルを保存し、エディターを終了して、Telegrafを再起動します。

sudo systemctl restart telegraf

次に、サービスが適切に実行されているかどうかを確認します。

systemctl status telegraf

Telegrafが実行されていることを示す次のステータスが表示されます。

Output●  - The plugin-driven server agent for reporting metrics into InfluxDB
  Loaded: loaded (/lib/systemd/system/telegraf.service; enabled; vendor preset: enabled)
  Active:
    Docs: https://github.com/influxdata/telegraf
Main PID: 1752 (telegraf)
  CGroup: /system.slice/telegraf.service
          └─1752 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d

Telegrafは現在、データを収集してInfluxDBに書き込んでいます。 InfluxDBコンソールを開いて、Telegrafがデータベースに保存している測定値を確認します。 以前に設定したユーザー名とパスワードで接続します:

influx -username '' -password ''

ログインしたら、次のコマンドを実行して使用可能なデータベースを確認します。

show databases

出力に `+ telegraf +`データベースが一覧表示されます:

Output    name: databases
   name
   ----
   _internal

Telegrafがそのデータベースに保存しているものを見てみましょう。 次のコマンドを実行して、Telegrafデータベースに切り替えます。

use telegraf

次のコマンドを実行して、Telegrafが収集したさまざまな測定値を表示します。

show measurements

次の出力が表示されます。

Output    name: measurements
   name
   ----
   cpu
   disk
   diskio
   kernel
   mem
   processes
   swap
   system

ご覧のとおり、Telegrafはこのデータベースに多くの情報を収集して保存しています。

Telegrafには60以上の入力プラグインがあります。 以下を含む多くの一般的なサービスおよびデータベースからメトリックを収集できます。

  • アパッチ

  • カサンドラ

  • 港湾労働者

  • エラスティックサーチ

  • グレイログ

  • IPtables

  • MySQL

  • PostgreSQL

  • レディス

  • SNMP

  • そして他の多くの

ターミナルウィンドウで `+ telegraf -usage +`を実行すると、各入力プラグインの使用方法を表示できます。

InfluxDBコンソールを終了します。

exit

Telegrafが測定値を保存していることがわかったので、データを処理するようにKapacitorを設定しましょう。

ステップ4-Kapacitorのインストール

Kapacitorはデータ処理エンジンです。 独自のカスタムロジックをプラグインして、動的なしきい値を持つアラートを処理したり、パターンのメトリックを一致させたり、統計的な異常を特定したりできます。 Kapacitorを使用して、InfluxDBからデータを読み取り、アラートを生成し、指定した電子メールアドレスにアラートを送信します。

次のコマンドを実行して、Kapacitorをインストールします。

sudo apt-get install kapacitor

エディターでKapacitor構成ファイルを開きます。

sudo nano /etc/kapacitor/kapacitor.conf

`+ +`セクションを見つけ、InfluxDBデータベースに接続するためのユーザー名とパスワードを入力します。

/etc/kapacitor/kapacitor.conf

# Multiple InfluxDB configurations can be defined.
# Exactly one must be marked as the default.
# Each one will be given a name and can be referenced in batch queries and InfluxDBOut nodes.
[[influxdb]]
 # Connect to an InfluxDB cluster
 # Kapacitor can subscribe, query and write to this cluster.
 # Using InfluxDB is not required and can be disabled.
 enabled = true
 default = true
 name = "localhost"
 urls = ["http://localhost:8086"]


...

ファイルを保存し、エディターを終了して、Kapacitorを起動します。

sudo systemctl start kapacitor

それでは、Kapacitorが実行されていることを確認しましょう。 次のコマンドを使用して、Kapacitorのタスクリストを確認します。

kapacitor list tasks

Kapacitorが実行中の場合、次のような空のタスクリストが表示されます。

Output    ID                            Type      Status    Executing Databases and Retention Policies

Kapacitorをインストールして構成したら、TICKスタックのユーザーインターフェイスコンポーネントをインストールして、結果を確認してアラートを構成できるようにします。

ステップ5-Chronografのインストールと構成

Chronografは、監視データを視覚化し、警告および自動化ルールを作成するツールを提供するグラフ作成および視覚化アプリケーションです。 テンプレートのサポートが含まれており、一般的なデータセット用のインテリジェントで事前設定されたダッシュボードのライブラリがあります。 インストールした他のコンポーネントに接続するように設定します。

最新のパッケージをダウンロードしてインストールします。

wget https://dl.influxdata.com/chronograf/releases/chronograf__amd64.deb
sudo dpkg -i chronograf__amd64.deb

次に、Chronografサービスを開始します。

sudo systemctl start chronograf

Webブラウザで `+ http://:8888 +`にアクセスして、Chronografインターフェースにアクセスできるようになりました。

次の図のようなウェルカムページが表示されます。

image:https://assets.digitalocean.com/articles/tickstack_ubuntu1604/BM7l6eF.png [データソースに接続するためのフィールドを備えたChronografのようこそ画面]

InfluxDBデータベースのユーザー名とパスワードを入力し、* Connect New Source *をクリックして続行します。

接続すると、ホストのリストが表示されます。 次の図に示すように、サーバーのホスト名をクリックして、ホストに関する一連のシステムレベルのグラフを含むダッシュボードを開きます。

image:https://assets.digitalocean.com/articles/tickstack_ubuntu1604/OXk2ohb.png [サーバーのダッシュボード]

それでは、ChronografをKapacitorに接続してアラートを設定しましょう。 左側のナビゲーションメニューの歯車アイコンにカーソルを合わせ、[* Kapacitor *]をクリックして構成ページを開きます。

image:https://assets.digitalocean.com/articles/tickstack_ubuntu1604/B1pTobl.png [Kapacitorの設定]

デフォルトの接続詳細を使用します。 Kapacitorのユーザー名とパスワードを設定しませんでした。 [* Kapacitorに接続*]をクリックします。 Kapacitorが正常に接続すると、[アラートエンドポイントの設定]セクションがフォームの下に表示されます。

Kapacitorは複数のアラートエンドポイントをサポートしています。

  • ヒップチャット

  • OpsGenie

  • PagerDuty

  • センス

  • スラック

  • SMTP

  • Talk

  • 電報

  • VictorOps

最も簡単な通信方法は* SMTP で、デフォルトで選択されています。 * From email *フィールドに、アラートの送信元アドレスを入力します。 次に、SMTPサーバーの詳細を入力するか、 `+ sendmail +`がインストールされている場合はデフォルト値のままにします。 次に、[*保存]をクリックします。

設定が完了したら、アラートを作成しましょう。

ステップ6-アラートの構成

CPU使用率が高いかどうかを調べる簡単なアラートを設定しましょう。

左側のナビゲーションメニューの感嘆符アイコンにカーソルを合わせて、* Kapacitorルール*をクリックします。 次に、[新しいルールの作成]をクリックします。

最初のセクションで、* telegraf.autogen をクリックして時系列を選択します。 次に、表示されるリストから system を選択します。 次に load1 *を選択します。 下のセクションに対応するグラフがすぐに表示されます。

グラフの上で、* load1がより大きい*警告を送信*というフィールドを見つけ、値に「0.8」を入力します。

次に、次のテキストを*アラートメッセージ*フィールドに貼り付けて、アラートメッセージのテキストを設定します。

{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}
  • Templates *セクションのエントリの上にマウスを置くと、各フィールドの説明を取得できます。

次に、[このアラートを送信する]ドロップダウンリストから[* Smtp *]オプションを選択し、関連するフィールドにメールアドレスを入力します。

デフォルトでは、次のようなJSON形式のメッセージを受信します。

メッセージ例

{
   "Name":"system",
   "TaskName":"chronograf-v1-50c67090-d74d-42ba-a47e-45ba7268619f",
   "Group":"nil",
   "Tags":{
       "host":"centos-tick"
   },
   "ID":"TEST:nil",
   "Fields":{
       "value":1.25
   },
   "Level":"CRITICAL",
   "Time":"2017-03-08T12:09:30Z",
   "Message":"TEST:nil is CRITICAL value: 1.25"
}

メールアラート用に、より人間が読めるメッセージを設定できます。 これを行うには、テキストボックスにメッセージを入力します(*メール本文のテキストをここに挿入*プレースホルダー)。

このルールの名前を変更するには、ページの左上隅にある名前をクリックして、新しい名前を入力します。

最後に、右上の[ルールの保存]をクリックして、このルールの構成を完了します。

この新しく作成されたアラートをテストするには、「+ dd 」コマンドを使用して「 / dev / zero 」からデータを読み取り、「 / dev / null +」に送信してCPUスパイクを作成します。

dd if=/dev/zero of=/dev/null

コマンドを数分間実行します。これはスパイクを作成するのに十分なはずです。 `+ CTRL + C +`を押すと、いつでもコマンドを停止できます。

しばらくすると、電子メールメッセージが届きます。 さらに、Chronografユーザーインターフェースの左側のナビゲーションメニューで[アラート履歴]をクリックすると、すべてのアラートを表示できます。

アラートを実行していますが、誰でもChronografにログインできます。 アクセスを制限しましょう。

ステップ7-OAuthを使用してChronografを保護する

デフォルトでは、Chronografアプリケーションを実行しているサーバーのアドレスを知っている人は誰でもデータを表示できます。 テスト環境では許容されますが、本番環境では許容されません。 Chronografは、Google、Heroku、およびGitHubのOAuth認証をサポートしています。 https://github.com [GitHub]アカウントを介してログインを構成するため、先に進む必要があります。

最初に、GitHubで新しいアプリケーションを登録します。 GitHubアカウントにログインし、https://github.com/settings/applications/newに移動します。

次に、フォームに次の詳細を入力します。

  1. アプリケーション名*に Chronograf *または適切な説明的な名前を入力します。

  2. *ホームページのURL *には、 `+ http://:8888 +`を使用します。

  3. *承認コールバックURL *に `+ http://:8888 / oauth / github / callback +`を入力します。

  4. [*アプリケーションの登録]をクリックして、設定を保存します。

  5. 次の画面で提供される* Client ID および Client Secret *の値をコピーします。

次に、Chronografのsystemdスクリプトを編集して認証を有効にします。 ファイル `+ / lib / systemd / system / chronograf.service +`を開きます:

sudo nano /lib/systemd/system/chronograf.service

次に、「+ [Service] 」セクションを見つけて、「 ExecStart = +」で始まる行を編集します。

/lib/systemd/system/chronograf.service

[Service]
User=chronograf
Group=chronograf
/usr/bin/chronograf --host 0.0.0.0 --port 8888 -b /var/lib/chronograf/chronograf-v1.db -c /usr/share/chronograf/canned -t '' -i '' -s '' -o ''
KillMode=control-group
Restart=on-failure

`+ secret_token +`はすべてのOAuthプロバイダーに必要です。 ランダムな文字列に設定します。 他の値には、Github Client ID、Github Client Secret、およびGithub Organizationを使用します。

ファイルを保存し、エディターを終了して、Chronografサービスを再起動します。

sudo systemctl daemon-reload
sudo systemctl restart chronograf

Chronografインターフェースにアクセスするには、「+ http://:8888+」を開きます。 今回は、* Login with Github *ボタンが表示されます。 ボタンをクリックしてログインすると、アプリケーションからGithubアカウントへのアクセスを許可するよう求められます。 アクセスを許可すると、ログインできます。

結論

このチュートリアルでは、時系列データを保存、分析、視覚化するためのTICKスタックが強力なツールになる方法を説明しました。 多くの機能とユースケースがあります。 たとえば、Kapacitorを使用してhttps://docs.influxdata.com/kapacitor/v1.2/examples/anomaly_detection/[anomaly detection]またはhttps://docs.influxdata.com/kapacitor/v1.2/を実行できます。 examples / live_leaderboard / [ゲームスコアのライブリーダーボードを作成]。 TICKスタックの詳細については、https://docs.influxdata.com/ [公式ドキュメント]を参照してください。

Related