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?

利用Syslog Watcher在windows下部署syslog日志服务器

linux下syslog和rsyslog

怎样用syslog写到自定义的log文件

syslog.syslog 与 SysLogHandler

SysLog简介和java操作实例