Any reason why you don't send the data directly to the processing servers as a way to minimize complexity? If it fails to reach one, try the other.
When you mention low latency, how low are we talking? ms, seconds, minutes? The reason I am asking is because you can use s3 as an intermediate storage where you ship your compressed logs/events at a rollover interval and the processing servers discover them there. Now of course this only works if latency is not a big deal.