1. A computer-implemented method for executing a distributed application and verifying correctness of distributed system behavior, the method comprising: receiving one or more models that describe expected behavior of the distributed application; starting a model checking service online or offline that monitors execution of the distributed application to detect behavior of the application; collecting one or more traces that describe behavior of the application as a series of one or more events that occur at distributed components of the application; identifying one or more events based on the collected traces; checking the received one or more models against the identified events to determine whether any unexpected application behavior has occurred; and upon determining that a model check failed, identifying a root cause event related to the failed model check; and reporting an error based on the identified root cause and failed model check, wherein the preceding steps are performed by at least one processor.