【问题标题】:log4j tcp appender and logstash source hostlog4j tcp appender 和 logstash 源主机
【发布时间】:2015-03-27 21:56:03
【问题描述】:

我正在使用 log4j socketappender 将我的日志从 tomcat 实例传送到另一台机器。在这个远程服务器上,我设置了 logstash 来对数据进行转换,然后将其转发到我的弹性搜索集群。出于某种原因,我无法让日志的原始主机出现在弹性搜索中。我得到了 logstash 转发器的主机,但原始日志中的主机甚至没有通过管道持续存在。

我的logstash配置

input {
  log4j {
    mode => "server"
    port => "4560"
  }
  tcp {
    port => "4561"
    codec => "json"
    type => "access"
  }
}

filter {
  mutate {
    add_field => [ "source_ip", "@source_host" ]
  }
  if [type] == "access" {
    mutate { remove_field => "something-private" }
  }
  ruby {
    code => "event['@timestamp'] = event['@timestamp'].localtime('-05:00')"
  }
  ruby {
    code => "event['@pretty_timestamp'] = event['@timestamp'].strftime('%A, %B %e %Y at %l:%M:%S %p')"
  }
}

output {
  elasticsearch {
    host        => "elasticsearch.host"
    cluster     => "log-cluster"
    protocol    => "http"
  }
}

所有日志都很好,但我也想在其中包含它们的源主机,这样我就可以知道它们来自哪些服务器。

通过的平均日志事件将是这样的......

{
  "_index": "logstash-2015.01.28",
  "_type": "logs",
  "_id": "AUsyNvDyCso0hZPOUVfM",
  "_score": null,
  "_source": {
    "message": "Executing query: Removed",
    "@version": "1",
    "@timestamp": "2015-01-28T15:23:56.331-05:00",
    "host": "10.253.1.112:31441",
    "path": "org.blahblah",
    "priority": "INFO",
    "logger_name": "org.blahblah",
    "thread": "http-bio-8080-exec-13",
    "class": "?",
    "file": "?:?",
    "method": "?",
    "source_ip": "@source_host",
    "@pretty_timestamp": "Wednesday, January 28 2015 at  3:23:56 PM"
  },
  "sort": [
    1422476636331,
    1422476636331
  ]
}

知道如何调整它以包含正确的源主机吗?

log4j.rootLogger=INFO, default, SOCKET, FILE
log4j.appender.default=org.apache.log4j.ConsoleAppender
log4j.appender.default.layout=org.apache.log4j.PatternLayout
log4j.appender.default.layout.ConversionPattern=%d [%t] %-5p %c{1} - %m%n

log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender
log4j.appender.SOCKET.Port=4560
log4j.appender.SOCKET.RemoteHost=${logHost}
log4j.appender.SOCKET.ReconnectionDelay=1000

log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=${log_home}neuron-logging.log
log4j.appender.FILE.MaxFileSize=100MB
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %p %t %c - %m%n

我添加了一些 catalina 选项 -DlogHost= 和 -Dlog_home= blah blah

【问题讨论】:

  • 您也可以发布您的 log4j 配置。或者以任何方式将此日志传输到 logstash 服务器
  • @VineethMohan 我添加了我的 log4j 配置,谢谢!

标签: java tomcat elasticsearch log4j logstash


【解决方案1】:

您是否尝试过使用 GELF?例如,logstash-gelf (https://github.com/mp911de/logstash-gelf) 提供了一个灵活的配置,您可以直接使用原始主机名。除此之外,您还可以提供来自 MDC 的数据并提供静态设置。

示例配置:

log4j.appender.gelf=biz.paluch.logging.gelf.log4j.GelfLogAppender
log4j.appender.gelf.Threshold=INFO
log4j.appender.gelf.Host=udp:localhost
log4j.appender.gelf.Port=12201
log4j.appender.gelf.ExtractStackTrace=true
log4j.appender.gelf.FilterStackTrace=true

# This are static fields
log4j.appender.gelf.AdditionalFields=fieldName1=fieldValue1,fieldName2=fieldValue2

# This are fields using MDC
log4j.appender.gelf.MdcFields=mdcField1,mdcField2
log4j.appender.gelf.DynamicMdcFields=mdc.*,(mdc|MDC)fields
log4j.appender.gelf.IncludeFullMdc=true

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多