Master CloudWatch StackCharts: Enhance Your AWS Monitoring

Master CloudWatch StackCharts: Enhance Your AWS Monitoring
cloudwatch stackchart

In the vast and dynamic landscape of cloud computing, maintaining a clear and comprehensive view of your infrastructure's health and performance is not just a best practice—it's a critical imperative. As applications scale, microservices proliferate, and serverless architectures become the norm, the complexity of monitoring grows exponentially. AWS CloudWatch emerges as the indispensable nerve center for observability within the Amazon Web Services ecosystem, offering a suite of tools designed to collect, visualize, and act upon operational data. Among its powerful arsenal, CloudWatch StackCharts stand out as a particularly transformative feature, enabling engineers, developers, and operations teams to aggregate, correlate, and visualize related metrics across multiple resources in a single, intuitive chart. This ability to slice and dice performance data, not just individually but as a cohesive stack, unlocks unprecedented insights, transforming reactive troubleshooting into proactive performance management and empowering teams to truly master their AWS monitoring strategy.

This exhaustive guide will meticulously unpack the power of CloudWatch StackCharts. We will navigate their fundamental concepts, delve into advanced techniques for constructing insightful visualizations, explore practical use cases across a spectrum of AWS services, and share best practices for embedding them into a robust monitoring workflow. By the end of this journey, you will possess the knowledge and skills to leverage StackCharts not merely as a reporting tool, but as a strategic asset, significantly enhancing your ability to understand, optimize, and maintain the resilience and efficiency of your AWS deployments, regardless of their scale or intricacy.

The Foundational Pillars of AWS Monitoring: A CloudWatch Overview

Before we dive into the nuanced capabilities of StackCharts, it's essential to firmly grasp the foundational components that underpin AWS CloudWatch. CloudWatch is not just a single service; it's a holistic monitoring and observability solution that integrates seamlessly with virtually every AWS service, offering a unified platform for operational insights. At its core, CloudWatch operates on three primary data types: metrics, logs, and events, each playing a distinct yet complementary role in painting a complete picture of your application and infrastructure performance.

Metrics are the numerical representations of data points over time, providing quantitative insights into the performance and health of your resources. Almost every AWS service automatically publishes metrics to CloudWatch. For an Amazon EC2 instance, these might include CPU utilization, network I/O, or disk operations. For an Amazon S3 bucket, they could be the number of requests or the bytes uploaded/downloaded. Each metric is uniquely identified by its name, namespace (e.g., AWS/EC2, AWS/Lambda), and a set of dimensions. Dimensions are key-value pairs that help you refine a metric, such as InstanceId for an EC2 CPU utilization metric or FunctionName for a Lambda invocation count. Understanding how to select the right metrics and dimensions is paramount to creating meaningful StackCharts, as they form the very data points that will be aggregated and visualized. The power of metrics lies in their ability to provide a consistent, measurable pulse of your systems, allowing for the detection of trends, anomalies, and performance degradations.

Logs, on the other hand, are streams of textual information generated by applications, operating systems, and AWS services. CloudWatch Logs allows you to centralize logs from various sources, whether they're application logs from an EC2 instance, access logs from a Load Balancer, or execution logs from a Lambda function. Once ingested, these logs can be searched, filtered, and analyzed for specific patterns, errors, or events. While StackCharts primarily operate on numerical metrics, logs are crucial for diagnostic purposes, providing the granular context often needed to understand why a metric might be behaving in a particular way. For instance, a sudden spike in EC2 CPU utilization (visible in a StackChart) might prompt an investigation into application logs to identify the specific processes or requests causing the load. CloudWatch Logs Insights further enhances this by providing a powerful query language to extract structured data from logs, which can sometimes even be transformed into custom metrics for visualization.

Events are near real-time streams of changes in your AWS environment. CloudWatch Events (now integrated with Amazon EventBridge) delivers a stream of system events that describe changes in AWS resources. These could be anything from an EC2 instance changing state, an Auto Scaling group launching an instance, or a scheduled event. Events are instrumental for building reactive, event-driven architectures, allowing you to trigger actions (e.g., Lambda functions, SNS topics, SQS queues) in response to specific operational occurrences. While StackCharts don't directly visualize events, the actions triggered by events can generate metrics that are visualized. For example, an event signifying an EC2 instance failure might lead to an alarm, and the subsequent recovery process might be reflected in metrics showing new instance launches or service recovery times, which can then be charted.

Together, these pillars provide a comprehensive framework for monitoring. Metrics offer a high-level overview and trend analysis, logs provide the granular detail for root cause analysis, and events enable automation and proactive responses. CloudWatch StackCharts, by focusing on the powerful aggregation and visualization of metrics, act as the primary interface for gaining actionable, high-level operational intelligence from this rich data tapestry. They bring coherence to disparate data points, making the complex simple and the obscure clear, paving the way for more informed decision-making and efficient system management.

Deep Dive into CloudWatch StackCharts: The Art of Collective Visualization

CloudWatch StackCharts represent a significant leap forward in visualizing time-series data, moving beyond simple line graphs of individual metrics to present a holistic, aggregated view of related resources. At their heart, StackCharts are about understanding the composition of a metric across a group of entities, illustrating how different components contribute to a larger sum, or how they compare against each other over time. This section will thoroughly explore what StackCharts are, why they are so impactful, and the key components that define their structure and utility.

What are CloudWatch StackCharts? Visual Explanation and Core Concept

Imagine you have an Auto Scaling group managing a fleet of EC2 instances, and you want to monitor the total CPU utilization across all instances, but also understand the individual contribution of each instance to that total. A standard line graph would typically show either the average CPU utilization, a sum of all CPUs, or require you to plot a separate line for each instance, which quickly becomes unwieldy with a large number of instances.

This is precisely where StackCharts shine. A StackChart, typically rendered as a stacked area chart, displays multiple time-series metrics stacked on top of each other. The height of each colored segment at any given point in time represents the value of an individual metric, while the total height of the stack represents the aggregated sum of all those individual metrics.

For example, a StackChart visualizing EC2 CPU utilization for an Auto Scaling group would show: * A different color for each instance's CPU utilization. * The area for each color would grow or shrink based on that instance's load. * The top edge of the entire stacked area would represent the total CPU utilization across all instances in the group.

This visual representation immediately conveys two crucial pieces of information: the overall health (total utilization) and the distribution of that load among individual components. You can instantly see if one instance is disproportionately burdened, if the load is evenly distributed, or if new instances are effectively absorbing increased traffic.

