【问题标题】:How to send log to Cloud Watch in C# application如何在 C# 应用程序中将日志发送到 Cloudwatch
【发布时间】:2019-08-03 12:01:06
【问题描述】:

我希望能够将应用程序日志发送到Cloud Watch Log。我知道有一个Cloud Watch Agent 服务在后台运行并从日志文件中读取日志并仅将增量(额外日志)发送到Cloud Watch Log。这一切对我来说都很有意义。后来了解了NLog一个C#的日志框架,在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;
}

现在,当我运行上面的代码时,我可以将日志发送到 Cloud Watch。但是我现在很困惑,Cloud Watch Agent 的意义在哪里?

  1. 由于我是直接发送日志数据,这是否意味着我的场景中不需要 Cloud Watch Agent?

  2. 如果我想使用Cloud Watch Agent,那么我需要使用FILE 作为NLog 的日志目标,然后告诉 Cloud Watch Agent 将该日志文件发送到 Cloud Watch Log??

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

下面的流程正确吗?

NLog 将日志写入文件 -> 云代理从那里读取日志 -> 发送日志 到云端观看

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

【问题讨论】:

  • 日志监控代理通常被赋予目录来查看它从哪里拉取日志。如果您使用 API 将日志发送到 Cloud Watch,并且不希望获得代理的任何其他监控优势,则无需安装代理。
  • 那么,如果我需要捕获应用级日志,那么我不需要使用任何代理?
  • 不,你可以只与一个 API 交互,如果一个被暴露。但是,您可以使用该代理来提取其他日志源,以便更好地监控您的基础架构。
  • @ColinM: 好的,假设我明确想要使用代理,那么在这种情况下,我必须将NLog 日志框架目标设置为某个文件,以便我可以指示我的代理去查找该文件并发送数据。
  • 是的..有什么问题?

标签: c# amazon-web-services nlog amazon-cloudwatch amazon-cloudwatchlogs


【解决方案1】:

Cloud Watch Agent 在您的服务器上运行,可以监视生成的日志文件。这些日志文件可以是任何东西,IIS 日志、时间日志、事件日志等。当日志文件更新时,CWA 会抓取更新并发送到 Cloud Watch。这是 CWA 的一般行为,非常适合事件日志和操作系统日志记录。

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

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

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

如果您需要示例,我可以为我使用 CWA 监控的第 3 方日志文件发布示例 CWA json sn-p。

【讨论】:

  • I suggest keeping CW for other log files like IIS or event logs. 这句话有错字吗?你是指这一行中的 CW 还是 CWA?
  • 为了完全确定,因为我直接通过 NLog 配置定位 CW 日志,所以我不需要在我的场景中使用 CWA 对吗?
  • @Unbreakable 谢谢 - 修正错字,如果你已经安装了 CWA,我会保留它。我不确定 AWS 警报是否至少需要 CWA,我一直都安装了它。我会顺其自然,让它做它为 AWS 做的事情。由于您将直接进入 CW,因此您的应用不需要 CWA。
  • 非常感谢。如果我有更多问题,我会在这里联系你。 :)
【解决方案2】:

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

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

根据您的应用程序的生命周期和应用程序的关键性,给它一个简单的生命可能会很有用。让Cloud Watch Agent这样的朋友担心网络问题。

另见https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-cloud-logging-with-Azure-function-or-AWS-lambda

【讨论】:

  • 我的应用程序会非常复杂,所以,如果我想使用代理来捕获我的应用程序的日志,那么我必须让 NLog 将日志写入文件,然后让代理从那里读?我说得有道理吗?我上面写的 POC 怎么样,我没有写入任何文件或任何东西,但我仍然能够发送日志。
  • 流程是什么。 1. Nlog -> write to a file 2. Agent picks it up 3. Sends it to Clod Watch Log
  • 想了解Cloud Watch Logs的使用流程。
  • 听起来像是一个不同的问题,而不是是否使用 Cloud Watch Agent。也许阅读文档:docs.amazonaws.cn/en_us/systems-manager/latest/userguide/…
  • 你能告诉我获取数据到 Cloud Watch 的流程吗,这就是我需要知道的全部内容。当我希望云代理发送日志时,应将什么设置为 NLog 的目标。? NLog 的目标应该是文件、控制台或 AWS,就像我上面的 POC 一样。我只想知道如何使用 Cloud Watch Agent 和 NLOG 发送日志?
猜你喜欢
  • 1970-01-01
  • 2016-11-07
  • 2018-03-10
  • 2020-02-27
  • 1970-01-01
  • 2020-01-09
  • 2020-01-25
  • 1970-01-01
  • 2019-12-01
相关资源
最近更新 更多