For example, after I run a knife command of 'knife cookbook upload cookbook_name' from a chef workstation or somewhere, where can I find the history or log about who sent the knife command and when, and what the command is? I need to monitor all the knife behaviors on the chef server side centrally.. How to do that?
Unfortunately this information isn't logged by Chef. There might be some partial logs of what happened and when in
/var/log/chef/chef-server.log
file but in general there isn't much in the way of auditing and logging at the level of API calls.It's a bit of a shame, as sometimes it would be very handy to know who did what and when, especially when troubleshooting some existing Chef problem or during a post-mortem.
Chef server is a Rack application though, so it should be possible to use some rack middleware to do some more serious logging.