Chef ログ - AWS OpsWorks

Chef ログ

Chef ログは、特にレシピをデバッグする際の主要なトラブルシューティングリソースの 1 つです。AWS OpsWorks スタックは各コマンドの Chef ログをキャプチャし、各インスタンスの最新 30 個のコマンドのログを保持します。実行はデバッグモードであるため、ログには Chef 実行の詳細 (stdoutstderror に送信されたテキストなど) が含まれます。レシピが失敗した場合、ログには Chef スタックトレースが含まれます。

AWS OpsWorks スタックでは、いくつかの方法で Chef ログを表示できます。ログ情報を入手したら、その情報を使用して失敗したレシピをデバッグできます。

注記

SSH を使用してインスタンスに接続し、エージェント CLI の show_log コマンドを実行することで、指定したログの末尾を表示することもできます。詳細については、「Chef ログの表示」を参照してください。

コンソールを使用した Chef ログの表示

Chef ログを表示する最も簡単な方法は、インスタンスの詳細ページを参照することです。[Logs] セクションには、各イベントと Execute Recipes コマンドのエントリが含まれています。Configure および Setup の各ライフサイクルイベントに対応する configure コマンドと setup コマンドが含まれた、インスタンスの [Logs] セクションを次に示します。

該当するコマンドの [Log] 列で [show] をクリックすると、対応する Chef ログが表示されます。エラーが発生すると、AWS OpsWorks スタックが自動的にそのエラーのログを開きます。通常、エラーはファイルの末尾にあります。

CLI または API を使用した Chef ログの表示

AWS OpsWorks スタック CLI の describe-commands コマンド、または DescribeCommands API アクションを使用して、Amazon S3 バケットに保存されているログを表示できます。次に、CLI を使用して、指定したインスタンスの現在のログファイルセットを表示する方法を示します。DescribeCommands を使用する場合の手順は基本的にほぼ同じです。

AWS OpsWorks スタックを使用してインスタンスの Chef ログを表示するには

  1. インスタンスの詳細ページを開き、OpsWorks ID 値をコピーします。

  2. 次のように、ID 値を使用して describe-commands CLI コマンドを実行します。

    aws opsworks describe-commands --instance-id 67bf0da2-29ed-4217-990c-d895d51812b9

    このコマンドは、AWS OpsWorks スタックがそのインスタンスで実行した各コマンドの組み込みオブジェクトが新しいものから順に含まれている JSON オブジェクトを返します。Type パラメータには、各組み込みオブジェクトのコマンドタイプ (この例では configure コマンドと setup コマンド) が含まれます。

    { "Commands": [ { "Status": "successful", "CompletedAt": "2013-10-25T19:38:36+00:00", "InstanceId": "67bf0da2-29ed-4217-990c-d895d51812b9", "AcknowledgedAt": "2013-10-25T19:38:24+00:00", "LogUrl": "https://s3.amazonaws.com/prod_stage-log/logs/b6c402df-5c23-45b2-a707-ad20b9c5ae40?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE &Expires=1382731518&Signature=YkqS5IZN2P4wixjHwoC3aCMbn5s%3D&response-cache-control=private&response-content-encoding=gzip&response-content- type=text%2Fplain", "Type": "configure", "CommandId": "b6c402df-5c23-45b2-a707-ad20b9c5ae40", "CreatedAt": "2013-10-25T19:38:11+00:00", "ExitCode": 0 }, { "Status": "successful", "CompletedAt": "2013-10-25T19:31:08+00:00", "InstanceId": "67bf0da2-29ed-4217-990c-d895d51812b9", "AcknowledgedAt": "2013-10-25T19:29:01+00:00", "LogUrl": "https://s3.amazonaws.com/prod_stage-log/logs/2a90e862-f974-42a6-9342-9a4f03468358?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE &Expires=1382731518&Signature=cxKYHO8mCCd4MvOyFb6ywebeQtA%3D&response-cache-control=private&response-content-encoding=gzip&response-content- type=text%2Fplain", "Type": "setup", "CommandId": "2a90e862-f974-42a6-9342-9a4f03468358", "CreatedAt": "2013-10-25T19:26:01+00:00", "ExitCode": 0 } ] }
  3. LogUrl 値をブラウザにコピーしてログを表示します。

