前書き

このチュートリアルは、ELKスタック(Elasticsearch、Logstash、Kibana)のトラブルシューティングガイドです。 Elasticsearchのインストール方法、Logstash、およびUbuntu 14.04上のKibana(ELKスタック)チュートリアルが、他の一般的なELKセットアップのトラブルシューティングに役立つ場合があります。

このチュートリアルは、ELKスタックのさまざまなコンポーネントが適切に機能していることを確認するための手順とともに、一連の一般的な問題、およびこれらの問題に対する潜在的な解決策として構成されています。 そのため、発生している問題に関連するセクションに自由にジャンプしてください。

問題:Kibanaにデフォルトのインデックスパターン警告がない

Webブラウザー経由でKibanaにアクセスすると、次の警告のページが表示される場合があります。

Kibana warning:Warning No default index pattern. You must select or create one to continue.
...
Unable to fetch mapping. Do you have indices matching the pattern?

以下は警告のスクリーンショットです。

image:https://assets.digitalocean.com/articles/elk/troubleshoot-no-default-index-pattern.png [警告:デフォルトのインデックスパターンはありません。 続行するには、選択または作成する必要があります。]

「マッピングを取得できません」は、Elasticsearchにデフォルトの `+ logstash-* +`パターンに一致するエントリが含まれていないことを示します。 通常、これは、LogstashからElasticsearchへの通信の問題、および/またはログ配送業者(たとえば、 Filebeat)からLogstashへ。 言い換えれば、ログは何らかの理由でFilebeatからLogstash、Elasticsearchへのチェーンを通過していません。

画像:https://assets.digitalocean.com/articles/elk/elk-infrastructure.png [ELKスタック]

LogstashとElasticsearch間の通信の問題を解決するには、https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-elk-stack-issues#logstash-how-to-check-if- it-is-isunning [Logstashトラブルシューティング]セクション。 FilebeatとLogstash間の通信の問題を解決するには、https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-elk-stack-issues#filebeat-how-to-check-if- it-is-running [Filebeatトラブルシューティング]セクション。

デフォルト以外のインデックスパターンを使用するようにLogstashを構成した場合、テキストボックスに適切なインデックスパターンを指定することで問題を解決できます。

問題:KibanaがElasticsearchに接続できない

Webブラウザー経由でKibanaにアクセスすると、次のエラーのあるページが表示される場合があります。

Kibana error:Fatal Error
Kibana: Unable to connect to Elasticsearch

Error: Unable to connect to Elasticsearch
Error: Bad Gateway
...

エラーのスクリーンショットは次のとおりです。

image:https://assets.digitalocean.com/articles/elk/troubleshoot-unable-connect-elasticsearch.png [Elasticsearchに接続できません]

つまり、KibanaはElasticsearchに接続できません。 Elasticsearchが実行されていないか、Kibanaが間違ったホストとポートでElasticsearchを探すように構成されている可能性があります。

この問題を解決するには、Elasticsearchのトラブルシューティングセクションに従ってElasticsearchが実行されていることを確認してください。 次に、Elasticsearchが実行されているホストとポートに接続するようにKibanaが構成されていることを確認します。

たとえば、Elasticsearchがポート「9200」の「+ localhost +」で実行されている場合、Kibanaが適切に設定されていることを確認してください。

Kibana構成ファイルを開きます。

sudo vi /opt/kibana/config/kibana.yml

次に、 `+ elasticsearch_url +`が適切に設定されていることを確認します。

/opt/kibana/config/kibana.yml excerpt:# The Elasticsearch instance to use for all your queries.
elasticsearch_url: "http://localhost:9200"

保存して終了。

次に、Kibanaサービスを再起動して、変更を所定の場所に配置します。

sudo service kibana restart

Kibanaが再起動したら、WebブラウザーでKibanaを開き、エラーが解決されたことを確認します。

問題:Kibanaにアクセスできない

