前書き
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_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 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]#Note:telegraf
データベースが表示されない場合は、構成した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インターフェイスにアクセスできます。
次の図のようなウェルカムページが表示されます。
InfluxDBデータベースのユーザー名とパスワードを入力し、Connect New Sourceをクリックして続行します。
接続すると、ホストのリストが表示されます。 次の図に示すように、サーバーのホスト名をクリックして、ホストに関する一連のシステムレベルのグラフを含むダッシュボードを開きます。
それでは、ChronografをKapacitorに接続してアラートを設定しましょう。 左側のナビゲーションメニューの最後の項目にカーソルを合わせ、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に移動します。
次に、フォームに次の詳細を入力します。
-
Application nameにChronografまたは適切な説明的な名前を入力します。
-
Homepage URLには、
http://your_server_ip:8888
を使用します。 -
Authorization callback URLに
http://your_server_ip:8888/oauth/github/callback
を入力します。 -
Register applicationをクリックして設定を保存します。
-
次の画面で提供されるClient IDとClient 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スタックの詳細を知ることができます。