インスタンスに数個以上のコマンドがある場合は、describe-commands にパラメータを追加して、応答オブジェクトに含めるコマンドをフィルタできます。詳細については、「describe-commands」を参照してください。

インスタンスの Chef ログの表示

注記

このセクションのトピックは、Chef 12 に適用されます。Chef 11.10 以前リリースの Chef のログの場所については、「Linux 用 Chef 11.10 以前のバージョンのトラブルシューティング」を参照してください。

Linux インスタンス

AWS OpsWorks スタックによって、各インスタンスの Chef ログはそれぞれインスタンスの /var/chef/runs ディレクトリに保存されます。(Linux インスタンスの場合、このディレクトリには、JSON 形式のファイルとして保存される、関連データバッグも含まれます)。 このディレクトリにアクセスするには、sudo 権限が必要です。各実行のログは、個別の実行のサブディレクトリ内にある chef.log という名前のファイルにあります。

AWS OpsWorks スタックによって、内部ログはインスタンスの /var/log/aws/opsworks ディレクトリに保存されます。通常、この情報はトラブルシューティングにはあまり役立ちません。ただし、これらのログは AWS OpsWorks スタックサポートにとって役立ちます。サービスに関する問題が発生した場合に、これらのログの提供を求められることがあります。Linux のログも、トラブルシューティングに役立つデータを提供する場合があります。

Windows インスタンス

エージェントログ

Windows インスタンスでは、OpsWorks のログは次のような ProgramData のパスに保存されます。数値にはタイムスタンプが含まれます。

C:\ProgramData\OpsWorksAgent\var\logs\number
注記

デフォルトでは、ProgramData は非表示フォルダです。非表示を解除するには、[Folder Options] に移動します。[View] で、非表示のファイルを表示するオプションを選択します。

次の例では、エージェントは Windows インスタンスにログオンします。

Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 5/24/2015 11:59 PM 127277 command.20150524.txt -a--- 5/25/2015 11:59 PM 546772 command.20150525.txt -a--- 5/26/2015 11:59 PM 551514 command.20150526.txt -a--- 5/27/2015 9:43 PM 495181 command.20150527.txt -a--- 5/24/2015 11:59 PM 24353 keepalive.20150524.txt -a--- 5/25/2015 11:59 PM 106232 keepalive.20150525.txt -a--- 5/26/2015 11:59 PM 106208 keepalive.20150526.txt -a--- 5/27/2015 8:54 PM 92593 keepalive.20150527.txt -a--- 5/24/2015 7:19 PM 3891 service.20150524.txt -a--- 5/27/2015 8:54 PM 1493 service.20150527.txt -a--- 5/24/2015 11:59 PM 112549 wire.20150524.txt -a--- 5/25/2015 11:59 PM 501501 wire.20150525.txt -a--- 5/26/2015 11:59 PM 499640 wire.20150526.txt -a--- 5/27/2015 8:54 PM 436870 wire.20150527.txt

Chef ログ

Windows インスタンスでは、Chef のログは次のような ProgramData のパスに保存されます。数値にはタイムスタンプが含まれます。

C:\ProgramData\OpsWorksAgent\var\commands\number
注記

このディレクトリには、最初の (OpsWorks が所有する) Chef の実行の出力のみが含まれます。

次の例は、Windows インスタンスで OpsWorks が所有する Chef ログを示しています。

