Considering the current state of the art in cloud computing and virtualization, we are at a point in time in which one can develop complex elastic cloud systems. Such systems can have components/units hosted in virtual containers, inside virtual machines, using different cloud offerings (from IaaS to SaaS), potentially from multiple cloud providers. However, to build such systems, and manage them either automatically or through human-based control, there are several important challenges to be addressed at different stages of the system's life-cycle, from design, to deployment and run-time. First, for deploying an elastic system, it is crucial to select from the cloud providers the offerings which support the required system elasticity. After deployment, a major concern is monitoring and analyzing elastic systems, as they change their structure and used cloud services at run-time. While elastic systems are scaled-out due to performance requirements, cost is the main driver for scale-in. Thus, developers of such systems require support for monitoring the costs and analyzing cost efficiency of elastic systems running in public clouds. In this thesis we bring as contribution a series of concepts, techniques and algorithms for analyzing elastic cloud systems. We aim to facilitate their design, deployment, and run-time management, by providing information crucial at each of these stages. We aid in the design of elastic cloud systems by quantifying the elasticity capabilities of cloud services. We analyze which cloud services provide the necessary elasticity support and fulfill resources, quality, and cost requirements. For monitoring elastic systems we introduce a model, technique and supporting platform for composing system metrics, towards obtaining the required information at the needed level. For characterizing the behavior of elastic systems we define the concepts of elasticity and pathway, and provide algorithms for determining them based on multi-level monitoring information. We further focus on analyzing elasticity relationships in cloud systems, enabling different stakeholders, from developers to elasticity controllers, to understand the elasticity relationships governing the run-time behavior of complex cloud systems. Finally, we address the issue of monitoring costs and analyzing cost efficiency of elastic systems running in public clouds. We introduce a model for capturing the pricing schemes of cloud services. We define algorithms for monitoring costs of elastic systems, and evaluating which system component is more cost efficient to scale-in and when. We evaluate our techniques on a Data-as-a-Service elastic cloud system for IoT, by aiding in its design, monitoring, and run-time elasticity control.