Why are StackCharts Revolutionary for Monitoring?

The power of StackCharts stems from their ability to enable intuitive pattern recognition and rapid root cause analysis. They are revolutionary for several reasons:

  1. Holistic View at a Glance: Instead of toggling between multiple graphs or sifting through raw data, StackCharts present a consolidated view. This "big picture" perspective is invaluable for quickly assessing the overall health and performance of a service or application comprised of many interdependent resources. For an application composed of numerous microservices running on separate Lambda functions, a StackChart can reveal the combined invocation rate and highlight which functions are most active.
  2. Facilitating Correlation and Anomaly Detection: When individual metrics are stacked, it becomes much easier to identify correlations between components. A sudden drop in one instance's CPU utilization coinciding with a spike in another's might indicate a load balancer rebalancing. Conversely, an unexpected flatlining of a segment within the stack while others remain active could signal an issue with that specific resource. Anomalies that might be hidden in an average or sum can become glaringly obvious when visualized in context.
  3. Understanding Distribution and Contribution: StackCharts are unparalleled in their ability to illustrate how individual elements contribute to a collective whole. This is critical for capacity planning (Are we hitting limits?), cost optimization (Are resources over/under-utilized?), and performance debugging (Which component is the bottleneck?). If you're running a multi-container application on ECS, a StackChart showing CPU or memory usage per task can quickly reveal resource hogs.
  4. Simplified Troubleshooting: When an alarm triggers for a high aggregate metric, a StackChart immediately provides the granular detail needed to start troubleshooting. Instead of guessing which instance or component is causing the issue, the StackChart visually points to the culprit, dramatically reducing mean time to resolution (MTTR).
  5. Dynamic Scalability and Responsiveness: In auto-scaling environments, resources frequently come and go. StackCharts in CloudWatch are dynamic; they automatically adapt to changes in the underlying resources. As new instances are launched or terminated, the chart updates to reflect the current composition of the fleet, ensuring that your monitoring dashboards always reflect the live state of your infrastructure without manual intervention. This dynamic nature is particularly beneficial for transient resources like Lambda functions, where instances are constantly spun up and down.

Key Components: Metrics, Dimensions, Aggregation, Time Range, and Visualization Types

To effectively leverage StackCharts, understanding their underlying components is crucial:

  1. Metrics: As discussed, these are the numerical data points. For StackCharts, you'll often select a single metric (e.g., CPUUtilization) but then choose to split it by one of its dimensions.
  2. Dimensions: Dimensions are the key to unlocking the power of StackCharts. When you select a metric and then choose to "Group by" a dimension (e.g., InstanceId, FunctionName, DBInstanceIdentifier), CloudWatch fetches a separate time-series for each unique value of that dimension within the selected scope. Each of these unique time-series then becomes a separate layer in your StackChart. If you group CPUUtilization by InstanceId, each instance will get its own colored segment.
  3. Aggregation (Statistic): Metrics are typically collected at a very granular level, often every minute. When visualizing over longer periods, these data points are aggregated using a statistic. For StackCharts, common statistics include:
    • Sum: Ideal for metrics where you want to see the total collective value (e.g., total requests, total network bytes). When stacked, the sum of all individual segments represents the true total.
    • Average: While an average of averages can be misleading, "average" for a StackChart implies that each segment represents the average of its specific dimension value. The overall stack is still often sum-based.
    • Maximum/Minimum: Useful for identifying peak or lowest values.
    • Count: For counting occurrences, useful for events like invocation counts.
    • Percentiles (p90, p99): Critical for understanding performance distribution and identifying outliers, especially for latency metrics.
  4. Time Range: The selected time range dictates the duration over which the data is displayed (e.g., 1 hour, 24 hours, 7 days). CloudWatch automatically adjusts the data resolution (granularity) based on the time range to ensure optimal performance and readability. Shorter ranges allow for minute-by-minute detail, while longer ranges show broader trends.
  5. Visualization Types: While StackCharts are predominantly associated with stacked area charts, CloudWatch offers flexibility. When you "Stack" a metric, it defaults to a stacked area. However, you can also view the individual components as separate lines within the same graph, or even switch to bar charts for discrete data points. The stacked area is generally the most effective for visualizing contributions to a total over time.

By mastering these components, you gain the ability to construct rich, informative StackCharts that transform raw data into actionable intelligence. They are not just pretty graphs; they are powerful analytical instruments that reveal the intricate dance of your distributed systems.

Constructing Your First StackChart: A Practical Walkthrough

Building an effective CloudWatch StackChart is a straightforward process within the AWS Console, but it requires a clear understanding of your monitoring objectives and the data you wish to visualize. This section provides a step-by-step guide to creating your first StackChart, illustrating the key decisions you'll make along the way.

