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

How to send log to Cloud Watch in C# application

我希望能够将应用程序日志发送到 Cloud Watch Log。我知道有一个 Cloud Watch Agent 服务在后台 运行s 并从日志文件中读取日志并仅将增量(额外日志)发送到 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 write log to File -> Cloud Agent read log from there -> Send log to Cloud Watch

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

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

当一个应用程序突然不得不处理网络流量(超时、断开连接、重试、连接、延迟等)时,它突然会遇到排队、占用内存、使用套接字、导致垃圾回收等问题,停顿等(并在崩溃时丢失所有未决的日志事件)

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

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

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

通过修改 AWS.EC2.Windows.CloudWatch.json CWA json 文件,您可以将其配置为查看特定格式的日志文件,并将更改发送到 standard/example 之外的 CW默认。您可以将 json 更新为您的 NLog 条目布局格式,并让它在文件中监视该特定格式。 CW确实有延迟发送。

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

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

如果您需要示例,我可以 post 一个示例 CWA json 我使用 CWA 监控的第 3 方日志文件片段。