ELKスタックのNginxコンポーネントは、Kibanaのリバースプロキシとして機能します。 Nginxが実行されていないか、適切に構成されていない場合、Kibanaインターフェイスにアクセスできません。 ただし、残りのELKコンポーネントはNginxに依存していないため、正常に機能している可能性があります。

原因:Nginxが実行されていません

Nginxが実行されていない場合、WebブラウザーでELKスタックにアクセスしようとすると、次のようなエラーが表示される場合があります。

Nginx Error:This webpage is not available
ERR_CONNECTION_REFUSED

これは通常、Nginxが実行されていないことを示しています。

次のコマンドを使用して、Nginxサービスのステータスを確認できます。

sudo service nginx status

サービスが実行されていない、または認識されていないことが報告された場合は、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-の指示に従って問題を解決しますELKスタックチュートリアルのelk-stack-on-ubuntu-14-04#install-nginx [Install Nginx section]。 サービスが実行されていると報告された場合は、同じ手順に従ってNginxを再構成する必要があります。

原因:Nginxは実行されていますが、Kibanaに接続できません

Kibanaにアクセスできず、「+ 502 Bad Gateway」エラーを受け取った場合、Nginxは実行されていますが、Kibanaに接続できません。

画像:https://assets.digitalocean.com/articles/elk/troubleshoot-nginx-502.png [Nginx 502 Bad Gateway]

この問題を解決する最初のステップは、このコマンドでKibanaが実行されているかどうかを確認することです。

sudo service kibana status

Kibanaが実行されていないか認識されない場合は、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntuの指示に従ってください-14-04#install-kibana [ELKスタックチュートリアルのKibanaのインストールセクション]。

それでも問題が解決しない場合は、Nginxの設定に問題がある可能性があります。 https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04#install-の構成部分を確認する必要があります。 ELKスタックチュートリアルのnginx [Install Nginx section]。 Nginxエラーログで手がかりを確認できます。

sudo tail /var/log/nginx/error.log

これにより、NginxがKibanaに接続できない理由が正確にわかります。

原因:ユーザーを認証できません

基本認証が有効になっていて、認証手順を渡すのに問題がある場合は、Nginxエラーログを調べて問題の詳細を確認する必要があります。

image:https://assets.digitalocean.com/articles/elk/troubleshoot-unable-to-authenticate.png [認証が必要]

最近のNginxエラーを確認するには、次のコマンドを使用します。

sudo tail /var/log/nginx/error.log

「+ user was not found」エラーが表示された場合、ユーザーは「+ htpasswd」ファイルに存在していません。 このタイプのエラーは、次のログエントリによって示されます。

Nginx error logs (user was not found):2015/10/26 12:11:57 [error] 3933#0: *242 user "NonExistentUser" was not found in "/etc/nginx/htpasswd.users", client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

「+ password mismatch +」エラーが表示される場合、ユーザーは存在しますが、間違ったパスワードを指定しました。 このタイプのエラーは、次のログエントリによって示されます。

Nginx error logs (user password mismatch):2015/10/26 12:12:56 [error] 3933#0: *242 user "kibanaadmin": password mismatch, client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

これら2つのエラーの解決策は、適切なログイン情報を提供するか、既存の `+ htpasswd `ファイルを、存在するはずのユーザーログインで変更することです。 たとえば、 ` htpasswd.users `ファイルで ` kibanaadmin +`というユーザーを作成または上書きするには、次のコマンドを使用します。

sudo htpasswd /etc/nginx/htpasswd.users

次に、目的のパスワードを入力して確認します。

+ No such file or directory`エラーが表示される場合、Nginx設定で指定されている + htpasswd`ファイルは存在しません。 このタイプのエラーは、次のログエントリによって示されます。

Nginx error logs (htpasswd file does not exist):2015/10/26 12:17:38 [error] 3933#0: *266 open() "/etc/nginx/htpasswd.users" failed (2: No such file or directory), client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

