Ubuntu16.04でTICKスタックを使用してシステムメトリックを監視する方法
序章
TICKスタックは、時系列データベースInfluxDBの開発者からの製品のコレクションです。 これは、次のコンポーネントで構成されています。
- T elegrafは、さまざまなソースから時系列データを収集します。
- I nfluxDBは、時系列データを格納します。
- C hronografは、時系列データを視覚化してグラフ化します。
- K apacitorはアラートを提供し、時系列データの異常を検出します。
これらの各コンポーネントは個別に使用できますが、一緒に使用すると、時系列データを処理するためのスケーラブルで統合されたオープンソースシステムが得られます。
このチュートリアルでは、このプラットフォームをセットアップして、オープンソースの監視システムとして使用します。 CPU使用率を少し生成し、使用率が高くなりすぎると電子メールアラートを受信します。
前提条件
始める前に、次のものが必要です。
- Ubuntu16.04初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu16.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
- 接続の詳細とともにアラートを送信するためのSMTPサーバー。 お持ちでない場合は、
sendmail
とsudo apt-get install sendmail
を組み合わせてインストールできます。 - 手順7で説明したようにChronografのユーザーインターフェイスを保護する場合は、GitHub組織の一部であるGitHubアカウントが必要です。 このチュートリアルに従って、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.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コンソールを起動します。
- influx
次のコマンドを実行して、新しい管理者ユーザーを作成します。 パスワードsammy_admin
を使用してsammy
ユーザーを作成しますが、任意のユーザーを使用できます。
- 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 nano /etc/influxdb/influxdb.conf
[http]
セクションを見つけ、auth-enabled
オプションのコメントを外し、その値をtrue
に設定します。
...
[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をインストールしましょう。
ステップ3—Telegrafのインストールと構成
Telegrafは、実行中のシステムまたは他のサービスからメトリックとデータを収集するオープンソースエージェントです。 次に、TelegrafはデータをInfluxDBまたは他の出力に書き込みます。
次のコマンドを実行して、Telegrafをインストールします。
- sudo apt-get install telegraf
Telegrafサービスは、インストール後に自動的に開始されます。
Telegrafは、プラグインを使用してデータを入力および出力します。 デフォルトの出力プラグインはInfluxDB用です。 IndexDBのユーザー認証を有効にしたため、Telegrafの構成ファイルを変更して、構成したユーザー名とパスワードを指定する必要があります。 エディターでTelegraf構成ファイルを開きます。
- sudo nano /etc/telegraf/telegraf.conf
[outputs.influxdb]
セクションを見つけて、ユーザー名とパスワードを入力します。
[[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 restart telegraf
次に、サービスが正しく実行されているかどうかを確認します。
- 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がデータベースに保存している測定値を確認しましょう。 以前に構成したユーザー名とパスワードで接続します。
- influx -username 'sammy' -password 'sammy_admin'
ログインしたら、次のコマンドを実行して、使用可能なデータベースを確認します。
- show databases
telegraf
データベースが出力に表示されます。
Output name: databases
name
----
_internal
telegraf
注:telegraf
データベースが表示されない場合は、構成したTelegraf設定をチェックして、適切なユーザー名とパスワードが指定されていることを確認してください。
Telegrafがそのデータベースに何を保存しているかを見てみましょう。 次のコマンドを実行して、Telegrafデータベースに切り替えます。
- use telegraf
次のコマンドを実行して、Telegrafが収集したさまざまな測定値を表示します。
- 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コンソールを終了します。
- exit
Telegrafが測定値を保存していることがわかったので、データを処理するようにKapacitorを設定しましょう。
ステップ4—Kapacitorをインストールする
Kapacitorはデータ処理エンジンです。 独自のカスタムロジックをプラグインして、動的なしきい値でアラートを処理したり、パターンのメトリックを照合したり、統計的な異常を識別したりできます。 Kapacitorを使用して、InfluxDBからデータを読み取り、アラートを生成し、それらのアラートを指定された電子メールアドレスに送信します。
次のコマンドを実行して、Kapacitorをインストールします。
- sudo apt-get install kapacitor
エディターでKapacitor構成ファイルを開きます。
- sudo nano /etc/kapacitor/kapacitor.conf
[[influxdb]]
セクションを見つけて、InfluxDBデータベースに接続するためのユーザー名とパスワードを入力します。
# 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 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_1.2.0~beta5_amd64.deb
- sudo dpkg -i chronograf_1.2.0~beta5_amd64.deb
次に、Chronografサービスを開始します。
- sudo systemctl start chronograf
注:Uncomplicated Firewallを使用している場合は、ポート8888
への接続を許可するように構成してください。
- sudo ufw allow 8888/tcp
チュートリアルUbuntu16.04でUFWを使用してファイアウォールを設定する方法に従って、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スパイクを作成します。
- 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に移動します。
次に、フォームに次の詳細を入力します。
- アプリケーション名にクロノグラフまたは適切な説明的な名前を入力します。
- ホームページのURLは、
http://your_server_ip:8888
を使用してください。 - 認証コールバックURLに
http://your_server_ip:8888/oauth/github/callback
を入力します。 - アプリケーションの登録をクリックして設定を保存します。
- 次の画面に表示されるクライアントIDとクライアントシークレットの値をコピーします。
次に、Chronografのsystemdスクリプトを編集して、認証を有効にします。 ファイル/lib/systemd/system/chronograf.service
を開きます。
- sudo nano /lib/systemd/system/chronograf.service
次に、[Service]
セクションを見つけて、ExecStart=
で始まる行を編集します。
[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サービスを再起動します。
- sudo systemctl daemon-reload
- sudo systemctl restart chronograf
http://your_server_ip:8888
を開いて、Chronografインターフェースにアクセスします。 今回は、Githubボタンでログインします。 ボタンをクリックしてログインすると、アプリケーションにGithubアカウントへのアクセスを許可するように求められます。 アクセスを許可すると、ログインします。
結論
このチュートリアルでは、TICKスタックが時系列データを保存、分析、視覚化するための強力なツールになる方法を説明しました。 多くの機能とユースケースがあります。 たとえば、Kapacitorを使用して、異常検出またはゲームスコアのライブリーダーボードの作成を実行できます。 公式ドキュメントを読むと、TICKスタックの詳細を知ることができます。