Mode LastWriteTime Name ---- ------------- ---- d---- 5/24/2015 7:23 PM configure-7ecb5f47-7626-439b-877f-5e7cb40ab8be d---- 5/26/2015 8:30 PM configure-8e74223b-d15d-4372-aeea-a87b428ffc2b d---- 5/24/2015 6:34 PM configure-c3980a1c-3d08-46eb-9bae-63514cee194b d---- 5/26/2015 8:32 PM grant_remote_access-70dbf834-1bfa-4fce-b195-e50e85402f4c d---- 5/26/2015 10:30 PM revoke_remote_access-1111fce9-843a-4b27-b93f-ecc7c5e9e05b d---- 5/24/2015 7:21 PM setup-754ec063-8b60-4cd4-b6d7-0e89d7b7aa78 d---- 5/26/2015 8:27 PM setup-af5bed36-5afd-4115-af35-5766f88bc039 d---- 5/24/2015 6:32 PM setup-d8abeffa-24d4-414b-bfb1-4ad07319f358 d---- 5/24/2015 7:13 PM shutdown-c7130435-9b5c-4a95-be17-6b988fc6cf9a d---- 5/26/2015 8:25 PM sync_remote_users-64c79bdc-1f6f-4517-865b-23d2def4180c d---- 5/26/2015 8:48 PM update_custom_cookbooks-2cc59a94-315b-414d-85eb-2bdea6d76c6a

ユーザーの Chef ログ

Chef の実行ログは、次の図のように、番号が付けられた Chef コマンドに関連する名前のフォルダの、logfile.txt という名前のファイルにあります。

C:/chef └── runs └── command-12345 ├── attribs.json ├── client.rb └── logfile.txt

Chef ログの解釈

ほとんどの場合、ログの先頭には内部 Chef ログが含まれています。

# Logfile created on Thu Oct 17 17:25:12 +0000 2013 by logger.rb/1.2.6 [2013-10-17T17:25:12+00:00] INFO: *** Chef 11.4.4 *** [2013-10-17T17:25:13+00:00] DEBUG: Building node object for php-app1.localdomain [2013-10-17T17:25:13+00:00] DEBUG: Extracting run list from JSON attributes provided on command line [2013-10-17T17:25:13+00:00] INFO: Setting the run_list to ["opsworks_custom_cookbooks::load", "opsworks_custom_cookbooks::execute"] from JSON [2013-10-17T17:25:13+00:00] DEBUG: Applying attributes from json file [2013-10-17T17:25:13+00:00] DEBUG: Platform is amazon version 2013.03 [2013-10-17T17:25:13+00:00] INFO: Run List is [recipe[opsworks_custom_cookbooks::load], recipe[opsworks_custom_cookbooks::execute]] [2013-10-17T17:25:13+00:00] INFO: Run List expands to [opsworks_custom_cookbooks::load, opsworks_custom_cookbooks::execute] [2013-10-17T17:25:13+00:00] INFO: Starting Chef Run for php-app1.localdomain [2013-10-17T17:25:13+00:00] INFO: Running start handlers [2013-10-17T17:25:13+00:00] INFO: Start handlers complete. [2013-10-17T17:25:13+00:00] DEBUG: No chefignore file found at /opt/aws/opsworks/releases/20131015111601_209/cookbooks/chefignore no files will be ignored [2013-10-17T17:25:13+00:00] DEBUG: Cookbooks to compile: ["gem_support", "packages", "opsworks_bundler", "opsworks_rubygems", "ruby", "ruby_enterprise", "dependencies", "opsworks_commons", "scm_helper", :opsworks_custom_cookbooks] [2013-10-17T17:25:13+00:00] DEBUG: Loading cookbook gem_support's library file: /opt/aws/opsworks/releases/20131015111601_209/cookbooks/gem_support/libraries/current_gem_version.rb [2013-10-17T17:25:13+00:00] DEBUG: Loading cookbook packages's library file: /opt/aws/opsworks/releases/20131015111601_209/cookbooks/packages/libraries/packages.rb [2013-10-17T17:25:13+00:00] DEBUG: Loading cookbook dependencies's library file: /opt/aws/opsworks/releases/20131015111601_209/cookbooks/dependencies/libraries/current_gem_version.rb [2013-10-17T17:25:13+00:00] DEBUG: Loading cookbook opsworks_commons's library file: /opt/aws/opsworks/releases/20131015111601_209/cookbooks/opsworks_commons/libraries/activesupport_blank.rb [2013-10-17T17:25:13+00:00] DEBUG: Loading cookbook opsworks_commons's library file: /opt/aws/opsworks/releases/20131015111601_209/cookbooks/opsworks_commons/libraries/monkey_patch_chefgem_resource.rb ...