ここでは、次のコマンドを使用して、新しい + / etc / nginx / htpasswd.users +`ファイルを作成し、ユーザー(この例では `+ kibanaadmin +)を追加する必要があります。

sudo htpasswd -c /etc/nginx/htpasswd.users

新しいパスワードを入力して確認します。

次に、作成したユーザーとして認証を試みます。

Logstash:実行中かどうかを確認する方法

Logstashが実行されていない場合、Filebeatなどのログ配送業者からログを受信して​​解析し、処理されたログをElasticsearchに保存することはできません。 このセクションでは、Logstashが正常に機能しているかどうかを確認する方法を示します。

サービスが実行されていることを確認

確認する最も基本的なことは、Logstashステータスのステータスです。

sudo service logstash status

Logstashが実行されている場合、次の出力が表示されます。

Logstash status (OK):logstash is running

それ以外の場合、サービスが実行されていない場合、次のメッセージが表示されます。

Logstash status (Bad):logstash is not running

Logstashが実行されていない場合は、次のコマンドで起動してみてください。

sudo service logstash start

次に、数秒後にステータスを再度確認します。 LogstashはJavaアプリケーションであり、起動を試みるたびに数秒間「実行中」と報告されるため、「非実行」ステータスを確認する前に数秒間待つことが重要です。 「実行されていない」と報告された場合は、おそらく設定が間違っています。 次の2つのセクションでは、Logstashの一般的な問題のトラブルシューティングについて説明します。

問題:Logstashが実行されていません

Logstashが実行されていない場合、いくつかの原因が考えられます。 このセクションでは、Logstashの実行に失敗するさまざまな一般的なケースを取り上げ、潜在的なソリューションを提案します。

原因:構成に構文エラーが含まれています

Logstashの設定ファイル( `+ / etc / logstash / conf.d +`ディレクトリにある)にエラーがある場合、サービスは適切に開始できません。 最善の方法は、Logstashのログをチェックして、失敗の原因を突き止めることです。

サーバーへの2つのターミナルセッションを開きます。これにより、サービスを開始するときにLogstashログを表示できます。

最初のターミナルセッションでは、ログを確認します。

tail -f /var/log/logstash/logstash.log

これにより、最後のいくつかのログエントリに加えて、将来のログエントリが表示されます。

2番目のターミナルセッションで、Logstashサービスを開始してみてください。

sudo service logstash start

最初のターミナルセッションに戻り、Logstashの起動時に生成されるログを確認します。

エラーメッセージを含むログエントリが表示された場合は、メッセージを読んで、問題の原因を突き止めてください。 Logstash構成に構文エラー(中括弧の不一致)がある場合に表示される可能性のあるエラーログの例を次に示します。

Logstash logs (Syntax error):...
{:timestamp=>"2015-10-28T11:51:09.205000-0400", :message=>"Error: Expected one of #, => at line 12, column 6 (byte 209) after input {\n  lumberjack {\n    port => 5043\n    type => \"logs\"\n    ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n    ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n  \n}\n\n\nfilter {\n  if "}
{:timestamp=>"2015-10-28T11:51:09.228000-0400", :message=>"You may be interested in the '--configtest' flag which you can\nuse to validate logstash's configuration before you choose\nto restart a running system."}

構成の検証に関心がある可能性があることを示す最後のメッセージは、構成に構文エラーが含まれていることを示しています。 前のメッセージは、より具体的なエラーメッセージを提供します。この場合、設定の `+ input +`セクションに閉じ中括弧がありません。 この問題を解決するには、Logstash構成の問題のある部分を編集します。

sudo vi /etc/logstash/conf.d/

不良エントリのある行を見つけて修正し、保存して終了します。

次に、2番目のターミナルでLogstashサービスを開始します。

sudo service logstash start

問題が解決した場合、新しいログエントリはありません(Logstashは起動の成功を記録しません)。 数秒後、Logstashサービスのステータスを確認します。

