AWS: Monitoring on AWS

When operating a website like the Employee Directory Application on AWS you may have questions like:

  • How many people are visiting my site day to day?
  • How can I track the number of visitors over time?
  • How will I know if the website is having performance or availability issues?
  • What happens if my Amazon Elastic Compute Cloud (EC2) instance runs out of capacity?
  • Will I be alerted if my website goes down?

You need a way to collect and analyze data about the operational health and usage of your resources. The act of collecting, analyzing, and using data to make decisions or answer questions about your IT resources and systems is called monitoring. Monitoring enables you to have a near real-time pulse on your system and answer the questions listed above. You can use the data you collect to watch for operational issues caused by events like over-utilization of resources, application flaws, resource misconfiguration, or security-related events. Think of the data collected through monitoring as outputs of the system, or metrics.

Use Metrics to Solve Problems

The resources that host your solutions on AWS all create various forms of data that you might be interested in collecting. You can think of each individual data point that is created by a resource as a metric. Metrics that are collected and analyzed over time become statistics, like the example of average CPU utilization over time below, showing a spike at 1:30. Consider this: One way to evaluate the health of an Amazon EC2 instance is through CPU utilization. Generally speaking, if an EC2 instance has a high CPU utilization, it can mean a flood of requests. Or it can reflect a process that has encountered an error and is consuming too much of the CPU. When analyzing CPU utilization, take a process that exceeds a specific threshold for an unusual length of time. Use that abnormal event as a cue to either manually or automatically resolve the issue through actions like scaling the instance. This is one example of a metric. Other examples of metrics EC2 instances have are network utilization, disk performance, memory utilization, and the logs created by the applications running on top of EC2.

Know the Different Types of Metrics

Different resources in AWS create different types of metrics. An Amazon Simple Storage Service (S3) bucket would not have CPU utilization like an EC2 instance does. Instead, S3 creates metrics related to the objects stored in a bucket like the overall size, or the number of objects in a bucket. S3 also has metrics related to the requests made to the bucket such as reading or writing objects. Amazon Relational Database Service (RDS) creates metrics such as database connections, CPU utilization of an instance, or disk space consumption. This is not a complete list for any of the services mentioned, but you can see how different resources create different metrics. You could be interested in a wide variety of metrics depending on the types of resources you are using, the goals you have, or the types of questions you want answered.

Understand the Benefits of Monitoring

Monitoring gives you visibility into your resources, but the question now is, “Why is that important?” The following are some of the benefits of monitoring.

Respond to operational issues proactively before your end users are aware of them. It’s a bad practice to wait for end users to let you know your application is experiencing an outage. Through monitoring, you can keep tabs on metrics like error response rate or request latency, over time, that help signal that an outage is going to occur. This enables you to automatically or manually perform actions to prevent the outage from happening—fixing the problem before your end users are aware of it.

Improve the performance and reliability of your resources. Monitoring the different resources that comprise your application provides you with a full picture of how your solution behaves as a system. Monitoring, if done well, can illuminate bottlenecks and inefficient architectures. This enables you to drive performance and reliability improvement processes.

Recognize security threats and events. When you monitor resources, events, and systems over time, you create what is called a baseline. A baseline defines what activity is normal. Using a baseline, you can spot anomalies like unusual traffic spikes or unusual IP addresses accessing your resources. When an anomaly occurs, an alert can be sent out or an action can be taken to investigate the event.

Make data-driven decisions for your business. Monitoring is not only to keep an eye on IT operational health. It also helps drive business decisions. For example, let’s say you launched a new feature for your cat photo app, and want to know whether it’s being used. You can collect application-level metrics and view the number of users who use the new feature. With your findings, you decide whether to invest more time into improving the new feature.

Create more cost-effective solutions. Through monitoring, you can view resources that are being underutilized and rightsize your resources to your usage. This helps you optimize cost and make sure you aren’t spending more money than necessary.

Enable Visibility

AWS resources create data you can monitor through metrics, logs, network traffic, events, and more. This data is coming from components that are distributed in nature, which can lead to difficulty in collecting the data you need if you don’t have a centralized place to review it all. AWS has already done that for you with a service called Amazon CloudWatch.

Amazon CloudWatch is a monitoring and observability service that collects data like those mentioned in this module. CloudWatch provides actionable insights into your applications, and enables you to respond to system-wide performance changes, optimize resource utilization, and get a unified view of operational health. This unified view is important. You can use CloudWatch to:

  • Detect anomalous behavior in your environments.
  • Set alarms to alert you when something’s not right.
  • Visualize logs and metrics with the AWS Management Console.
  • Take automated actions like scaling.
  • Troubleshoot issues.
  • Discover insights to keep your applications healthy.

