1. A method for holistic monitoring and troubleshooting an application, the application functionally depending upon a plurality of components on a network system, at least one of the plurality of components being selected from a group consisting of a network component, a hardware component, and a software component, the method comprising: a. collecting data from the components; b. analyzing data collected from the components to discover one or more issues in the components, the analyzing step including considering domain knowledge of the components and considering the interrelationships and correlations between components working within the application; and c. diagnosing the issues in the components to determine an action plan.