序章

TICKスタックは、時系列データベースInfluxDBの開発者からの製品のコレクションです。 これは、次のコンポーネントで構成されています。

  • T elegrafは、さまざまなソースから時系列データを収集します。
  • I nfluxDBは、時系列データを格納します。
  • C hronografは、時系列データを視覚化してグラフ化します。
  • K apacitorはアラートを提供し、時系列データの異常を検出します。

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

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

前提条件

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

  • Ubuntu16.04初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu16.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
  • 接続の詳細とともにアラートを送信するためのSMTPサーバー。 お持ちでない場合は、sendmailsudo apt-get install sendmailを組み合わせてインストールできます。
  • 手順7で説明したようにChronografのユーザーインターフェイスを保護する場合は、GitHub組織の一部であるGitHubアカウントが必要です。 このチュートリアルに従って、GitHub組織を作成します。

ステップ1—TICKスタックリポジトリを追加する

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

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

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

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

  1. sudo apt-get update

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

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

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

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

  1. sudo apt-get install influxdb

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

  1. sudo systemctl start influxdb

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

  1. systemctl status influxdb

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

[secondary_label Output
● influxdb.service - InfluxDB is an open-source, distributed, time series database
   Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-03-13 15:20:53 CST; 11s ago
     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コンソールを起動します。

  1. influx

次のコマンドを実行して、新しい管理者ユーザーを作成します。 パスワードsammy_adminを使用してsammyユーザーを作成しますが、任意のユーザーを使用できます。

  1. CREATE USER "sammy" WITH PASSWORD 'sammy_admin' WITH ALL PRIVILEGES

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

  1. show users

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

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

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

  1. exit

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

  1. 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.
      auth-enabled = true
...

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

  1. sudo systemctl restart influxdb

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

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

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

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

  1. sudo apt-get install telegraf

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

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

  1. 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"
      username = "sammy"
      password = "sammy_admin"
      ## 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を再起動します。

  1. sudo systemctl restart telegraf

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

  1. systemctl status telegraf

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

Output
telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB Loaded: loaded (/lib/systemd/system/telegraf.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-03-14 15:24:41 CST; 1min 26s ago 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がデータベースに保存している測定値を確認しましょう。 以前に構成したユーザー名とパスワードで接続します。

  1. influx -username 'sammy' -password 'sammy_admin'

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

  1. show databases

telegrafデータベースが出力に表示されます。

Output
name: databases name ---- _internal telegraf

telegrafデータベースが表示されない場合は、構成したTelegraf設定をチェックして、適切なユーザー名とパスワードが指定されていることを確認してください。

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

  1. use telegraf

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

  1. show measurements

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

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

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

Telegrafには60を超える入力プラグインがあります。 次のような多くの一般的なサービスやデータベースからメトリックを収集できます。

  • Apache
  • カサンドラ
  • Docker
  • Elasticsearch
  • グレイログ
  • IPtables
  • MySQL
  • PostgreSQL
  • Redis
  • SNMP
  • と他の多く

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

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

  1. exit

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

ステップ4—Kapacitorをインストールする

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

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

  1. sudo apt-get install kapacitor

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

  1. sudo nano /etc/kapacitor/kapacitor.conf

[[influxdb]]セクションを見つけて、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"]
  username = "sammy"
  password = "sammy_admin"
...

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

  1. sudo systemctl start kapacitor

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

  1. kapacitor list tasks

Kapacitorが稼働している場合は、次のような空のタスクリストが表示されます。

Output
ID Type Status Executing Databases and Retention Policies

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

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

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

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

  1. wget https://dl.influxdata.com/chronograf/releases/chronograf_1.2.0~beta5_amd64.deb
  2. sudo dpkg -i chronograf_1.2.0~beta5_amd64.deb

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

  1. sudo systemctl start chronograf

:Uncomplicated Firewallを使用している場合は、ポート8888への接続を許可するように構成してください。

  1. sudo ufw allow 8888/tcp

UFWの詳細については、チュートリアル Ubuntu16.04でUFWを使用してファイアウォールを設定する方法に従ってください。

これで、Webブラウザでhttp://your_server_ip:8888にアクセスして、Chronografインターフェイスにアクセスできます。

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

InfluxDBデータベースのユーザー名とパスワードを入力し、新しいソースの接続をクリックして続行します。

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

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

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

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

  • HipChat
  • OpsGenie
  • PagerDuty
  • センス
  • スラック
  • SMTP
  • 電報
  • VictorOps

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

構成が整ったら、アラートを作成しましょう。

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

CPU使用率が高いことを探す簡単なアラートを設定しましょう。

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

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

グラフの上にあるSendAlertというフィールドを見つけます。load1はより大きいので、値に0.8と入力します。

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

{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}

テンプレートセクションのエントリにマウスを合わせると、各フィールドの説明が表示されます。

次に、このアラートをに送信するドロップダウンリストから 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スパイクを作成します。

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

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

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

:アラートを受信できることを確認したら、CTRL+Cで開始したddコマンドを必ず停止してください。

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

ステップ7—OAuthでクロノグラフを保護する

デフォルトでは、Chronografアプリケーションを実行しているサーバーのアドレスを知っている人なら誰でも任意のデータを表示できます。 テスト環境では許容できますが、本番環境では許容できません。 Chronografは、Google、Heroku、GitHubのOAuth認証をサポートしています。 GitHub アカウントを介してログインを構成するため、続行するにはアカウントが必要です。

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

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

  1. アプリケーション名クロノグラフまたは適切な説明的な名前を入力します。
  2. ホームページのURLは、http://your_server_ip:8888を使用してください。
  3. 認証コールバックURLhttp://your_server_ip:8888/oauth/github/callbackを入力します。
  4. アプリケーションの登録をクリックして設定を保存します。
  5. 次の画面に表示されるクライアントIDクライアントシークレットの値をコピーします。

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

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

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

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

secret_tokenは、すべてのOAuthプロバイダーに必要です。 ランダムな文字列に設定します。 その他の値には、GithubクライアントID、Githubクライアントシークレット、およびGithub組織を使用します。

警告:コマンドからGithub組織オプションを省略すると、すべてのGithubユーザーがChronografインスタンスにログインできるようになります。 Github組織を作成し、適切なユーザーを組織に追加してアクセスを制限します。

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

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart chronograf

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

結論

このチュートリアルでは、TICKスタックが時系列データを保存、分析、視覚化するための強力なツールになる方法を説明しました。 多くの機能とユースケースがあります。 たとえば、Kapacitorを使用して、異常検出またはゲームスコアのライブリーダーボードの作成を実行できます。 公式ドキュメントを読むと、TICKスタックの詳細を知ることができます。