序章
このチュートリアルは、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がで実行されている場合 localhost
ポートで 9200
、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
存在すると予想されるユーザーログインを含むファイル。 たとえば、というユーザーを作成または上書きするには kibanaadmin
の中に htpasswd.users
ファイルの場合、次のコマンドを使用します。
- sudo htpasswd /etc/nginx/htpasswd.users kibanaadmin
次に、希望のパスワードを入力して確認します。
あなたが見たら No such file or directory
エラー、 htpasswd
Nginx構成で指定されたファイルが存在しません。 このタイプのエラーは、次のログエントリによって示されます。
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}
これは、 output
Logstash構成のセクションが間違ったホストを指している可能性があります。 この問題を解決するには、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の実行に失敗するさまざまな一般的なケースについて説明し、考えられる解決策を提案します。
原因:構成に構文エラーが含まれています
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構成の問題のある部分を編集します。 ガイダンスについては、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はポートでHTTPリクエストに応答します 9200
(これは、構成ファイルで、新しいを指定することによってカスタマイズできます 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
状態。 これは、単一ノードクラスターでは正常です。 あなたはにアップグレードすることができます green
Elasticsearchクラスターに少なくとももう1つのノードを追加してステータスを確認します。
問題: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: incorrect_hostname: unknown error
...
サンプルログの最後の行は、 UnknownHostException: incorrect_hostname
エラーが発生しました。 この特定の例は、 network.host
に設定されています incorrect_hostname
、これは何にも解決されません。 シングルノードのElasticsearchセットアップでは、これを次のように設定する必要があります localhost
また 127.0.0.1
.
この問題を解決するには、Elasticsearch構成ファイルを編集します。
- sudo vi /etc/elasticsearch/elasticsearch.yml
不正なエントリがある行を見つけて修正します。 この例の場合、次のように指定する行を探す必要があります network.host: incorrect_hostname
次のように変更します。
...
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スタックのセットアップで発生していた問題の解決に役立つことを願っています。 ご質問やご提案がございましたら、下のコメント欄にご記入ください。