Skip to content

Commit 22a3d9a

Browse files
committed
Separate stdout and stderr logs for event handler execution
This to avoid to have unexpected interleaved stream of stdout and stderr Signed-off-by: Luca Carrogu <[email protected]>
1 parent 49f8092 commit 22a3d9a

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

attributes/default.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@
132132
# BYOS event handler
133133
default['cluster']['scheduler_plugin']['home'] = '/home/pcluster-scheduler-plugin'
134134
default['cluster']['scheduler_plugin']['handler_dir'] = '/home/pcluster-scheduler-plugin/.parallelcluster'
135-
default['cluster']['scheduler_plugin']['handler_log'] = '/var/log/parallelcluster/scheduler-plugin.log'
135+
default['cluster']['scheduler_plugin']['handler_log_out'] = '/var/log/parallelcluster/scheduler-plugin.out.log'
136+
default['cluster']['scheduler_plugin']['handler_log_err'] = '/var/log/parallelcluster/scheduler-plugin.err.log'
136137
default['cluster']['scheduler_plugin']['shared_dir'] = "#{node['cluster']['shared_dir']}/scheduler-plugin"
137138
default['cluster']['scheduler_plugin']['local_dir'] = "#{node['cluster']['base_dir']}/scheduler-plugin"
138139
default['cluster']['scheduler_plugin']['scheduler_plugin_substack_outputs_path'] = "#{node['cluster']['shared_dir']}/scheduler-plugin-substack-outputs.json"

cookbooks/aws-parallelcluster-config/files/default/cloudwatch_agent/cloudwatch_log_files.json

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,26 @@
411411
},
412412
{
413413
"timestamp_format_key": "default",
414-
"file_path": "/var/log/parallelcluster/scheduler-plugin.log",
415-
"log_stream_name": "scheduler-plugin",
414+
"file_path": "/var/log/parallelcluster/scheduler-plugin.out.log",
415+
"log_stream_name": "scheduler-plugin-out",
416+
"schedulers": [
417+
"plugin"
418+
],
419+
"platforms": [
420+
"centos",
421+
"ubuntu",
422+
"amazon"
423+
],
424+
"node_roles": [
425+
"ComputeFleet",
426+
"HeadNode"
427+
],
428+
"feature_conditions": []
429+
},
430+
{
431+
"timestamp_format_key": "default",
432+
"file_path": "/var/log/parallelcluster/scheduler-plugin.err.log",
433+
"log_stream_name": "scheduler-plugin-err",
416434
"schedulers": [
417435
"plugin"
418436
],

cookbooks/aws-parallelcluster-scheduler-plugin/resources/execute_event_handler.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,25 @@
1717
return
1818
end
1919

20-
event_log = node['cluster']['scheduler_plugin']['handler_log']
20+
event_log_out = node['cluster']['scheduler_plugin']['handler_log_out']
21+
event_log_err = node['cluster']['scheduler_plugin']['handler_log_err']
2122
event_cwd = node['cluster']['scheduler_plugin']['home']
2223
event_user = node['cluster']['scheduler_plugin']['user']
2324
event_timeout = 3600
2425
event_env = build_env
2526
event_log_prefix_error = "%Y-%m-%d %H:%M:%S,000 - [#{new_resource.event_name}] - ERROR:"
2627
event_log_prefix_info = "%Y-%m-%d %H:%M:%S,000 - [#{new_resource.event_name}] - INFO:"
27-
Chef::Log.info("Executing Event #{new_resource.event_name}, with user (#{event_user}), cwd (#{event_cwd}), command (#{new_resource.event_command}), log (#{event_log})")
28+
Chef::Log.info("Executing Event #{new_resource.event_name}, with user (#{event_user}), cwd (#{event_cwd}), command (#{new_resource.event_command}), log out (#{event_log_out}), log err (#{event_log_err})")
2829
# shellout https://github.com/chef/mixlib-shellout
2930
# switch stderr/stdout with (2>&1 1>&3-), process error (now on stdout), switch back stdout/stderr with (3>&1 1>&2) and then process output
30-
event_command = Shellwords.escape("set -o pipefail; { (#{new_resource.event_command}) 2>&1 1>&3- | ts '#{event_log_prefix_error}' | tee -a #{event_log}; } " \
31-
"3>&1 1>&2 | ts '#{event_log_prefix_info}' | tee -a #{event_log}")
31+
event_command = Shellwords.escape("set -o pipefail; { (#{new_resource.event_command}) 2>&1 1>&3- | ts '#{event_log_prefix_error}' | tee -a #{event_log_err}; } " \
32+
"3>&1 1>&2 | ts '#{event_log_prefix_info}' | tee -a #{event_log_out}")
3233
cmd = Mixlib::ShellOut.new("/bin/bash -c #{event_command}", user: event_user, group: event_user, login: true, env: event_env, cwd: event_cwd, timeout: event_timeout)
3334
cmd.run_command
3435

3536
if cmd.error?
3637
raise "Expected Event #{new_resource.event_name} to exit with #{cmd.valid_exit_codes.inspect}," \
37-
" but received '#{cmd.exitstatus}', complete log in #{event_log}\n #{format_stderr(cmd)}"
38+
" but received '#{cmd.exitstatus}', complete log info in #{event_log_out} and error in #{event_log_err}\n #{format_stderr(cmd)}"
3839
end
3940
end
4041

0 commit comments

Comments
 (0)