sudo service logstash status

実行されている場合、問題は解決しています。

この例とは異なる構成の問題がある可能性があります。 その他の一般的なLogstash構成の問題についても説明します。 いつものように、エラーの意味を理解できる場合は、自分で修正してみてください。

原因:SSLファイルが存在しない

Logstashが実行されないもう1つの一般的な原因は、SSL証明書とキーファイルの問題です。 たとえば、Logstash構成で指定されている場所に存在しない場合、ログには次のようなエラーが表示されます。

Logstash logs (SSL key file does not exist):{:timestamp=>"2017-12-01T16:51:31.656000+0000", :message=>"Invalid setting for beats input plugin:\n\n  input {\n    beats {\n      # This setting must be a path\n      # File does not exist or cannot be opened /etc/pki/tls/certs/logstash-forwarder.crt\n      ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n      ...\n    }\n  }", :level=>:error}
{:timestamp=>"2017-12-01T16:51:31.671000+0000", :message=>"Invalid setting for beats input plugin:\n\n  input {\n    beats {\n      # This setting must be a path\n      # File does not exist or cannot be opened /etc/pki/tls/private/logstash-forwarder.key\n      ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n      ...\n    }\n  }", :level=>:error}
{:timestamp=>"2017-12-01T16:51:31.685000+0000", :message=>"Error: Something is wrong with your configuration.", :level=>:error}

