TL; DR
在Elasticsearch中,您可以通过API更改log4j日志记录附加程序的端口和remoteHost吗?
长版:
我们目前正在构建用于记录的ELK堆栈(Elasticsearch / Logstash / Kibana)。 Elasticsearch通过Log4J协议将其日志发送到Logstash。
我们有一个包含3个Elasticsearch节点和3个Logstash实例的集群。我们使用Consul与Consul Template进行服务发现以生成配置文件,并在其更改时重新启动Elasticsearch。这是我的logging.yml:
Des.logger.level=DEBUG
es.logger.level: INFO
rootLogger: ${es.logger.level}, console, socketappender
logger:
action: DEBUG
com.amazonaws: WARN
appender:
socketappender:
type: org.apache.log4j.net.SocketAppender
{{ with service "logstash-9500" }}{{ with index . 0 }}port: {{.Port}}
remoteHost: {{.Address}}{{end}}{{end}}
layout:
type: pattern
conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"
现在我正在尝试通过API更改remoteHost和端口,而不必重新启动节点。文档提供了一个更改loglevel的示例:
PUT /_cluster/settings
{
"transient" : {
"logger.discovery" : "DEBUG"
}
}
但在浏览了文档和代码之后,我无法找到它是否是您可以做的唯一事情,或者是否可以更新任何内容。
如果可以,我找不到合适的路径让它发挥作用。
编辑:目前,我已将地址和端口更改为localhost:9500,并将Balance作为代理/负载均衡器添加到不同的Logstash实例。如果一个Logstash关闭,则平衡故障转移到下一个,以便Elasticsearch和Consul使用新的主机列表重新启动Balance。