Resource:

AWS: Choose the Right AWS Database Service

AWS Database Services

AWS has a variety of different database options for different use cases. Use the table below to get a quick look at the AWS database portfolio.

Database TypeUse CasesAWS Service
RelationalTraditional applications, ERP, CRM, e-commerceAmazon RDS, Amazon Aurora, Amazon Redshift
Key-valueHigh-traffic web apps, e-commerce systems, gaming applicationsAmazon DynamoDB
In-memoryCaching, session management, gaming leaderboards, geospatial applicationsAmazon ElastiCache for Memcached, Amazon ElastiCache for Redis
DocumentContent management, catalogs, user profilesAmazon DocumentDB (with MongoDB compatibility)
Wide columnHigh-scale industrial apps for equipment maintenance, fleet management, and route optimizationAmazon Keyspaces (for Apache Cassandra)
GraphFraud detection, social networking, recommendation enginesAmazon Neptune
Time seriesIoT applications, DevOps, industrial telemetryAmazon Timestream
LedgerSystems of record, supply chain, registrations, banking transactionsAmazon QLDB

Breaking Up Applications and Databases

As the industry changes, applications and databases change too. Today, with larger applications, you no longer see just one database supporting it. Instead, these applications are being broken into smaller services, each with their own purpose-built database supporting it.

This shift removes the idea of a one-size-fits-all database and replaces it with a complimentary database strategy. You can give each database the appropriate functionality, performance, and scale that the workload requires.

Resources:

What DevOps is not?

Understanding what DevOps is not can be as crucial as understanding what it is. Here are some misconceptions or things that DevOps is often mistakenly perceived as, but isn’t:

  1. Not Just Automation: While automation is a significant aspect of DevOps, it’s not the sole focus. DevOps is not just about automating manual tasks; it’s about cultural transformation, collaboration, and breaking down silos between development and operations teams.
  2. Not Just Tools: DevOps is often associated with a plethora of tools and technologies, but it’s not about the tools themselves. Simply adopting tools like Docker, Kubernetes, or Jenkins doesn’t automatically mean an organization has implemented DevOps. DevOps is about people, processes, and culture, with tools being enablers of those aspects.
  3. Not a Team or Role: DevOps is not a specific team or role within an organization. It’s a cultural mindset and set of practices that promote collaboration, communication, and shared responsibility across development, operations, and other relevant teams. While some organizations may have DevOps teams or roles, the true essence of DevOps is about breaking down barriers between teams, not creating new ones.
  4. Not Just Continuous Deployment: While continuous deployment (CD) is a common DevOps practice, DevOps is not solely about continuously deploying code into production. It’s about delivering value to customers quickly and efficiently through the adoption of agile principles, automation, and a culture of continuous improvement.
  5. Not a Silver Bullet: DevOps is not a one-size-fits-all solution or a silver bullet that can magically solve all of an organization’s problems. Implementing DevOps requires careful planning, cultural change, and ongoing commitment from leadership and teams. It’s a journey rather than a destination, and success depends on various factors, including organizational culture, maturity, and context.
  6. Not Just for Technology Companies: While DevOps originated in the technology sector, it’s not exclusive to technology companies. Organizations across various industries, including finance, healthcare, retail, and manufacturing, have successfully adopted DevOps principles and practices to improve their software delivery processes, enhance customer experiences, and drive business outcomes.
  7. Not Just about Speed: While DevOps emphasizes rapid and frequent delivery of software, it’s not solely about speed at the expense of quality or stability. DevOps aims to strike a balance between speed, quality, and reliability, enabling organizations to deliver high-quality software quickly and sustainably through automation, collaboration, and continuous feedback loops.

Understanding these misconceptions can help organizations approach Dev

DevOps cultural changes