この特定の問題を解決するには、SSLキーファイル(https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-onがあることを確認する必要があります-ubuntu-14-04#generate-ssl-certificates [生成する]を忘れた場合)、適切な場所( `+ / etc / pki / tls / private / logstash-forwarder.key +`に配置されていること)例では)。 すでにキーファイルがある場合は、それを適切な場所に移動し、Logstash構成がそれを指していることを確認してください。

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

sudo service logstash start

問題が解決した場合、新しいログエントリはありません。 数秒後、Logstashサービスのステータスを確認します。

sudo service logstash status

実行されている場合、問題は解決しています。

問題:Logstashは実行されているが、Elasticsearchにログを保存しない

Logstashが実行されているがElasticsearchにログを保存していない場合、Elasticsearchに到達できないためです。 通常、これはElasticsearchが実行されていない結果です。 この場合、Logstashログには次のようなエラーメッセージが表示されます。

Logstash logs (Elasticsearch isn't running):{:timestamp=>"2017-12-01T16:53:29.571000+0000", :message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :backtrace=>[], :level=>:error}

この場合、Elasticsearchのトラブルシューティング手順に従って、Elasticsearchが実行されていることを確認してください。

次のようなエラーも表示される場合があります。

Logstash logs (Logstash is configured to send its output to the wrong host):{:timestamp=>"2017-12-01T16:56:26.274000+0000", :message=>"Attempted to send a bulk request to Elasticsearch configured at '[\"http://localhost:9200/\"]', but Elasticsearch appears to be unreachable or down!", :error_message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :client_config=>{:hosts=>["http://localhost:9200/"], :ssl=>nil, :transport_options=>{:socket_timeout=>0, :request_timeout=>0, :proxy=>nil, :ssl=>{}}, :transport_class=>Elasticsearch::Transport::Transport::HTTP::Manticore, :logger=>nil, :tracer=>nil, :reload_connections=>false, :retry_on_failure=>false, :reload_on_failure=>false, :randomize_hosts=>false}, :level=>:error}
{:timestamp=>"2017-12-01T16:57:49.090000+0000", :message=>"SIGTERM received. Shutting down the pipeline.", :level=>:warn}

これは、Logstash構成の「+ output +」セクションが間違ったホストを指している可能性があることを示しています。 この問題を解決するには、Elasticsearchが実行されていることを確認し、Logstashの構成を確認します。

sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

`+ hosts ⇒ [” “] +`行がElasticsearchを実行しているホストを指していることを確認します

Logstash output configuration excerptoutput {
 elasticsearch {
   hosts => ["localhost:9200"]
   sniffing => true
. . .

保存して終了。 この例は、Elasticsearchが `+ localhost +`で実行されていることを前提としています。

Logstashサービスを再起動します。

sudo service logstash restart

次に、Logstashログでエラーを確認します。

Filebeat:実行中かどうかを確認する方法

Filebeatは* Client *マシンで実行され、ログをELKサーバーに送信します。 Filebeatが実行されていない場合、Logstashにさまざまなログを送信することはできません。 その結果、ログはElasticsearchに保存されず、Kibanaには表示されません。 このセクションでは、Filebeatが正常に機能しているかどうかを確認する方法を示します。

ログが正常に出荷されていることを確認する

FilebeatがLogstashにログを適切に送信しているかどうかを確認する最も簡単な方法は、syslogログでFilebeatエラーをチェックすることです。

sudo tail /var/log/syslog | grep filebeat

すべてが適切に設定されていれば、Filebeatプロセスを停止または開始するときにいくつかのログエントリが表示されますが、それ以外は表示されません。

ログエントリが表示されない場合は、Filebeatが実行されていることを確認する必要があります。

サービスが実行されていることを確認

チェックする最も基本的なことはFilebeatのステータスです:

sudo service filebeat status

Filebeatが実行されている場合、次の出力が表示されます。

Output* filebeat is running

それ以外の場合、サービスが実行されていない場合、次のメッセージが表示されます。

Output * filebeat is not running

Filebeatが実行されていない場合は、次のコマンドで起動してみてください。

sudo service filebeat start

次に、ステータスを再度確認します。 これで問題が解決しない場合、以下のセクションはFilebeatの問題のトラブルシューティングに役立ちます。 Filebeatの一般的な問題とその解決方法について説明します。

問題:Filebeatが実行されていません

Filebeatが* client *マシンで実行されていない場合、いくつかの原因が考えられます。 このセクションでは、Filebeatの実行に失敗する一般的なさまざまなケースを取り上げ、潜在的なソリューションを提案します。

原因:構成に構文エラーが含まれています

Filebeatの設定ファイル( `+ / etc / filebeat / filebeat.yml +`にあります)にエラーがある場合、サービスは適切に開始できません。 次のようなエラーですぐに終了します。

OutputLoading config file error: YAML config parsing failed on /etc/filebeat/filebeat.yml: yaml: line 13: could not find expected ':'. Exiting.

この場合、構成ファイルにタイプミスがあります。 この問題を解決するには、Filebeat構成の問題のある部分を編集します。 ガイダンスについては、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-の* Configure Filebeat *サブセクションに従ってくださいELKスタックチュートリアルの04#set-up-filebeat-(add-client-servers)[Filebeatの設定(クライアントサーバーの追加)])。

Filebeat構成を編集した後、サービスの再起動を試みます。

sudo service filebeat start

エラー出力が表示されない場合、問題は解決されています。

原因:SSL証明書が見つからないか無効です

FilebeatとLogstash間の通信には、認証と暗号化のためにSSL証明書が必要です。 Filebeatが正常に起動しない場合は、syslogで次のようなエラーを確認する必要があります。

OutputError Initialising publisher: open /etc/pki/tls/certs/logstash-forwarder.crt: no such file or directory

これは、 `+ logstash-forwarder.crt +`ファイルが適切な場所にないことを示しています。 この問題を解決するには、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-の該当するサブセクションに従って、SSL証明書をELKサーバーからクライアントマシンにコピーしますELKスタックチュートリアルのkibana-elk-stack-on-ubuntu-14-04#set-up-filebeat-(add-client-servers)[Filebeatの設定(クライアントサーバーの追加)セクション]。

適切なSSL証明書ファイルを適切な場所に配置した後、Filebeatを再度起動してください。

SSL証明書が無効な場合、ログは次のようになります。

syslog (Certificate is invalid):transport.go:125: SSL client failed to connect with: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "elk.example.com")

エラーメッセージは、証明書は存在するが無効であることを示していることに注意してください。 この場合、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04#generateに従う必要があります-ssl-certificates [ELKスタックチュートリアルのSSL証明書の生成]セクション、SSL証明書をクライアントマシンにコピー(https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash- and-kibana-elk-stack-on-ubuntu-14-04#set-up-filebeat-(add-client-servers)[Filebeatのセットアップ(クライアントサーバーの追加)])。

証明書が有効であり、適切な場所にあることを確認した後、Logstash(ELKサーバー上)を再起動して、新しいSSLキーを強制的に使用する必要があります。

sudo service logstash restart

次に、クライアントマシンでFilebeatを起動します。

sudo service filebeat start

ログを再度チェックして、問題が解決されたことを確認してください。

問題:FilebeatがLogstashに接続できない

(ELKサーバー上の)LogstashがFilebeat(クライアントサーバー)から到達できない場合、次のようなエラーログエントリが表示されます。

syslog  (Connection refused):transport.go:125: SSL client failed to connect with: dial tcp 203.0.113.4:5044: getsockopt: connection refused

Logstashに到達できない一般的な理由には、次のものがあります。

  • Logstashが実行されていません(ELKサーバー上)

  • いずれかのサーバーのファイアウォールがポート `+ 5043 +`の接続をブロックしています

  • Filebeatが適切なIPアドレス、ホスト名、またはポートで構成されていません

この問題を解決するには、まずこのガイドのLogstashトラブルシューティングセクションに従って、ELKサーバーでLogstashが実行されていることを確認します。 次に、ファイアウォールがネットワークトラフィックをブロックしていないことを確認します。 3番目に、Filebeatが正しいIPアドレス(またはホスト名)とELKサーバーのポートで構成されていることを確認します。

Filebeatの構成は、次のコマンドで編集できます。

sudo vi /etc/filebeat/filebeat.yml

Logstash接続情報が正しいことを確認した後、Filebeatを再起動してください。

sudo service filebeat restart

Filebeatログを再度チェックして、問題が解決されたことを確認します。

一般的なFilebeatガイダンスについては、https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-の* Configure Filebeat *サブセクションに従ってください。 ELKスタックチュートリアルの14-04#set-up-filebeat-(add-client-servers)[Filebeatの設定(クライアントサーバーの追加)]。

Elasticsearch:実行中かどうかを確認する方法

Elasticsearchが実行されていない場合、ELKスタックは機能しません。 Logstashは新しいログをElasticsearchに追加できず、Kibanaはレポート用にElasticsearchからログを取得できません。 このセクションでは、Elasticsearchが正常に機能しているかどうかを確認する方法を示します。

サービスが実行されていることを確認

確認する最も基本的なことは、Elasticsearchサービスのステータスです。

sudo service elasticsearch status

Elasticsearchが実行されている場合、次の出力が表示されます。

Elasticsearch status (OK): * elasticsearch is running

それ以外の場合、サービスが実行されていない場合、次のメッセージが表示されます。

Elasticsearch status (Bad): * elasticsearch is not running

この場合、Elasticsearchのトラブルシューティングをカバーする次のセクションに従う必要があります。

HTTPリクエストに応答することを確認します

デフォルトでは、Elasticsearchはポート `+ 9200 `でHTTPリクエストに応答します(これは設定ファイルで新しい ` http.port `値を指定することでカスタマイズできます)。 ` curl +`を使用してリクエストを送信し、Elasticsearchから有用な情報を取得できます。

このコマンドでcurlを使用してHTTP GETリクエストを送信します(Elasticsearchが `+ localhost +`に到達できると仮定):

curl localhost:9200

Elasticsearchが実行されている場合、次のような応答が表示されます。

Output{
 "name" : "Hildegarde",
 "cluster_name" : "elasticsearch",
 "cluster_uuid" : "E8q9kr-0RxycYhSLNx8xeA",
 "version" : {
   "number" : "2.4.6",
   "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd",
   "build_timestamp" : "2017-07-18T12:17:44Z",
   "build_snapshot" : false,
   "lucene_version" : "5.5.4"
 },
 "tagline" : "You Know, for Search"
}

次のコマンドを使用して、Elasticsearchクラスターの状態を確認することもできます。

curl localhost:9200/_cluster/health?pretty

出力は次のようになります。

Output{
 "cluster_name" : "elasticsearch",
 "status" : "yellow",
 "timed_out" : false,
 "number_of_nodes" : 1,
 "number_of_data_nodes" : 1,
 "active_primary_shards" : 6,
 "active_shards" : 6,
 "relocating_shards" : 0,
 "initializing_shards" : 0,
 "unassigned_shards" : 6,
 "delayed_unassigned_shards" : 0,
 "number_of_pending_tasks" : 0,
 "number_of_in_flight_fetch" : 0,
 "task_max_waiting_in_queue_millis" : 0,
 "active_shards_percent_as_number" : 50.0
}

Elasticsearchクラスターが単一ノードで構成されている場合、クラスターはおそらく「+ yellow 」ステータスになります。 これは、単一ノードのクラスターでは正常です。 Elasticsearchクラスターに少なくとも1つ以上のノードを追加することで、「 green +」ステータスにアップグレードできます。

問題:Elasticsearchが実行されていません

Elasticsearchが実行されていない場合、多くの潜在的な原因があります。 このセクションでは、Elasticsearchを実行できないさまざまな一般的なケースを取り上げ、潜在的なソリューションを提案します。

原因:開始されなかった

Elasticsearchが実行されていない場合、そもそも起動されていない可能性があります。 Elasticsearchはインストール後に自動的に開始しません。 これに対する解決策は、最初に手動で起動することです。

sudo service elasticsearch start

これにより、Elasticsearchが起動していることが報告されます。 10秒ほど待ってから、Elasticsearchステータスのステータスを再度確認します。

原因:Elasticsearchサービスが有効になっておらず、サーバーが再起動しました

Elasticsearchは正常に機能していても機能しない場合は、適切に有効にされていない可能性があります。 デフォルトでは、Elasticsearchサービスは起動時に開始できません。Elasticsearchを起動時に自動的に開始するには明示的に有効にする必要があります。

sudo update-rc.d elasticsearch defaults 95 10

Elasticsearchは、ブート時に自動的に開始するはずです。 サーバーを再起動して、動作することをテストします。

原因:Elasticsearchの構成が正しくありません

Elasticsearchの設定ファイル( `+ / etc / elasticsearch / elasticsearch.yml +`にある)にエラーがある場合、サービスは適切に開始できません。 最善の方法は、Elasticsearchエラーログをチェックして、失敗の原因を突き止めることです。

サーバーへの2つのターミナルセッションを開くと、サービスを開始しようとしているときにElasticsearchログを表示できます。

最初のターミナルセッションでは、ログを確認します。

tail -f /var/log/elasticsearch/elasticsearch.log

これにより、最後のいくつかのログエントリに加えて、将来のログエントリが表示されます。

2番目のターミナルセッションで、Elasticsearchサービスを開始してみます。

sudo service elasticsearch start

最初のターミナルセッションに戻り、Elasticsearchの起動時に生成されるログを確認します。

エラーまたは例外を示すログエントリが表示される場合(例: 「+ ERROR」、「+ Exception」、または「+ error」)、エラーの原因を示す行を見つけてみてください。 Elasticsearchの `+ network.host +`が解決できないホスト名またはIPアドレスに設定されている場合に表示されるエラーログの例を次に示します。

Elasticsearch logs (Bad):...
[2015-10-27 15:24:43,495][INFO ][node                     ] [Shadrac] starting ...
[2015-10-27 15:24:43,626][ERROR][bootstrap                ] [Shadrac] Exception
org.elasticsearch.transport.BindTransportException: Failed to resolve host [null]
   at org.elasticsearch.transport.netty.NettyTransport.bindServerBootstrap(NettyTransport.java:402)
   at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:283)
   at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
   at org.elasticsearch.transport.TransportService.doStart(TransportService.java:153)
   at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
   at org.elasticsearch.node.internal.InternalNode.start(InternalNode.java:257)
   at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:160)
   at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:248)
   at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