ファイルのこの部分は Chef の専門家に非常に役立ちます。ほとんどのコマンドは多数のレシピに関連していますが、実行リストに含まれるレシピは 2 つに限られます。この 2 つのレシピでは、他のすべての組み込みレシピとカスタムレシピをロードして実行するタスクを処理します。

通常、ファイルで最も関心を引く部分は末尾にあります。実行が正常に終了すると、次のような内容が表示されます。

... [Tue, 11 Jun 2013 16:00:50 +0000] DEBUG: STDERR: [Tue, 11 Jun 2013 16:00:50 +0000] DEBUG: ---- End output of /sbin/service mysqld restart ---- [Tue, 11 Jun 2013 16:00:50 +0000] DEBUG: Ran /sbin/service mysqld restart returned 0 [Tue, 11 Jun 2013 16:00:50 +0000] INFO: service[mysql]: restarted successfully [Tue, 11 Jun 2013 16:00:50 +0000] INFO: Chef Run complete in 84.07096 seconds [Tue, 11 Jun 2013 16:00:50 +0000] INFO: cleaning the checksum cache [Tue, 11 Jun 2013 16:00:50 +0000] DEBUG: removing unused checksum cache file /var/chef/cache/checksums/chef-file--tmp-chef-rendered-template20130611-4899-8wef7e-0 [Tue, 11 Jun 2013 16:00:50 +0000] DEBUG: removing unused checksum cache file /var/chef/cache/checksums/chef-file--tmp-chef-rendered-template20130611-4899-1xpwyb6-0 [Tue, 11 Jun 2013 16:00:50 +0000] DEBUG: removing unused checksum cache file /var/chef/cache/checksums/chef-file--etc-monit-conf [Tue, 11 Jun 2013 16:00:50 +0000] INFO: Running report handlers [Tue, 11 Jun 2013 16:00:50 +0000] INFO: Report handlers complete [Tue, 11 Jun 2013 16:00:50 +0000] DEBUG: Exiting
注記

エージェント CLI を使用して、実行中または実行後にログの末尾を表示できます。詳細については、「Chef ログの表示」を参照してください。

レシピが失敗した場合は、次のように、例外の後に Chef スタックトレースが続く ERROR レベルの出力を探す必要があります。

