在我们的一个节点上运行Chef-client时,我们在Synchronizing Cookbooks:
的结尾处收到一条错误消息,说
Error Syncing Cookbooks:
,没有其他消息。我们该怎么做才能进一步诊断此错误?
答案 0 :(得分:0)
您可以先在-l debug
运行中添加chef-client
标志。这会将调试级别日志记录写入/var/log/chef/client.log
例如:
[2019-02-22T19:16:16+00:00] DEBUG: HTTP 1.1 404 Not Found
由于此404错误意味着在服务器上找不到文件,因此我们可以登录到Chef-server并查看哪些文件不可用。
在厨师服务器上运行chef-server-ctl tail
,以尾随来自所有正在运行的服务的日志。再次在客户端上运行chef-client
,您将在厨师服务器上收到更多消息。
这是nginx access.log中的一个示例:
==> /var/log/opscode/nginx/access.log <==
[22/Feb/2019:21:25:06 +0000] "GET /bookshelf/organization-c1573b41a76ea22b9eb7c36d939fcad4/checksum-bfacb2422a1078b91660f763f0842e8d HTTP/1.1" 404 "0.002" 173 "-" "Chef Client/12.19.36 (ruby-2.3.1-p112; ohai-8.23.0; x86_64-linux; +https://chef.io)" "127.0.0.1:4321" "404" "0.002" "12.19.36" "algorithm=sha1;version=1.1;" "dev" "2019-02-22T21:25:06Z" "" 1265
这使我们知道书架中的特定校验和丢失。没有简单的方法可以将其与相应的食谱相关联,但是您可以进行psql数据库查询,以确定哪个食谱导致了问题。
从chef-server.rb文件cat /etc/opscode/chef-server.rb
使用404错误消息行中的校验和进行psql查询:
select name from cookbooks, cookbook_versions, cookbook_version_checksums
where cookbooks.id = cookbook_versions.cookbook_id and
cookbook_versions.id = cookbook_version_checksums.cookbook_version_id and
checksum = 'bfacb2422a1078b91660f763f0842e8d';
现在有了菜谱名称,我们可以增加菜谱版本号并将其重新上传到厨师服务器。然后,客户端可以找到新的食谱版本,并解决了404错误。