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
に設定します。
/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をインストールしましょう。
ステップ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]
セクションを見つけて、ユーザー名とパスワードを入力します。
/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 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データベースに接続するためのユーザー名とパスワードを入力します。
/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 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
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スパイクを作成します。
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=
で始まる行を編集します。
/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サービスを再起動します。
sudo systemctl daemon-reload sudo systemctl restart chronograf
http://your_server_ip:8888
を開いて、Chronografインターフェースにアクセスします。 今回は、Githubでのログインボタンが表示されます。 ボタンをクリックしてログインすると、アプリケーションにGithubアカウントへのアクセスを許可するように求められます。 アクセスを許可すると、ログインします。
結論
このチュートリアルでは、TICKスタックが時系列データを保存、分析、視覚化するための強力なツールになる方法を説明しました。 多くの機能とユースケースがあります。 たとえば、Kapacitorを使用して、異常検出またはゲームスコアのライブリーダーボードの作成を実行できます。 公式ドキュメントを読むと、TICKスタックの詳細を知ることができます。