【发布时间】:2017-11-06 21:22:36
【问题描述】:
我有一个 Splunk 转发器来管理我的生产服务器中的日志,所以我真的只需要将我的节点应用程序的输出放入一个 Splunk 正在监视的文件中。在生产中简单地执行以下操作有什么缺点:
node server.js &> output.log
与使用某种日志记录模块处理节点进程内的日志输出相反...
【问题讨论】:
标签: node.js linux logging production splunk
我有一个 Splunk 转发器来管理我的生产服务器中的日志,所以我真的只需要将我的节点应用程序的输出放入一个 Splunk 正在监视的文件中。在生产中简单地执行以下操作有什么缺点:
node server.js &> output.log
与使用某种日志记录模块处理节点进程内的日志输出相反...
【问题讨论】:
标签: node.js linux logging production splunk
checkout supervisord 这是一个日志记录和保姆工具,它成为进程的父级,例如节点服务器,它可以处理将标准输出和标准错误重定向到您选择的文件......此外它会嗅探异常结束并抛出孩子需要时再处理
这是一个典型的配置文件:/etc/supervisor/conf.d/supervisord.conf
[supervisord]
nodaemon=true
logfile=GKE_MASTER_LOGDIR/supervisord_nodejs_GKE_FLAVOR_USER.log
pidfile=GKE_MASTER_LOGDIR/supervisord_nodejs_GKE_FLAVOR_USER.pid
stdout_logfile_maxbytes = 1MB
stderr_logfile_maxbytes = 1MB
logfile_backups = 50
# loglevel = debug
[program:nodejs]
command=/tmp/boot_nodejs.sh %(ENV_MONGO_SERVICE_HOST)s %(ENV_MONGO_SERVICE_PORT)s
stdout_logfile = GKE_MASTER_LOGDIR/nodejs_GKE_FLAVOR_USER_stdout.log
stderr_logfile = GKE_MASTER_LOGDIR/nodejs_GKE_FLAVOR_USER_stderr.log
stdout_logfile_maxbytes = 1MB
stderr_logfile_maxbytes = 1MB
logfile_backups = 50
autostart = True
autorestart = True
# user = GKE_NON_ROOT_USER
在我的情况下,这一切都发生在 Docker 容器内,所以这里是我的 Dockerfile 的 sn-p,它启动 supervisord,然后启动 nodejs 并这样做将 stdout / err 重定向到基于空间和/或者时间...使用 Docker 与使用 supervisord 是正交的,所以 YMMV
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf" ]
为了下面的完整性,我包含了上面引用的 boot_nodejs.sh
#!/bin/bash
given_mongo_service_host=$1
given_mongo_service_port=$2
current_dir=$(dirname "${BASH_SOURCE}")
current_timestamp="timestamp "$(date '+%Y%m%d_%H%M%S_%Z')
echo
echo "______________ fresh nodejs server bounce ______________ $current_timestamp"
echo
# ............... now output same to standard error so its log gets the hat tip
(>&2 echo )
(>&2 echo "______________ fresh nodejs server bounce ______________ $current_timestamp" )
(>&2 echo )
# ................
export MONGO_URL=mongodb://$given_mongo_service_host:$given_mongo_service_port
type node
node main.js
【讨论】:
&>(强调&)会同时捕获标准输出和标准错误。在我的本地测试中,情况似乎如此。我错过了什么吗?我对系统管理员的了解有点有限,如果可以的话,请详细说明。
将输出重定向到日志文件没有问题。在很多方面,这是更可取的。
当您的应用程序复杂且需要大量日志配置(可能写入多个日志文件)时,让您的应用程序直接写入日志会更有用。我所做的是使用 Winston 进行日志记录。通常启用的唯一日志传输是控制台,如果需要,我可以将其重定向到文件。但是,我的应用程序配置中也有一种方法来指定其他传输和配置。我用它直接写入 Logstash 等。
【讨论】: