我有一个在Azure中运行带有Elasticsearch,MongoDB和Graylog2的Ubuntu服务器,并且我有一个正试图从中发送日志的asp.net mvc4应用程序。 (我正在使用Gelf4Net / Log4Net作为日志记录组件)。为了追赶,没有任何东西被记录下来。

(跳至更新,看看有什么问题)

设置


1个运行graylog2所需软件的Xsmall Ubuntu VM

一切都作为守护程序运行

带有MVC4应用程序的1个Xsmall云服务(2个实例)
虚拟网络设置,以便他们可以交谈。


那我尝试了什么?


从linux框中,跟随命令将导致记录一条消息echo "<86>Dec 24 17:05:01 foo-bar CRON[10049]: pam_unix(cron:session):" |nc -w 1 -u 127.0.0.1 514
我可以更改IP地址以使用公共IP,它也可以正常工作。
使用this powershell script,我可以从开发机和生产Web服务器记录相同的消息
Windows防火墙已关闭,但仍然无法正常工作。
我可以登录到FileAppender Log4Net,所以我知道Log4Net可以正常工作。
尾随graylog2.log没显示任何有趣的东西。关于我的插件目录的一些警告
所以我知道一切正常,但是我无法使Gelf4Net附加程序正常工作。我在这里很茫然。我在哪里看?有什么我想念的吗


灰色日志2

#only showing the connection stuff here. If you need something else let me know
syslog_listen_port = 514
syslog_listen_address = 0.0.0.0
syslog_enable_udp = true
syslog_enable_tcp = false


web.config / Log4Net

//application_start() has log4net.Config.XmlConfigurator.Configure();

<log4net >
  <root>
    <level value="ALL" />
    <appender-ref ref="GelfUdpAppender" />
  </root>
  <appender name="GelfUdpAppender" type="Gelf4net.Appender.GelfUdpAppender, Gelf4net">
    <remoteAddress value="public.ip.of.server"/>
    <remotePort value="514" />
    <layout type="Gelf4net.Layout.GelfLayout, Gelf4net">
      <param name="Facility" value="RandomPhrases" />
    </layout>
  </appender>
</log4net>




更新

由于某种原因,我没有在调试模式下运行graylog :)这样做会显示此消息。


  2013-04-09 03:00:56,202信息:org.graylog2.inputs.syslog.SyslogProcessor-无法解析日期。之所以设置为NOW,是因为allow_override_syslog_date为true。
  2013-04-09 03:00:56,202调试:org.graylog2.inputs.syslog.SyslogProcessor-跳过不完整的消息。


因此它正在发送不完整的消息。我怎么看这是怎么回事?

最佳答案

我使用了错误的端口(DOH!)

我应该一直使用graylog2.config / gelf_listen_port = 12201中指定的端口

所以我的web.config / log4net / gelf附加程序应该有

<appender name="GelfUdpAppender" type="Gelf4net.Appender.GelfUdpAppender, Gelf4net">
   ...
    <remotePort value="12201" />
   ...
</appender>




对于可能存在相同问题的任何人,请确保在更改后Log4Net重新加载配置。我没有设置它来监视配置文件的更改,因此花了我几分钟时间才意识到我使用了错误的端口。当我第一次将其从514更改为12201时,仍然没有收到消息。我必须重新启动服务器,Log4Net才能选择新配置,然后它开始工作。

10-06 12:56