如何在C#应用程序中向Cloud Watch发送日志

如何在C#应用程序中向Cloud Watch发送日志,c#,amazon-web-services,nlog,amazon-cloudwatch,amazon-cloudwatchlogs,C#,Amazon Web Services,Nlog,Amazon Cloudwatch,Amazon Cloudwatchlogs,我希望能够将应用程序日志发送到云监视日志。我知道有一个云监控代理服务在后台运行,从日志文件中读取日志,只将增量(额外日志)发送到云监控日志。所有这些对我来说都有意义。然后我了解了NLog的一个C#logging框架,并在下面编写了POC来发送日志 static void Main(string[] args) { ConfigureNLog(); var logger = NLog.LogManager.GetCurrentClassLogger(); logger.In

我希望能够将应用程序日志发送到
云监视日志
。我知道有一个
云监控代理
服务在后台运行,从日志文件中读取日志,只将增量(额外日志)发送到
云监控日志
。所有这些对我来说都有意义。然后我了解了NLog的一个C#logging框架,并在下面编写了POC来发送日志

static void Main(string[] args)
{
    ConfigureNLog();
    var logger = NLog.LogManager.GetCurrentClassLogger();
    logger.Info("Hello World");
    logger.Log(LogLevel.Info, "Sample informational message");
}
static void ConfigureNLog()
{
        var accessKey = ConfigurationManager.AppSettings.Get("AWSAccessKey");
        var secretKey = ConfigurationManager.AppSettings.Get("AWSSecretKey");
        var config = new LoggingConfiguration();
        var awsTarget = new AWSTarget()
        {
            LogGroup = "NLog.ProgrammaticConfigurationExample",
            Region = "us-east-1",
            Credentials = new BasicAWSCredentials(accessKey, secretKey)
        };
        config.AddTarget("aws", awsTarget);
        config.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, awsTarget));

        LogManager.Configuration = config;
}
现在,当我运行上述代码时,我能够将日志发送到CloudWatch。但我现在很困惑,云监控代理的意义何在

  • 由于我直接发送日志数据,这是否意味着在我的场景中不需要云监视代理

  • 如果我想使用
    云监视代理
    ,那么我需要使用
    文件
    作为
    NLog
    日志的目标,然后告诉云监视代理将该日志文件发送到云监视日志

  • 我的理解正确吗?请帮助我理解流程

    下面的流程是否正确

    NLog将日志写入文件->云代理从那里读取日志->发送日志 云监视


    问题:如何在上述POC中使用Cloud Watch Agent通过NLog发送数据?

    当应用程序只需写入文件时,它的生活非常简单,几乎没有问题

    当应用程序突然必须处理网络流量(超时、断开连接、重试、连接、延迟等)时,它会突然出现排队、占用内存、使用套接字、导致垃圾收集、暂停等问题(以及在崩溃时丢失所有挂起的日志事件)

    根据应用程序的生命周期和应用程序的关键性,给它一个简单的生命周期可能会很有用。让像
    cloudwatchagent
    这样的朋友担心网络的事情


    另请参见

    云监视代理在您的服务器上运行,并可以监视生成的日志文件。这些日志文件可以是任何内容,IIS日志、时间日志、事件日志等。当日志文件更新时,CWA将获取更新并发送到Cloud Watch。这是CWA的一般行为,对于事件日志和操作系统日志非常有用

    通过修改AWS.EC2.Windows.CloudWatch.json CWA json文件,您可以将其配置为监视特定格式的日志文件,并将更改发送到CW,而不是默认情况下的标准/示例更改。您可以将json更新为NLog条目布局格式,并让它监视文件中的特定格式。CW确实有延迟发送

    现在您有了Nlog,它可以写入日志文件。您可以让NLog将日志条目发送到一个文件,让Cloud Watch代理监视该文件,获取更改并发送,或者让NLog将条目直接发送到CW。由于您是通过NLog目标直接写入CW,因此NLog文件不需要云代理。我建议为其他日志文件(如IIS或事件日志)保留CWA

    我想这是一个取决于你如何做的问题。我认为使用布局的NLog目标比处理CloudWatch json文件更容易尝试匹配日志格式。我只使用CWA发送我无法控制的日志文件,并使用NLog目标发送我的NLog条目


    如果您需要示例,我可以为我使用CWA监视的第三方日志文件发布一个示例CWA json片段。

    日志监视代理通常提供目录,以查看它从何处提取日志。如果您使用API将日志发送到Cloud Watch,并且不希望获得代理的任何其他监控好处,那么就不需要安装代理。因此,如果我需要捕获应用程序级日志,那么我不需要使用任何代理?不,如果有API被暴露,您只需与API交互即可。但是,您可以使用代理拉取其他日志源,以便更好地监视您的基础结构。@ColinM:好的,事情是这样的,假设我明确希望使用代理,那么在这种情况下,我必须将
    NLog
    日志框架目标设置为某个文件,这样我就可以指示我的代理人去查找那个文件并发送数据。是的。。问题是什么?我的应用程序将非常复杂,因此,如果我想使用代理捕获我的应用程序的日志,那么我必须让NLog将日志写入文件,然后让代理从中读取日志?我说得通吗?关于我上面写的POC,我没有写任何文件或任何东西,但我仍然能够发送日志。流程是什么<代码>1。Nlog->写入文件2。探员拿起它3。将其发送到Clod Watch Log我想知道使用云监控日志的流程。听起来像是一个不同的问题,而不是是否使用云监控代理。也许可以阅读文档:你能告诉我获取数据到Cloud Watch的流程吗,这就是我需要知道的全部。当我希望云代理发送日志时,NLog的目标应该是什么。?NLog的目标应该是文件、控制台或AWS,就像上面我的POC一样。我只想知道如何将Cloud Watch Agent与NLOG一起使用以发送日志?
    我建议为其他日志文件(如IIS或事件日志)保留CW。
    此语句中是否有输入错误?你是说CW还是CWA在这一行?为了完全确定,因为我通过NLog配置直接瞄准CW日志,我不需要在我的场景中使用CWA,对吧?@Unbreakable Thank-修复了打字错误,如果你已经安装了CWA,我会保留它。我不确定AWS警报上是否需要CWA至少为此,我一直都安装了CWA。我会让它去做,让它为AWS做什么。由于您将直接访问CW,您的应用程序不需要CWA。非常感谢。如果我有更多问题,我会在这里问你。:)