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

前書き

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

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

  • InfluxDBは時系列データを格納します。

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

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

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

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

前提条件

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

  • sudo非rootユーザーとファイアウォールを含むthe CentOS 7 initial server setup guideに従うことによってセットアップされた1つのCentOS7サーバー。

  • 手順7で説明したようにChronografのユーザーインターフェースを保護する場合は、GitHub組織の一部であるGitHubアカウントが必要です。 this tutorialに従って、GitHub組織を作成します。

[[step-1 -—- adding-the-tick-stack-repository]] ==ステップ1—TICKスタックリポジトリの追加

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

この新しいファイルを作成します。

sudo vi /etc/yum.repos.d/influxdata.repo

新しいファイルに次の構成を配置します。

/etc/yum.repos.d/influxdata.repo

[influxdb]
name = InfluxData Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

ファイルを保存し、エディターを終了します。 これで、InfluxDBをインストールして構成できます

[[step-2 -—- installing-influxdb-and-configuring-authentication]] ==ステップ2—InfluxDBのインストールと認証の構成

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

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

sudo yum install influxdb

インストールプロセス中に、GPGキーをインポートするように求められます。 インストールを続行できるように、このキーをインポートすることを確認します。

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

sudo systemctl start influxdb

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

systemctl status influxdb

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

[secondary_label Output
    ● influxdb.service - InfluxDB is an open-source, distributed, time series database
       Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2017-02-07 13:19:31 EET; 2min 46s ago
         Docs: https://docs.influxdata.com/influxdb/
     Main PID: 14290 (influxd)

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

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

influx

次のコマンドを実行して、新しい管理ユーザーを作成します。 パスワードsammy_adminsammyユーザーを作成しますが、好きなように使用できます。

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

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

show users

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

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

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

exit

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

sudo vi /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サービスを再起動します。

sudo systemctl restart influxdb

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

[[step-3 -—- installing-and-configuring-telegraf]] ==ステップ3—Telegrafのインストールと構成

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

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

sudo yum install telegraf

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

sudo vi /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を開始します。

sudo systemctl start telegraf

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

systemctl status telegraf

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

Output    ● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
       Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2017-02-07 13:32:36 EET; 3min 27s ago
         Docs: https://github.com/influxdata/telegraf
     Main PID: 14412 (telegraf)

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

influx -username 'sammy' -password 'sammy_admin'

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

show databases

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

Output    name: databases
    name
    ----
    _internal
    telegraf

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

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 plugin-nameを実行すると、各入力プラグインの使用方法を表示できます。

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

exit

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

[[step-4 -—- installing-kapacitor]] ==ステップ4—Kapacitorのインストール

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

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

sudo yum install kapacitor

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

sudo vi /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を起動します。

sudo systemctl daemon-reload
sudo systemctl start kapacitor

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

kapacitor list tasks

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

Output    ID                            Type      Status    Executing Databases and Retention Policies

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

[[step-5 -—- installing-and-configuring-chronograf]] ==ステップ5—Chronografのインストールと構成

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

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

wget https://dl.influxdata.com/chronograf/releases/chronograf-1.2.0~beta3.x86_64.rpm
sudo yum localinstall chronograf-1.2.0~beta3.x86_64.rpm

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

sudo systemctl start chronograf

[。注意]##

Note:FirewallDを使用している場合は、ポート `8888`への接続を許可するように設定します。

sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp
sudo firewall-cmd --reload

FirewallDルールの詳細については、チュートリアルHow To Set Up a Firewall Using FirewallD on CentOS 7に従ってください。

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

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

The Chronograf welcome screen with fields to connect to a data source

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

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

The dashboard for your server

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

Configuring Kapacitor

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

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

  • ヒップチャット

  • OpsGenie

  • PagerDuty

  • センス

  • スラック

  • SMTP

  • Talk

  • 電報

  • VictorOps

最も単純な通信方法はSMTPで、これはデフォルトで選択されています。 アラートの送信元のアドレスをFrom emailフィールドに入力し、Saveをクリックします。 残りの詳細はデフォルト値のままにしておくことができます。

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

[[step-6 -—- configuring-alerts]] ==ステップ6—アラートの構成

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

左側のナビゲーションメニューにカーソルを合わせ、ALERTINGセクションを見つけて、Kapacitor Rulesをクリックします。 次に、Create New Ruleをクリックします。

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

グラフの上で、Send Alert where load1 is Greater Thanというフィールドを見つけ、値に1.0を入力します。

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

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

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

次に、Send this Alert toドロップダウンリストから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"
}

メールアラート用に、より人間が読めるメッセージを設定できます。 これを行うには、Put email body text hereプレースホルダーを使用してテキストボックスにメッセージを入力します。

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

最後に、右上のSave Ruleをクリックして、このルールの構成を完了します。

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

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

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

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

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

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

[[step-7 -—- securing-chronograf-with-oauth]] ==ステップ7—OAuthでクロノグラフを保護する

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

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

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

  1. Application nameChronografまたは適切な説明的な名前を入力します。

  2. Homepage URLには、http://your_server_ip:8888を使用します。

  3. Authorization callback URLhttp://your_server_ip:8888/oauth/github/callbackを入力します。

  4. Register applicationをクリックして設定を保存します。

  5. 次の画面で提供されるClient IDClient Secretの値をコピーします。

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

sudo vi /usr/lib/systemd/system/chronograf.service

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

/usr/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 Client ID、Github Client Secret、およびGithub Organizationを使用します。

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

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

sudo systemctl daemon-reload
sudo systemctl restart chronograf

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

結論

このチュートリアルでは、TICKスタックが時系列データを保存、分析、視覚化するための強力なツールになる方法を説明しました。 多くの機能とユースケースがあります。 たとえば、Kapacitorを使用してanomaly detectionまたはbuild live leaderboard of game scoresを実行できます。 official documentationを読むと、TICKスタックの詳細を知ることができます。