Slide 1

Slide 1 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Danilo Poccia Principal Evangelist, Serverless @danilop End-to-End Observability for Your Serverless Apps © 2020, Amazon Web Services, Inc. or its Affiliates. Danilo Poccia Principal Evangelist, Serverless @danilop End-to-End Observability for Your Serverless Apps

Slide 2

Slide 2 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Sample Order Processing App Users API Gateway Endpoint ReadOrder Lambda Function Orders Queue ProcessOrder Lambda Function Orders DynamoDB Table CreateOrder Lambda Function POST /order GET /order

Slide 3

Slide 3 text

© 2020, Amazon Web Services, Inc. or its Affiliates. $ sam validate $ sam build $ sam deploy Let’s deploy using AWS SAM… Demo

Slide 4

Slide 4 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Don’t build a network of connected “black boxes” Observability is a developer responsibility

Slide 5

Slide 5 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Levels of Observability Machine (HW, OS) Application Network

Slide 6

Slide 6 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Machine (HW, OS) Application Network The Three Pillars of Observability Distributed Systems Observability by Cindy Sridharan

Slide 7

Slide 7 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Machine (HW, OS) Application Network The Three Pillars of Observability Logs Metrics Tracing Distributed Systems Observability by Cindy Sridharan

Slide 8

Slide 8 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Metric Filters & Correlations IDs Logs Tracing Metric Filter Correlation ID Metrics

Slide 9

Slide 9 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Using Observability Logs Tracing Log aggregation & analytics Visualizations Alerting Metric Filter Correlation ID Metrics

Slide 10

Slide 10 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Using Observability on AWS CloudWatch Logs AWS X-Ray Traces CloudWatch Insights CloudWatch Dashboard CloudWatch Alarms CloudWatch ServiceLens Metric Filter CloudWatch Metrics

Slide 11

Slide 11 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Understand performance… Systems Performance by Brendan Gregg

Slide 12

Slide 12 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Understand performance… and latency… Systems Performance by Brendan Gregg

Slide 13

Slide 13 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Understand performance… and latency… and percentiles! P50 P90 P99 P100

Slide 14

Slide 14 text

© 2020, Amazon Web Services, Inc. or its Affiliates.

Slide 15

Slide 15 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Let’s go back to our app…

Slide 16

Slide 16 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Sample Order Processing App Users API Gateway Endpoint ReadOrder Lambda Function Orders Queue ProcessOrder Lambda Function Orders DynamoDB Table CreateOrder Lambda Function POST /order GET /order

Slide 17

Slide 17 text

© 2020, Amazon Web Services, Inc. or its Affiliates. HTTP POST /order { "order": { "accountId": "Danilo", "items": [ { "sku": "123", "price": 5 }, { "sku": "321", "price": 10 } ] } } Demo

Slide 18

Slide 18 text

© 2020, Amazon Web Services, Inc. or its Affiliates. HTTP GET /order/{id} { "order": { "accountId": "Danilo", "id": "4b0e8231-4eca-4356-b6d7-b626499b61e0", "items": [ { "sku": "123", "price": 5 }, { "sku": "321", "price": 10 } ] } } Demo

Slide 19

Slide 19 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Adding Custom Metrics with PutMetricData const metricData = await cloudWatch.putMetricData({ MetricData: [ { MetricName: 'My Business Metric', Dimensions: [ { Name: 'Location', Value: 'Paris' } ], Timestamp: new Date, Value: 123.4 } ], Namespace: METRIC_NAMESPACE }).promise(); • Metric name • Dimensions • Timestamp • Value • Namespace

Slide 20

Slide 20 text

© 2020, Amazon Web Services, Inc. or its Affiliates. CloudWatch Embedded Metric Format Demo

Slide 21

Slide 21 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Using CloudWatch Anomaly Detection Alarms

Slide 22

Slide 22 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Editing the Anomaly Detection Model Demo

Slide 23

Slide 23 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Safe deployments in SAM Resources: GetFunction: Type: AWS::Serverless::Function Properties: AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent5Minutes Alarms: - !Ref ApiErrorsAlarm - !Ref ApiLatencyAlarm Hooks: PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PreTrafficLambdaFunction Canary10Percent30Minutes Canary10Percent5Minutes Canary10Percent10Minutes Canary10Percent15Minutes Linear10PercentEvery10Minutes Linear10PercentEvery1Minute Linear10PercentEvery2Minutes Linear10PercentEvery3Minutes AllAtOnce + Custom Deployment Configurations

Slide 24

