如果ES由于某种原因(忙于GC处理等)而关闭或挂断,则logstash将重试几次,然后放开它,这意味着您将丢失这些事件。
有很多方法可以缓解这种情况,但是一个好的实践是持久地存储事件(在DB或消息队列系统中),并仅在事件成功发送到ES后才弹出它们。这样的消息传递系统包括Redis(使用列表或通道作为队列),Apache Kafka(分布式日志),Rabbitmq(分布式消息队列)等
有很多方式与logstash一起配置这些技术,一个例子是这一个,显示Logstash正在与卡夫卡使用。在您的情况下,这意味着Nxlog将其日志发送到kafka,而不是直接发送到Logstash。然后Logstash使用来自Kafka主题的日志。
您的里程会有所不同,但是这里的主要思想是,如果您的日志无法发送到Elasticsearch,则不会丢失。这将回答您的第二个问题。
至于您的第一个,我建议您安装其他ES插件,例如bigdesk和HQ和/或官方的Marvel插件,这些插件都可以深入洞悉Elasticsearch内部正在发生的事情。您将能够快速检测出问题所在并采取措施。