【问题标题】:AWS CloudWatch logging working from one machine, not anotherAWS CloudWatch 日志记录在一台机器上工作,而不是另一台机器
【发布时间】:2021-03-20 02:39:32
【问题描述】:

我有 2 个 EC2 Windows 10 实例。使用 C# 和 AWSSDK.CloudWatchLogs,我可以从其中一个写入 AWS CloudWatch,但不能从另一个写入。我可以用下面的代码复制它:

C#代码:

using System;

namespace AllPurposeDuck
{
    class Program
    {
        private static Logger _log = LogManager.GetCurrentClassLogger();
        static void Main(string[] args)
        {
            try
            {
                _log.Info("Quack!");
                _log.Debug("Quack!!");
                _log.Trace("Quack!!!");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
  </configSections>

  <nlog throwExceptions="true"
        internalLogFile="c:\temp\allpurposeducklog.txt"
        internalLogLevel="Info"
        xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="console" xsi:type="Console" layout="${longdate} | ${level} | ${machinename}| ${message}" />
      <target name="aws" xsi:type="AWSTarget" logGroup="Ducks_and_stuff" region="us-west-2" layout="${machinename} ${longdate} | ${level} | ${message}" />
    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="console, aws" />
    </rules>
  </nlog>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
</configuration>

在原本静默失败的机器上,我注意到一个短暂的停顿,并在我的 c:\temp\allpurposeducklog.txt 本地日志文件中看到以下警告:

2021-03-20 01:36:40.7679 Info Shutting down logging...
2021-03-20 01:36:42.2809 Warn Target flush timeout. One or more targets did not complete flush operation, skipping target close.
2021-03-20 01:36:42.2809 Info Logger has been shut down.

另一台机器愉快地向 CloudWatch 发出嘎嘎声(都向控制台发出嘎嘎声)。

故障机器与工作机器位于同一 VPC 中,具有相同的 IAM 角色、可用区和安全组。两台机器都与 CloudWatch 代理一起正常工作,该代理监控 Windows 内存并在内存过低时触发警报。

我很难进一步缩小范围。想法? AWS 中是否有记录失败原因的地方?谢谢。

【问题讨论】:

    标签: c# amazon-cloudwatch nlog


    【解决方案1】:

    由于程序在记录后很快退出,NLog 仍可能忙于写入日志。如果目标使用异步日志,NLog 需要知道它应该等待写入。

    始终建议在程序退出前留出一些时间。在Main末尾添加:

    LogManager.Shutdown();
    

    这将使 NLog 最多 15 秒。

    如果时间不够,您可以先冲洗并等待最多 30 秒。

    LogManager.Flush(TimeSpan.FromSeconds(30));
    LogManager.Shutdown();
    

    另见https://github.com/NLog/NLog/wiki/Logging-troubleshooting

    【讨论】:

    • 谢谢,@朱利安。我仍然收到“NLog.NLogRuntimeException:发生异步异常。---> System.TimeoutException:在等待 30 秒后刷新所有目标时超时”形式的超时。当我尝试的时候。我的 aws-logger-errors.txt 文件(我刚刚注意到)显示了类似的超时异常。感觉 AWS 管道中的某些东西仍然不稳定......
    • ... 就这样,重新启动修复了它。我不知道为什么。也许我使用 IAM 角色或安全组配置的某些内容需要重新启动?我可能会尝试编辑我的问题以尝试在这里获得更多理解。
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 2017-08-07
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多