Caused by: java.net.UnknownHostException: : unknown error
...

サンプルログの最後の行は、 `+ UnknownHostException:`エラーが発生したことを示していることに注意してください。 この特定の例は、「 network.host 」が「 incorrect_hostname 」に設定されていることを示していますが、これは何にも解決されません。 単一ノードのElasticsearchセットアップでは、これを「 localhost 」または「+127.0.0.1」に設定する必要があります。

この問題を解決するには、Elasticsearch構成ファイルを編集します。

sudo vi /etc/elasticsearch/elasticsearch.yml

不良エントリのある行を見つけて修正します。 この例の場合、 `+ network.host:wrong_hostname +`を指定する行を探し、次のように変更する必要があります。

/etc/elasticsearch/elasticsearch.ymlの抜粋

...
network.host:
...

保存して終了。

次に、2番目のターミナルで、Elasticsearchサービスを開始します。

sudo service elasticsearch start

問題が解決した場合、Elasticsearchが開始されたことを示すエラーのないログが表示されます。 これは次のようになります。

Elasticsearch logs (Good):...
[2015-10-27 15:29:21,980][INFO ][node                     ] [Garrison Kane] initializing ...
[2015-10-27 15:29:22,084][INFO ][plugins                  ] [Garrison Kane] loaded [], sites []
[2015-10-27 15:29:22,124][INFO ][env                      ] [Garrison Kane] using [1] data paths, mounts [[/ (/dev/vda1)]], net usable_space [52.1gb], net total_space [58.9gb], types [ext4]
[2015-10-27 15:29:24,532][INFO ][node                     ] [Garrison Kane] initialized
[2015-10-27 15:29:24,533][INFO ][node                     ] [Garrison Kane] starting ...
[2015-10-27 15:29:24,646][INFO ][transport                ] [Garrison Kane] bound_address {inet[/127.0.0.1:9300]}, publish_address {inet[localhost/127.0.0.1:9300]}
[2015-10-27 15:29:24,682][INFO ][discovery                ] [Garrison Kane] elasticsearch/WJvkRFnbQ5mLTgOatk0afQ
[2015-10-27 15:29:28,460][INFO ][cluster.service          ] [Garrison Kane] new_master [Garrison Kane][WJvkRFnbQ5mLTgOatk0afQ][elk-run][inet[localhost/127.0.0.1:9300]], reason: zen-disco-join (elected_as_master)
[2015-10-27 15:29:28,561][INFO ][http                     ] [Garrison Kane] bound_address {inet[/127.0.0.1:9200]}, publish_address {inet[localhost/127.0.0.1:9200]}
[2015-10-27 15:29:28,562][INFO ][node                     ] [Garrison Kane] started
...

これで、Elasticsearchのステータスを確認すると、正常に実行されていることがわかります。

この例とは異なる構成の問題がある可能性があります。 エラーの意味を理解できる場合は、自分で試して修正してください。 それが失敗した場合は、サーバー固有の情報を含まない個々のエラー行をインターネットで検索してみてください(例: IPアドレス、または自動生成されたElasticsearchノード名)。

結論

このトラブルシューティングガイドが、ELKスタックのセットアップに関する問題の解決に役立つことを願っています。 ご質問やご提案がありましたら、下のコメントに残してください!