Implementing DevOps often involves significant cultural changes within an organization. Here are some key cultural changes that may be required for successful DevOps adoption:

  1. Collaboration and Communication: DevOps encourages collaboration and communication among different teams involved in software development, including developers, operations, quality assurance, security, and business stakeholders. Breaking down silos and fostering a culture of teamwork and transparency is essential for effective DevOps implementation.
  2. Shared Responsibility: DevOps promotes a shift from individual responsibility to shared responsibility across teams. This means that developers not only write code but also take ownership of deploying and monitoring it in production. Operations teams are involved early in the development process and collaborate closely with developers to ensure that applications are deployed and run smoothly in production environments.
  3. Continuous Learning and Improvement: DevOps emphasizes a culture of continuous learning and improvement. Teams are encouraged to experiment, take risks, and learn from failures to drive innovation and evolve processes continuously. This involves adopting a growth mindset, seeking feedback, and embracing change as opportunities for improvement.
  4. Automation: Automation is a core principle of DevOps culture. Organizations need to embrace automation tools and practices to streamline workflows, eliminate manual tasks, and improve efficiency. This includes automating build and deployment processes, infrastructure provisioning, testing, monitoring, and more.
  5. Trust and Empowerment: DevOps requires trust and empowerment at all levels of the organization. Teams need the autonomy to make decisions, take ownership of their work, and experiment with new ideas. Leaders play a crucial role in creating a supportive environment where individuals feel empowered to innovate and collaborate effectively.
  6. Customer-Centricity: DevOps promotes a customer-centric approach to software development and delivery. Teams are encouraged to focus on delivering value to customers quickly and frequently, soliciting feedback, and adapting to changing customer needs. Aligning business goals with customer expectations helps drive better outcomes and fosters a culture of customer satisfaction and success.
  7. Resilience and Accountability: DevOps encourages organizations to build resilient systems that can withstand failures and recover quickly from disruptions. This requires a culture of accountability, where teams take responsibility for the reliability and performance of their applications and systems. Incident response processes and blameless post-mortems help organizations learn from failures and improve resilience over time.
  8. Data-Driven Decision Making: DevOps advocates for data-driven decision-making processes based on metrics, analytics, and insights. Organizations need to establish measurement frameworks, collect relevant data, and analyze performance metrics to assess the effectiveness of their DevOps practices and drive continuous improvement.

Overall, embracing DevOps culture requires a mindset shift towards collaboration, shared responsibility, continuous learning, automation, customer-centricity, resilience, accountability, and data-driven decision making. By fostering these cultural changes, organizations can unlock the full potential of DevOps and achieve greater agility, efficiency, and innovation in software development and delivery.

Azure: Data Management Tools

Microsoft Azure offers a comprehensive suite of data management tools and services to help organizations store, process, analyze, and visualize their data. Here are some key Azure data management tools and services:

  1. Azure SQL Database: Azure SQL Database is a fully managed relational database service that offers built-in high availability, automated backups, and intelligent performance optimization. It supports both single databases and elastic pools for managing multiple databases with varying resource requirements.
  2. Azure Cosmos DB: Azure Cosmos DB is a globally distributed, multi-model database service designed for building highly responsive and scalable applications. It supports multiple data models including document, key-value, graph, and column-family, and offers automatic scaling, low-latency reads and writes, and comprehensive SLAs.
  3. Azure Data Lake Storage: Azure Data Lake Storage is a scalable and secure data lake service that allows organizations to store and analyze massive amounts of structured and unstructured data. It offers integration with various analytics and AI services and supports hierarchical namespace for organizing data efficiently.
  4. Azure Synapse Analytics: Azure Synapse Analytics (formerly SQL Data Warehouse) is an analytics service that enables organizations to analyze large volumes of data using both serverless and provisioned resources. It provides integration with Apache Spark and SQL-based analytics for data exploration, transformation, and visualization.
  5. Azure HDInsight: Azure HDInsight is a fully managed Apache Hadoop, Spark, and other open-source big data analytics service in the cloud. It enables organizations to process and analyze large datasets using popular open-source frameworks and tools.
  6. Azure Data Factory: Azure Data Factory is a fully managed extract, transform, and load (ETL) service that allows organizations to create, schedule, and orchestrate data workflows at scale. It supports hybrid data integration, data movement, and data transformation across on-premises and cloud environments.
  7. Azure Stream Analytics: Azure Stream Analytics is a real-time event processing service that helps organizations analyze and react to streaming data in real-time. It supports both simple and complex event processing using SQL-like queries and integrates with various input and output sources.
  8. Azure Databricks: Azure Databricks is a fast, easy, and collaborative Apache Spark-based analytics platform that provides data engineering, data science, and machine learning capabilities. It enables organizations to build and deploy scalable analytics solutions using interactive notebooks and automated workflows.
  9. Azure Data Explorer: Azure Data Explorer is a fully managed data analytics service optimized for analyzing large volumes of telemetry data from IoT devices, applications, and other sources. It provides fast and interactive analytics with support for ad-hoc queries, streaming ingestion, and rich visualizations.

These are just a few examples of the data management tools and services available on Azure. Depending on specific requirements and use cases, organizations can leverage Azure’s comprehensive portfolio of data services to meet their data management needs.