cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
69 lines • 14.5 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ElastiCacheClusterMetricFactory = exports.ElastiCacheClusterType = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const common_1 = require("../../common");
const Namespace = "AWS/ElastiCache";
var ElastiCacheClusterType;
(function (ElastiCacheClusterType) {
ElastiCacheClusterType[ElastiCacheClusterType["MEMCACHED"] = 0] = "MEMCACHED";
ElastiCacheClusterType[ElastiCacheClusterType["REDIS"] = 1] = "REDIS";
})(ElastiCacheClusterType || (exports.ElastiCacheClusterType = ElastiCacheClusterType = {}));
/**
* @see https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/CacheMetrics.html
*/
class ElastiCacheClusterMetricFactory extends common_1.BaseMetricFactory {
constructor(metricFactory, props) {
super(metricFactory, props);
this.dimensionsMap = {};
if (props.clusterId) {
this.dimensionsMap.CacheClusterId = props.clusterId;
}
}
metricMaxItemCount() {
return this.metricFactory.createMetric("CurrItems", common_1.MetricStatistic.MAX, "Count", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricEvictions() {
return this.metricFactory.createMetric("Evictions", common_1.MetricStatistic.SUM, "Evictions", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricAverageFreeableMemoryInBytes() {
return this.metricFactory.createMetric("FreeableMemory", common_1.MetricStatistic.AVERAGE, "Freeable", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricAverageUnusedMemoryInBytes() {
return this.metricFactory.createMetric("UnusedMemory", common_1.MetricStatistic.AVERAGE, "Unused", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricAverageCachedItemsSizeInBytes() {
return this.metricFactory.createMetric("BytesUsedForCacheItems", common_1.MetricStatistic.AVERAGE, "Items", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricAverageSwapUsageInBytes() {
return this.metricFactory.createMetric("SwapUsage", common_1.MetricStatistic.AVERAGE, "Swap", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricMaxCpuUtilizationInPercent() {
return this.metricFactory.createMetric("CPUUtilization", common_1.MetricStatistic.MAX, "Cluster CPU Utilization", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
/**
* Because Redis is single-threaded, you can use this metric to analyze the load of the Redis process itself.
* Note that you may want to monitor both Engine CPU Utilization as well as CPU Utilization as background
* processes can take up a significant portion of the CPU workload. This is especially important for
* hosts with 2 vCPUs or less.
*
* @see https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheMetrics.Redis.html
*/
metricMaxRedisEngineCpuUtilizationInPercent() {
return this.metricFactory.createMetric("EngineCPUUtilization", common_1.MetricStatistic.MAX, "Cluster Engine CPU Utilization", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricAverageConnections() {
return this.metricFactory.createMetric("CurrConnections", common_1.MetricStatistic.AVERAGE, "Current", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricNetworkBytesIn() {
return this.metricFactory.createMetric("NetworkBytesIn", common_1.MetricStatistic.SUM, "Bytes In", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
metricNetworkBytesOut() {
return this.metricFactory.createMetric("NetworkBytesOut", common_1.MetricStatistic.SUM, "Bytes Out", this.dimensionsMap, undefined, Namespace, undefined, this.region, this.account);
}
}
exports.ElastiCacheClusterMetricFactory = ElastiCacheClusterMetricFactory;
_a = JSII_RTTI_SYMBOL_1;
ElastiCacheClusterMetricFactory[_a] = { fqn: "cdk-monitoring-constructs.ElastiCacheClusterMetricFactory", version: "10.0.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxhc3RpQ2FjaGVDbHVzdGVyTWV0cmljRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkVsYXN0aUNhY2hlQ2x1c3Rlck1ldHJpY0ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSx5Q0FLc0I7QUFFdEIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUM7QUFFcEMsSUFBWSxzQkFHWDtBQUhELFdBQVksc0JBQXNCO0lBQ2hDLDZFQUFTLENBQUE7SUFDVCxxRUFBSyxDQUFBO0FBQ1AsQ0FBQyxFQUhXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBR2pDO0FBV0Q7O0dBRUc7QUFDSCxNQUFhLCtCQUFnQyxTQUFRLDBCQUFpQjtJQUdwRSxZQUNFLGFBQTRCLEVBQzVCLEtBQTJDO1FBRTNDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUNwQyxXQUFXLEVBQ1gsd0JBQWUsQ0FBQyxHQUFHLEVBQ25CLE9BQU8sRUFDUCxJQUFJLENBQUMsYUFBYSxFQUNsQixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FDcEMsV0FBVyxFQUNYLHdCQUFlLENBQUMsR0FBRyxFQUNuQixXQUFXLEVBQ1gsSUFBSSxDQUFDLGFBQWEsRUFDbEIsU0FBUyxFQUNULFNBQVMsRUFDVCxT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QUcsRUFDbkIsV0FBVyxFQUNYLElBQUksQ0FBQyxhQUFhLEVBQ2xCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQzs7QUEvS0gsMEVBZ0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGltZW5zaW9uc01hcCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuXG5pbXBvcnQge1xuICBCYXNlTWV0cmljRmFjdG9yeSxcbiAgQmFzZU1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgTWV0cmljRmFjdG9yeSxcbiAgTWV0cmljU3RhdGlzdGljLFxufSBmcm9tIFwiLi4vLi4vY29tbW9uXCI7XG5cbmNvbnN0IE5hbWVzcGFjZSA9IFwiQVdTL0VsYXN0aUNhY2hlXCI7XG5cbmV4cG9ydCBlbnVtIEVsYXN0aUNhY2hlQ2x1c3RlclR5cGUge1xuICBNRU1DQUNIRUQsXG4gIFJFRElTLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsYXN0aUNhY2hlQ2x1c3Rlck1ldHJpY0ZhY3RvcnlQcm9wc1xuICBleHRlbmRzIEJhc2VNZXRyaWNGYWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogQ2x1c3RlciB0byBtb25pdG9yXG4gICAqIEBkZWZhdWx0IC0gbW9uaXRvciBhbGwgY2x1c3RlcnNcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FbGFzdGlDYWNoZS9sYXRlc3QvbWVtLXVnL0NhY2hlTWV0cmljcy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBFbGFzdGlDYWNoZUNsdXN0ZXJNZXRyaWNGYWN0b3J5IGV4dGVuZHMgQmFzZU1ldHJpY0ZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGltZW5zaW9uc01hcDogRGltZW5zaW9uc01hcDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXRyaWNGYWN0b3J5OiBNZXRyaWNGYWN0b3J5LFxuICAgIHByb3BzOiBFbGFzdGlDYWNoZUNsdXN0ZXJNZXRyaWNGYWN0b3J5UHJvcHMsXG4gICkge1xuICAgIHN1cGVyKG1ldHJpY0ZhY3RvcnksIHByb3BzKTtcblxuICAgIHRoaXMuZGltZW5zaW9uc01hcCA9IHt9O1xuICAgIGlmIChwcm9wcy5jbHVzdGVySWQpIHtcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcC5DYWNoZUNsdXN0ZXJJZCA9IHByb3BzLmNsdXN0ZXJJZDtcbiAgICB9XG4gIH1cblxuICBtZXRyaWNNYXhJdGVtQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIkN1cnJJdGVtc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLk1BWCxcbiAgICAgIFwiQ291bnRcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIE5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNFdmljdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIkV2aWN0aW9uc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLlNVTSxcbiAgICAgIFwiRXZpY3Rpb25zXCIsXG4gICAgICB0aGlzLmRpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljQXZlcmFnZUZyZWVhYmxlTWVtb3J5SW5CeXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiRnJlZWFibGVNZW1vcnlcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICAgICAgXCJGcmVlYWJsZVwiLFxuICAgICAgdGhpcy5kaW1lbnNpb25zTWFwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0F2ZXJhZ2VVbnVzZWRNZW1vcnlJbkJ5dGVzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJVbnVzZWRNZW1vcnlcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICAgICAgXCJVbnVzZWRcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIE5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNBdmVyYWdlQ2FjaGVkSXRlbXNTaXplSW5CeXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiQnl0ZXNVc2VkRm9yQ2FjaGVJdGVtc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLkFWRVJBR0UsXG4gICAgICBcIkl0ZW1zXCIsXG4gICAgICB0aGlzLmRpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljQXZlcmFnZVN3YXBVc2FnZUluQnl0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIlN3YXBVc2FnZVwiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLkFWRVJBR0UsXG4gICAgICBcIlN3YXBcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIE5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNNYXhDcHVVdGlsaXphdGlvbkluUGVyY2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiQ1BVVXRpbGl6YXRpb25cIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5NQVgsXG4gICAgICBcIkNsdXN0ZXIgQ1BVIFV0aWxpemF0aW9uXCIsXG4gICAgICB0aGlzLmRpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlY2F1c2UgUmVkaXMgaXMgc2luZ2xlLXRocmVhZGVkLCB5b3UgY2FuIHVzZSB0aGlzIG1ldHJpYyB0byBhbmFseXplIHRoZSBsb2FkIG9mIHRoZSBSZWRpcyBwcm9jZXNzIGl0c2VsZi5cbiAgICogTm90ZSB0aGF0IHlvdSBtYXkgd2FudCB0byBtb25pdG9yIGJvdGggRW5naW5lIENQVSBVdGlsaXphdGlvbiBhcyB3ZWxsIGFzIENQVSBVdGlsaXphdGlvbiBhcyBiYWNrZ3JvdW5kXG4gICAqIHByb2Nlc3NlcyBjYW4gdGFrZSB1cCBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgdGhlIENQVSB3b3JrbG9hZC4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3JcbiAgICogaG9zdHMgd2l0aCAyIHZDUFVzIG9yIGxlc3MuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVsYXN0aUNhY2hlL2xhdGVzdC9yZWQtdWcvQ2FjaGVNZXRyaWNzLlJlZGlzLmh0bWxcbiAgICovXG4gIG1ldHJpY01heFJlZGlzRW5naW5lQ3B1VXRpbGl6YXRpb25JblBlcmNlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIkVuZ2luZUNQVVV0aWxpemF0aW9uXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuTUFYLFxuICAgICAgXCJDbHVzdGVyIEVuZ2luZSBDUFUgVXRpbGl6YXRpb25cIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIE5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNBdmVyYWdlQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIkN1cnJDb25uZWN0aW9uc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLkFWRVJBR0UsXG4gICAgICBcIkN1cnJlbnRcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIE5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNOZXR3b3JrQnl0ZXNJbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiTmV0d29ya0J5dGVzSW5cIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5TVU0sXG4gICAgICBcIkJ5dGVzIEluXCIsXG4gICAgICB0aGlzLmRpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljTmV0d29ya0J5dGVzT3V0KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJOZXR3b3JrQnl0ZXNPdXRcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5TVU0sXG4gICAgICBcIkJ5dGVzIE91dFwiLFxuICAgICAgdGhpcy5kaW1lbnNpb25zTWFwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxufVxuIl19