private addLambdaMetrics()

in source/lib/kds-monitoring.ts [40:119]


    private addLambdaMetrics(functionName?: string) {
        if (functionName === undefined) {
            return;
        }

        const defaultMetricProps = {
            namespace: 'AWS/Lambda',
            period: this.MONITORING_PERIOD,
            dimensions: {
                'FunctionName': functionName,
                'Resource': functionName
            }
        };

        this.Dashboard.addWidgets(this.createMarkdownWidget('\n# Lambda Metrics\n'));

        //---------------------------------------------------------------------
        const invocationsMetric = new cw.Metric({
            ...defaultMetricProps,
            metricName: 'Invocations',
            statistic: 'Sum'
        });

        //---------------------------------------------------------------------
        const durationMetrics = [
            new cw.Metric({ ...defaultMetricProps, metricName: 'Duration', statistic: 'Minimum' }),
            new cw.Metric({ ...defaultMetricProps, metricName: 'Duration', statistic: 'Average' }),
            new cw.Metric({ ...defaultMetricProps, metricName: 'Duration', statistic: 'Maximum' })
        ];

        //---------------------------------------------------------------------
        const errorsMetric = new cw.Metric({
            ...defaultMetricProps,
            metricName: 'Errors',
            statistic: 'Maximum',
            color: cw.Color.RED
        });

        const availabilityExpression = new cw.MathExpression({
            expression: '100 - 100 * errors / MAX([errors, invocations])',
            label: 'Success rate (%)',
            period: this.MONITORING_PERIOD,
            color: cw.Color.GREEN,
            usingMetrics: {
                'errors': errorsMetric,
                'invocations': new cw.Metric({ ...invocationsMetric, label: '' })
            }
        });

        //---------------------------------------------------------------------
        const throttlesMetric = new cw.Metric({
            ...defaultMetricProps,
            metricName: 'Throttles',
            statistic: 'Sum'
        });

        //---------------------------------------------------------------------
        const iteratorAgeMetric = new cw.Metric({
            ...defaultMetricProps,
            metricName: 'IteratorAge',
            statistic: 'Maximum'
        });

        //---------------------------------------------------------------------
        const executionsMetric = new cw.Metric({
            ...defaultMetricProps,
            metricName: 'ConcurrentExecutions',
            statistic: 'Maximum'
        });

        //---------------------------------------------------------------------
        this.Dashboard.addWidgets(
            this.createWidgetWithUnits('Invocations', invocationsMetric),
            this.createWidgetWithUnits('Duration', durationMetrics),
            this.createAvailabilityWidget('Error count and success rate (%)', errorsMetric, availabilityExpression),
            this.createWidgetWithUnits('Throttles', throttlesMetric),
            this.createWidgetWithUnits('IteratorAge', iteratorAgeMetric),
            this.createWidgetWithUnits('Concurrent executions', executionsMetric),
        );
    }