Step-by-Step Guide in the AWS Console

  1. Navigate to CloudWatch: Log in to the AWS Management Console and search for "CloudWatch" in the services bar. Click on it to open the CloudWatch dashboard.
  2. Go to Dashboards: In the left-hand navigation pane, under "Dashboards," click on "Dashboards." You can either select an existing dashboard to add a new widget to or create a new dashboard if you're starting fresh. For this exercise, let's assume you're adding to an existing or new dashboard. Click "Create dashboard" or select an existing one and then "Add widget."
  3. Choose Widget Type: When prompted to "Add widget," select "Line" or "Number." For StackCharts, we'll typically start with a "Line" graph, as it provides the foundational time-series visualization. Click "Next."
  4. Select Metrics: You'll now be presented with the "Add new widget" screen, specifically the "Metrics" tab. This is where you'll define the data for your chart.
    • Browse: Click "Browse" to explore metrics by namespace. For example, let's monitor CPUUtilization for an Auto Scaling group of EC2 instances. Navigate to AWS/EC2.
    • Search for Instances: Once in the AWS/EC2 namespace, you'll see various metric categories. Choose "Per-Instance Metrics" or "By Auto Scaling Group" if you know the group name. If you select "Per-Instance Metrics," you'll see a list of individual EC2 instances. You can filter by tags, instance state, or directly select multiple instances.
    • Select the Metric: Find and select the CPUUtilization metric for all the instances you want to monitor.
    • Apply Statistic: After selecting the metrics, choose the desired "Statistic" from the dropdown (e.g., Average, Sum). For a StackChart, Sum is often appropriate if you want to see the total utilization. If you want to see individual averages contributing to a sum, you might select Average for individual instances, and then CloudWatch will stack those averages.
  5. Configure Graph Options for Stacking: This is the critical step for transforming individual lines into a StackChart.
    • Switch to Graph Options Tab: After selecting metrics, click on the "Graphed metrics" tab or directly on "Graph options."
    • Enable Stacking: Look for the "Stack" checkbox or option. Tick it. This will immediately transform the selected metrics into a stacked area chart, where each unique instance (or whatever dimension you've grouped by) gets its own segment.
    • Grouping by Dimension: If your metrics are already grouped by a specific dimension (e.g., InstanceId as a result of selecting "Per-Instance Metrics"), CloudWatch will automatically stack them. If you selected a broader metric (e.g., "by Auto Scaling Group") and then drilled down, ensure that your metric query correctly includes the dimension you want to stack by. Sometimes you may need to explicitly "Group by" a dimension in the "Metrics" tab using a search query (e.g., SELECT SUM(CPUUtilization) FROM "AWS/EC2" GROUP BY InstanceId). CloudWatch often simplifies this for common services.
  6. Refine Appearance:
    • Title: Give your StackChart a descriptive title (e.g., "EC2 CPU Utilization by Instance in Prod ASG").
    • Y-Axis Labels: Adjust the Y-axis label if needed (e.g., "CPU %").
    • Colors/Legend: CloudWatch automatically assigns colors, and the legend will dynamically update to show which color corresponds to which instance/dimension value.
    • Annotation: Add vertical or horizontal annotations if there are specific events or thresholds you want to highlight.
  7. Add to Dashboard: Click "Create widget" or "Add to dashboard" to save your StackChart to the current dashboard.

Choosing Metrics and Dimensions

The success of your StackChart hinges on choosing the right metrics and dimensions:

  • Metric Selection: Focus on metrics that represent a quantifiable aspect of performance or resource usage, and where the collective sum or distribution across multiple entities is meaningful. Good candidates include:
    • CPUUtilization (EC2, ECS, Lambda)
    • NetworkIn/NetworkOut (EC2, ELB)
    • ReadOps/WriteOps (RDS, EBS)
    • Invocations/Errors (Lambda functions)
    • RequestCount/Latency (ALB, API Gateway)
    • ConsumedCapacityUnits (DynamoDB)
    • VolumeBytesUsed (EBS)
  • Dimension Selection: This is paramount for stacking. You typically want to stack by the dimension that differentiates the individual components you're interested in.
    • For EC2: InstanceId
    • For Lambda: FunctionName, Resource (if using aliases/versions)
    • For RDS: DBInstanceIdentifier
    • For ALB: TargetGroup, LoadBalancer
    • For ECS/EKS: ClusterName, ServiceName, TaskId
    • For DynamoDB: TableName

Experimenting with Different Aggregations

While Sum is often the go-to for StackCharts to represent a total, experimenting with other statistics can yield different insights:

  • Sum: Best for showing the total combined load or throughput. Example: total requests hitting your application, summed across all instances.
  • Average (with careful interpretation): If you stack individual Average CPU utilization per instance, the stack will show the combined average over the period, highlighting instances with higher average loads. However, the total height of the stack is still the sum of these individual averages, which may not directly translate to a meaningful "total average."
  • Maximum/Minimum: Less common for the segments of a StackChart, but useful if you were to overlay a line showing the max of all instances, for example. The visual nature of the stack itself often highlights max/min values more effectively.
  • Percentiles: For metrics like latency, displaying p90 or p99 for individual components as lines, and then visually stacking/comparing them, can highlight performance outliers. Stacking raw percentile values directly as areas is less common as they don't necessarily "sum up" meaningfully like throughput or utilization.

The key is to understand what question you're trying to answer. If you want to know "What is the total CPU consumption, and which instances are contributing the most?", then Sum aggregated over InstanceId is the right choice. If you're looking for "Are any individual instances hitting a high average CPU?", then individual Average per instance, possibly stacked, could work, but individual lines might be clearer.

Saving and Sharing Dashboards

Once your StackChart is configured, save the dashboard. CloudWatch Dashboards are highly shareable, allowing teams to collaborate on monitoring. You can share dashboards via a secure link, making it easy for different stakeholders—from developers to operations and even management—to access the same unified view of system health. Regular review of these dashboards, perhaps in daily stand-ups or weekly operational reviews, ensures that performance trends and anomalies are consistently observed and addressed.

By following these steps, you can quickly move from raw data to a rich, insightful StackChart that provides a foundational layer for enhanced AWS monitoring, offering immediate value in understanding the dynamic behavior of your cloud infrastructure.

Advanced StackChart Techniques: Unlocking Deeper Insights

While basic StackCharts provide immediate value, CloudWatch offers a powerful set of features that allow you to construct highly sophisticated and deeply insightful visualizations. Mastering these advanced techniques can transform your monitoring dashboards into powerful analytical tools, capable of revealing subtle patterns, predicting potential issues, and significantly streamlining troubleshooting efforts.

Mathematical Expressions (METRICS Function, Arithmetic Operations)

One of the most potent features within CloudWatch is the ability to apply mathematical expressions to your metrics. This capability is especially powerful when combined with StackCharts, allowing you to derive new, custom metrics on the fly from existing ones without needing to publish them as separate custom metrics.

The METRICS function is central to this. It allows you to select metrics and then perform various operations. * Basic Arithmetic Operations: You can perform addition, subtraction, multiplication, and division on metrics. * Example: Calculating the error rate percentage for a Lambda function. You might have Invocations and Errors metrics. An expression like m1 / m2 * 100 (where m1 is Errors and m2 is Invocations) can create a derived error rate metric. If you want to stack error rates per function, you would apply this expression to each function's Errors and Invocations metrics and then stack the results. * Aggregating Across Dimensions: You can use functions like SUM(), AVG(), MIN(), MAX(), STDDEV() directly within expressions to aggregate metrics across dimensions that are not natively grouped by CloudWatch. This is incredibly useful for creating custom sums or averages that aren't available as standard statistics. * Example: If you want to sum CPUUtilization across all instances belonging to a specific Auto Scaling group, but CloudWatch doesn't provide a direct "Sum by ASG" option, you could use SUM(METRICS()) on the individual InstanceId metrics. * Conditional Logic: While more complex, mathematical expressions can include IF statements to filter or transform data based on conditions.

When applying these expressions to StackCharts, you're essentially creating a stacked chart of derived metrics. This is invaluable for metrics like "cost per transaction," "requests per second per instance," or "effective throughput," which aren't raw metrics but are crucial for business and operational insights. For instance, to calculate "requests per instance" and stack it, you'd define an expression that divides the RequestCount by the number of active instances (which might itself be a derived metric or a static value if your fleet size is constant) for each instance, and then stack those results.

FILL and TIME_SERIES Functions for Data Density and Completeness

CloudWatch metrics are not always perfectly continuous, especially for services with intermittent activity or when resources are scaled up and down. Gaps in data can make StackCharts look disjointed or misleading. The FILL function addresses this by providing strategies to handle missing data points.

  • FILL(VALUE): Fills missing data points with a specified static value (e.g., FILL(0) to treat gaps as zero activity). This is critical for StackCharts where you want the sum to accurately reflect periods of inactivity. If an instance temporarily stops sending CPUUtilization metrics, FILL(0) ensures its segment contributes zero to the total, rather than leaving a gap in the stack.
  • FILL(REPEAT): Fills missing data points with the last known value. This is useful for metrics that are expected to be constant or slowly changing, like configuration parameters or resource limits.
  • FILL(LINEAR): Interpolates missing data points linearly between the surrounding known values. Best for metrics that are generally smooth and continuous.

The TIME_SERIES function is another powerful tool, especially for advanced mathematical expressions. It returns a time series of numbers, allowing you to perform operations across entire time series rather than just individual data points. This is frequently used in conjunction with other functions to create more complex derived metrics.

Example: Using FILL(0) for a StackChart of Lambda Invocations. If a Lambda function isn't invoked for a period, its invocation count would be zero. Without FILL(0), that function's segment in the StackChart would disappear, making the overall stack appear smaller than it should be if other functions are still active. FILL(0) ensures a continuous, accurate representation of total invocations, with inactive functions contributing zero to the stack.

Cross-Account and Cross-Region Monitoring

In larger enterprises, AWS resources are often spread across multiple AWS accounts (e.g., dev, test, prod) and different geographic regions for redundancy and disaster recovery. CloudWatch StackCharts can aggregate metrics from these disparate sources, providing a single, consolidated view crucial for global operational awareness.

  • Cross-Account: By configuring CloudWatch cross-account observability, a central monitoring account can pull metrics from other linked accounts. When creating a StackChart in the central account, you can select metrics from any of the linked accounts. This allows you to create a StackChart showing, for example, the total CPU utilization across all prod EC2 instances, regardless of which prod account they reside in. Each segment of the stack could represent an InstanceId with an appended AccountId, giving you immediate visibility into which account/instance is experiencing load.
  • Cross-Region: Similarly, CloudWatch allows you to view metrics from different regions within a single dashboard. This is configured during the dashboard creation process. A StackChart could then visualize the RequestCount for a global application's load balancers, with each segment representing a load balancer from a different region, showcasing global traffic distribution and regional performance variations.

These capabilities are essential for organizations operating at scale, providing a "single pane of glass" for complex, distributed environments and making it easier to identify region-specific or account-specific issues within a global context.

Custom Metrics Integration

While AWS services publish a wealth of metrics to CloudWatch, there are often application-specific performance indicators that are equally critical. CloudWatch enables you to publish your own custom metrics, which can then be seamlessly integrated into StackCharts.

  • Publishing Custom Metrics: You can publish custom metrics using the AWS SDK, AWS CLI, or CloudWatch Agent. These metrics can represent anything from application-specific business transactions per second, internal queue depths, API response times for external services, or even success/failure rates of custom batch jobs.
  • Integrating into StackCharts: Once published, custom metrics behave exactly like native AWS metrics. You can select them from their custom namespace, apply dimensions, and then group them into StackCharts.
    • Example: An application might expose a custom metric App/OrderService/OrdersProcessed with a ServiceVersion dimension. A StackChart could then visualize the total OrdersProcessed across all service versions, with each segment representing a different ServiceVersion, providing insight into the performance impact of new deployments.
    • Another example: if you're monitoring an external AI Gateway or an LLM Gateway that publishes its internal performance metrics (like request latency, error counts, or token usage) to CloudWatch as custom metrics, you could create a StackChart visualizing the distribution of these metrics across different model endpoints or client applications. This would provide granular visibility into the AI workload performance, showing, for instance, which LLM models are receiving the most requests or exhibiting the highest latency, all within a unified CloudWatch dashboard.

Anomaly Detection

CloudWatch Anomaly Detection automatically applies machine-learning algorithms to continuously analyze metrics, learn their typical behavior, and create a band of expected values. This band dynamically adjusts to typical fluctuations, seasonal trends, and changing metric patterns.

  • Visualizing Anomaly Bands in StackCharts: While you can't stack anomaly detection bands themselves, you can overlay an anomaly detection band onto the total line of your StackChart. This allows you to quickly see if the overall aggregate performance of your stacked resources deviates significantly from its learned baseline.
  • Alarms from Anomalies: More importantly, you can create CloudWatch alarms based on these anomaly detection bands. If the total of your stacked metrics (e.g., total RequestCount across all instances) falls outside its expected range, an alarm can trigger, prompting investigation. This proactive approach helps identify issues before they escalate into major outages, moving monitoring from threshold-based to behavior-based.

By combining these advanced techniques, CloudWatch StackCharts evolve from simple visual aids into sophisticated analytical instruments. They empower engineers to not only observe but truly understand the complex interplay of their cloud components, enabling more informed decisions, faster problem resolution, and ultimately, more resilient and efficient AWS architectures.

APIPark is a high-performance AI gateway that allows you to securely access the most comprehensive LLM APIs globally on the APIPark platform, including OpenAI, Anthropic, Mistral, Llama2, Google Gemini, and more.Try APIPark now! 👇👇👇

Use Cases for CloudWatch StackCharts: Real-World Applications

The versatility of CloudWatch StackCharts makes them indispensable across a wide array of AWS services and operational scenarios. Their ability to visualize contributions to a whole makes them particularly effective for understanding the behavior of distributed systems and resource fleets. Let's explore several practical use cases demonstrating how StackCharts can significantly enhance monitoring for various AWS services.

1. EC2 Fleet Performance and Resource Utilization

Scenario: You manage an Auto Scaling group of EC2 instances running a critical web application. You need to ensure the fleet is efficiently utilizing resources and quickly identify any underperforming or overloaded instances.

StackChart Application: * Metric: CPUUtilization, NetworkIn, NetworkOut, DiskReadBytes, DiskWriteBytes * Dimension to Stack By: InstanceId * Statistic: Sum (for total fleet utilization) or Average (if focusing on average per instance contribution)

Insights: * Total Load: The top line of the stacked chart immediately shows the aggregate CPU usage or network traffic across the entire fleet. * Instance Contribution: Each colored segment represents an individual EC2 instance. You can quickly spot if one instance is consistently consuming more CPU than others, indicating a potential issue with its application process, configuration, or if it's struggling to scale. * Scaling Events: Observe how the stack changes when new instances launch or existing ones terminate. New segments appearing or disappearing, and the subsequent rebalancing of load, are clearly visible. * Performance Bottlenecks: A consistent high total CPU combined with uneven distribution can point to a poorly configured load balancer or an application issue impacting specific instances.

2. Lambda Concurrency and Error Rates

Scenario: You have a serverless application composed of numerous Lambda functions. You need to monitor their collective performance, identify error hotspots, and manage concurrency to avoid throttling.

StackChart Application: * Metric 1: Invocations * Dimension to Stack By: FunctionName * Statistic: Sum * Metric 2: Errors * Dimension to Stack By: FunctionName * Statistic: Sum * Metric 3 (Custom or Derived): ConcurrentExecutions

Insights: * Total Invocations: A StackChart of Invocations by FunctionName shows which functions are most active and the overall processing load of your serverless backend. * Error Hotspots: A StackChart of Errors by FunctionName immediately highlights which functions are encountering issues, allowing for targeted investigation. FILL(0) is crucial here to represent periods of no errors accurately. * Concurrency Management: For ConcurrentExecutions (especially if you define a custom metric that sums or averages per function if CloudWatch doesn't provide this directly for individual function contributions), a StackChart can help you visualize how close you are to your account's concurrency limits or function-specific reserved concurrency.

3. RDS Database Health and Resource Contention

Scenario: You operate a critical Amazon RDS database, and you need to monitor its resource consumption across various replicas or identify contention points.

StackChart Application: * Metric: CPUUtilization, DatabaseConnections, ReadIOPS, WriteIOPS, FreeStorageSpace * Dimension to Stack By: DBInstanceIdentifier (if you have read replicas or multiple database instances in a cluster) * Statistic: Sum or Average

Insights: * Replica Load Distribution: For Read Replicas, a StackChart of ReadIOPS by DBInstanceIdentifier can show if read queries are being evenly distributed or if one replica is bearing the brunt of the load. * Connection Spikes: A StackChart of DatabaseConnections can reveal overall connection patterns and highlight if specific instances are reaching connection limits. * Resource Exhaustion: Combining metrics like CPUUtilization and FreeStorageSpace across multiple RDS instances in a stack can give an early warning of resource exhaustion across your database tier.

4. ELB/ALB Request Rates and Latencies

Scenario: Your application relies on an Elastic Load Balancer (ELB) or Application Load Balancer (ALB) to distribute traffic. You need to understand overall traffic patterns and pinpoint latency contributors.

StackChart Application: * Metric 1: RequestCount * Dimension to Stack By: LoadBalancer or TargetGroup * Statistic: Sum * Metric 2: TargetResponseTime * Dimension to Stack By: TargetGroup * Statistic: Average or p90/p99 (as lines, then comparing contributions visually)

Insights: * Total Traffic Volume: A StackChart of RequestCount by LoadBalancer (if you have multiple ALBs) or TargetGroup (if one ALB distributes to multiple target groups) provides a clear picture of overall application traffic and how it's distributed. * Latency Breakdown: While TargetResponseTime is often better visualized as individual lines (perhaps with percentiles), you can use a StackChart of HTTPCode_Target_2XX_Count for different target groups to see which backend services are successfully processing requests and their proportional contribution to overall success. Or, if you have a custom metric for latency per instance behind a target group, you could stack that. * Identifying Faulty Target Groups: If one segment of the RequestCount stack suddenly drops to zero, it indicates a problem with that specific target group or its registered instances.

5. S3 Request Patterns and Data Transfer

Scenario: You use Amazon S3 extensively for data storage, web hosting, or as a backend for applications. You need to monitor access patterns and data transfer volumes.

StackChart Application: * Metric: BucketSizeBytes, NumberOfObjects, GetRequests, PutRequests, DownloadBytes, UploadBytes * Dimension to Stack By: BucketName * Statistic: Sum

Insights: * Total Storage/Objects: A StackChart of BucketSizeBytes or NumberOfObjects across multiple buckets provides a quick overview of your total storage footprint and object count, identifying rapidly growing buckets. * Request Distribution: Stacked GetRequests or PutRequests by BucketName show which buckets are most actively accessed for reads or writes, helping to understand application usage patterns or identify potential hotspots. * Data Transfer Insights: DownloadBytes and UploadBytes can be stacked to visualize total data ingress/egress and identify buckets contributing most to data transfer costs or network load.

6. Monitoring Containerized Applications (ECS/EKS)

Scenario: You run microservices on Amazon ECS or EKS, and you need granular visibility into resource consumption per task, service, or pod.

StackChart Application: * Metric: CPUUtilization (from AWS/ECS/ContainerInsights or ContainerInsights for EKS), MemoryUtilization * Dimension to Stack By: TaskDefinitionFamily, ServiceName, PodName, ClusterName * Statistic: Average or Sum

Insights: * Resource Hogs: StackCharts of CPU and memory utilization per task or service can immediately pinpoint containerized applications that are consuming excessive resources, leading to performance issues or increased costs. * Service Health: Observe the aggregate resource usage for a particular service. If one segment within a service's CPU stack disappears, it could indicate a failed task or pod. * Capacity Planning: Total CPU/memory across a cluster, broken down by service or task definition, helps in understanding overall cluster utilization and making informed scaling decisions.

In all these scenarios, the common thread is the power of StackCharts to simplify complex, multi-resource environments into digestible, actionable visualizations. They provide both the forest and the trees, allowing you to zoom out for a high-level overview and zoom in to identify individual contributors to overall system behavior.

Best Practices for Maximizing StackChart Effectiveness

Creating StackCharts is just the beginning; truly mastering them involves adopting a set of best practices that ensure your visualizations are not only informative but also actionable, maintainable, and aligned with your operational goals. These practices elevate StackCharts from mere data displays to indispensable tools in your monitoring arsenal.

1. Define Clear Monitoring Goals

Before you even begin dragging and dropping metrics, clearly articulate what you want to achieve with your StackChart. Ask yourself: * What problem am I trying to solve? (e.g., "Identify the busiest Lambda functions," "Understand EC2 instance load distribution," "Monitor total application throughput"). * What specific metrics will help answer this question? * What time period is most relevant for this insight? * Who is the audience for this chart, and what level of detail do they need?

Having well-defined goals ensures that you select the right metrics, dimensions, and aggregation methods, leading to charts that are purposeful and directly contribute to operational intelligence, rather than just being a collection of data points. For example, if the goal is cost optimization, you might focus on metrics like VolumeBytesUsed for S3 or ConsumedCapacityUnits for DynamoDB, stacked by BucketName or TableName.

2. Start Simple, Then Iterate

Resist the urge to cram too much information into a single StackChart initially. Overly complex charts with too many segments or different metric types can quickly become unreadable. * Begin with a core metric: Focus on one key performance indicator (e.g., CPUUtilization, Invocations). * Limit dimensions: Start by stacking on the most logical dimension (e.g., InstanceId, FunctionName). * Refine gradually: As you gain familiarity, you can introduce more advanced techniques like mathematical expressions, custom metrics, or cross-account data to add layers of insight. It's often better to have several focused StackCharts on a dashboard than one sprawling, incomprehensible one.

3. Leverage Tagging for Dynamic Dashboards

AWS resource tagging is an incredibly powerful mechanism for organizing and filtering resources. When combined with CloudWatch, it enables the creation of highly dynamic and flexible dashboards, especially beneficial for StackCharts. * Consistent Tagging Strategy: Implement a consistent tagging strategy across your AWS environment (e.g., Environment:Production, Service:WebApp, Team:Backend). * Filtering by Tags: When creating or editing a CloudWatch widget, you can filter metrics by tags. This means you can create a StackChart that automatically includes all EC2 instances tagged Environment:Production and Service:WebApp, regardless of their InstanceId. As new instances are launched with these tags, they are automatically added to your StackChart without manual intervention. * Parametrized Dashboards: For even greater dynamism, consider using CloudWatch Dashboards variables/parameters. This allows users to select a tag value (e.g., a specific Service name) from a dropdown, and the entire dashboard, including StackCharts, will dynamically update to show metrics only for resources matching that selected tag. This is ideal for managing multiple similar services or environments within a single dashboard template.

4. Combine with Alarms for Proactive Monitoring

StackCharts provide excellent visual insights, but they are most powerful when paired with CloudWatch Alarms. An alarm detects abnormal behavior; a StackChart helps you understand what is abnormal and where it's happening. * Alarm on Aggregate Metrics: Set alarms on the total of your stacked metrics (e.g., if the SUM of CPUUtilization across all instances exceeds 80%). * Alarm on Individual Contributions (less common for stack, more for lines): While less common for StackCharts directly, you can also set alarms on individual metric components, and then use the StackChart to visualize the context when that individual alarm triggers. * Anomaly Detection Alarms: As discussed in advanced techniques, combine StackCharts with anomaly detection. An alarm can trigger when the total of your stacked metrics deviates from its expected behavior, prompting you to consult the StackChart to identify the contributing factors.

This combination ensures that you're not just passively observing but actively being notified of potential issues, with the StackChart providing the immediate context for investigation.

5. Regular Review and Refinement

Your infrastructure evolves, and so should your monitoring. Dashboards, including StackCharts, should not be set and forgotten. * Scheduled Reviews: Periodically review your dashboards with your team. Are the charts still relevant? Are they providing the insights you need? * Feedback Loop: Encourage feedback from users of the dashboards. Are there metrics missing? Is the chart too busy? Is the information clear? * Adjust as Needed: Based on feedback and changes in your architecture, adjust existing StackCharts, create new ones, or retire outdated ones. This iterative process ensures your monitoring remains effective and valuable.

6. Documentation and Naming Conventions

Good documentation and consistent naming are crucial, especially in large teams or complex environments. * Descriptive Titles: Give your StackCharts clear, concise titles that indicate what they are showing (e.g., "Prod API Service - Lambda Invocations by Function," "EU-West-1 Web Tier - EC2 CPU Utilization by Instance"). * Widget Notes: Use the widget notes feature in CloudWatch to add explanations about the chart's purpose, any custom metrics used, or specific interpretations. * Dashboard READMEs: For complex dashboards, consider adding a text widget as a "README" explaining the dashboard's purpose, key charts, and how to interpret them.

By adhering to these best practices, you can transform your CloudWatch StackCharts from simple graphs into powerful, dynamic, and actionable monitoring assets that truly enhance your ability to maintain healthy, performant, and cost-effective AWS environments.

Troubleshooting Common Monitoring Challenges with StackCharts

CloudWatch StackCharts are not just for routine monitoring; they are exceptionally powerful tools for troubleshooting performance issues, identifying bottlenecks, and rapidly pinpointing the root cause of operational anomalies. Their ability to visualize collective behavior and individual contributions dramatically streamlines the diagnostic process.

1. Identifying Performance Bottlenecks

Challenge: Your application's overall response time is high, but you're unsure which component is causing the slowdown.

StackChart Solution: * EC2 CPU/Memory: A StackChart of CPUUtilization or MemoryUtilization by InstanceId can quickly highlight instances that are consistently running at high capacity. If one or two instances are constantly near 100% CPU while others are low, they are likely the bottleneck, or traffic isn't being distributed effectively. * Lambda Concurrency/Duration: For serverless applications, StackCharts of Invocations and Duration by FunctionName can show if a particular function is consuming disproportionate execution time or hitting concurrency limits, indicating a performance issue within that specific function. * Database IOPS/Connections: StackCharts of ReadIOPS, WriteIOPS, or DatabaseConnections by DBInstanceIdentifier can reveal if a specific database instance (e.g., the primary or a particular read replica) is overloaded, leading to database-tier bottlenecks affecting the entire application.

By comparing multiple StackCharts or even creating combined charts, you can correlate a spike in one resource (e.g., high database connections) with a drop in application performance, allowing you to narrow down the problem space quickly.

2. Pinpointing Error Sources

Challenge: Users are reporting application errors, but you need to know which part of your distributed system is generating them.

StackChart Solution: * Lambda Errors: A StackChart of Errors by FunctionName is invaluable. A sudden spike in one specific function's error segment immediately tells you where to focus your log analysis and code review efforts. Using FILL(0) ensures that even functions with intermittent errors are clearly represented without gaps. * Load Balancer HTTP Codes: StackCharts of HTTPCode_Target_5XX_Count or HTTPCode_ELB_5XX_Count broken down by TargetGroup or LoadBalancer can reveal if the errors are originating from specific backend services or the load balancer itself. If a target group's 5XX count spikes, you know where to investigate the instances behind that group. * API Gateway Latency/Errors: For services exposed via API Gateway, a StackChart of 5XXError or Latency by API Name or Resource Path can quickly show which APIs or endpoints are experiencing issues. If a specific API's latency segment dramatically increases, it points to a problem with the backend integration for that particular API.

The visual nature of StackCharts provides an instant "heat map" of where errors are occurring, significantly accelerating the path to diagnosis.

3. Detecting Resource Exhaustion

Challenge: Your application is intermittently failing or slowing down, and you suspect resource limits are being hit.

StackChart Solution: * EC2/ECS Memory/Disk: StackCharts of MemoryUtilization and DiskSpaceUtilization (if custom metrics are published or via CloudWatch Agent) by InstanceId or Task ID can show if specific instances or containers are running out of memory or disk space, leading to crashes or performance degradation. * Lambda Concurrency: As mentioned, a StackChart of ConcurrentExecutions per function or the account-wide ConcurrentExecutions (if custom aggregated) helps visualize how close you are to limits. A flat-top on the stack might indicate throttling. * RDS Free Storage/Connections: A StackChart of FreeStorageSpace or DatabaseConnections by DBInstanceIdentifier can reveal if a database is approaching its storage limit or maxing out its available connections. A steadily shrinking segment for FreeStorageSpace is a clear warning sign.

StackCharts help visualize trends over time, allowing you to detect gradual resource exhaustion before it leads to critical failures, enabling proactive scaling or optimization.

4. Understanding Unexpected Spikes or Drops

Challenge: A metric unexpectedly spikes or drops, and you need to understand why and which component is responsible.

StackChart Solution: * Traffic Spikes: A StackChart of RequestCount by InstanceId or TargetGroup (for ALB) can show if a traffic spike is uniformly distributed or if it's hitting a specific instance/group unevenly, which could indicate a misconfigured load balancer or a targeted attack. * Unexpected Drops: If a segment in your Invocations StackChart for Lambda suddenly drops to zero, it means that specific function is no longer being invoked (or is failing completely and not even registering invocations), signaling a potential issue with the event source or the function itself. Similarly, an EC2 instance's CPUUtilization segment suddenly flatlining to zero might indicate an instance failure. * Cost Impact: If you're using custom metrics to track resource usage that impacts cost (e.g., data processed, API calls), a StackChart can highlight which components are driving unexpected cost spikes.

By visualizing these changes in the context of other components, StackCharts provide the necessary context to quickly investigate and understand the root cause of these unexpected behaviors. They empower operations teams to move beyond mere observation to rapid, informed action, significantly improving system reliability and operational efficiency.

Extending Observability Beyond Native AWS Services: The Role of Gateways in Modern Architectures

While CloudWatch StackCharts provide unparalleled visibility into your native AWS infrastructure, modern application architectures often extend beyond the direct purview of standard AWS services. The increasing adoption of microservices, serverless patterns, and especially artificial intelligence (AI) and machine learning (ML) models, introduces layers of abstraction and specialized services that require a broader observability strategy. This is where the concept of gateways becomes critically important, acting as intermediaries that manage, secure, and route traffic to diverse backend services, including those powered by AI.

The Rise of API Gateways, AI Gateways, and LLM Gateways

Modern applications, whether consumer-facing mobile apps, internal enterprise tools, or data-intensive analytics platforms, increasingly rely on sophisticated interfaces to expose their functionalities. At the forefront of this trend is the API Gateway. An API Gateway acts as a single entry point for all client requests, routing them to the appropriate backend service, handling authentication, authorization, traffic management, and caching. AWS API Gateway is a prime example, but organizations also deploy self-managed or third-party API Gateways for various reasons, including hybrid cloud environments or specific feature requirements. Monitoring the health and performance of these API Gateways is paramount, as they are often the first line of interaction for users and applications. CloudWatch StackCharts can monitor the underlying infrastructure supporting these gateways, such as the Lambda functions they invoke, the EC2 instances they front, or network traffic related to them.

With the dramatic advancements in AI, particularly Large Language Models (LLMs), a new category of gateways has emerged: the AI Gateway and its specialized sibling, the LLM Gateway. These gateways are designed specifically to manage access to AI/ML models, often from multiple providers (e.g., OpenAI, Anthropic, custom models). An AI Gateway can abstract away the complexities of different model APIs, provide unified authentication, enforce rate limits, manage cost tracking, and even facilitate prompt engineering or response caching. An LLM Gateway focuses specifically on large language models, offering capabilities like model routing (sending a request to the best-fit LLM), prompt versioning, content moderation, and fine-grained access control to sensitive AI capabilities. These specialized gateways are critical for organizations looking to integrate AI safely, efficiently, and scalably into their products and internal workflows.

The operations and performance of these AI Gateway and LLM Gateway services are just as crucial, if not more so, than traditional API Gateways. Failures or performance degradations in these layers can directly impact the user experience of AI-powered features, lead to spiraling costs, or expose sensitive data. Therefore, a comprehensive monitoring strategy must encompass these gateway layers, providing visibility into their internal metrics (e.g., request latency to AI models, token usage, error rates for model invocations, prompt processing times) alongside the foundational infrastructure metrics provided by CloudWatch.

Bridging Observability: CloudWatch StackCharts and Gateway Monitoring

While CloudWatch StackCharts provide invaluable insights into the underlying AWS infrastructure supporting such gateway platforms (e.g., monitoring the EC2 instances where a self-managed API Gateway or AI Gateway is deployed, or the Lambda functions they trigger), gaining deeper insights into the internal workings, performance, and API lifecycle management of these specialized gateways requires dedicated tools.

For organizations specifically focused on managing and optimizing their AI and REST services, platforms like ApiPark offer comprehensive solutions. APIPark, as an open-source AI Gateway and API Management Platform, provides end-to-end lifecycle management, quick integration of over 100 AI models, and unified API formats. It’s designed to simplify the complexities of managing AI Gateway and LLM Gateway functionalities, allowing developers to quickly combine AI models with custom prompts to create new APIs and providing a unified system for authentication and cost tracking across diverse AI models.

Crucially, APIPark also offers powerful internal monitoring and analytics features, including detailed API call logging and data analysis tools that display long-term trends and performance changes for the APIs it manages. While CloudWatch StackCharts can provide a macro-level view of the AWS infrastructure health that APIPark runs on (e.g., CPU, memory, network I/O of the underlying servers, or network traffic to the APIPark deployment), APIPark itself offers the granular control and application-layer analytics needed for the APIs it processes, ensuring optimal performance and security from the application layer up. This dual approach—using CloudWatch StackCharts for infrastructure observability and specialized platforms like APIPark for application-layer gateway metrics—creates a truly robust and comprehensive monitoring ecosystem.

By understanding how CloudWatch StackCharts can monitor the infrastructure supporting these gateway solutions, and how specialized AI Gateway and API Gateway platforms like ApiPark offer deeper, application-specific observability, teams can build a complete picture of their system's health. This ensures that whether you're dealing with traditional microservices or cutting-edge AI models, your entire architecture, from the deepest infrastructure layer to the outermost application API Gateway endpoint, is thoroughly monitored, optimized, and secure. This integrated approach to observability is the hallmark of resilient and high-performing modern cloud deployments.

Conclusion: Elevating Your AWS Monitoring with CloudWatch StackCharts

In the ceaselessly evolving landscape of cloud computing, where dynamism and scale are the norms, the ability to maintain a clear, comprehensive, and actionable view of your infrastructure's health is paramount. AWS CloudWatch StackCharts emerge not merely as a convenient visualization feature, but as a critical capability for any team striving for operational excellence within their AWS environment. They transform disparate metric data into intuitive, correlated insights, enabling engineers and operations teams to swiftly identify patterns, diagnose anomalies, and proactively manage the performance and resilience of their applications.

Throughout this extensive guide, we've journeyed from the foundational elements of CloudWatch to the intricate details of constructing, refining, and leveraging advanced StackChart techniques. We've explored how these powerful visualizations can demystify the behavior of EC2 fleets, pinpoint issues in serverless Lambda functions, uncover database bottlenecks, and illuminate traffic patterns across load balancers and storage services. We've also highlighted the strategic importance of integrating specialized monitoring for crucial components like API Gateway, AI Gateway, and LLM Gateway services, noting how platforms like ApiPark complement CloudWatch by providing granular application-layer insights.

By adopting a disciplined approach—defining clear monitoring goals, starting simple and iterating, embracing tagging, integrating with alarms, and continuously refining your dashboards—you can unlock the full potential of StackCharts. They serve as your central nervous system for observability, providing the immediate context needed to translate raw data into informed decisions, ultimately leading to faster troubleshooting, optimized resource utilization, and a significantly enhanced posture of operational readiness. Mastering CloudWatch StackCharts is not just about drawing better graphs; it's about fostering a deeper understanding of your AWS ecosystem, empowering your teams to build, deploy, and operate robust, high-performing applications with unparalleled confidence and efficiency. The journey to superior AWS monitoring is continuous, and StackCharts are an indispensable compass on that path.


Frequently Asked Questions (FAQs)

1. What is the primary benefit of using CloudWatch StackCharts over traditional line graphs? CloudWatch StackCharts' primary benefit is their ability to visualize the composition and contribution of individual components to an aggregate metric. Unlike traditional line graphs that show separate lines or just an average/sum, StackCharts display multiple time-series metrics stacked on top of each other, allowing you to see both the total value and the proportional impact of each contributing resource at a glance, making it easier to identify outliers, distribution imbalances, and trends across a fleet.

2. How do I make my StackCharts automatically update with new instances or resources? To achieve dynamic StackCharts, you should leverage AWS resource tagging. Apply consistent tags to your resources (e.g., Service:WebApp, Environment:Production). When adding metrics to your StackChart, filter by these tags instead of individual resource IDs. CloudWatch will then automatically include any new resources with matching tags in your chart, without requiring manual updates to the dashboard.

3. Can StackCharts monitor metrics across different AWS accounts or regions? Yes, CloudWatch supports cross-account and cross-region monitoring. By configuring CloudWatch cross-account observability, a central monitoring account can pull metrics from other linked accounts. Similarly, CloudWatch dashboards can be configured to display metrics from multiple regions. This allows you to create StackCharts that aggregate metrics from a distributed global or multi-account architecture into a single, unified view.

4. How can I use StackCharts for troubleshooting a high error rate? If your application experiences a high error rate, create a StackChart of an error-related metric (e.g., Errors for Lambda, HTTPCode_Target_5XX_Count for ALB) and group it by a relevant dimension (e.g., FunctionName, TargetGroup, InstanceId). This visualization will immediately highlight which specific function, target group, or instance is contributing the most to the overall error count, allowing you to rapidly narrow down your investigation to the problematic component.

5. How does a platform like ApiPark relate to CloudWatch StackCharts in a monitoring strategy? CloudWatch StackCharts excel at monitoring the underlying AWS infrastructure and its aggregate performance (e.g., CPU, memory, network I/O of EC2 instances, Lambda invocations). Platforms like ApiPark, an AI Gateway and API Management Platform, provide deep, application-layer observability for the APIs they manage, including internal performance metrics, detailed API call logs, and analytics for AI Gateway and LLM Gateway traffic. An effective strategy combines both: using CloudWatch StackCharts for comprehensive infrastructure health and using APIPark's internal analytics for granular insights into API and AI model performance and lifecycle management, offering a holistic view from infrastructure to application.

🚀You can securely and efficiently call the OpenAI API on APIPark in just two steps:

Step 1: Deploy the APIPark AI gateway in 5 minutes.

APIPark is developed based on Golang, offering strong product performance and low development and maintenance costs. You can deploy APIPark with a single command line.

curl -sSO https://download.apipark.com/install/quick-start.sh; bash quick-start.sh
APIPark Command Installation Process

In my experience, you can see the successful deployment interface within 5 to 10 minutes. Then, you can log in to APIPark using your account.

APIPark System Interface 01

Step 2: Call the OpenAI API.

APIPark System Interface 02