【发布时间】:2015-09-27 17:24:39
【问题描述】:
我有几个函数,每个函数都创建特定于一个事务的日志;它是一个多线程应用程序,因此 func1 的函数入口可以是随机进行的事务,但对于单个事务,它将仅通过 func1、func2 和 func3 顺序进行。
func1(transactionId) {
log("%d Now in func1", transactionId);
}
func2(transactionId) {
log("%d Now in func2", transactionId);
}
func3(transactionId) {
log("%d Now in func3", transactionId);
}
现在,我想一次只为每笔交易写入logstash;那就是
1 Now in func1 Now in func2 Now in fun3
然后这需要最后去elasticsearch;
我正在考虑将一半事务日志写入 RabbitMQ 临时队列,然后在完成事务后,将其提交到 RabbitMQ 生产者队列以将消息发送到 logstash;
喜欢
func1(transactionId) {
add2RMQ(transactionId, "Now in func1");
}
func2(transactionId) {
add2RMQ("transactionId, "Now in func2");
}
func3(transactionId) {
add2RMQ("transactionId, "Now in func3");
/* Last point of transaction */
commit2RMQ(transactionId);
}
commit2RMQ 执行 logstash 的时间应该会收到特定于事务的完整消息以写入 elasticsearch。
问题:
- 什么是解决此问题的正确解决方案,以便将特定于事务的数据立即发送到 elasticsearch?
- 我们可以用 RabbitMQ 解决这个问题吗?如果是这样,我需要为此使用哪些正确的 API?
- 有没有什么方法可以在不使用 RabbitMQ 而仅使用 logstash 和 elasticsearch 的情况下实现相同的目标?
- 我不想使用 elasticsearch 更新 API,因为它可能会为每个特定于事务的日志消息消耗大量搜索操作。
【问题讨论】:
标签: elasticsearch rabbitmq logstash apache-kafka logstash-forwarder