1. A system, comprising: a data store that is configured to store events; an application server configured to run a client application that generates the events, wherein the application server comprises: an in-memory buffer service; a capture service configured to: receive events generated by the client application running on the application server and to provide the events to the in-memory buffer service, wherein the in-memory buffer service is configured to temporarily hold the events in a bounded buffer that is implemented in physical memory at the application server, wherein the bounded buffer comprises a plurality of single-threaded buffer segments that are each configured to temporarily hold some of the events received from the capture service until a flush operation is performed, wherein each particular single-threaded buffer segment holds a plurality of events; a consumer executor service configured to: instantiate a plurality of consumer threads that each correspond to a particular single-threaded buffer segment, wherein each consumer thread comprises: an instance of an events reader that is configured to read events flushed from a corresponding single-threaded buffer segment and to add an identifier to each the events; and an instance of a direct events writer that is configured to attempt to directly write each event to the data store; a temporary events file storage system (TEFSS); wherein the application server comprises: an indirect events writer that is invoked when the events are unable to be directly written to the data store, comprising: a plurality of event capture threads each being configured to: generate a particular events file that includes a plurality of events flushed from an in-memory buffer service, and write that particular events file to the TEFSS; and an events file uploader service that is configured to read at least one events file from the TEFSS, and then write the events from each of the retrieved events files to the data store.