TheElastic Stackは、Dockerコンテナによって生成されたさまざまなデータを監視できます。このガイドでは、Kibana、Beats、Elasticsearchなどのツールを使用して、コンテナーのログとメトリックを分析および視覚化するLinodeをセットアップします。完了すると、追加のコンテナのデータを自動的に収集するようにシステムを構成できるようになります。
始める前に
-
まだ行っていない場合は、Linodeアカウントとコンピュートインスタンスを作成します。 Linode入門とコンピューティングインスタンスの作成ガイドをご覧ください。
-
コンピューティングインスタンスのセットアップと保護ガイドに従って、システムを更新してください。また、タイムゾーンの設定、ホスト名の構成、制限付きユーザーアカウントの作成、SSHアクセスの強化を行うこともできます。
-
UbuntuまたはDebianベースのシステムにファイアウォール(UFW)をインストールして構成するには、UFWガイド、またはrpmまたはCentOSベースのシステムの場合はFirewallDガイドに従ってください。ファイアウォールを構成した後、このガイドの残りの部分でSSHを介した接続を続行するために、必要なポートが開いていることを確認してください。
sudo ufw allow ssh
-
Dockerプロジェクトのインストールガイドに従って、LinodeにDockerをインストールします。
注 このガイドのサービスはローカルホストにのみバインドされます。つまり、リモートホストからLinodeの外部にアクセスすることはできません。これにより、ElasticsearchのREST APIはローカルホストに対してプライベートのままであり、インターネットからリモートアクセスできなくなります。このガイド以外の手順でElasticsearchと関連コンポーネントをさらに構成する場合は、ファイアウォールが設定され、インターネットからElasticsearchノードとKibanaノード(Elasticsearchの場合はポート9200と9300、Kibanaの場合は5601)へのトラフィックを正しくブロックしてそれらを維持するようにしてください。適切に保護されています。
ElasticStackコンポーネントのインストール
実行中のコンテナーを監視するようにシステムを構成する前に、まずログとメトリックを収集してElasticsearchに送信するために必要なコンポーネントをインストールします。
Debianベースのディストリビューション
Elastic apt
を構成します 必要なパッケージとその依存関係をリポジトリに保存してインストールします。
-
公式のElasticAPTパッケージ署名キーをインストールします:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
-
apt-transport-https
をインストールしますdeb
を取得するために必要なパッケージ HTTPS経由で提供されるパッケージ:sudo apt-get install apt-transport-https
-
APTリポジトリ情報をサーバーのソースリストに追加します:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
-
利用可能なパッケージのリストを更新します:
sudo apt-get update
-
Elasticsearchをインストールする前に、Javaランタイムが存在している必要があります。 Ubuntu 18.04 LTSなどのシステムでは、
default-jre-headless
を使用します パッケージは互換性のあるJavaランタイムをインストールします:sudo apt-get install default-jre-headless
-
Elasticsearch、Kibana、Filebeat、およびMetricbeatをインストールします:
sudo apt-get install elasticsearch kibana filebeat metricbeat
Redhatベースのディストリビューション
rpm
を構成します yum
のリポジトリ および関連するパッケージツール。
-
Elastic署名キーを信頼する:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
-
Elastic yumリポジトリーを使用するためのyumリポジトリー構成を作成します:
- ファイル:/ etc / yum.repos.d / elasticsearch.repo
-
yum
を更新します 新しいパッケージが利用可能になるようにキャッシュします:sudo yum update
-
Elasticsearchをインストールする前に、Javaランタイムが存在している必要があります。たとえば、CentOSでは、互換性のあるJavaランタイムをヘッドレスOpenJDKパッケージを使用してインストールできます。
sudo yum install java-11-openjdk-headless
-
Elasticsearch、Kibana、Filebeat、およびMetricbeatをインストールします:
sudo yum install elasticsearch kibana filebeat metricbeat
エラスティックスタックの構成
コンテナメトリックを適切に検出してキャプチャするには、Elasticスタックの各コンポーネントを構成する必要があります。
ファイル/etc/elasticsearch/jvm.options
-Xm
で始まる2つの値 コメントを外す必要があります。これらの設定は、特定の量のメモリを割り当てるようにJVMに指示します。これらの設定の推奨値は、使用可能なシステムRAMの50%です。たとえば、1GのRAMを搭載したシステムでは、次のように設定する必要があります。
- ファイル:/ etc / elasticsearch / jvm.options
-
Elasticsearchを開始する前に、geoipおよびユーザーエージェントデータを処理するために必要なプラグインをいくつかインストールしてください。
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
-
これらの設定を行ったら、
elasticsearch
を開始します サービス。sudo systemctl start elasticsearch
-
Elasticsearchが開始するまでしばらく待ってから、ElasticsearchがRESTAPIを介して応答していることを確認します。
curl http://localhost:9200
次のような出力が表示されます。
{ "name" : "iQEk_-M", "cluster_name" : "elasticsearch", "cluster_uuid" : "tQeLgbKrTNOp2AoqdmTItw", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Elasticsearchはドキュメントのインデックスを作成する準備ができています。
キバナ
Kibanaのデフォルト設定のほとんどは、このガイドの目的に適しています。構成を変更する必要はありません。 kibana
を開始します サービス。
sudo systemctl start kibana
ファイルビート
docker
を使用する Filebeatが開始されたコンテナを動的にキャプチャできるようにするための入力。これにより、Dockerログファイルパスを指定する必要がなくなり、代わりにFilebeatがコンテナーの起動時にコンテナーを検出できるようになります。
-
Filebeat構成ファイルの先頭近くに以下を追加して、
filebeat
に指示します。 Dockerコンテナログをキャプチャするデーモン。これらの行は、構成キーfilebeat.inputs
の下に入力する必要があります :- ファイル:/ etc / filebeat / filebeat.yml
-
次の行のコメントを解除し、その値を
true
に変更します 、これにより、Filebeatはキャプチャされたコンテナログに関連付けられたKibanaダッシュボードを作成できます:- ファイル:/ etc / filebeat / filebeat.yml
-
最後に、次の
autodiscover
を追加しますfilebeat.yml
の最後までの構成 ファイル:- ファイル:/ etc / filebeat / filebeat.yml
-
nginx
を有効にします モジュール。このチュートリアルの後半で使用されます:sudo /usr/bin/filebeat modules enable nginx
-
構成ファイルの残りの部分は、ローカルで実行されているElasticsearchインスタンスにログを送信するようにFilebeatに指示しますが、これは変更しないでおくことができます。 Filebeatを開始します:
sudo systemctl start filebeat
メトリックビート
Filebeatと同様に、監視する実行中のコンテナーを動的に検出するようにMetricbeatを構成します。
-
Metricbeatは、モジュールを使用してコンテナメトリックを収集します。次のコマンドを発行して、
docker
を有効にします およびnginx
モジュール:sudo /usr/bin/metricbeat modules enable docker sudo /usr/bin/metricbeat modules enable nginx
-
次の行のコメントを解除し、その値を
true
に変更します 、これにより、Metricbeatはキャプチャされたコンテナログに関連付けられたKibanaダッシュボードを作成できます:- ファイル:/ etc /metricbeat/metricbeat.yml
-
構成ファイルの残りの部分は、ローカルで実行されているElasticsearchインスタンスにログを送信するようにMetricbeatに指示しますが、これは変更しないでおくことができます。 Metricbeatを開始できるようになりました:
sudo systemctl start metricbeat
コンテナログとメトリックの視覚化
次の例は、FilebeatとMetricbeatがKibana内でアクセスできるコンテナデータを自動的にキャプチャする方法を示しています。
-
まず、Linodeで簡単なnginxDockerコンテナを実行します。
sudo docker run --name nginx -P -d --label co.elastic.logs/module=nginx nginx
- このコマンドは、Webサーバーをバックグラウンドで実行し、リスニングHTTPサービスをランダムなポート番号で公開します。
-
--label
引数は、Filebeatが特定のコンテナタイプ(この場合はnginx)のログ形式を自動的に解析できるようにするためのヒントです。
-
Kibanaへの安全な接続を開くには、Linodeのポート5601へのSSHトンネルを開きます。
ssh -L 5601:localhost:5601 <[email protected]>
-
<[email protected]>
を置き換えます Linodeのユーザー名とIPアドレスを使用します。 - これにより、ポート5601がローカルでLinodeのポート5601に転送されます。
- さまざまなプラットフォームでSSHトンネルを使用するための包括的なガイドは、MySQL用のSSHトンネルの作成ガイドにあります。
-
-
http://localhost:5601
に移動します ブラウザで、Kibanaの次の最初のランディングページが表示されます。 -
管理をクリックします 左下のサイドバーのリンク。次のページが表示されます。次に、インデックスパターンをクリックします インデックスパターン設定ページに入ります。
-
インデックスパターンは、KibanaがElasticsearchに存在するインデックスをどのように理解するかを示します。一部のビジュアライゼーションを正しく表示するには、最初にデフォルトのインデックスパターンを設定する必要があります。 filebeat-*を選択します ページの左側にあるfilebeat-*インデックスパターンを設定します。
-
スターアイコンをクリックします ページの右上隅にあるこのインデックスパターンをKibanaのデフォルトとして設定します。
Kibanaは、デフォルトのインデックスパターンで適切に構成されるようになりました。
-
FilebeatとMetricbeatは、ElasticsearchとKibanaを自動的に構成するように設定されているため、ダッシュボードとインデックスパターンが読み込まれ、使用できるようになります。 ダッシュボードをクリックします 次のページを表示する左側のサイドバーにあります。
-
検索バーに「container」と入力して、システムコンテナ用に事前入力されたダッシュボードを表示します。 [MetricbeatDocker]の概要をクリックします リンク。
-
[MetricbeatDocker]の概要 ダッシュボードが読み込まれ、現在実行中のコンテナメトリックのいくつかの側面が表示されます。ダッシュボードには、実行中のコンテナーのリスト、実行中、一時停止中、および停止中のコンテナーの総数、およびコンテナーリソース消費に関するメトリックが表示されます。
さらに下にスクロールすると、CPU、メモリ、ネットワークアクティビティなど、時間の経過に伴うコンテナリソースの使用状況を示すグラフも表示されます。
-
他のKibanaビジュアライゼーションに進む前に、HTTPリクエストをリスニングコンテナに送信して、nginxからログアクティビティを生成します。まず、
docker
を使用して、コンテナがリクエストをリッスンしているポートを見つけます コマンド:docker ps
次のような出力が表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f0c6d284f1f nginx "nginx -g 'daemon of…" 23 minutes ago Up 23 minutes 0.0.0.0:32769->80/tcp nginx
この出力から、コンテナのポート80に転送されているポート32769にリクエストを発行することで、HTTPサーバーに到達できることがわかります。システムのポートは異なる場合があります。
-
curl
を使用して、このポートにいくつかのリクエストを送信します コマンド、<port>
を置き換えます 前のステップで見つかった番号を使用して:for i in $(seq 1 10) ; do curl localhost:<port> ; done
-
現在、このコンテナのKibanaには多数のログがあります。 検出をクリックします Kibanaの左側のサイドバーにあります。次の画面が表示されます。
- ページ上部のヒストグラムは、時間の経過に伴うコンテナログの総数を示しています。
- グラフの下の表には、個々のログの内容が含まれています。
- 各ログのタイムスタンプの左側にある矢印をクリックすると、キャプチャされた各ログの情報が表示されます。
-
以前の
for ...
を再発行してみてください さらに10個のcurl
を送信するコマンド コンテナにリクエストし、新しいログを反映するためにログヒストグラムがどのように変化するかを観察します。 -
ダッシュボードをクリックします 左側のサイドバーでもう一度クリックして、ダッシュボードの選択画面に入ります。検索バーで「nginx」を検索します。
-
[FilebeatNginx]アクセスとエラーログをクリックします リンク。nginxアクティビティに関する多数の視覚化を含むダッシュボードが表示されます。
追加モジュール
このチュートリアルでは、ログファイルのパスや構成を明示的に構成しなくても、FilebeatとMetricbeatがコンテナのメトリックとログを自動的にキャプチャする方法を示しました。ここに示されているnginxの例に加えて、以下に提供される追加のリンクは、他のサービスのためにFilebeatおよびMetricbeatにロードできる他のモジュールを列挙しています。
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- ファイルビートモジュール
- Metricbeatモジュール
- 弾性コンテナの監視
- Dockerコマンドラインリファレンス