Syslog和Cloud Foundry / Bluemix

时间:2015-09-24 12:39:59

标签: logging cloudfoundry ibm-cloud syslog

我一直在研究为SysLog定义用户服务。基本上,实现第三方日志服务(Papertrail)。设置起来很简单。

cf cups papertrail -l syslog://papertail_url:port

它似乎工作正常,但我没有真正详细查看日志是否正在耗尽'正常。并且..我的公司不允许我们与第三方存储日志。所以......我编写了自己的SysLog服务器,并设置了一个指向我服务器的用户服务。

日志开始流动但很快,我在套接字上的读取只会阻塞很长时间..然后会有更多数据进入..但它之间缺少大量数据。请记住,我正在进行日志记录的Web应用程序也非常简单。只会在故意错误时产生一些消息和堆栈跟踪。

但问题是日志的流量不够频繁,而且当它发生时...它会错过很多数据。

所以,我再次设置PaperTrail,看看这是不是我的代码。但是......同样的。即使流向PaperTrail也不能100%工作。你得到一些日志消息..等待很长时间..然后再多一些。还有更多人被遗漏了。

Cloud Foundry Loggregator服务似乎在这里工作不正常。有没有人遇到像我一样的问题?这是来自BlueMix。

注意:我确实读过,如果在短时间内创建了许多日志消息,您将错过消息..但这不是这种情况。我还检查了我的Bluemix日志,看看是否有关于SysLog失败的消息..但我找不到任何消息。

提前致谢...

3 个答案:

答案 0 :(得分:1)

其他人报告了同样的问题。 Loggregator已经进行了一些更改以尝试解决此问题。它正在积极开展工作。

您是否可以使用此信息打开REMOTE,IBM会让您更新?

答案 1 :(得分:1)

这是一个由IBM正在调查的已知问题。不幸的是,目前还没有任何解决方法。

答案 2 :(得分:1)

我通过使用模块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等来进行外部和内部日志记录。 >

确定不是一个非常优雅的解决方案,但它目前正在工作(例如,我可以在外部记录所有消息而不会丢失任何消息)

詹姆斯。