我希望能够将应用程序日志发送到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的意义在哪里?
由于我直接发送日志数据,这是否意味着在我的方案中不需要Cloud Watch Agent?
如果要使用Cloud Watch Agent
,则需要FILE
使用NLog
作为日志的目标,然后告诉Cloud Watch Agent将该日志文件发送到云监视日志?
我的理解正确吗?请帮助我理解流程。
以下流量是否正确?
NLog将日志写入文件-> Cloud Agent从那里读取日志->发送日志 到Cloud Watch
问题:如何在上述POC中使用Cloud Watch Agent通过NLog发送数据?
答案 0 :(得分:2)
Cloud Watch Agent在您的服务器上运行,并且可以监视生成的日志文件。这些日志文件可以是任何内容,包括IIS日志,时间日志,事件日志等。更新日志文件时,CWA将抓取更新并将其发送到Cloud Watch。这是CWA的一般行为,非常适合事件日志和OS日志记录。
通过修改AWS.EC2.Windows.CloudWatch.json CWA json文件,您可以对其进行配置以监视某些格式的日志文件,并将更改发送到CW,默认情况下是标准/示例以外的更改。您可以将json更新为NLog条目布局格式,并让其监视文件中的特定格式。 CW发送有延迟。
现在您有了Nlog可以写入日志文件。您可以让NLog将日志条目发送到文件中,然后让Cloud Watch Agent监视该文件,选择并发送更改,或者让NLog将条目直接发送给CW。由于您是通过NLog目标直接写入CW,因此您的NLog文件不需要Cloud Agent。我建议为其他日志文件(例如IIS或事件日志)保留CWA。
我想这是您如何做的偏好。我认为带有布局的NLog Targets比处理CloudWatch json文件来尝试并匹配日志格式更容易。我仅使用CWA发送无法控制的日志文件,并使用NLog Target发送我的NLog条目。
如果需要示例,我可以为我使用CWA监视的第三方日志文件发布示例CWA json代码段。