A firehose error would not be drained if the nozzle could not write to stackdriver. Repro: Run the nozzle, unplug your ethernet cable, wait, plug it back in, the errors from firehose disconnecting finally show up. This was due to heartbeater.Increment blocking.
Ignore empty error messages from Firehose and instrument a metric to track them. This is a bandaid for observed behavior and may be removed if it proves unneeded.
Write errors to stderr to help understanding of the logs.
Small optimization to the heartbeat/metric_handler to not block Increment during Flush
Turn Errors into Fatal calls during app construction to prevent partially valid state. This wasn't ever observed but it is the right thing to do.