... Please report any problems with the /usr/scripts/mysqlbug script! [ OK ] MySQL Daemon failed to start. Starting mysqld: [FAILED]STDERR: 130611 15:07:55 [Warning] The syntax '--log-slow-queries' is deprecated and will be removed in a future release. Please use '--slow-query-log'/'--slow-query-log-file' instead. 130611 15:07:56 [Warning] The syntax '--log-slow-queries' is deprecated and will be removed in a future release. Please use '--slow-query-log'/'--slow-query-log-file' instead. ---- End output of /sbin/service mysqld start ---- /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/mixin/command.rb:184:in `handle_command_failures' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/mixin/command.rb:131:in `run_command' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/provider/service/init.rb:37:in `start_service' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/provider/service.rb:60:in `action_start' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource.rb:406:in `send' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource.rb:406:in `run_action' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/runner.rb:53:in `run_action' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/runner.rb:89:in `converge' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/runner.rb:89:in `each' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/runner.rb:89:in `converge' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource_collection.rb:94:in `execute_each_resource' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource_collection/stepable_iterator.rb:116:in `call' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource_collection/stepable_iterator.rb:116:in `call_iterator_block' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource_collection/stepable_iterator.rb:85:in `step' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource_collection/stepable_iterator.rb:104:in `iterate' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource_collection/stepable_iterator.rb:55:in `each_with_index' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/resource_collection.rb:92:in `execute_each_resource' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/runner.rb:84:in `converge' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/client.rb:268:in `converge' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/client.rb:158:in `run' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/application/solo.rb:190:in `run_application' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/application/solo.rb:181:in `loop' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/application/solo.rb:181:in `run_application' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/../lib/chef/application.rb:62:in `run' /opt/aws/opsworks/releases/20130605160141_122/vendor/bundle/ruby/1.8/gems/chef-0.9.15.5/bin/chef-solo:25 /opt/aws/opsworks/current/bin/chef-solo:16:in `load' /opt/aws/opsworks/current/bin/chef-solo:16

ファイルの末尾が Chef スタックトレースです。また、例外の直前の出力も調べる必要があります。この部分には package not available などのシステムエラーが含まれていることが多く、失敗の原因の特定に役立つ場合もあります。この例では、MySQL デーモンの起動に失敗しています。

Chef ログの一般的なエラー

Chef ログの一般的なエラーとその対処方法を以下に示します。

ログは見つかりませんでした

Chef の実行が開始されると、インスタンスは署名済み Amazon S3 URL を受け取ります。この URL により、Chef の実行が終了したときにウェブページでログを表示することができます。この URL は 2 時間で失効するため、Chef の実行に 2 時間以上かかると、Chef の実行中に何も問題が起きていない場合であっても、Amazon S3 サイトにログはアップロードされません。ログを作成するコマンドは成功しますが、ログが表示されるのはインスタンス上だけで、署名済み URL では表示されません。

ログが突然終了する

成功が示されることも、エラー情報が表示されることもなく、Chef ログが突然終了した場合、メモリ不足の状態が発生したために Chef がログを完了できなかったと考えられます。このような場合は、大規模なインスタンスでもう一度試してみてください。

クックブックまたはレシピが見つからない

Chef 実行時にクックブックキャッシュにないクックブックまたはレシピに遭遇した場合、次のような内容が表示されます。

DEBUG: Loading Recipe mycookbook::myrecipe via include_recipe ERROR: Caught exception during execution of custom recipe: mycookbook::myrecipe: Cannot find a cookbook named mycookbook; did you forget to add metadata to a cookbook?

このエントリは、mycookbook というクックブックがクックブックキャッシュにないことを示しています。Chef 11.4 では、metadata.rb で依存関係を正しく宣言していない場合にも、このエラーが発生する可能性があります。

AWS OpsWorks スタックは、インスタンスのクックブックキャッシュからレシピを実行します。インスタンスの起動時に、リポジトリからこのキャッシュにクックブックがダウンロードされます。ただし、その後にリポジトリ内のクックブックを変更しても、オンラインインスタンスのキャッシュが AWS OpsWorks スタックによって自動的に更新されることはありません。インスタンスの起動以降にクックブックの変更や新しいクックブックの追加を行った場合は、次の手順を実行します。

  1. 変更がリポジトリにコミットされていることを確認します。

  2. Update Cookbooks スタックコマンド を実行して、リポジトリの最新バージョンでクックブックキャッシュを更新します。

ローカルコマンドのエラー

Chef の execute リソースが指定されたコマンドを実行できない場合、次のような内容が表示されます。

DEBUG: ---- End output of ./configure --with-config-file-path=/ returned 2 ERROR: execute[PHP: ./configure] (/root/opsworks-agent/site-cookbooks/php-fpm/recipes/install.rb line 48) had an error: ./configure --with-config-file-path=/

ログをスクロールアップすると、コマンドの stderr および stdout 出力が表示されます。これらの出力は、コマンドが失敗した理由を突き止める際に役立ちます。

パッケージのエラー

パッケージのインストールに失敗した場合、次のような内容が表示されます。

ERROR: package[zend-server-ce-php-5.3] (/root/opsworks-agent/site-cookbooks/zend_server/recipes/install.rb line 20) had an error: apt-get -q -y --force-yes install zend-server-ce-php-5.3=5.0.4+b17 returned 100, expected 0

ログをスクロールアップすると、コマンドの STDOUT および STDERROR 出力が表示されます。これらの出力は、パッケージのインストールに失敗した理由を突き止める際に役立ちます。