一般的なELKスタックの問題をトラブルシューティングする方法

提供:Dev Guides
移動先:案内検索

序章

このチュートリアルは、ELK Stack(Elasticsearch、Logstash、Kibana)のトラブルシューティングガイドです。 Ubuntu 14.04 チュートリアルにElasticsearch、Logstash、および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?

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

「マッピングをフェッチできません」は、Elasticsearchにデフォルトのlogstash-*パターンに一致するエントリが含まれていないことを示します。 通常、これは、LogstashからElasticsearchへの通信の問題、および/またはログシッパーからの通信の問題が原因で、ログがElasticsearchに保存されていないことを意味します(例: Filebeat)をLogstashに。 つまり、何らかの理由で、ログがFilebeatからLogstash、Elasticsearchへのチェーンを通過していません。

LogstashとElasticsearch間の通信の問題を解決するには、Logstashのトラブルシューティングセクションを実行してください。 FilebeatとLogstash間の通信の問題を解決するには、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
...

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

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

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

たとえば、Elasticsearchがポート9200localhostで実行されている場合は、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

サービスが実行されていない、または認識されていないことが報告された場合は、ELKスタックチュートリアルのInstallNginxセクションの手順に従って問題を解決してください。 サービスが実行中であることが報告された場合は、同じ手順に従ってNginxを再構成する必要があります。

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

Kibanaにアクセスできず、502 Bad Gatewayエラーが発生した場合、Nginxは実行されていますが、Kibanaに接続できません。

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

sudo service kibana status

Kibanaが実行されていないか認識されない場合は、ELKスタックチュートリアルのKibanaのインストールセクションの指示に従ってください。

それでも問題が解決しない場合は、Nginxの構成に問題がある可能性があります。 ELKスタックチュートリアルのInstallNginxセクションの構成部分を確認する必要があります。 Nginxエラーログで手がかりを確認できます。

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

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

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

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

最近の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 kibanaadmin

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

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 kibanaadmin

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

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

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/01-lumberjack-input.conf

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

次に、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キーファイル(生成する)があり、適切な場所(/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=>[ruby-backtrace-info-here], :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 => ["localhost:9200"]行が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が実行されていない場合は、いくつかの原因が考えられます。 このセクションでは、Filebeatの実行に失敗するさまざまな一般的なケースについて説明し、考えられる解決策を提案します。

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

/etc/filebeat/filebeat.ymlにある構成ファイルにFilebeatにエラーがある場合、サービスは正しく開始できません。 次のようなエラーですぐに終了します。

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

この場合、構成ファイルにタイプミスがあります。 この問題を解決するには、Filebeat構成の問題のある部分を編集します。 ガイダンスについては、ELKスタックチュートリアルのファイルビートのセットアップ(クライアントサーバーの追加))のファイルビートの構成サブセクションに従ってください。

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ファイルが適切な場所にないことを示しています。 この問題を解決するには、ELKスタックチュートリアルのファイルビートの設定(クライアントサーバーの追加)セクションの該当するサブセクションに従って、SSL証明書をELKサーバーからクライアントマシンにコピーします。

適切な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")

エラーメッセージは、証明書は存在するが無効であることを示していることに注意してください。 この場合、ELKスタックチュートリアルの SSL証明書の生成セクションに従って、SSL証明書をクライアントマシンにコピーする必要があります( Filebeatのセットアップ(クライアントサーバーの追加)) 。

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

sudo service logstash restart

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

sudo service filebeat start

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

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

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

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

sudo vi /etc/filebeat/filebeat.yml

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

sudo service filebeat restart

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

一般的なファイルビートのガイダンスについては、ELKスタックチュートリアルのファイルビートのセットアップ(クライアントサーバーの追加)ファイルビートの構成サブセクションに従ってください。

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にリクエストを送信したり、Elasticsearchから有用な情報を取得したりできます。

このコマンドでcurlを使用してHTTPGETリクエストを送信します(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の起動時に生成されるログを確認します。

エラーまたは例外を示すログエントリが表示された場合(例: ERRORException、またはerror)、エラーの原因を示す行を見つけてください。 以下は、Elasticsearchnetwork.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: incorrect_hostname: unknown error
...

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

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

sudo vi /etc/elasticsearch/elasticsearch.yml

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

/etc/elasticsearch/elasticsearch.ymlの抜粋

...
network.host: localhost
...

保存して終了。

次に、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スタックのセットアップで発生していた問題の解決に役立つことを願っています。 ご質問やご提案がございましたら、下のコメント欄にご記入ください。