Syslog 和 Cloud Foundry/Bluemix
Posted
技术标签:
【中文标题】Syslog 和 Cloud Foundry/Bluemix【英文标题】:Syslog and Cloud Foundry/Bluemix 【发布时间】:2015-09-24 12:39:59 【问题描述】:我一直在研究为 SysLog 定义用户服务。基本上,实现第三方日志服务(Papertrail)。设置很简单。
cf cups papertrail -l syslog://papertail_url:port
它似乎工作正常,但我并没有真正仔细查看日志是否正确“排水”。而且.. 我的公司不允许我们与第三方存储日志。所以...我编写了自己的 SysLog 服务器并设置了一个指向我的服务器的用户服务。
日志开始流动,但很快,我在套接字上的读取会阻塞很长时间..然后会有更多数据进入..但它之间丢失了很多数据。请记住,我正在执行日志记录的 Web 应用程序也非常简单......并且只会在故意错误时产生一些消息和堆栈跟踪。
但问题是日志根本没有足够频繁地流动,当它流动时......它会丢失很多数据。
所以,我再次设置 PaperTrail 以查看这是否是我的代码……或者不是。但是……一样。即使流向 PaperTrail 也不能 100% 工作。您会收到一些日志消息.. 漫长的等待.. 然后更多。还有很多人错过了。
Cloud Foundry Loggregator 服务似乎在这里无法正常工作。有没有人遇到过像我这样的问题?这是来自 BlueMix。
注意:我确实读过,当在短时间内创建许多日志消息时,您会错过消息。但这里不是这种情况。我还检查了我的 Bluemix 日志以查看是否有任何有关 SysLog 故障的消息。但我找不到任何消息。
提前谢谢...
【问题讨论】:
【参考方案1】:其他人报告了同样的问题。对 Loggregator 进行了许多更改以尝试解决此问题。它正在积极进行中。
您能否使用此信息打开support ticket,IBM 会及时通知您?
【讨论】:
欣赏信息.. 将打开一张票。谢谢!【参考方案2】:这是 IBM 正在调查的已知问题。不幸的是,目前没有任何解决方法。
【讨论】:
【参考方案3】:我通过使用 winston 和 winston-papertrail 模块手动登录到 papertrail 解决了这个问题
https://github.com/kenperkins/winston-papertrail
编辑以根据要求分享我的代码
我的代码实现对于手动完成这项工作非常基本 - 我将进一步加强这一点。基本上,我在 package.json 的依赖项中包含了 winston 和 winston-papertrail 这两个模块,然后我创建了以下日志帮助程序文件:
var winston = require('winston');
//
// Requiring `winston-papertrail` will expose
// `winston.transports.Papertrail`
//
require('winston-papertrail').Papertrail;
var winstonPapertrail, logger;
module.exports =
init: function (hostname)
return init(hostname);
,
info: function (logText)
return log(logText,"info");
,
error: function (logText)
return log(logText,"error");
,
log: function(logText)
return log(logText,"debug")
function init(program)
winstonPapertrail = new winston.transports.Papertrail(
host: <replacethiswithyourhostname> e.g.:'logsX.papertrailapp.com',
port: <replacethiswithyourport>,
program: program,
handleExceptions: true
);
winstonPapertrail.on('error', function(err)
// Handle, report, or silently ignore connection errors and failures
);
logger = new winston.Logger(
transports: [winstonPapertrail]
);
log(hostname+" starting","info");
function log(logText,level)
if(level=="info")
console.info(logText);
logger.info(logText);
else if(level=="error")
console.error(logText);
logger.error(logText);
else if(level=="debug")
console.log(logText);
logger.debug(logText);
然后我将其保存为 javascript 文件并将其导入到我的主应用程序中,然后可以先使用公开的 .init() 方法,然后使用 .log、.info、.error 等进行外部和内部记录
我确定这不是一个非常优雅的解决方案,但它目前可以工作(例如,我可以在外部记录所有消息而不会丢失任何消息)
詹姆斯。
【讨论】:
当然 - 今天下午会添加它!我不确定这是否是最佳解决方案,但它确实为我显示了所有日志。 现在按要求添加! 为您的努力+1,最好在此处添加代码,因为将来可能会更改外部链接。回答现在用在将来。以上是关于Syslog 和 Cloud Foundry/Bluemix的主要内容,如果未能解决你的问题,请参考以下文章
syslog:在 ubuntu 上,如何配置 syslog 文件的旋转和 gzip'ing?