Slide 24 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Safe deployments in SAM Resources: GetFunction: Type: AWS::Serverless::Function Properties: AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent5Minutes Alarms: - !Ref ApiErrorsAlarm - !Ref ApiLatencyAlarm Hooks: PreTraffic: !Ref PreTrafficLambdaFunction PostTraffic: !Ref PreTrafficLambdaFunction These can be CloudWatch anomaly detection alarms

Slide 25

Slide 25 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Understanding Data – CloudWatch Logs + Insights Demo

Slide 26

Slide 26 text

© 2020, Amazon Web Services, Inc. or its Affiliates. End-to-end tracing – AWS X-Ray Traces

Slide 27

Slide 27 text

© 2020, Amazon Web Services, Inc. or its Affiliates. AWS X-Ray Key Concepts Segments Subsegments

Slide 28

Slide 28 text

© 2020, Amazon Web Services, Inc. or its Affiliates. End-to-end tracing – AWS X-Ray Service Map

Slide 29

Slide 29 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Enabling X-Ray tracing in the AWS Console AWS Lambda Console (per function) Amazon API Gateway Console (per stage)

Slide 30

Slide 30 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Enabling X-Ray tracing using AWS SAM Globals: Function: Tracing: Active Api: TracingEnabled: True Global section All Lambda functions All API Gateway REST API

Slide 31

Slide 31 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Enabling X-Ray tracing in your code (Node.js) const AWS = require('aws-sdk'); const AWSXRay = require('aws-xray-sdk'); const AWS = AWSXRay.captureAWS(require('aws-sdk’)); const https = AWSXRay.captureHTTPs(require('https'));

Slide 32

Slide 32 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Using X-Ray tracing in your code (Express.js) const AWSXRay = require('aws-xray-sdk’); const app = express(); app.use(AWSXRay.express.openSegment('my-segment')); app.get('/send', function (req, res) { res.setHeader('Content-Type', 'application/json’); res.send('{"hello": "world"}'); }); app.use(AWSXRay.express.closeSegment());

Slide 33

Slide 33 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Using X-Ray tracing in your code (Express.js) app.get('/', function (req, res) { var host = 'api.example.com’; AWSXRay.captureAsyncFunc('send', function(subsegment) { sendRequest(host, function() { console.log('rendering!’); res.render('index’); subsegment.close(); }); }); });

Slide 34

Slide 34 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Using X-Ray tracing in your code (Lambda function) AWSXRay.captureFunc('annotations', function(subsegment) { subsegment.addAnnotation('Name', name); subsegment.addAnnotation('UserID', event.userid); }); Demo

Slide 35

Slide 35 text

© 2020, Amazon Web Services, Inc. or its Affiliates. CloudWatch ServiceLens CloudWatch metrics and logs + AWS X-Ray traces Demo

Slide 36

Slide 36 text

© 2020, Amazon Web Services, Inc. or its Affiliates. CloudWatch Synthetics – Monitor Endpoints Demo

Slide 37

Slide 37 text

© 2020, Amazon Web Services, Inc. or its Affiliates. How does Serverless work? Storage Databases Analytics Machine Learning . . . Your unique business logic User uploads a picture Customer data updated Anomaly detected API call . . . Fully-managed services Events Functions

Slide 38

Slide 38 text

© 2020, Amazon Web Services, Inc. or its Affiliates. What is an “event” ? “something that happens” Events tell us a fact Immutable time series Time What 2019 06 21 08 07 06 CustomerCreated 2019 06 21 08 07 09 OrderCreated 2019 06 21 08 07 13 PaymentSuccessful 2019 06 21 08 07 17 CustomerUpdated . . . . . .

Slide 39

Slide 39 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Time is important “Modelling events forces you to have a temporal focus on what’s going on in the system. Time becomes a crucial factor of the system.” – Greg Young, A Decade of DDD, CQRS, Event Sourcing, 2016

Slide 40

Slide 40 text

© 2020, Amazon Web Services, Inc. or its Affiliates. More tooling available

Slide 41

Slide 41 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Takeaways 1. Logs – Use Leverage Embedded Metric Format to create custom metrics 2. Metrics – Add business metrics to understand how your application is doing 3. Anomaly Detection – To find the needle in the haystack 4. Tracing – Check the overall flow and drill down to find the root cause 5. Endpoints – Are they working as expected? 6. Events – Store them, they can tell the “story” of your application

Slide 42

Slide 42 text

© 2020, Amazon Web Services, Inc. or its Affiliates. Thank you! @danilop Please give me your feedback!