-
Notifications
You must be signed in to change notification settings - Fork 97
Doesn't work with multi-dimensions metrics #11
Description
Hi there,
On CloudWatch we had a metric named queuedepth with dimensions env, app and queue on the namespace Sidekiq. env described the environment like staging, production and development. app have the application name. And queue the queue from which this data came from. We have a Lambda that we use to gather the data and send it to CloudWatch.
If we try to use this metric as an ExternalMetric, as in the example below, it doesn't work.
apiVersion: metrics.aws/v1alpha1
kind: ExternalMetric
metadata:
name: queue-depth
spec:
name: queue-depth
resource:
resource: "deployment"
queries:
- id: queue_depth
metricStat:
metric:
namespace: "Sidekiq"
metricName: "queuedepth"
dimensions:
- name: env
value: staging
- name: app
value: appname
- name: queue
value: queuename
period: 60
stat: Average
unit: Count
returnData: true
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa
spec:
minReplicas: 1
maxReplicas: 5
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: appname
metrics:
- type: External
external:
metric:
name: queue-depth
selector:
matchLabels:
env: staging
app: appname
queue: queuename
target:
type: Value
value: 40
If we kubectl logs -f the cloudwatch adapter pod we can see that it cannot find the metric :/
To make it work, we had to change our Lambda to create another metric (depth) with a single dimension (queue).
apiVersion: metrics.aws/v1alpha1
kind: ExternalMetric
metadata:
name: queue-depth
spec:
name: queue-depth
resource:
resource: "deployment"
queries:
- id: queue_depth
metricStat:
metric:
namespace: "StagingSidekiq"
metricName: "depth"
dimensions:
- name: queue
value: queuename
period: 60
stat: Average
unit: Count
returnData: true
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa
spec:
minReplicas: 1
maxReplicas: 5
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: appname
metrics:
- type: External
external:
metric:
name: queue-depth
target:
type: AverageValue
averageValue: 40
And, as soon as we applied this new configuration, the metrics were fetched and the HPA began scaling immediately.
Is this expected? As we had dimensions in plural and accepting a list, we thought that we could use multi-dimension metrics. Also, we realized that in all the examples only single-dimension metrics are being used.
Our cluster is on EKS 1.14 and using chankh/k8s-cloudwatch-adapter:v0.6.0.
Thanks