diff --git a/docs/aerospike-4.6.0.tgz b/docs/aerospike-4.6.0.tgz index 3885a80..5824259 100644 Binary files a/docs/aerospike-4.6.0.tgz and b/docs/aerospike-4.6.0.tgz differ diff --git a/docs/aerospike-4.7.0.tgz b/docs/aerospike-4.7.0.tgz index 2708d65..6239a35 100644 Binary files a/docs/aerospike-4.7.0.tgz and b/docs/aerospike-4.7.0.tgz differ diff --git a/docs/aerospike-4.8.0.tgz b/docs/aerospike-4.8.0.tgz new file mode 100644 index 0000000..f9cfc04 Binary files /dev/null and b/docs/aerospike-4.8.0.tgz differ diff --git a/docs/index.yaml b/docs/index.yaml index 2bd6bae..dbc5da4 100644 --- a/docs/index.yaml +++ b/docs/index.yaml @@ -2,10 +2,10 @@ apiVersion: v1 entries: aerospike: - apiVersion: v1 - appVersion: 4.7.0.5 - created: "2019-12-11T14:29:07.768744+05:30" + appVersion: 4.8.0.5 + created: "2020-03-07T03:47:41.057394+05:30" description: A Helm chart for Aerospike Server Community Edition on Kubernetes - digest: f88202c5abc0d2264aab68c88c317554e80227212e4fb742e47d2602fe6da467 + digest: 916e89ec2a85d6c7ad5b69f8dfaf2a2d55a3e41f5de02299a05a6592dabd40ab icon: https://avatars0.githubusercontent.com/u/2214313?s=200&v=4 maintainers: - email: kesan@aerospike.com @@ -13,16 +13,35 @@ entries: name: aerospike sources: - https://github.com/aerospike/aerospike-server.docker - - https://github.com/aerospike/aerospike-tools.docker - https://github.com/aerospike/aerospike-kubernetes + - https://github.com/aerospike/aerospike-kubernetes-init + - https://github.com/aerospike/aerospike-prometheus-exporter + urls: + - https://aerospike.github.io/aerospike-kubernetes/aerospike-4.8.0.tgz + version: 4.8.0 + - apiVersion: v1 + appVersion: 4.7.0.10 + created: "2020-03-07T03:47:41.055905+05:30" + description: A Helm chart for Aerospike Server Community Edition on Kubernetes + digest: 78fba0cc7280436181de267231b23962bd4b5561e9263bcaf7b7d5f8047dbe2a + icon: https://avatars0.githubusercontent.com/u/2214313?s=200&v=4 + maintainers: + - email: kesan@aerospike.com + name: spkesan + name: aerospike + sources: + - https://github.com/aerospike/aerospike-server.docker + - https://github.com/aerospike/aerospike-kubernetes + - https://github.com/aerospike/aerospike-kubernetes-init + - https://github.com/aerospike/aerospike-prometheus-exporter urls: - https://aerospike.github.io/aerospike-kubernetes/aerospike-4.7.0.tgz version: 4.7.0 - apiVersion: v1 - appVersion: 4.6.0.8 - created: "2019-12-11T14:29:07.766151+05:30" + appVersion: 4.6.0.12 + created: "2020-03-07T03:47:41.054267+05:30" description: A Helm chart for Aerospike Server Community Edition on Kubernetes - digest: ee32e1966892a0f5fe210a61f314cc9fae380be0121fed533423b7453e5c5d58 + digest: 69040ff91fed43f242f5e45c32dbce5034e96846e787e9af8dcf6b60dd880a70 icon: https://avatars0.githubusercontent.com/u/2214313?s=200&v=4 maintainers: - email: kesan@aerospike.com @@ -30,9 +49,10 @@ entries: name: aerospike sources: - https://github.com/aerospike/aerospike-server.docker - - https://github.com/aerospike/aerospike-tools.docker - https://github.com/aerospike/aerospike-kubernetes + - https://github.com/aerospike/aerospike-kubernetes-init + - https://github.com/aerospike/aerospike-prometheus-exporter urls: - https://aerospike.github.io/aerospike-kubernetes/aerospike-4.6.0.tgz version: 4.6.0 -generated: "2019-12-11T14:29:07.763652+05:30" +generated: "2020-03-07T03:47:41.05153+05:30" diff --git a/docs/peer-finder b/docs/peer-finder deleted file mode 100755 index bb92779..0000000 Binary files a/docs/peer-finder and /dev/null differ diff --git a/helm/CHANGELOG.md b/helm/CHANGELOG.md index e2361e6..f1449b4 100644 --- a/helm/CHANGELOG.md +++ b/helm/CHANGELOG.md @@ -1,17 +1,27 @@ # Change Log -This file documents all notable changes to Aerospike Helm Chart. +This file documents all notable changes to Aerospike Helm Chart (Community Edition). + +## [1.2.0](https://github.com/aerospike/aerospike-kubernetes/releases/tag/1.2.0) + +- Uses new `aerospike/aerospike-kubernetes-init` image +- Aerospike tcp ports now configurable +- Added support for NodePort type services to expose aerospike statefulset. +- Added support for LoadBalancer type services to expose aerospike statefulset. +- Added support for externalIP clusterIP type services to expose aerospike statefulset. +- Added configuration to specify or create serviceAccounts to be used in Aerospike/Prometheus/Grafana/Alertmanager statefulsets. +- Integrated Aerospike Monitoring stack with aerospike-prometheus-exporter, prometheus, grafana, and alertmanager. +- Added dynamic configuration to pass in Aerospike alert rules conf file and alertmanager conf file. +- Honor only `.Release.Namespace`. Removed `namespace` option from `values.yaml` +- Added `aerospike-prometheus-exporter` as `sidecar` container (applicable only when aerospike monitoring is enabled). +- Chart `4.6.0` updated to use Aerospike Server version `4.6.0.12` +- Chart `4.7.0` updated to use Aerospike Server version `4.7.0.10` +- Chart `4.8.0` updated to use Aerospike Server version `4.8.0.5` ## [1.1.0](https://github.com/aerospike/aerospike-kubernetes/releases/tag/1.1.0) - Update Chart `4.7.0` to use Aerospike Server version `4.7.0.5` (appVersion). - Update Chart `4.6.0` to use Aerospike Server version `4.6.0.8` (appVersion). -## [1.0.1](https://github.com/aerospike/aerospike-kubernetes/releases/tag/1.0.1) -- Update Chart `4.7.0` to use Aerospike Server versions `4.7.0.3` (appVersion). -- Update Chart `4.6.0` to use Aerospike Server version `4.6.0.6` (appVersion). -- Added 'Expose Aerospike Cluster' section to README. -- Added CHANGELOG.md - ## [1.0.0](https://github.com/aerospike/aerospike-kubernetes/releases/tag/1.0.0) - Supports `NodeAffinity`/`PodAffinity`/`PodAntiAffinity` rules. diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 985ea49..d18d2da 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -1,5 +1,5 @@ # ------------------------------------------------------------------------------ -# Copyright 2012-2019 Aerospike, Inc. +# Copyright 2012-2020 Aerospike, Inc. # # Portions may be licensed to Aerospike, Inc. under one or more contributor # license agreements. @@ -16,15 +16,16 @@ # ------------------------------------------------------------------------------ apiVersion: v1 -appVersion: 4.7.0.5 +appVersion: 4.8.0.5 description: A Helm chart for Aerospike Server Community Edition on Kubernetes name: aerospike -version: 4.7.0 +version: 4.8.0 icon: https://avatars0.githubusercontent.com/u/2214313?s=200&v=4 sources: - https://github.com/aerospike/aerospike-server.docker -- https://github.com/aerospike/aerospike-tools.docker - https://github.com/aerospike/aerospike-kubernetes +- https://github.com/aerospike/aerospike-kubernetes-init +- https://github.com/aerospike/aerospike-prometheus-exporter maintainers: - name: spkesan email: kesan@aerospike.com diff --git a/helm/README.md b/helm/README.md index 96544e5..b38bfba 100644 --- a/helm/README.md +++ b/helm/README.md @@ -18,134 +18,347 @@ helm repo add aerospike https://aerospike.github.io/aerospike-kubernetes ### Install the chart ```sh -helm install --name aerospike-release aerospike/aerospike +helm install aerospike-release aerospike/aerospike ``` -You can also set the configuration values as defined in `values.yaml` using `--set` option or provide a `values.yaml` file during `helm install`. +User can set any configuration values defined in `values.yaml` using `--set` option or provide a `values.yaml` file using `-f` option with `helm install`. For example, ```sh -helm install --set dbReplicas=5 --name aerospike-release aerospike/aerospike +helm install aerospike-release aerospike/aerospike --set dbReplicas=5 ``` -### Apply your own aerospike.conf file or template +#### For Helm v2, + +```sh +helm install --name aerospike-release aerospike/aerospike --set dbReplicas=5 +``` + +### Use a custom aerospike.conf file or template + +- To override the default `aerospike.template.conf`, set `confFilePath` to point to the custom `aerospike.conf` file or template. + + > `confFilePath` should be a file path on helm "client" machine (where the user is running the command `helm install`). -- To override the default `aerospike.template.conf`, set `confFilePath` to point to your own custom `aerospike.conf` file or template. -- Note that `confFilePath` should be a path on your machine where `helm` client is running. - The custom `aerospike.conf` file or template must contain `# mesh-seed-placeholder` in `heartbeat` configuration to populate mesh configuration during peer discovery. For example, -``` -.... - heartbeat { + ```sh + .... + heartbeat { - address any - mode mesh - port 3002 + address any + mode mesh + port 3002 - # mesh-seed-placeholder + # mesh-seed-placeholder - interval 150 - timeout 10 - } -..... -``` + interval 150 + timeout 10 + } + ..... + ``` -- Use `confFilePath` during `helm install` with `--set-file` option. -``` -helm install --name aerospike-release --set-file confFilePath=/tmp/aerospike_templates/aerospike.template.conf aerospike/aerospike -``` +- Use `confFilePath` on `helm install` with `--set-file` option. + ```sh + helm install aerospike-release aerospike/aerospike --set-file confFilePath=/tmp/aerospike_templates/aerospike.template.conf + ``` ### Storage configuration -You can configure multiple volume mounts (filesystem type) or device mounts (raw block device) or both in `values.yaml`. Please check below [configuration section](#configuration) and `values.yaml` file in this repo for more details. +User can configure multiple volume mounts (filesystem type) or device mounts (raw block device) or both in `values.yaml`. Check below [configuration section](#configuration) and [`values.yaml`](values.yaml) file in [this repository](https://github.com/aerospike/aerospike-kubernetes/tree/master/helm) for more details. ### Test Output: ```sh -LAST DEPLOYED: Thu Sep 5 21:51:57 2019 +NAME: aerospike-release +LAST DEPLOYED: Fri Mar 6 15:50:33 2020 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/ConfigMap -NAME DATA AGE -aerospike-release-conf 3 5m36s +NAME DATA AGE +aerospike-release-conf 2 51m ==> v1/Pod(related) -NAME READY STATUS RESTARTS AGE -aerospike-release-0 1/1 Running 0 5m15s -aerospike-release-1 1/1 Running 0 3m40s -aerospike-release-2 1/1 Running 0 2m41s -aerospike-release-3 1/1 Running 0 2m6s -aerospike-release-4 1/1 Running 0 97s +NAME READY STATUS RESTARTS AGE +pod/aerospike-release-aerospike-0 1/1 Running 0 49m +pod/aerospike-release-aerospike-1 1/1 Running 0 49m +pod/aerospike-release-aerospike-2 1/1 Running 0 48m ==> v1/Service -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -aerospike-release ClusterIP None 3000/TCP 5m36s +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/aerospike-release-aerospike ClusterIP None 3000/TCP 49m ==> v1/StatefulSet -NAME READY AGE -aerospike-release 5/5 5m36s +NAME READY AGE +statefulset.apps/aerospike-release-aerospike 3/3 49m ``` ```sh $ helm list -NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE -aerospike-release 1 Thu Sep 5 21:51:57 2019 DEPLOYED aerospike-4.6.0 4.6.0.2 default +NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE +aerospike-release 1 Fri Mar 6 15:50:33 2020 DEPLOYED aerospike-4.8.0 4.8.0.5 default ``` ### Expose Aerospike Cluster -Aerospike Cluster can be exposed to client applications outside the K8s network by enabling `host networking`. -With host networking enabled, pods will be able to access the node's network. Pod IP will be same as node IP. +Aerospike Cluster can be exposed to client applications or to XDR clients outside the K8s network by enabling, +- Host Networking +- NodePort Services Per Pod +- LoadBalancer Services Per Pod +- ClusterIP Services with External IPs + +### **Host Networking** + +With host networking enabled, pods will be able to access the node's network. Pod IP will be same as node IP. > With host networking enabled, the deployment will be limited to one pod per node. If the new pod is scheduled onto the same node, it will fail due to no free ports. -Use `platform` and `hostNetworking` options to completely expose the Aerospike cluster pods to external client applications. +Use `platform` and `hostNetworking` options to expose the Aerospike cluster pods to external client applications. Setting `platform` will fetch external IP of the instances (if any) and add it to [`alternate-access-address`](https://www.aerospike.com/docs/reference/configuration/index.html#alternate-access-address) in `aerospike.conf`. For example, -``` -helm install --set dbReplicas=4 \ - --name aerospike-release aerospike/aerospike \ - --set hostNetworking=true \ - --set platform=gke +```sh +helm install aerospike-release aerospike/aerospike \ + --set dbReplicas=4 \ + --set hostNetworking=true \ + --set platform=gke ``` -Client applications can connect to the Aerospike cluster using instance's external IP (if available). The external IP (if available) of the instance on which the pod is scheduled will be set as [`alternate-access-address`](https://www.aerospike.com/docs/reference/configuration/index.html#alternate-access-address) in its `aerospike.conf`. +For Helm v2, +```sh +helm install --name aerospike-release aerospike/aerospike \ + --set dbReplicas=4 \ + --set hostNetworking=true \ + --set platform=gke ``` + +Client applications can connect to the Aerospike cluster using instance's external IP (if available) or else by simply using host IP. + +```sh asadm -h -p 3000 --services-alternate ``` +### **NodePort Services Per Pod** + +NodePort type exposes the Service on each K8s Node’s IP at a static port (the `NodePort`). Applications will be able to connect to the NodePort Service from outside the K8s cluster by using `:`. + +> With NodePort type services, it allows multiple pods per K8s host as well as expose each aerospike pod. + +To enable `NodePort` services per pod, `enableNodePortServices` option must be set to `true`. +Aerospike helm chart will automatically create a `NodePort` type service for each aerospike pod at the time of deployment. Applications can connect to the Aerospike cluster using any one of `:` as seed IP and Port. + +Setting `platform` will fetch external IP of the instances (if any) and add it to [`alternate-access-address`](https://www.aerospike.com/docs/reference/configuration/index.html#alternate-access-address) in `aerospike.conf`. + +> It is recommended to use `helm upgrade` command to perform scale-up/scale-down when NodePort services are enabled. + +User must specify a service account with appropriate permissions to query the API server and read the `Service` type resources. An existing service account can be specified using `rbac.serviceAccountName`. User can also set `rbac.create` to `true` for which Aerospike helm chart will automatically create a new serviceAccount with appropriate permissions and use it for the statefulset deployment. + +Example, + +```sh +helm install aerospike-release aerospike/aerospike \ + --set dbReplicas=5 \ + --set rbac.create=true \ + --set enableNodePortServices=true +``` + +For Helm v2, + +```sh +helm install --name aerospike-release aerospike/aerospike \ + --set dbReplicas=5 \ + --set rbac.create=true \ + --set enableNodePortServices=true +``` + +### **LoadBalancer Services Per Pod** + +LoadBalancer type exposes the service externally using the cloud provider’s load balancer. A new external network load balancer is provisioned. + +> With LoadBalancer type services, it allows multiple pods per K8s host as well as expose each pod. + +To enable `LoadBalancer` services per pod, `enableLoadBalancerServices` option must be set to `true`. +Aerospike helm chart will automatically create a `LoadBalancer` type service for each aerospike pod at the time of deployment. + +Applications can connect to the Aerospike cluster using `:`. + +```sh +asadm -h -p --services-alternate +``` + +> It is recommended to use `helm upgrade` command to perform scale-up/scale-down when LoadBalancer type services are enabled. + +User must specify a service account with appropriate permissions to query the API server and read the `Service` type resources. An existing service account can be specified using `rbac.serviceAccountName`. User can also set `rbac.create` to `true` for which Aerospike helm chart will automatically create a new serviceAccount with appropriate permissions and use it for the statefulset deployment. + +Example, + +```sh +helm install aerospike-release aerospike/aerospike \ + --set dbReplicas=5 \ + --set rbac.create=true \ + --set enableLoadBalancerServices=true +``` + +For Helm v2, + +```sh +helm install --name aerospike-release aerospike/aerospike \ + --set dbReplicas=5 \ + --set rbac.create=true \ + --set enableLoadBalancerServices=true +``` + +### **ClusterIP Services with External IPs** + +`ClusterIP` type exposes the service on a cluster-internal IP. With external IPs set, the service can be accessed from its external endpoint. + +With `enableExternalIpServices` option enabled, Aerospike helm chart will create a `ClusterIP` type service for each aerospike pod at the time of deployment. User can specify only one external IP and Port. +The external endpoints can be specified using `externalIpEndpoints` option. Check [`values.yaml`](values.yaml). + +> It is recommended to use `helm upgrade` command to perform scale-up/scale-down when ClusterIP-ExternalIP services are enabled. + +> With `enableExternalIpService` enabled, user must specify number of endpoints equal to the number of Aerospike nodes/pods (`dbReplicas`). + +User must specify a service account with appropriate permissions to query the API server and read the `Service` type resources. An existing service account can be specified using `rbac.serviceAccountName`. User can also set `rbac.create` to `true` for which Aerospike helm chart will automatically create a new serviceAccount with appropriate permissions and use it for the statefulset deployment. + +Example, + +```sh +helm install aerospike-release aerospike/aerospike \ + --set dbReplicas=4 \ + --set rbac.create=true \ + --set enableExternalIpServices=true \ + --set externalIpEndpoints[0].IP=10.160.15.224 \ + --set externalIpEndpoints[0].Port=7001 \ + --set externalIpEndpoints[1].IP=10.160.15.224 \ + --set externalIpEndpoints[1].Port=7002 \ + --set externalIpEndpoints[2].IP=10.160.15.223 \ + --set externalIpEndpoints[2].Port=8001 + --set externalIpEndpoints[3].IP=10.160.15.223 \ + --set externalIpEndpoints[3].Port=8002 +``` + +For Helm v2, + +```sh +helm install --name aerospike-release aerospike/aerospike \ + --set dbReplicas=4 \ + --set rbac.create=true \ + --set enableExternalIpServices=true \ + --set externalIpEndpoints[0].IP=10.160.15.224 \ + --set externalIpEndpoints[0].Port=7001 \ + --set externalIpEndpoints[1].IP=10.160.15.224 \ + --set externalIpEndpoints[1].Port=7002 \ + --set externalIpEndpoints[2].IP=10.160.15.223 \ + --set externalIpEndpoints[2].Port=8001 + --set externalIpEndpoints[3].IP=10.160.15.223 \ + --set externalIpEndpoints[3].Port=8002 +``` + +### Aerospike Monitoring Stack + +Aerospike Helm Chart provides Aerospike Monitoring Stack which includes an Aerospike prometheus exporter (sidecar), Prometheus statefulset, Grafana statefulset and Alertmanager statefulset. + +User can enable Aerospike Monitoring by setting `enableAerospikeMonitoring` option to `true`. + +To add a custom Aerospike alert rules configuraton file, use option `--set-file prometheus.aerospikeAlertRulesFilePath`. + +> `prometheus.aerospikeAlertRulesFilePath` should be a file path on helm "client" machine (where the user is running 'helm install') + +To add an alertmanager configuration file, use option `--set-file alertmanager.alertmanagerConfFilePath`. + +> `alertmanager.alertmanagerConfFilePath` should be a file path on helm "client" machine (where the user is running 'helm install') + +Check below [configuration section](#configuration) and [`values.yaml`](values.yaml) file in [this repository](https://github.com/aerospike/aerospike-kubernetes/tree/master/helm) for more details on other configuration of the `Aerospike Prometheus Exporter`, `Prometheus`, `Grafana` and `Alertmanager`. + + ### Configuration -| Parameter | Description | Default Value | -| -----------------------------------|:--------------------------------------------------------------------: |:----------------------------:| -| `namespace` | Kubernetes Namespace | `default` | -| `dbReplicas` | Number of Aerospike nodes or pods in the cluster | `3` | -| `terminationGracePeriodSeconds` | Wait time to forceful shutdown of a container | `120` | -| `image.repository` | Aerospike Server Docker Image | `aerospike/aerospike-server` | -| `image.tag` | Aerospike Server Docker Image Tag | `4.7.0.5` | -| `toolsImage.repository` | Aerospike Tools Docker Image | `aerospike/aerospike-tools` | -| `toolsImage.tag` | Aerospike Tools Docker Image Tag | `3.22.0` | -| `aerospikeNamespace` | Aerospike Namespace name | `test` | -| `aerospikeNamespaceMemoryGB` | Aerospike Namespace Memory in GB | `1` | -| `aerospikeReplicationFactor` | Aerospike Namespace Replication Factor | `2` | -| `aerospikeDefaultTTL` | Aerospike Namespace Record default TTL | `0` (Never Expire) | -| `autoRolloutConfig` | Rollout ConfigMap/Secrets changes on 'helm upgrade' | `false` | -| `hostNetworking` | Enable `hostNetwork`. Allows Pods to access host network. | `false` | -| `platform` | Set platform. Use with `hostNetworking` configuration to enable client applications outside the network to connect to Aerospike Cluster. Supported values - `eks` (AWS) or `gke` (GCP) or `none` | `none` | -| `antiAffinity` | Enable `PodAntiAffinity` rule to schedule one pod per node. Supported values - `off`, `soft`, `hard` | `off` | -| `antiAffinityWeight` | 'weight' in range 1-100 for "soft" antiAffinity option | `1` | -| `affinity` | Define custom `nodeAffinity`/`podAffinity`/`podAntiAffinity` rules | `{}` (nil) | -| `persistenceStorage` | Define Peristent Volumes to be used (Map - to define multiple volumes)| `{}` (nil) | -| `volumes` | Define volumes section and template to be used | `volume.mountPath: /opt/aerospike/data`,
`volume.name: datadir`,
`volume.template: emptyDir: {}`| -| `resources` | Resource configuration (`requests` and `limits`) | `{}` (nil) | -| `confFilePath` | Custom aerospike.conf file path on helm client machine (To be used during the runtime, `helm install` .. etc)| `not defined`| - -Note that the namespace related configurations (`aerospikeNamespace`, `aerospikeNamespaceMemoryGB`, `aerospikeReplicationFactor` and `aerospikeDefaultTTL`) are intended for default single namespace configuration. - -If using multiple namespaces, these config items can be ignored and a separate `aerospike.conf` file or template with multiple namespace configuration can be used. \ No newline at end of file +| Parameter | Description | Default Value | +| ------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------:| +| `dbReplicas` | Number of Aerospike nodes or pods in the cluster | `3` | +| `terminationGracePeriodSeconds` | Number of seconds to wait after `SIGTERM` before force killing the pod. | `120` | +| `image.repository` | Aerospike Server Docker Image | `aerospike/aerospike-server` | +| `image.tag` | Aerospike Server Docker Image Tag | `4.8.0.5` | +| `initImage.repository` | Aerospike Kubernetes Init Container Image | `aerospike/aerospike-kubernetes-init` | +| `initImage.tag` | Aerospike Kubernetes Init Container Image Tag | `1.0.0` | +| `autoGenerateNodeIds` | Auto generate and assign node-id(s) based on Pod's Ordinal Index | `false` | +| `aerospikeNamespace` | Aerospike Namespace name | `test` | +| `aerospikeNamespaceMemoryGB` | Aerospike Namespace Memory in GB | `1` | +| `aerospikeReplicationFactor` | Aerospike Namespace Replication Factor | `2` | +| `aerospikeDefaultTTL` | Aerospike Namespace Record default TTL | `0` (Never Expire) | +| `aerospikeClientPort` | Aerospike TCP Service Port | `3000` | +| `aerospikeHeartbeatPort` | Aerospike TCP Hearbeat Port | `3002` | +| `aerospikeFabricPort` | Aerospike TCP Fabric Port | `3001` | +| `aerospikeInfoPort` | Aerospike TCP Info Port | `3003` | +| `autoRolloutConfig` | Rollout ConfigMap/Secrets changes on 'helm upgrade' | `false` | +| `hostNetworking` | Enable `hostNetwork`. Allows Pods to access host network. | `false` | +| `platform` | Set platform. Use with `hostNetworking` and `enableNodePortServices` configuration to consider instance's external IP. Supported values - `eks` (AWS) or `gke` (GCP) or `none` | `none` | +| `enableNodePortServices` | Enable NodePort Services (`Type: NodePort`) to expose aerospike statefulset | `false` | +| `enableLoadBalancerServices` | Enable LoadBalancer Services (`Type: LoadBalancer`) to expose aerospike statefulset | `false` | +| `enableExternalIpServices` | Enable external IP Services (`Type: ClusterIP`) to expose aerospike statefulset | `false` | +| `externalIpEndpoints` | Specify External IP/Port endpoints for `enableExternalIpServices` | `{}` (nil) | +| `rbac.create` | Create a new ServiceAccount with a new ClusterRole for Aerospike Statefulset | `false` | +| `rbac.serviceAccountName` | Specify an existing ServiceAccount to use with Aerospike Statefulset | `default` | +| `antiAffinity` | Enable `PodAntiAffinity` rule to schedule one pod per node. Supported values - `off`, `soft`, `hard` | `off` | +| `antiAffinityWeight` | 'weight' in range 1-100 for "soft" antiAffinity option | `1` | +| `affinity` | Define custom `nodeAffinity`/`podAffinity`/`podAntiAffinity` rules | `{}` (nil) | +| `persistenceStorage` | Define Peristent Volumes to be used (Map - to define multiple volumes) | `{}` (nil) | +| `volumes` | Define volumes section and template to be used | `volume[0].mountPath: /opt/aerospike/data`,
`volume[0].name: datadir`,
`volume[0].template: emptyDir: {}` | +| `resources` | Resource configuration (`requests` and `limits`) | `{}` (nil) | +| `confFilePath` | Custom aerospike.conf file path on helm client machine (To be used during the runtime, `helm install` .. etc) | `not defined` | +| `prometheus.aerospikeAlertRulesFilePath` | Aerospike alert rules configuration file location on helm client machine (To be used during the runtime, `helm install` .. etc) | `not defined` | +| `alertmanager.alertmanagerConfFilePath` | Alertmanager configuration file location on helm client machine (To be used during the runtime, `helm install` .. etc) | `not defined` | +| `enableAerospikeMonitoring` | Enable Aerospike Monitoring - sidecar prometheus exporter, Prometheus, Grafana, Alertmanager stack | `false` | +| `exporter.repository` | Aerospike prometheus exporter image repository | `aerospike/aerospike-prometheus-exporter` | +| `exporter.tag` | Aerospike prometheus exporter image tag | `1.0.0` | +| `exporter.agentUpdateInterval` | Aerospike prometheus exporter update interval (in seconds) | `5` | +| `exporter.agentTags` | Aerospike prometheus exporter agent tags | `"'agent', 'aerospike'"` | +| `exporter.agentBindHost` | Aerospike prometheus exporter IP to bind to | `""` | +| `exporter.agentBindPort` | Aerospike prometheus exporter port to bind to | `9145` | +| `exporter.agentTimeout` | Metrics server timeout (in seconds) | `10` | +| `exporter.agentLogLevel` | Aerospike prometheus exporter logging level | `"info"` | +| `exporter.asHost` | Aerospike container service IP to connect to | `"localhost"` | +| `exporter.asPort` | Aerospike container service port to connect to | `3000` | +| `exporter.tickerInterval` | Ticker interval (in seconds) to request statistics from aerospike container | `5` | +| `exporter.tickerTimeout` | Agent client timeout (in seconds) for sending command to aerospike container | `5` | +| `exporter.asAuthMode` | Security auth mode to be used by exporter to connect to aerospike container | `""` | +| `exporter.asAuthUser` | Username to be used by exporter to connect to aerospike container | `""` | +| `exporter.asAuthPassword` | Password to be used by exporter to connect to aerospike container | `""` | +| `prometheus.replicas` | Number of replicas for prometheus statefulset | `2` | +| `prometheus.serverPort` | Prometheus server port | `9090` | +| `prometheus.terminationGracePeriodSeconds` | Number of seconds to wait after `SIGTERM` before force killing the pod. | `120` | +| `prometheus.image.repository` | Prometheus Docker Image Repository | `prom/prometheus` | +| `prometheus.image.tag` | Prometheus Docker Image Tag | `v2.11.1` | +| `prometheus.persistenceStorage` | Define storage for prometheus data | `{}` (nil) | +| `prometheus.volume` | Define storage for prometheus data | `volume.mountPath: /data`,
`volume.name: prometheus-data`,
`volume.template: emptyDir: {}` | +| `prometheus.resources` | Resource configuration (`requests` and `limits`) | `{}` (nil) | +| `grafana.replicas` | Number of replicas for grafana statefulset | `1` | +| `grafana.httpPort` | Grafana server `http_port` | `3000` | +| `grafana.plugins` | Grafana plugins to install at startup | `"camptocamp-prometheus-alertmanager-datasource"` | +| `grafana.image.repository` | Grafana Docker Image Repository | `grafana/grafana` | +| `grafana.image.tag` | Grafana Docker Image Tag | `6.3.2` | +| `grafana.persistenceStorage` | Define storage for grafana data | `{}` (nil) | +| `grafana.volume` | Define storage for grafana data | `volume.mountPath: /var/lib/grafana`,
`volume.name: grafana-data`,
`volume.template: emptyDir: {}` | +| `grafana.resources` | Resource configuration (`requests` and `limits`) | `{}` (nil) | +| `grafana.user` | Grafana username and password | `"admin"` | +| `grafana.password` | Grafana username and password | `"admin"` | +| `alertmanager.replicas` | Number of replicas for alertmanager statefulset | `1` | +| `alertmanager.webPort` | Alertmanager web port | `9093` | +| `alertmanager.meshPort` | Alertmanager gossip port | `9094` | +| `alertmanager.image.repository` | Alertmanager Docker Image Repository | `prom/alertmanager` | +| `alertmanager.image.tag` | Alertmanager Docker Image Tag | `latest` | +| `alertmanager.loglevel` | Alertmanager logging level | `info` | +| `alertmanager.persistenceStorage` | Define storage for alertmanager data | `{}` (nil) | +| `alertmanager.volume` | Define storage for alertmanager data | `volume.mountPath: /data`,
`volume.name: alertmanager-data`,
`volume.template: emptyDir: {}` | +| `alertmanager.resources` | Resource configuration (`requests` and `limits`) | `{}` (nil) | + + +Note that the namespace related configurations (`aerospikeNamespace`, `aerospikeNamespaceMemoryGB`, `aerospikeReplicationFactor` and `aerospikeDefaultTTL`) are intended for default single namespace configuration. + +If using multiple namespaces, these config items can be ignored and a separate `aerospike.conf` file or template with multiple namespace configuration can be used. diff --git a/helm/files/aerospike.template.conf b/helm/files/aerospike.template.conf index c3d74fa..5f3c997 100644 --- a/helm/files/aerospike.template.conf +++ b/helm/files/aerospike.template.conf @@ -72,7 +72,7 @@ namespace ${NAMESPACE} { # following lines instead. storage-engine device { - file /opt/aerospike/data/${MY_POD_NAME}-${NAMESPACE}.dat + file /opt/aerospike/data/${MY_POD_NAME}-${NAMESPACE}.dat filesize ${MEM_GB}G data-in-memory true # Store data in memory in addition to file. } diff --git a/helm/files/aerospike_rules.yaml b/helm/files/aerospike_rules.yaml new file mode 100644 index 0000000..b81c725 --- /dev/null +++ b/helm/files/aerospike_rules.yaml @@ -0,0 +1,115 @@ +groups: + - name: aerospike.rules + rules: + - alert: NodeDown + expr: up{job="aerospike"} == 0 + for: 30s + labels: + severity: "2" + annotations: + description: '{{ "{{" }} $labels.instance {{ "}}" }} has been down for more than 30 seconds.' + summary: Node {{ "{{" }} $labels.instance {{ "}}" }} down + - alert: NodeDown + expr: aerospike_node_up{job="aerospike"} == 0 + for: 30s + labels: + severity: "2" + annotations: + description: '{{ "{{" }} $labels.instance {{ "}}" }} node is down.' + summary: Node {{ "{{" }} $labels.instance {{ "}}" }} down + - alert: TransactionQueueTooFull + expr: aerospike_node_stats_tsvc_queue{job="aerospike"} > 10000 + for: 30s + labels: + severity: "1" + annotations: + description: 'Transaction queue for node {{ "{{" }} $labels.instance {{ "}}" }} is longer than 10000.' + summary: Transaction queue too full for node {{ "{{" }} $labels.instance {{ "}}" }} + - alert: NamespaceStopWrites + expr: aerospike_namespace_stop_writes{job="aerospike"} == 1 + for: 30s + labels: + severity: "1" + annotations: + description: 'Used diskspace for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }} is above stop writes limit.' + summary: Stop Writes for {{ "{{" }} $labels.instance {{ "}}" }}/{{ "{{" }} $labels.ns {{ "}}" }} + - alert: ClockSkewStopWrites + expr: aerospike_namespace_clock_skew_stop_writes{job="aerospike"} == 1 + for: 30s + labels: + severity: "1" + annotations: + description: 'Clock has skewed for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Writes will be stopped by Aerospike + - alert: ClusterSize + expr: aerospike_node_stats_cluster_size{job="aerospike"} < {{ .Values.dbReplicas }} + for: 30s + labels: + severity: "2" + annotations: + description: 'Cluster size mismatch for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Some of the node(s) has gone out of the cluster + - alert: DeadPartitions + expr: aerospike_namespace_dead_partitions{job="aerospike"} > 0 + for: 30s + labels: + severity: "1" + annotations: + description: 'Some of the partition(s) for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }} are dead' + summary: Will require the use of the revive command to make them available again + - alert: HwmBreached + expr: aerospike_namespace_hwm_breached{job="aerospike"} == 1 + for: 30s + labels: + severity: "2" + annotations: + description: 'High water mark has breached for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Eviction will start to make the space available + - alert: UnavailablePartitions + expr: aerospike_namespace_unavailable_partitions{job="aerospike"} > 0 + for: 30s + labels: + severity: "1" + annotations: + description: 'Some of the partition(s) is not available for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Server could not found some partition(s). Check for the network issues and make sure cluster forms properly + - alert: XDRTimelag + expr: aerospike_node_stats_xdr_timelag{job="aerospike"} > 10 # user can configure the seconds. Refer XDR throttling + for: 30s + labels: + severity: "2" + annotations: + description: 'There seems some lag in XDR for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Lag can be there in XDR due to network connectivity issues or errors writing at a destination cluster + - alert: LowDeviceAvailWarning + expr: aerospike_namespace_device_available_pct{job="aerospike"} < 20 + for: 30s + labels: + severity: "2" + annotations: + description: 'Device available percentage has dropped below 20 for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Defrag is unable to keep up with the current load {{ "{{" }} $labels.instance {{ "}}" }}/{{ "{{" }} $labels.ns {{ "}}" }} + - alert: LowDeviceAvailCritical + expr: aerospike_namespace_device_available_pct{job="aerospike"} < 15 + for: 30s + labels: + severity: "1" + annotations: + description: 'Device available percentage has dropped below 15 for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Usable disk resources are critically low which may result in a stop-writes if available percentage goes below 5 + - alert: LowPmemAvailWarning + expr: aerospike_namespace_pmem_available_pct{job="aerospike"} < 20 + for: 30s + labels: + severity: "2" + annotations: + description: 'Pmem available percentage has dropped below 20 for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Defrag is unable to keep up with the current load {{ "{{" }} $labels.instance {{ "}}" }}/{{ "{{" }} $labels.ns {{ "}}" }} + - alert: LowPmemAvailCritical + expr: aerospike_namespace_pmem_available_pct{job="aerospike"} < 15 + for: 30s + labels: + severity: "1" + annotations: + description: 'Pmem available percentage has dropped below 15 for namespace {{ "{{" }} $labels.ns {{ "}}" }} in node {{ "{{" }} $labels.instance {{ "}}" }}' + summary: Usable Pmem resource is critically low which may result in a stop-writes if available percentage goes below 5 diff --git a/helm/files/alertmanager.yaml b/helm/files/alertmanager.yaml new file mode 100644 index 0000000..87f214e --- /dev/null +++ b/helm/files/alertmanager.yaml @@ -0,0 +1,14 @@ +# This is an example alertmanager.yaml which sends alert notifications to a slack channel. +# Use "--set-file alertmanager.alertmanagerConfFilePath=" during "helm install" or "helm upgrade" to use custom alertmanager.yaml. + +global: + slack_api_url: "" +route: + group_by: ['alertname', 'cluster', 'service'] + receiver: slack_general + +receivers: +- name: slack_general + slack_configs: + - channel: '#channel' + text: "summary: {{ "{{" }} .CommonAnnotations.summary {{ "}}" }}\ndescription: {{ "{{" }} .CommonAnnotations.description {{ "}}" }}" \ No newline at end of file diff --git a/helm/files/ape.toml.template b/helm/files/ape.toml.template new file mode 100644 index 0000000..a947725 --- /dev/null +++ b/helm/files/ape.toml.template @@ -0,0 +1,44 @@ +[Agent] +update_interval = ${AGENT_UPDATE_INTERVAL} +# File paths should be double quoted. +# Certificate file for the metric servers for prometheus +cert_file = "${AGENT_CERT_FILE}" +# Key file for the metric servers for prometheus +key_file = "${AGENT_KEY_FILE}" + +# tags to append to the prometheus metrics +tags=[${AGENT_TAGS}] + +bind = "${AGENT_BIND_HOST}:${AGENT_BIND_PORT}" + +# metrics server timeout in seconds +timeout = ${AGENT_TIMEOUT} + +# debug level can be info|warning,warn|error,err|debug +log_level = "${AGENT_LOG_LEVEL}" + +[Aerospike] +db_host="${AS_HOST}" +db_port=${AS_PORT} + +# certificate file +cert_file="${AS_CERT_FILE}" +# key file +key_file="${AS_KEY_FILE}" +# node TLS name for authentication +node_tls_name="${AS_NODE_TLS_NAME}" +# root certificate file +root_ca="${AS_ROOT_CA}" + +# authentication mode: internal (for server), external (LDAP, etc.) +auth_mode="${AS_AUTH_MODE}" +# database user +user="${AS_AUTH_USER}" +# database password +password="${AS_AUTH_PASSWORD}" + +# ticker interval for requesting stats fro mthe database node +resolution=${TICKER_INTERVAL} + +# timeout for sending commands to the server node in seconds +timeout=${TICKER_TIMEOUT} \ No newline at end of file diff --git a/helm/files/on-start.sh b/helm/files/on-start.sh deleted file mode 100755 index eff8017..0000000 --- a/helm/files/on-start.sh +++ /dev/null @@ -1,96 +0,0 @@ -#! /bin/bash -# ------------------------------------------------------------------------------ -# Copyright 2012-2019 Aerospike, Inc. -# -# Portions may be licensed to Aerospike, Inc. under one or more contributor -# license agreements. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy of -# the License at http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations under -# the License. -# ------------------------------------------------------------------------------ - -# This script writes out an aerospike config using a list of newline seperated -# peer DNS names it accepts through stdin. - -# /etc/aerospike is assumed to be a shared volume so we can modify aerospike.conf as required - - -set -e -set -x -CFG=/etc/aerospike/aerospike.template.conf - -# Auto generate Node IDs and add to config -if [ "$AUTO_GENERATE_NODE_IDS" = true ] -then - if ! grep -q "node-id" ${CFG} - then - INDEX=${POD_NAME##*-} - sed -i "/service[[:blank:]]*{/{p;s/.*/1/;H;g;/^\(\n1\)\{1\}$/s//\tnode-id a$INDEX/p;d}" ${CFG} - else - printf "AUTO_GENERATE_NODE_IDS is true but node-id is already configured! \n" - fi -fi - -# For GKE/EKS assign external IP to alternate-access-address -# if hostnetworking is enabled -if [ "$HOST_NETWORK" = true ] -then - apt-get update -y - apt-get install curl -y - if [ "$PLATFORM" = "gke" ] - then - ret=$(curl --write-out "%{http_code}\n" --silent --output /dev/null -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip) - if [ $ret = 200 ] - then - EXT_IP=$(curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip) - if [ ! -z $EXT_IP ] && [ "$EXT_IP" != "" ] - then - echo "External IP:$EXT_IP" - sed -i "/service[[:blank:]]*{/{p;s/.*/1/;H;g;/^\(\n1\)\{2\}$/s//\t\talternate-access-address ${EXT_IP}/p;d}" ${CFG} - fi - fi - elif [ "$PLATFORM" = "eks" ] - then - ret=$(curl --write-out "%{http_code}\n" --silent --output /dev/null http://169.254.169.254/latest/meta-data/public-ipv4) - if [ $ret = 200 ] - then - EXT_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) - if [ ! -z $EXT_IP ] && [ "$EXT_IP" != "" ] - then - echo "External IP: $EXT_IP" - sed -i "/service[[:blank:]]*{/{p;s/.*/1/;H;g;/^\(\n1\)\{2\}$/s//\t\talternate-access-address ${EXT_IP}/p;d}" ${CFG} - fi - fi - fi -fi - -function join { - local IFS="$1"; shift; echo "$*"; -} - -HOSTNAME=$(hostname) -# Parse out cluster name, formatted as: petset_name-index -IFS='-' read -ra ADDR <<< "$(hostname)" -CLUSTER_NAME="${ADDR[0]}" - -while read -ra LINE; do - if [[ "${LINE}" == *"${HOSTNAME}"* ]]; then - MY_NAME=$LINE - fi - PEERS=("${PEERS[@]}" $LINE) -done - -for PEER in "${PEERS[@]}"; do - sed -i -e "/mesh-seed-placeholder/a \\\t\tmesh-seed-address-port ${PEER} 3002" ${CFG} -done - - -# don't need a restart, we're just writing the conf in case there's an -# unexpected restart on the node. diff --git a/helm/files/install.sh b/helm/templates/alertmanager-configmap.yaml similarity index 50% rename from helm/files/install.sh rename to helm/templates/alertmanager-configmap.yaml index 079da45..e8b9416 100755 --- a/helm/files/install.sh +++ b/helm/templates/alertmanager-configmap.yaml @@ -1,7 +1,5 @@ -#! /bin/bash - # ------------------------------------------------------------------------------ -# Copyright 2012-2019 Aerospike, Inc. +# Copyright 2012-2020 Aerospike, Inc. # # Portions may be licensed to Aerospike, Inc. under one or more contributor # license agreements. @@ -17,30 +15,22 @@ # the License. # ------------------------------------------------------------------------------ - -CONFIG_VOLUME="/etc/aerospike" -NAMESPACE=${POD_NAMESPACE:-default} -K8_SERVICE=${SERVICE:-aerospike} -for i in "$@" -do -case $i in - -c=*|--config=*) - CONFIG_VOLUME="${i#*=}" - shift - ;; - *) - # unknown option - ;; -esac -done - -echo installing aerospike.conf into "${CONFIG_VOLUME}" -mkdir -p "${CONFIG_VOLUME}" -#chown -R aerospike:aerospike "${CONFIG_VOLUME}" -apt-get update && apt-get install -y wget -wget https://github.com/aerospike/aerospike-kubernetes/raw/master/docs/peer-finder -O /peer-finder -cp /configs/on-start.sh /on-start.sh -cp /configs/aerospike.template.conf "${CONFIG_VOLUME}"/ -chmod +x /on-start.sh -chmod +x /peer-finder -/peer-finder -on-start=/on-start.sh -service=$K8_SERVICE -ns=${NAMESPACE} -domain=cluster.local +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-alertmanager-config + labels: + app: {{ template "aerospike.name" . }}-alertmanager + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: alertmanager +data: + {{ if .Files.Get "files/alertmanager.yaml" }} + alertmanager.yaml: {{ tpl (.Files.Get "files/alertmanager.yaml") . | quote }} + {{ end }} + {{ if (.Values.alertmanager.alertmanagerConfFilePath) }} + alertmanager.yaml: |- + {{ .Values.alertmanager.alertmanagerConfFilePath | nindent 4 | trim }} + {{ end }} +{{- end }} diff --git a/helm/templates/alertmanager-operated-service.yaml b/helm/templates/alertmanager-operated-service.yaml new file mode 100755 index 0000000..5c6ca9b --- /dev/null +++ b/helm/templates/alertmanager-operated-service.yaml @@ -0,0 +1,42 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-alertmanager-operated + labels: + app: {{ template "aerospike.name" . }}-alertmanager + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: alertmanager +spec: + type: "ClusterIP" + clusterIP: None + selector: + app: {{ template "aerospike.name" . }}-alertmanager + ports: + - name: mesh + port: {{ .Values.alertmanager.meshPort | default 9094 }} + protocol: TCP + targetPort: {{ .Values.alertmanager.meshPort | default 9094 }} + - name: http + port: {{ .Values.alertmanager.webPort | default 9093 }} + protocol: TCP + targetPort: {{ .Values.alertmanager.webPort | default 9093 }} +{{- end }} diff --git a/helm/templates/alertmanager-service.yaml b/helm/templates/alertmanager-service.yaml new file mode 100755 index 0000000..6338805 --- /dev/null +++ b/helm/templates/alertmanager-service.yaml @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-alertmanager + labels: + app: {{ template "aerospike.name" . }}-alertmanager + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: alertmanager +spec: + ports: + - name: http + port: {{ .Values.alertmanager.webPort | default 9093 }} + protocol: TCP + targetPort: {{ .Values.alertmanager.webPort | default 9093 }} + selector: + app: {{ template "aerospike.name" . }}-alertmanager + type: "ClusterIP" +{{- end }} diff --git a/helm/templates/alertmanager-statefulset.yaml b/helm/templates/alertmanager-statefulset.yaml new file mode 100755 index 0000000..af19b87 --- /dev/null +++ b/helm/templates/alertmanager-statefulset.yaml @@ -0,0 +1,118 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Release.Name }}-alertmanager + labels: &Labels + app: {{ template "aerospike.name" . }}-alertmanager + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: alertmanager +spec: + serviceName: {{ .Release.Name }}-alertmanager-operated + replicas: {{ .Values.alertmanager.replicas }} + podManagementPolicy: {{ .Values.alertmanager.podManagementPolicy }} + updateStrategy: + type: {{ .Values.alertmanager.updateStrategy.type }} + revisionHistoryLimit: 10 + selector: + matchLabels: *Labels + template: + metadata: + labels: *Labels + annotations: + {{- if .Values.autoRolloutConfig }} + # TODO: Add an entry for secrets when used in future + checksum/config: {{ include (print $.Template.BasePath "/alertmanager-configmap.yaml") . | sha256sum }} + {{- end }} + spec: + serviceAccountName: {{ if .Values.rbac.create }}{{ template "aerospike.fullname" . }}{{ else }}{{ .Values.rbac.serviceAccountName }}{{ end }} + containers: + - name: prometheus-alertmanager + image: "{{ .Values.alertmanager.image.repository }}:{{ .Values.alertmanager.image.tag }}" + imagePullPolicy: "IfNotPresent" + args: + - --config.file=/etc/config/alertmanager.yaml + - --storage.path="{{ .Values.alertmanager.volume.mountPath }}" + - --web.listen-address=:{{ .Values.alertmanager.webPort | default 9093 }} + - --web.route-prefix=/ + - --cluster.listen-address=$(POD_IP):{{ .Values.alertmanager.meshPort | default 9094 }} + - --log.level={{ .Values.alertmanager.loglevel }} + env: + - name: POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + ports: + - containerPort: {{ .Values.alertmanager.webPort | default 9093 }} + name: http + - containerPort: {{ .Values.alertmanager.meshPort | default 9094 }} + name: mesh + readinessProbe: + httpGet: + path: /#/status + port: {{ .Values.alertmanager.webPort | default 9093 }} + initialDelaySeconds: 30 + timeoutSeconds: 30 + resources: +{{ toYaml .Values.alertmanager.resources | indent 10 }} + volumeMounts: + - name: config-volume + mountPath: /etc/config + {{- if .Values.alertmanager.persistenceStorage }} + {{- if .Values.alertmanager.persistenceStorage.enabled }} + {{- if eq .Values.alertmanager.persistenceStorage.volumeMode "Filesystem"}} + - name: {{ .Values.alertmanager.persistenceStorage.name | quote }} + mountPath: {{ .Values.alertmanager.persistenceStorage.mountPath | quote }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.alertmanager.volume }} + - name: {{ .Values.alertmanager.volume.name | quote }} + mountPath: {{ .Values.alertmanager.volume.mountPath | quote }} + {{- end }} + volumes: + - name: config-volume + configMap: + name: {{ .Release.Name }}-alertmanager-config + {{- if .Values.alertmanager.volume }} + - name: {{ .Values.alertmanager.volume.name | quote }} +{{ toYaml .Values.alertmanager.volume.template | indent 10}} + {{- end }} + volumeClaimTemplates: + {{- if .Values.alertmanager.persistenceStorage }} + {{- if .Values.alertmanager.persistenceStorage.enabled }} + - metadata: + name: {{ .Values.alertmanager.persistenceStorage.name }} + labels: *Labels + spec: + volumeMode: {{ .Values.alertmanager.persistenceStorage.volumeMode }} + accessModes: + - {{ .Values.alertmanager.persistenceStorage.accessMode | quote }} + {{- if hasKey .Values.alertmanager.persistenceStorage "storageClass" }} + storageClassName: {{ .Values.alertmanager.persistenceStorage.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.alertmanager.persistenceStorage.size | quote }} + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/templates/clusterrole.yaml b/helm/templates/clusterrole.yaml new file mode 100644 index 0000000..046a62c --- /dev/null +++ b/helm/templates/clusterrole.yaml @@ -0,0 +1,46 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ +--- +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app: {{ template "aerospike.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + name: {{ template "aerospike.fullname" . }} +rules: + - apiGroups: + - "" + resources: + - namespaces + - pods + - statefulsets + - configmaps + - secrets + - services + - nodes + - nodes/metrics + - endpoints + verbs: + - list + - watch + - get + - nonResourceURLs: ["/metrics"] + verbs: ["get"] +{{- end -}} \ No newline at end of file diff --git a/helm/templates/clusterrolebinding.yaml b/helm/templates/clusterrolebinding.yaml new file mode 100644 index 0000000..26ba99d --- /dev/null +++ b/helm/templates/clusterrolebinding.yaml @@ -0,0 +1,35 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ +--- +{{- if .Values.rbac.create -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app: {{ template "aerospike.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + name: {{ template "aerospike.fullname" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "aerospike.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ template "aerospike.fullname" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} \ No newline at end of file diff --git a/helm/templates/configmap.yaml b/helm/templates/configmap.yaml index ab5e87d..8807b80 100644 --- a/helm/templates/configmap.yaml +++ b/helm/templates/configmap.yaml @@ -1,5 +1,5 @@ # ------------------------------------------------------------------------------ -# Copyright 2012-2019 Aerospike, Inc. +# Copyright 2012-2020 Aerospike, Inc. # # Portions may be licensed to Aerospike, Inc. under one or more contributor # license agreements. @@ -21,11 +21,12 @@ apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-conf - namespace: {{ .Values.namespace }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} data: - on-start.sh: {{ tpl (.Files.Get "files/on-start.sh") . | quote }} - install.sh: {{ tpl (.Files.Get "files/install.sh") . | quote }} - # Use dynamically supplied aerospike.template.conf over the existing one. {{ if .Files.Get "files/aerospike.template.conf" }} aerospike.template.conf: {{ tpl (.Files.Get "files/aerospike.template.conf") . | quote }} @@ -34,4 +35,16 @@ data: aerospike.template.conf: |- {{ .Values.confFilePath | nindent 4 | trim }} {{ end }} + + # Add on-start.sh script to configmap if available + {{ if .Files.Get "files/on-start.sh" }} + on-start.sh: {{ tpl (.Files.Get "files/on-start.sh") . | quote }} + {{ end }} + + # Add aerospike-prometheus-exporter config template to config if monitoring is enabled and if the file is available + {{- if .Values.enableAerospikeMonitoring }} + {{ if .Files.Get "files/ape.toml.template" }} + ape.toml.template: {{ tpl (.Files.Get "files/ape.toml.template") . | quote }} + {{ end }} + {{- end }} --- diff --git a/helm/templates/externalipservices.yaml b/helm/templates/externalipservices.yaml new file mode 100644 index 0000000..a43616d --- /dev/null +++ b/helm/templates/externalipservices.yaml @@ -0,0 +1,46 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableExternalIpServices }} +{{ $length := len .Values.externalIpEndpoints }} {{ if lt $length (int .Values.dbReplicas) }} +{{ fail "Number of externalIpEndpoints should be equal to or more than dbReplicas" }} +{{ end }} +{{- $dot := . }} +{{ range $podIndex := until (int .Values.dbReplicas) -}} +--- +apiVersion: v1 +kind: Service +metadata: + name: "extip-{{ $.Release.Name }}-{{ $.Chart.Name }}-{{ $podIndex }}" + namespace: {{ $.Release.Namespace }} + labels: + app: {{ template "aerospike.name" $dot }} + chart: {{ $.Chart.Name }}-{{ $.Chart.Version }} + release: {{ $.Release.Name }} +spec: + externalIPs: + - {{ $ip := index $.Values.externalIpEndpoints $podIndex }} {{ $ip.IP }} + ports: + - port: {{ $ip := index $.Values.externalIpEndpoints $podIndex }} {{ $ip.Port }} + targetPort: {{ $.Values.aerospikeClientPort | default 3000 }} + protocol: TCP + name: client + selector: + statefulset.kubernetes.io/pod-name: "{{ $.Release.Name }}-{{ $.Chart.Name }}-{{ $podIndex }}" +{{ end -}} +{{- end }} +--- diff --git a/helm/templates/grafana-configmap.yaml b/helm/templates/grafana-configmap.yaml new file mode 100755 index 0000000..ebcd820 --- /dev/null +++ b/helm/templates/grafana-configmap.yaml @@ -0,0 +1,133 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-grafana-config + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }}-grafana + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: grafana +data: + grafana.ini: | + [analytics] + check_for_updates = true + [grafana_net] + url = https://grafana.net + [log] + mode = console + [paths] + data = /var/lib/grafana/data + logs = /var/log/grafana + plugins = /var/lib/grafana/plugins + [server] + http_port = {{ .Values.grafana.httpPort | default 3000 }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-grafana-dashboards + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }}-grafana + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: grafana +data: + alerts.json: | + {"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"iteration":1565277670876,"links":[],"panels":[{"columns":[],"datasource":"Aerospike Prometheus","fontSize":"100%","gridPos":{"h":24,"w":24,"x":0,"y":0},"id":85,"links":[],"options":{},"pageSize":null,"scroll":true,"showHeader":true,"sort":{"col":0,"desc":true},"styles":[{"alias":"Time","dateFormat":"YYYY-MM-DD HH:mm:ss","pattern":"Time","type":"date"},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Alert Name","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"decimals":2,"pattern":"alertname","thresholds":[],"type":"string","unit":"short"},{"alias":"Alert State","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"alertstate","preserveFormat":false,"sanitize":false,"thresholds":[""],"type":"string","unit":"short"},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"build","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Cluster","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"cluster_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"string","unit":"short"},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Host","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"service","thresholds":[],"type":"string","unit":"short"},{"alias":"Severity","colorMode":"row","colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"severity","thresholds":["2","4"],"type":"string","unit":"short","valueMaps":[{"text":"Info","value":"1"},{"text":"Warning","value":"2"},{"text":"High","value":"3"},{"text":"Critical","value":"4"}]},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value","thresholds":[],"type":"hidden","unit":"short"}],"targets":[{"expr":"ALERTS{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\", severity=~\"$severity|$^\", alertstate=~\"$state|$^\",}","format":"table","instant":true,"intervalFactor":1,"refId":"A"}],"timeFrom":null,"timeShift":null,"title":"Alerts","transform":"table","type":"table"}],"refresh":"5s","schemaVersion":19,"style":"dark","tags":[],"templating":{"list":[{"allValue":null,"current":{"text":"null","value":"null"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","hide":0,"includeAll":true,"label":"Cluster","multi":true,"name":"cluster","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","hide":0,"includeAll":true,"label":"Node","multi":true,"name":"node","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"tags":[],"text":"All","value":["$__all"]},"hide":0,"includeAll":true,"label":"Severity","multi":true,"name":"severity","options":[{"selected":true,"text":"All","value":"$__all"},{"selected":false,"text":"1","value":"1"},{"selected":false,"text":"2","value":"2"},{"selected":false,"text":"3","value":"3"},{"selected":false,"text":"4","value":"4"}],"query":"1,2,3,4","skipUrlSync":false,"type":"custom"},{"allValue":null,"current":{"text":"All","value":["$__all"]},"hide":0,"includeAll":true,"label":"Alert State","multi":true,"name":"state","options":[{"selected":true,"text":"All","value":"$__all"},{"selected":false,"text":"firing","value":"firing"},{"selected":false,"text":"pending","value":"pending"}],"query":"firing,pending","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-6h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Alerts","uid":"0bMepuvZz","version":1} + + cluster.json: | + {"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","limit":100,"name":"Annotations & Alerts","showIn":0,"tags":[],"type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"id":4,"iteration":1570124545228,"links":[],"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":26,"panels":[],"title":"Overview","type":"row"},{"cacheTimeout":null,"content":"

$cluster<\/h1><\/center>","datasource":"Aerospike Prometheus","gridPos":{"h":3,"w":6,"x":0,"y":1},"id":35,"links":[],"mode":"html","options":{},"targets":[{"expr":"min(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"legendFormat":"","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"Cluster Name","type":"text"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"s","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":3,"x":6,"y":1},"id":52,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"min(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Min. Uptime","type":"singlestat","valueFontSize":"80%","valueMaps":[],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":0,"format":"s","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":3,"x":9,"y":1},"id":36,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"max(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Max. Uptime","type":"singlestat","valueFontSize":"80%","valueMaps":[],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":3,"x":12,"y":1},"id":4,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"count(aerospike_node_up{job=\"aerospike\", cluster_name=~\"$cluster\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1000,1000","timeFrom":null,"timeShift":null,"title":"Cluster Size","type":"singlestat","valueFontSize":"150%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":3,"x":15,"y":1},"id":5,"interval":null,"links":[{"dashboard":"Alerts","targetBlank":true,"title":"Alerts","type":"dashboard","url":"\/d\/0bMepuvZz\/alerts"}],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"count(ALERTS{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Alerts","type":"singlestat","valueFontSize":"150%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":3,"x":18,"y":1},"id":14,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_stop_writes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Stop Writes","type":"singlestat","valueFontSize":"150%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":3,"x":21,"y":1},"id":16,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_migrate_rx_partitions_remaining{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Migrations Remaining","type":"singlestat","valueFontSize":"110%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":4},"id":2,"panels":[],"title":"Throughput (Read, Write)","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":9,"w":12,"x":0,"y":5},"hideTimeOverride":false,"id":11,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(aerospike_namespace_client_read_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+rate(aerospike_namespace_client_read_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+rate(aerospike_namespace_client_read_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+rate(aerospike_namespace_client_read_not_found{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Total","refId":"B"},{"expr":"rate(aerospike_namespace_client_read_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Successful","refId":"A"},{"expr":"rate(aerospike_namespace_client_read_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Error","refId":"C"},{"expr":"rate(aerospike_namespace_client_read_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Timeout","refId":"D"},{"expr":"rate(aerospike_namespace_client_read_not_found{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Not Found","refId":"E"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client Reads (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":9,"w":12,"x":12,"y":5},"id":12,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(aerospike_namespace_client_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+rate(aerospike_namespace_client_write_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+rate(aerospike_namespace_client_write_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Total","refId":"B"},{"expr":"rate(aerospike_namespace_client_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Successful","refId":"A"},{"expr":"rate(aerospike_namespace_client_write_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Timeout","refId":"C"},{"expr":"rate(aerospike_namespace_client_write_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Error","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client Writes (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":14},"id":28,"panels":[],"title":"Throughput (Batch, Query, Scan, UDF)","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":10,"w":12,"x":0,"y":15},"hideTimeOverride":false,"id":17,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(aerospike_node_stats_batch_index_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}: Total","refId":"B"},{"expr":"rate(aerospike_node_stats_batch_index_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m]) - (rate(aerospike_node_stats_batch_index_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m]) + rate(aerospike_node_stats_batch_index_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m]))","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}: Successful","refId":"A"},{"expr":"rate(aerospike_node_stats_batch_index_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}: Timeout","refId":"C"},{"expr":"rate(aerospike_node_stats_batch_index_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}: Error","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Batch Reads (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":10,"w":12,"x":12,"y":15},"hideTimeOverride":false,"id":19,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(aerospike_namespace_scan_aggr_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_basic_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_udf_bg_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_udf_bg_abort{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_udf_bg_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_aggr_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_basic_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])\n","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Total","refId":"B"},{"expr":"rate(aerospike_namespace_scan_aggr_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_basic_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_udf_bg_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Successful","refId":"A"},{"expr":"rate(aerospike_namespace_scan_udf_bg_abort{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_udf_bg_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_aggr_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_basic_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Error","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Scans (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":10,"w":12,"x":0,"y":25},"hideTimeOverride":false,"id":18,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(aerospike_namespace_query_reqs{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Total","refId":"B"},{"expr":"rate(aerospike_namespace_query_reqs{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])-rate(aerospike_namespace_query_fail{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Successful","refId":"A"},{"expr":"rate(aerospike_namespace_query_fail{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Error","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Queries (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":10,"w":12,"x":12,"y":25},"hideTimeOverride":false,"id":20,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(aerospike_namespace_client_udf_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_client_udf_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_client_udf_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Total","refId":"B"},{"expr":"rate(aerospike_namespace_client_udf_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_basic_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_scan_udf_bg_complete{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Successful","refId":"A"},{"expr":"rate(aerospike_namespace_client_udf_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_client_udf_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])\n","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Error","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UDFs (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":35},"id":38,"panels":[],"title":"Node Statstics","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":36},"hideTimeOverride":false,"id":33,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_node_stats_client_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client Connections","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":36},"hideTimeOverride":false,"id":41,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_node_stats_cluster_size{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Cluster Size","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":36},"hideTimeOverride":false,"id":42,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_migrate_tx_partitions_remaining{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Outgoing {{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}","refId":"B"},{"expr":"sum(aerospike_namespace_migrate_rx_partitions_remaining{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Incoming {{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Migrations Remaining","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":44},"id":64,"panels":[],"title":"Objects","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":45},"hideTimeOverride":false,"id":34,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_master_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Master Objects","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":45},"hideTimeOverride":false,"id":39,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_prole_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Prole Objects","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":45},"hideTimeOverride":false,"id":40,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_non_replica_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Non-Replica Objects","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":53},"hideTimeOverride":false,"id":54,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_master_tombstones{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Master Tombstones","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":53},"hideTimeOverride":false,"id":55,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_prole_tombstones{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Prole Tombstones","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":53},"hideTimeOverride":false,"id":56,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_non_replica_tombstones{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Non-Replica Tombstones","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":61},"hideTimeOverride":false,"id":53,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_evicted_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Evicted Objects","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":61},"hideTimeOverride":false,"id":60,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_expired_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Expired Objects","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":69},"id":62,"panels":[],"title":"Resources","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":70},"hideTimeOverride":false,"id":57,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_memory_used_index_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Primary Index Used","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":70},"hideTimeOverride":false,"id":58,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_memory_used_sindex_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Secondary Index Used","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":70},"hideTimeOverride":false,"id":59,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_fail_generation{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Fail Generation","refId":"B"},{"expr":"sum(aerospike_namespace_fail_key_busy{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Key Busy","refId":"A"},{"expr":"sum(aerospike_namespace_fail_record_too_big{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Record Too Big","refId":"C"},{"expr":"sum(aerospike_namespace_fail_xdr_forbidden{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: XDR Forbidden","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Failure Rate","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"percent","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":78},"hideTimeOverride":false,"id":43,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_node_stats_heap_allocated_kbytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Allocated Heap Memory","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"kbytes","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":78},"hideTimeOverride":false,"id":44,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_node_stats_heap_mapped_kbytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Mapped Memory","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"kbytes","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":78},"hideTimeOverride":false,"id":45,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_node_stats_heap_efficiency_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Heap Efficiency","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"percent","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":86},"hideTimeOverride":false,"id":46,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_memory_free_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Free","refId":"B"},{"expr":"aerospike_namespace_high_water_memory_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: HWM","refId":"A"},{"expr":"aerospike_namespace_stop_writes_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}: Stop Writes","refId":"C"}],"thresholds":[{"colorMode":"critical","fill":true,"line":true,"op":"gt","yaxis":"left"}],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory Info %","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"percent","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":86},"hideTimeOverride":false,"id":48,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_memory_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Used {{ "{{" }}service{{ "}}" }}\/{{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory Used","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bytes","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":86},"hideTimeOverride":false,"id":50,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_memory_size{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"} - aerospike_namespace_memory_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory Free","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bytes","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":94},"hideTimeOverride":false,"id":47,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_device_free_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Disk Info%","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"percent","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":94},"hideTimeOverride":false,"id":49,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_device_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Disk Used","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bytes","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":94},"hideTimeOverride":false,"id":51,"interval":"","legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_device_total_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"} - aerospike_namespace_device_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Disk Free","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bytes","label":"","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":true,"gridPos":{"h":1,"w":24,"x":0,"y":102},"id":30,"panels":[{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":65},"hideTimeOverride":false,"id":22,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(\nrate(aerospike_namespace_xdr_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_client_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_write_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_write_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])\n) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Total {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"},{"expr":"sum(rate(aerospike_namespace_xdr_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+rate(aerospike_namespace_xdr_client_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])) by (service, ns)","format":"time_series","intervalFactor":1,"legendFormat":"Successful {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"A"},{"expr":"sum(\nrate(aerospike_namespace_xdr_write_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_write_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])\n) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Error {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"XDR Reads (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":65},"hideTimeOverride":false,"id":21,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(\nrate(aerospike_namespace_xdr_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_client_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_write_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_write_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])\n) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Total {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"},{"expr":"sum(rate(aerospike_namespace_xdr_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+rate(aerospike_namespace_xdr_client_write_success{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])) by (service, ns)","format":"time_series","intervalFactor":1,"legendFormat":"Successful {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"A"},{"expr":"sum(\nrate(aerospike_namespace_xdr_write_error{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])+\nrate(aerospike_namespace_xdr_write_timeout{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}[1m])\n) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Error {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"XDR Writes (TPS)","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"TPS","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"TPS","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":73},"hideTimeOverride":false,"id":31,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_node_stats_xdr_ship_latency_avg) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Avg. Latency {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"},{"expr":"sum(aerospike_node_stats_xdr_ship_bytes) by (service, ns)","format":"time_series","intervalFactor":1,"legendFormat":"Shipped Bytes {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"XDR Shipping","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"ms","label":"Latency","logBase":1,"max":null,"min":"0","show":true},{"format":"bytes","label":"Bytes","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","decimals":0,"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":73},"hideTimeOverride":false,"id":32,"interval":"","legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_node_stats_xdr_ship_outstanding_objects) by (service, ns)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":" {{ "{{" }}service{{ "}}" }} {{ "{{" }}ns{{ "}}" }}","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"XDR Outstanding Objects","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":"","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"title":"XDR","type":"row"}],"refresh":"5s","schemaVersion":18,"style":"dark","tags":[],"templating":{"list":[{"allValue":null,"current":{"text":"null","value":"null"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","hide":0,"includeAll":false,"label":"Cluster","multi":false,"name":"cluster","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","hide":0,"includeAll":true,"label":"Node","multi":true,"name":"node","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","hide":0,"includeAll":true,"label":"Namespace","multi":true,"name":"namespace","options":[],"query":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"current":{"text":"","value":""},"hide":0,"label":"Tags","name":"tags","options":[{"selected":true,"text":"","value":""}],"query":"","skipUrlSync":false,"type":"textbox"}]},"time":{"from":"now-15m","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Cluster Overview","uid":"dR0dDRHWz","version":107} + + latency.json: | + {"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"iteration":1565113879723,"links":[],"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":6,"panels":[],"repeat":"quartile","title":"$quartile (ms)","type":"row"},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":12,"x":0,"y":1},"id":83,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"sort":null,"sortDesc":null,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"maxPerRow":2,"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeat":"op_type","repeatDirection":"h","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\", op_type=\"$op_type\", quartile_sorted=\"$quartile\"}) by (service)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}service{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"$op_type: $quartile ms","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":18,"style":"dark","tags":[],"templating":{"list":[{"allValue":null,"current":{"text":"null","value":"null"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","hide":0,"includeAll":false,"label":"Cluster","multi":false,"name":"cluster","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","hide":0,"includeAll":true,"label":"Node","multi":true,"name":"node","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","hide":0,"includeAll":true,"label":"Namespace","multi":true,"name":"namespace","options":[],"query":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"selected":true,"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values({__name__=~\"aerospike_latencies_.*\", job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}, quartile_sorted)","hide":0,"includeAll":true,"label":"Quartile","multi":true,"name":"quartile","options":[],"query":"label_values({__name__=~\"aerospike_latencies_.*\", job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}, quartile_sorted)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values({__name__=~\"aerospike_latencies_.*\", job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}, op_type)","hide":0,"includeAll":true,"label":"Operation","multi":true,"name":"op_type","options":[],"query":"label_values({__name__=~\"aerospike_latencies_.*\", job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}, op_type)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-6h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Latency View","uid":"ZoeGW1DBk","version":15} + + namespace.json: | + {"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"iteration":1565113854405,"links":[],"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":24,"panels":[],"repeat":"namespace","title":"Namespace: $namespace","type":"row"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","#FF780A","#FF780A"],"datasource":"Aerospike Prometheus","decimals":0,"format":"short","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":3,"x":0,"y":1},"id":101,"interval":null,"links":[],"mappingType":2,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"},{"from":"0","text":"OK","to":"0"},{"from":"1","text":"BREACHED","to":"1000"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"avg(aerospike_namespace_hwm_breached{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1","timeFrom":null,"timeShift":null,"title":"HWM","type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N\/A","value":"null"},{"op":"=","text":"TRUE","value":"1"},{"op":"=","text":"FALSE","value":"0"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","#E02F44","#E02F44"],"datasource":"Aerospike Prometheus","decimals":0,"format":"short","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":3,"x":3,"y":1},"id":113,"interval":null,"links":[],"mappingType":2,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"},{"from":"0","text":"OK","to":"0"},{"from":"1","text":"CRITICAL","to":"1000"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_stop_writes{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1","timeFrom":null,"timeShift":null,"title":"Stop Writes","type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N\/A","value":"null"},{"op":"=","text":"TRUE","value":"1"},{"op":"=","text":"FALSE","value":"0"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","#FF9830","#FF9830"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":3,"x":6,"y":1},"id":127,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_migrate_rx_partitions_remaining{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"1","timeFrom":null,"timeShift":null,"title":"Migrations Remaining","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","#FF9830","#FF9830"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":3,"x":9,"y":1},"id":142,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(partitions{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"1","timeFrom":null,"timeShift":null,"title":"Unavailable Partitions","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","#FF9830","#FF9830"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":4,"x":12,"y":1},"id":143,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(partitions{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"1","timeFrom":null,"timeShift":null,"title":"Dead Partitions","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"aliasColors":{"High Water Mark":"semi-dark-orange","Stop Writes":"dark-red","Used %":"blue"},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":0,"gridPos":{"h":9,"w":8,"x":16,"y":1},"id":49,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg(100-aerospike_namespace_memory_free_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Used %","refId":"A"},{"expr":"avg(aerospike_namespace_high_water_memory_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"High Water Mark","refId":"B"},{"expr":"avg(aerospike_namespace_stop_writes_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Stop Writes","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"% Memory Trend","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"datasource":"Aerospike Prometheus","gridPos":{"h":5,"w":4,"x":0,"y":3},"id":31,"links":[{"dashboard":"Clus","type":"dashboard"}],"options":{"fieldOptions":{"calcs":["last"],"defaults":{"decimals":0,"max":100,"min":0,"unit":"percent"},"mappings":[],"override":{},"thresholds":[{"color":"green","index":0,"value":null},{"color":"semi-dark-orange","index":1,"value":50},{"color":"red","index":2,"value":95}],"values":false},"orientation":"horizontal","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.2.2","targets":[{"expr":"avg(100-aerospike_namespace_device_available_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"timeFrom":null,"timeShift":null,"title":"% Device","type":"gauge"},{"aliasColors":{"% Disk Used":"blue","% High Water Mark":"semi-dark-orange","% Stop Writes":"dark-red","Available Used %":"purple","Free Used %":"blue","High Water Mark":"semi-dark-orange","High Water Mark %":"semi-dark-orange","Stop Writes":"dark-red","Stop Writes %":"dark-red","Used %":"blue","Used % (Available)":"blue","Used % (Free)":"purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":0,"gridPos":{"h":7,"w":8,"x":4,"y":3},"id":27,"legend":{"alignAsTable":false,"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[{"type":"dashboard"}],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"","yaxis":1}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg(100-aerospike_namespace_device_free_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"Used % (Free)","refId":"A"},{"expr":"avg(100-aerospike_namespace_device_available_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Used % (Available)","refId":"D"},{"expr":"avg(aerospike_namespace_high_water_disk_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"High Water Mark","refId":"B"},{"expr":"95","format":"time_series","intervalFactor":1,"legendFormat":"Stop Writes","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"% Device Trend","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"datasource":"Aerospike Prometheus","gridPos":{"h":5,"w":4,"x":12,"y":3},"id":57,"links":[],"options":{"fieldOptions":{"calcs":["last"],"defaults":{"max":100,"min":0,"unit":"percent"},"mappings":[],"override":{},"thresholds":[{"color":"green","index":0,"value":null},{"color":"semi-dark-orange","index":1,"value":60},{"color":"red","index":2,"value":90}],"values":false},"orientation":"auto","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.2.2","targets":[{"expr":"sum(aerospike_namespace_memory_used_bytes{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})\/sum(aerospike_namespace_memory_size{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})*100","format":"time_series","instant":true,"intervalFactor":1,"legendFormat":"","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"% Memory","type":"gauge"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":0,"y":8},"id":42,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"avg(aerospike_namespace_device_total_bytes{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Total","type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":2,"y":8},"id":78,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"avg(aerospike_namespace_device_total_bytes{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})*(avg(aerospike_namespace_device_available_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})\/100)","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Available","type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":12,"y":8},"id":66,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"avg(aerospike_namespace_memory_size{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Total","type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":14,"y":8},"id":68,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"avg(aerospike_namespace_memory_size{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})*(avg(aerospike_namespace_memory_free_pct{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})\/100)","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Available","type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"aliasColors":{"Evicted objects":"semi-dark-red","Master objects":"semi-dark-blue","Replica objects":"light-purple","Tombstones":"super-light-yellow"},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":6,"w":12,"x":0,"y":10},"id":100,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_tombstones{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Tombstones","refId":"C"},{"expr":"sum(aerospike_namespace_evicted_objects{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Evicted objects","refId":"D"},{"expr":"sum(aerospike_namespace_prole_objects{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Replica objects","refId":"B"},{"expr":"sum(aerospike_namespace_master_objects{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Master objects","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Objects","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"Evicted objects":"semi-dark-red","Master objects":"semi-dark-blue","Replica objects":"light-purple","Tombstones":"super-light-yellow"},"bars":false,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":6,"w":12,"x":12,"y":10},"id":141,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_migrate_tx_partitions_remaining{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Incoming","refId":"A"},{"expr":"sum(aerospike_namespace_migrate_rx_partitions_remaining{cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"})","format":"time_series","intervalFactor":1,"legendFormat":"Outgoing","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Migrate Partitions Remaining","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":18,"style":"dark","tags":[],"templating":{"list":[{"allValue":null,"current":{"text":"aerospike-monitoring-demo","value":"aerospike-monitoring-demo"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","hide":0,"includeAll":true,"label":"Cluster","multi":false,"name":"cluster","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":["$__all"]},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","hide":0,"includeAll":true,"label":"Node","multi":true,"name":"node","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":["$__all"]},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","hide":0,"includeAll":true,"label":"Namespace","multi":true,"name":"namespace","options":[],"query":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Namespace View","uid":"zGcUKcDZz","version":4} + + node.json: | + {"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"iteration":1565270958217,"links":[],"panels":[{"collapsed":true,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":4,"panels":[{"columns":[],"datasource":"Aerospike Prometheus","fontSize":"100%","gridPos":{"h":9,"w":24,"x":0,"y":1},"id":2,"links":[],"options":{},"pageSize":128,"scroll":true,"showHeader":true,"sort":{"col":0,"desc":true},"styles":[{"alias":"Node","dateFormat":"YYYY-MM-DD HH:mm:ss","link":false,"pattern":"service","type":"string"},{"alias":"Build","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"decimals":2,"pattern":"build_version","thresholds":[],"type":"string","unit":"short"},{"alias":"Cluster Size","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"cluster_size","thresholds":[],"type":"number","unit":"short"},{"alias":"Disk Total","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"disk_total","thresholds":[],"type":"number","unit":"bytes"},{"alias":"Disk Used","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"disk_used","thresholds":[],"type":"number","unit":"bytes"},{"alias":"Time","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Cluster Name","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"cluster_name","thresholds":[],"type":"string","unit":"short"},{"alias":"Client Connections","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"client_connections","thresholds":[],"type":"number","unit":"short"},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Node Host","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"All Objects","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"master_and_replica_objects","thresholds":[],"type":"number","unit":"short"},{"alias":"All Tombstones","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"master_and_replica_tombstones","thresholds":[],"type":"number","unit":"short"},{"alias":"Total Memory","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ram_total","thresholds":[],"type":"number","unit":"bytes"},{"alias":"Used Memory","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ram_used","thresholds":[],"type":"number","unit":"bytes"},{"alias":"Mig. In Remaining","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"migrates_incoming_partitions_remaining","thresholds":[],"type":"number","unit":"short"},{"alias":"Mig. Out Remaining","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"migrates_outgoing_partitions_remaining","thresholds":[],"type":"number","unit":"short"},{"alias":"","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value","thresholds":[],"type":"hidden","unit":"short"}],"targets":[{"expr":"aerospike_node_info{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\"}","format":"table","instant":true,"intervalFactor":1,"refId":"A"}],"timeFrom":null,"timeShift":null,"title":"Nodes","transform":"table","type":"table"}],"title":"Node List","type":"row"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":1},"id":6,"panels":[],"repeat":"node","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"title":"$node","type":"row"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":0,"y":2},"id":69,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"min(up{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$service|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Agent","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"},{"op":"=","text":"UP","value":"1"},{"op":"=","text":"DOWN","value":"0"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":2,"y":2},"id":140,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"aerospike_node_up{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"}","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Server Node","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"},{"op":"=","text":"UP","value":"1"},{"op":"=","text":"DOWN","value":"0"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":4,"y":2},"id":9,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"ALERTS{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"}","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Alerts","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":6,"y":2},"id":14,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"aerospike_node_stats_client_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"}","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Client Conns.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"short","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":8,"y":2},"id":43,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":false,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"All Objects","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":3,"format":"short","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":10,"y":2},"id":56,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_tombstones{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"All Tombstones","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":12,"y":2},"id":18,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_memory_size{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Total Mem.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":14,"y":2},"id":23,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_memory_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Used Mem.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","decimals":null,"format":"percent","gauge":{"maxValue":100,"minValue":0,"show":true,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":16,"y":2},"id":24,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"min(aerospike_namespace_memory_free_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"10,5","timeFrom":null,"timeShift":null,"title":"Free Mem.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":18,"y":2},"id":31,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_device_total_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Total Disk","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":20,"y":2},"id":32,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_device_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Used Disk","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","decimals":null,"format":"percent","gauge":{"maxValue":100,"minValue":0,"show":true,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":22,"y":2},"id":33,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"min(aerospike_namespace_device_free_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"5,10","timeFrom":null,"timeShift":null,"title":"Free Disk","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":0,"y":5},"id":83,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"sort":null,"sortDesc":null,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"read\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Reads \/ sec","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":8,"y":5},"id":98,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"write\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Writes \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":16,"y":5},"id":100,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"udf\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: UDF \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":0,"y":12},"id":44,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":false,"min":false,"show":true,"total":true,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_migrate_rx_partitions_remaining{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"Incoming Partitions Remaining","refId":"A"},{"expr":"sum(aerospike_namespace_migrate_tx_partitions_remaining{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"Outgoing Partitions Remaining","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Migrations (Partitions Remaining)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":8,"y":12},"id":101,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"query\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Query \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":16,"y":12},"id":99,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"proxy\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Proxies \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":0,"y":19},"id":120,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_node_stats_client_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Client Connections","refId":"A"},{"expr":"aerospike_node_stats_fabric_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"Fabric Connections","refId":"B"},{"expr":"aerospike_node_stats_heartbeat_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"Heartbeat Connections","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Connections","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":8,"y":19},"id":161,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3000","value":"172.16.224.166:3000"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_master_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}ns{{ "}}" }}\/Master","refId":"A"},{"expr":"aerospike_namespace_prole_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}ns{{ "}}" }}\/Prole","refId":"B"},{"expr":"aerospike_namespace_tombstones{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}ns{{ "}}" }}\/Tombstones","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Object Count","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":162,"panels":[],"repeat":null,"repeatIteration":1565270958217,"repeatPanelId":6,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"title":"$node","type":"row"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":0,"y":27},"id":163,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":69,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"min(up{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$service|$^\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Agent","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"},{"op":"=","text":"UP","value":"1"},{"op":"=","text":"DOWN","value":"0"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":2,"y":27},"id":164,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":140,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"aerospike_node_up{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"}","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"Server Node","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"},{"op":"=","text":"UP","value":"1"},{"op":"=","text":"DOWN","value":"0"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":4,"y":27},"id":165,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":9,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"aerospike_node_stats_cluster_size{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"}","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Cluster Size","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":6,"y":27},"id":166,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":14,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"aerospike_node_stats_client_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"}","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Client Conns.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"short","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":8,"y":27},"id":167,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":43,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":false,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"All Objects","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":3,"format":"short","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":10,"y":27},"id":168,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":56,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_tombstones{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"All Tombstones","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":12,"y":27},"id":169,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":18,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_memory_size{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Total Mem.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":14,"y":27},"id":170,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":23,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_memory_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Used Mem.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","decimals":null,"format":"percent","gauge":{"maxValue":100,"minValue":0,"show":true,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":16,"y":27},"id":171,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":24,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"min(aerospike_namespace_memory_free_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"10,5","timeFrom":null,"timeShift":null,"title":"Free Mem.","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":18,"y":27},"id":172,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":31,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_device_total_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Total Disk","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"Aerospike Prometheus","decimals":1,"format":"bytes","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":20,"y":27},"id":173,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":32,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"sum(aerospike_namespace_device_used_bytes{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Used Disk","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"Aerospike Prometheus","decimals":null,"format":"percent","gauge":{"maxValue":100,"minValue":0,"show":true,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":2,"x":22,"y":27},"id":174,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N\/A","to":"null"}],"repeatIteration":1565270958217,"repeatPanelId":33,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"","targets":[{"expr":"min(aerospike_namespace_device_free_pct{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":true,"intervalFactor":1,"refId":"A"}],"thresholds":"5,10","timeFrom":null,"timeShift":null,"title":"Free Disk","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N\/A","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":0,"y":30},"id":175,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"sort":null,"sortDesc":null,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":83,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"read\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Reads \/ sec","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":8,"y":30},"id":176,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":98,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"write\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Writes \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":16,"y":30},"id":177,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":100,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"udf\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: UDF \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":0,"y":37},"id":178,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":false,"min":false,"show":true,"total":true,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":44,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(aerospike_namespace_migrate_rx_partitions_remaining{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"Incoming Partitions Remaining","refId":"A"},{"expr":"sum(aerospike_namespace_migrate_tx_partitions_remaining{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node\"})","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"Outgoing Partitions Remaining","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Migrations (Partitions Remaining)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":8,"y":37},"id":179,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":101,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"query\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Query \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":16,"y":37},"id":180,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":99,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg({__name__=~\"aerospike_latencies_.*\", op_type=\"proxy\",job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\", ns=~\"$namespace|$^\"}) by (quartile_sorted)","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}quartile_sorted{{ "}}" }}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Latency: Proxies \/ sec","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":0,"y":44},"id":181,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":120,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_node_stats_client_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"Client Connections","refId":"A"},{"expr":"aerospike_node_stats_fabric_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"Fabric Connections","refId":"B"},{"expr":"aerospike_node_stats_heartbeat_connections{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"Heartbeat Connections","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Connections","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"Aerospike Prometheus","fill":1,"gridPos":{"h":7,"w":8,"x":8,"y":44},"id":182,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatIteration":1565270958217,"repeatPanelId":161,"repeatedByRow":true,"scopedVars":{"node":{"selected":false,"text":"172.16.224.166:3010","value":"172.16.224.166:3010"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"aerospike_namespace_master_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{ "{{" }}ns{{ "}}" }}\/Master","refId":"A"},{"expr":"aerospike_namespace_prole_objects{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}ns{{ "}}" }}\/Prole","refId":"B"},{"expr":"aerospike_namespace_tombstones{job=\"aerospike\", cluster_name=~\"$cluster\", service=~\"$node|$^\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ "{{" }}ns{{ "}}" }}\/Tombstones","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Object Count","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true},{"decimals":0,"format":"short","label":"Count","logBase":1,"max":null,"min":"0","show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":18,"style":"dark","tags":[],"templating":{"list":[{"allValue":null,"current":{"text":"null","value":"null"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","hide":0,"includeAll":false,"label":"Cluster","multi":false,"name":"cluster","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\"},cluster_name)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","hide":0,"includeAll":true,"label":"Node","multi":true,"name":"node","options":[],"query":"label_values(aerospike_node_stats_uptime{job=\"aerospike\", cluster_name=~\"$cluster|$^\"},service)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"text":"All","value":"$__all"},"datasource":"Aerospike Prometheus","definition":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","hide":0,"includeAll":true,"label":"Namespace","multi":true,"name":"namespace","options":[],"query":"label_values(aerospike_namespace_objects{job=\"aerospike\", cluster_name=~\"$cluster|$^\", service=~\"$node|$^\" },ns)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-6h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Node Overview","uid":"UcZD2iHAk","version":2} +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-grafana-provisioning-dashboards + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }}-grafana + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: grafana +data: + all.yaml: |- + apiVersion: 1 + providers: + - name: 'default' + # org id. will default to orgId 1 if not specified + # orgId: 1 + # name of the dashboard folder. Required + folder: 'Aerospike' + # folder UID. will be automatically generated if not specified + folderUid: 'aerospike1' + # provider type. Required + type: file + # disable dashboard deletion + disableDeletion: false + # enable dashboard editing + editable: true + # how often Grafana will scan for changed dashboards + updateIntervalSeconds: 10 + options: + # path to dashboard files on disk. Required + path: /var/lib/grafana/dashboards +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-grafana-provisioning-datasources + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }}-grafana + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: grafana +data: + all.yaml: |- + apiVersion: 1 + datasources: + - name: "Aerospike Prometheus Alertmanager" + type: camptocamp-prometheus-alertmanager-datasource + access: proxy + # orgId: 1 + url: http://{{ .Release.Name }}-alertmanager:{{ .Values.alertmanager.webPort | default 9093 }} + editable: true + isDefault: false + + - name: "Aerospike Prometheus" + type: prometheus + access: proxy + # orgId: 1 + url: http://{{ .Release.Name }}-prometheus:{{ .Values.prometheus.serverPort | default 9090 }} + editable: true + isDefault: false +{{- end }} diff --git a/helm/templates/grafana-service.yaml b/helm/templates/grafana-service.yaml new file mode 100755 index 0000000..db0edc7 --- /dev/null +++ b/helm/templates/grafana-service.yaml @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }}-grafana + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }}-grafana + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: grafana +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: {{ .Values.grafana.httpPort | default 3000 }} + selector: + app: {{ template "aerospike.name" . }}-grafana +{{- end }} diff --git a/helm/templates/grafana-statefulset.yaml b/helm/templates/grafana-statefulset.yaml new file mode 100755 index 0000000..d15d697 --- /dev/null +++ b/helm/templates/grafana-statefulset.yaml @@ -0,0 +1,150 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Release.Name }}-grafana + namespace: {{ .Release.Namespace }} + labels: &Labels + app: {{ template "aerospike.name" . }}-grafana + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: grafana +spec: + serviceName: {{ .Release.Name }}-grafana + replicas: {{ .Values.grafana.replicas }} + selector: + matchLabels: *Labels + template: + metadata: + labels: *Labels + annotations: + {{- if .Values.autoRolloutConfig }} + # TODO: Add an entry for secrets when used in future + checksum/config: {{ include (print $.Template.BasePath "/grafana-configmap.yaml") . | sha256sum }} + {{- end }} + spec: + serviceAccountName: {{ if .Values.rbac.create }}{{ template "aerospike.fullname" . }}{{ else }}{{ .Values.rbac.serviceAccountName }}{{ end }} + initContainers: + - name: "init-chmod-data" + image: debian:9 + imagePullPolicy: "IfNotPresent" + command: ["chmod", "777", "{{ .Values.grafana.volume.mountPath }}"] + volumeMounts: + {{- if .Values.grafana.persistenceStorage }} + {{- if .Values.grafana.persistenceStorage.enabled }} + {{- if eq .Values.grafana.persistenceStorage.volumeMode "Filesystem"}} + - name: {{ .Values.grafana.persistenceStorage.name | quote }} + mountPath: {{ .Values.grafana.persistenceStorage.mountPath | quote }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.grafana.volume }} + - name: {{ .Values.grafana.volume.name | quote }} + mountPath: {{ .Values.grafana.volume.mountPath | quote }} + {{- end }} + containers: + - name: grafana + image: "{{ .Values.grafana.image.repository }}:{{ .Values.grafana.image.tag }}" + imagePullPolicy: "IfNotPresent" + volumeMounts: + - name: grafana-config + mountPath: "/etc/grafana/" + - name: grafana-provisioning-dashboards + mountPath: "/etc/grafana/provisioning/dashboards" + - name: grafana-provisioning-datasources + mountPath: "/etc/grafana/provisioning/datasources" + - name: grafana-dashboards + mountPath: "/var/lib/grafana/dashboards" + {{- if .Values.grafana.persistenceStorage }} + {{- if .Values.grafana.persistenceStorage.enabled }} + {{- if eq .Values.grafana.persistenceStorage.volumeMode "Filesystem"}} + - name: {{ .Values.grafana.persistenceStorage.name | quote }} + mountPath: {{ .Values.grafana.persistenceStorage.mountPath | quote }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.grafana.volume }} + - name: {{ .Values.grafana.volume.name | quote }} + mountPath: {{ .Values.grafana.volume.mountPath | quote }} + {{- end }} + ports: + - name: service + containerPort: 80 + protocol: TCP + - name: grafana + containerPort: {{ .Values.grafana.httpPort | default 3000 }} + protocol: TCP + livenessProbe: + httpGet: + path: /api/health + port: {{ .Values.grafana.httpPort | default 3000 }} + readinessProbe: + httpGet: + path: /api/health + port: {{ .Values.grafana.httpPort | default 3000 }} + initialDelaySeconds: 60 + timeoutSeconds: 30 + failureThreshold: 10 + periodSeconds: 10 + resources: +{{ toYaml .Values.grafana.resources | indent 10 }} + env: + - name: GF_SECURITY_ADMIN_USER + value: "{{ .Values.grafana.user }}" + - name: GF_SECURITY_ADMIN_PASSWORD + value: "{{ .Values.grafana.password }}" + - name: GF_INSTALL_PLUGINS + value: "{{ .Values.grafana.plugins }}" + volumes: + - name: grafana-config + configMap: + name: {{ .Release.Name }}-grafana-config + - name: grafana-dashboards + configMap: + name: {{ .Release.Name }}-grafana-dashboards + - name: grafana-provisioning-dashboards + configMap: + name: {{ .Release.Name }}-grafana-provisioning-dashboards + - name: grafana-provisioning-datasources + configMap: + name: {{ .Release.Name }}-grafana-provisioning-datasources + {{- if .Values.grafana.volume }} + - name: {{ .Values.grafana.volume.name | quote }} +{{ toYaml .Values.grafana.volume.template | indent 10}} + {{- end }} + volumeClaimTemplates: + {{- if .Values.grafana.persistenceStorage }} + {{- if .Values.grafana.persistenceStorage.enabled }} + - metadata: + name: {{ .Values.grafana.persistenceStorage.name }} + labels: *Labels + spec: + volumeMode: {{ .Values.grafana.persistenceStorage.volumeMode }} + accessModes: + - {{ .Values.grafana.persistenceStorage.accessMode | quote }} + {{- if hasKey .Values.grafana.persistenceStorage "storageClass" }} + storageClassName: {{ .Values.grafana.persistenceStorage.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.grafana.persistenceStorage.size | quote }} + {{- end }} + {{- end }} +{{- end }} diff --git a/helm/templates/loadbalancerservices.yaml b/helm/templates/loadbalancerservices.yaml new file mode 100644 index 0000000..f4d3041 --- /dev/null +++ b/helm/templates/loadbalancerservices.yaml @@ -0,0 +1,41 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableLoadBalancerServices }} +{{- $dot := . }} +{{ range $podIndex := until (int .Values.dbReplicas) -}} +--- +apiVersion: v1 +kind: Service +metadata: + name: "loadbalancer-{{ $.Release.Name }}-{{ $.Chart.Name }}-{{ $podIndex }}" + namespace: {{ $.Release.Namespace }} + labels: + app: {{ template "aerospike.name" $dot }} + chart: {{ $.Chart.Name }}-{{ $.Chart.Version }} + release: {{ $.Release.Name }} +spec: + type: LoadBalancer + externalTrafficPolicy: Local + ports: + - port: {{ $.Values.aerospikeClientPort | default 3000 }} + targetPort: {{ $.Values.aerospikeClientPort | default 3000 }} + selector: + statefulset.kubernetes.io/pod-name: "{{ $.Release.Name }}-{{ $.Chart.Name }}-{{ $podIndex }}" +{{ end -}} +{{- end }} +--- diff --git a/helm/templates/nodeportservices.yaml b/helm/templates/nodeportservices.yaml new file mode 100644 index 0000000..7474cc9 --- /dev/null +++ b/helm/templates/nodeportservices.yaml @@ -0,0 +1,40 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableNodePortServices }} +{{- $dot := . }} +{{ range $podIndex := until (int .Values.dbReplicas) -}} +--- +apiVersion: v1 +kind: Service +metadata: + name: "nodeport-{{ $.Release.Name }}-{{ $.Chart.Name }}-{{ $podIndex }}" + namespace: {{ $.Release.Namespace }} + labels: + app: {{ template "aerospike.name" $dot }} + chart: {{ $.Chart.Name }}-{{ $.Chart.Version }} + release: {{ $.Release.Name }} +spec: + type: NodePort + externalTrafficPolicy: Local + ports: + - port: {{ $.Values.aerospikeClientPort | default 3000 }} + selector: + statefulset.kubernetes.io/pod-name: "{{ $.Release.Name }}-{{ $.Chart.Name }}-{{ $podIndex }}" +{{ end -}} +{{- end }} +--- diff --git a/helm/templates/prometheus-configmap.yaml b/helm/templates/prometheus-configmap.yaml new file mode 100755 index 0000000..2c59e72 --- /dev/null +++ b/helm/templates/prometheus-configmap.yaml @@ -0,0 +1,78 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-prometheus-config + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }}-prometheus + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: prometheus +data: + prometheus.yaml: |- + global: + scrape_interval: 15s + evaluation_interval: 15s + + alerting: + alertmanagers: + - scheme: http + static_configs: + - targets: + - "{{ .Release.Name }}-alertmanager:{{ .Values.alertmanager.webPort | default 9093 }}" + + rule_files: + - "/etc/prometheus/aerospike_rules.yaml" + + scrape_configs: + - job_name: 'aerospike' + + kubernetes_sd_configs: + - role: endpoints + namespaces: + names: + - {{ .Release.Namespace }} + relabel_configs: + - source_labels: [__meta_kubernetes_service_label_app] + separator: ; + regex: {{ template "aerospike.name" . }} + replacement: $1 + action: keep + - source_labels: [__meta_kubernetes_endpoint_port_name] + separator: ; + regex: aerospike-prometheus-exporter + replacement: $1 + action: keep + - source_labels: [__meta_kubernetes_namespace] + separator: ; + regex: {{ .Release.Namespace }} + target_label: namespace + replacement: $1 + action: replace + + {{ if .Files.Get "files/aerospike_rules.yaml" }} + aerospike_rules.yaml: {{ tpl (.Files.Get "files/aerospike_rules.yaml") . | quote }} + {{ end }} + {{ if (.Values.prometheus.aerospikeAlertRulesFilePath) }} + aerospike_rules.yaml: |- + {{ .Values.prometheus.aerospikeAlertRulesFilePath | nindent 4 | trim }} + {{ end }} +{{- end }} diff --git a/helm/templates/prometheus-service.yaml b/helm/templates/prometheus-service.yaml new file mode 100755 index 0000000..8fb99e7 --- /dev/null +++ b/helm/templates/prometheus-service.yaml @@ -0,0 +1,38 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +kind: Service +apiVersion: v1 +metadata: + name: {{ .Release.Name }}-prometheus + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "aerospike.name" . }}-prometheus + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: prometheus +spec: + ports: + - name: http + port: {{ .Values.prometheus.serverPort | default 9090 }} + protocol: TCP + targetPort: {{ .Values.prometheus.serverPort | default 9090 }} + sessionAffinity: ClientIP + selector: + app: {{ template "aerospike.name" . }}-prometheus +{{- end }} diff --git a/helm/templates/prometheus-statefulset.yaml b/helm/templates/prometheus-statefulset.yaml new file mode 100755 index 0000000..af60b02 --- /dev/null +++ b/helm/templates/prometheus-statefulset.yaml @@ -0,0 +1,131 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ + +{{- if .Values.enableAerospikeMonitoring }} +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Release.Name }}-prometheus + namespace: {{ .Release.Namespace }} + labels: &Labels + app: {{ template "aerospike.name" . }}-prometheus + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + app.kubernetes.io/component: prometheus +spec: + serviceName: {{ .Release.Name }}-prometheus + replicas: {{ .Values.prometheus.replicas }} + podManagementPolicy: {{ .Values.prometheus.podManagementPolicy }} + updateStrategy: + type: {{ .Values.prometheus.updateStrategy.type }} + selector: + matchLabels: *Labels + template: + metadata: + labels: *Labels + annotations: + {{- if .Values.autoRolloutConfig }} + # TODO: Add an entry for secrets when used in future + checksum/config: {{ include (print $.Template.BasePath "/prometheus-configmap.yaml") . | sha256sum }} + {{- end }} + spec: + serviceAccountName: {{ if .Values.rbac.create }}{{ template "aerospike.fullname" . }}{{ else }}{{ .Values.rbac.serviceAccountName }}{{ end }} + initContainers: + - name: "init-chown-data" + image: debian:9 + imagePullPolicy: "IfNotPresent" + command: ["chown", "-R", "65534:65534", "{{ .Values.prometheus.volume.mountPath }}"] + volumeMounts: + {{- if .Values.prometheus.persistenceStorage }} + {{- if .Values.prometheus.persistenceStorage.enabled }} + {{- if eq .Values.prometheus.persistenceStorage.volumeMode "Filesystem"}} + - name: {{ .Values.prometheus.persistenceStorage.name | quote }} + mountPath: {{ .Values.prometheus.persistenceStorage.mountPath | quote }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.prometheus.volume }} + - name: {{ .Values.prometheus.volume.name | quote }} + mountPath: {{ .Values.prometheus.volume.mountPath | quote }} + {{- end }} + containers: + - name: prometheus-server + image: "{{ .Values.prometheus.image.repository }}:{{ .Values.prometheus.image.tag }}" + imagePullPolicy: "IfNotPresent" + args: + - --config.file=/etc/prometheus/prometheus.yaml + - --storage.tsdb.path="{{ .Values.prometheus.volume.mountPath }}" + - --web.listen-address=:{{ .Values.prometheus.serverPort | default 9090 }} + ports: + - containerPort: {{ .Values.prometheus.serverPort | default 9090 }} + readinessProbe: + httpGet: + path: /-/ready + port: {{ .Values.prometheus.serverPort | default 9090 }} + initialDelaySeconds: 30 + timeoutSeconds: 30 + livenessProbe: + httpGet: + path: /-/healthy + port: {{ .Values.prometheus.serverPort | default 9090 }} + initialDelaySeconds: 30 + timeoutSeconds: 30 + resources: +{{ toYaml .Values.prometheus.resources | indent 10 }} + volumeMounts: + - name: config-volume + mountPath: /etc/prometheus + {{- if .Values.prometheus.persistenceStorage }} + {{- if .Values.prometheus.persistenceStorage.enabled }} + {{- if eq .Values.prometheus.persistenceStorage.volumeMode "Filesystem"}} + - name: {{ .Values.prometheus.persistenceStorage.name | quote }} + mountPath: {{ .Values.prometheus.persistenceStorage.mountPath | quote }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.prometheus.volume }} + - name: {{ .Values.prometheus.volume.name | quote }} + mountPath: {{ .Values.prometheus.volume.mountPath | quote }} + {{- end }} + terminationGracePeriodSeconds: {{ .Values.prometheus.terminationGracePeriodSeconds }} + volumes: + - name: config-volume + configMap: + name: {{ .Release.Name }}-prometheus-config + {{- if .Values.prometheus.volume }} + - name: {{ .Values.prometheus.volume.name | quote }} +{{ toYaml .Values.prometheus.volume.template | indent 8}} + {{- end }} + volumeClaimTemplates: + {{- if .Values.prometheus.persistenceStorage }} + {{- if .Values.prometheus.persistenceStorage.enabled }} + - metadata: + name: {{ .Values.prometheus.persistenceStorage.name }} + labels: *Labels + spec: + volumeMode: {{ .Values.prometheus.persistenceStorage.volumeMode }} + accessModes: + - {{ .Values.prometheus.persistenceStorage.accessMode | quote }} + {{- if hasKey .Values.prometheus.persistenceStorage "storageClass" }} + storageClassName: {{ .Values.prometheus.persistenceStorage.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.prometheus.persistenceStorage.size | quote }} + {{- end }} + {{- end }} +{{- end }} diff --git a/helm/templates/service.yaml b/helm/templates/service.yaml index b48895c..8caa24b 100644 --- a/helm/templates/service.yaml +++ b/helm/templates/service.yaml @@ -1,5 +1,5 @@ # ------------------------------------------------------------------------------ -# Copyright 2012-2019 Aerospike, Inc. +# Copyright 2012-2020 Aerospike, Inc. # # Portions may be licensed to Aerospike, Inc. under one or more contributor # license agreements. @@ -22,16 +22,20 @@ metadata: annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" name: {{ template "aerospike.fullname" . }} - namespace: {{ .Values.namespace }} + namespace: {{ .Release.Namespace }} labels: - app: {{ template "aerospike.name" . }} - chart: {{ .Chart.Name }}-{{ .Chart.Version }} - release: {{ .Release.Name }} + app: {{ template "aerospike.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} spec: publishNotReadyAddresses: true ports: - - port: 3000 + - port: {{ .Values.aerospikeClientPort | default 3000 }} name: aerospike-client + {{- if .Values.enableAerospikeMonitoring }} + - port: {{ .Values.exporter.agentBindPort | default 9145 }} + name: aerospike-prometheus-exporter + {{- end }} # *.aerospike.default.svc.cluster.local clusterIP: None selector: diff --git a/helm/templates/serviceaccount.yaml b/helm/templates/serviceaccount.yaml new file mode 100644 index 0000000..d666f64 --- /dev/null +++ b/helm/templates/serviceaccount.yaml @@ -0,0 +1,28 @@ +# ------------------------------------------------------------------------------ +# Copyright 2012-2020 Aerospike, Inc. +# +# Portions may be licensed to Aerospike, Inc. under one or more contributor +# license agreements. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# ------------------------------------------------------------------------------ +--- +{{- if .Values.rbac.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app: {{ template "aerospike.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version }} + release: {{ .Release.Name }} + name: {{ template "aerospike.fullname" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} \ No newline at end of file diff --git a/helm/templates/statefulset.yaml b/helm/templates/statefulset.yaml index 6eb77a5..b8cfb57 100644 --- a/helm/templates/statefulset.yaml +++ b/helm/templates/statefulset.yaml @@ -1,5 +1,5 @@ # ------------------------------------------------------------------------------ -# Copyright 2012-2019 Aerospike, Inc. +# Copyright 2012-2020 Aerospike, Inc. # # Portions may be licensed to Aerospike, Inc. under one or more contributor # license agreements. @@ -15,13 +15,13 @@ # the License. # ------------------------------------------------------------------------------ -## Statefulset definition. +## Aerospike Statefulset definition. apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ template "aerospike.fullname" . }} - namespace: {{ .Values.namespace }} + namespace: {{ .Release.Namespace }} labels: &AerospikeDeploymentLabels app: {{ template "aerospike.name" . }} chart: {{ .Chart.Name }}-{{ .Chart.Version }} @@ -43,6 +43,7 @@ spec: checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} {{- end }} spec: + serviceAccountName: {{ if .Values.rbac.create }}{{ template "aerospike.fullname" . }}{{ else }}{{ .Values.rbac.serviceAccountName }}{{ end }} {{- if eq .Values.antiAffinity "hard" }} affinity: {{- with .Values.affinity }} @@ -87,11 +88,13 @@ spec: - name: aerospike image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" ports: - - containerPort: 3000 - name: aero-clients - - containerPort: 3002 + - containerPort: {{ .Values.aerospikeClientPort | default 3000 }} + name: aero-client + - containerPort: {{ .Values.aerospikeHeartbeatPort | default 3002 }} name: aero-mesh - - containerPort: 3003 + - containerPort: {{ .Values.aerospikeFabricPort | default 3001 }} + name: aero-fabric + - containerPort: {{ .Values.aerospikeInfoPort | default 3003 }} name: aero-info # Do not stop node before migrations are complete lifecycle: @@ -111,7 +114,7 @@ spec: periodSeconds: 60 readinessProbe: tcpSocket: - port: 3000 + port: {{ .Values.aerospikeClientPort | default 3000 }} initialDelaySeconds: 10 timeoutSeconds: 1 periodSeconds: 10 @@ -143,13 +146,21 @@ spec: {{ toYaml .Values.resources | indent 10 }} env: - name: NAMESPACE - value: {{ .Values.aerospikeNamespace | quote }} + value: {{ .Values.aerospikeNamespace | default "test" | quote }} - name: REPL_FACTOR - value: {{ .Values.aerospikeReplicationFactor | quote }} + value: {{ .Values.aerospikeReplicationFactor | default "2" | quote }} - name: MEM_GB - value: {{ .Values.aerospikeNamespaceMemoryGB | quote }} + value: {{ .Values.aerospikeNamespaceMemoryGB | default "1" | quote }} - name: DEFAULT_TTL - value: {{ .Values.aerospikeDefaultTTL | quote }} + value: {{ .Values.aerospikeDefaultTTL | default "0" | quote }} + - name: SERVICE_PORT + value: {{ .Values.aerospikeClientPort | default 3000 | quote }} + - name: HB_PORT + value: {{ .Values.aerospikeHeartbeatPort | default 3002 | quote }} + - name: FABRIC_PORT + value: {{ .Values.aerospikeFabricPort | default 3001 | quote }} + - name: INFO_PORT + value: {{ .Values.aerospikeInfoPort | default 3003 | quote }} # Downward API: - name: MY_POD_NAME valueFrom: @@ -163,16 +174,68 @@ spec: valueFrom: fieldRef: fieldPath: status.podIP + {{- if .Values.enableAerospikeMonitoring }} + - name: aerospike-prometheus-exporter + image: "{{ .Values.exporterImage.repository }}:{{ .Values.exporterImage.tag }}" + args: ["aerospike-prometheus-exporter", "--config", "/etc/aerospike-prometheus-exporter/ape.toml"] + ports: + - containerPort: {{ .Values.exporter.agentBindPort | default 9145 }} + name: exporter + volumeMounts: + - name: apeconfdir + mountPath: /etc/aerospike-prometheus-exporter + env: + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: AS_HOST + value: {{ .Values.exporter.asHost | default "localhost" | quote }} + - name: AS_PORT + value: {{ .Values.exporter.asPort | default 3000 | quote }} + - name: AGENT_BIND_HOST + value: {{ .Values.exporter.agentBindHost | default "" | quote }} + - name: AGENT_BIND_PORT + value: {{ .Values.exporter.agentBindPort | default 9145 | quote }} + - name: AGENT_LOG_LEVEL + value: {{ .Values.exporter.agentLogLevel | default "info" | quote }} + - name: AGENT_TIMEOUT + value: {{ .Values.exporter.agentTimeout | default 10 | quote }} + - name: AGENT_TAGS + value: {{ .Values.exporter.agentTags | default "" | quote }} + - name: AGENT_UPDATE_INTERVAL + value: {{ .Values.exporter.agentUpdateInterval | default 5 |quote }} + - name: TICKER_INTERVAL + value: {{ .Values.exporter.tickerInterval | default 5 | quote }} + - name: TICKER_TIMEOUT + value: {{ .Values.exporter.tickerTimeout | default 5 | quote }} + - name: AS_AUTH_MODE + value: {{ .Values.exporter.asAuthMode | default "" | quote }} + - name: AS_AUTH_USER + value: {{ .Values.exporter.asAuthUser | default "" | quote }} + - name: AS_AUTH_PASSWORD + value: {{ .Values.exporter.asAuthPassword | default "" | quote }} + {{- end }} initContainers: - name: aerospike-init - image: "{{ .Values.toolsImage.repository }}:{{ .Values.toolsImage.tag }}" - command: ["/bin/sh"] - args: ["-c", "cp /configs/install.sh /install.sh && chmod +x /install.sh && /install.sh"] + image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}" volumeMounts: - name: confdir mountPath: /etc/aerospike - name: initconfigs mountPath: /configs + {{- if .Values.enableAerospikeMonitoring }} + - name: apeconfdir + mountPath: /etc/aerospike-prometheus-exporter + {{- end }} env: # Variables needed by peer-finder for discovery - name: POD_NAMESPACE valueFrom: @@ -184,17 +247,31 @@ spec: valueFrom: fieldRef: fieldPath: metadata.name - {{- if .Values.autoGenerateNodeIds }} + - name: CLUSTER_NAME + value: "{{ .Release.Name }}-{{ .Chart.Name }}" + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: HB_PORT + value: {{ .Values.aerospikeHeartbeatPort | default 3002 | quote }} - name: AUTO_GENERATE_NODE_IDS - value: "true" - {{- end }} + value: {{ .Values.autoGenerateNodeIds | default false | quote }} - name: PLATFORM value: {{ .Values.platform | quote }} - {{- if .Values.hostNetworking }} - name: HOST_NETWORK - value: "true" - {{- end }} + value: {{ .Values.hostNetworking | default false | quote }} + - name: ENABLE_NODE_PORT_SERVICES + value: {{ .Values.enableNodePortServices | default false | quote }} + - name: ENABLE_LOADBALANCER_SERVICES + value: {{ .Values.enableLoadBalancerServices | default false | quote }} + - name: ENABLE_EXT_IP_SERVICES + value: {{ .Values.enableExternalIpServices | default false | quote }} volumes: + {{- if .Values.enableAerospikeMonitoring }} + - name: apeconfdir + emptyDir: {} + {{- end }} - name: confdir emptyDir: {} - name: initconfigs diff --git a/helm/values.yaml b/helm/values.yaml index 6beef59..671a724 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -1,5 +1,5 @@ # ------------------------------------------------------------------------------ -# Copyright 2012-2019 Aerospike, Inc. +# Copyright 2012-2020 Aerospike, Inc. # # Portions may be licensed to Aerospike, Inc. under one or more contributor # license agreements. @@ -16,33 +16,61 @@ # ------------------------------------------------------------------------------ ### -### Configuration file to set default values for deployment using Helm +### Configuration file to set default values for Helm Chart deployment ### +### ------------------------------------- ### Statefulset and K8s config variables -namespace: default -dbReplicas: 3 # Also controles number of nodes in the cluster. +### ------------------------------------- + +# Number of replicas +dbReplicas: 3 # Also controls number of nodes in the aerospike cluster. + +# Number of seconds to wait after SIGTERM before force killing the pod. terminationGracePeriodSeconds: 120 -### Aerospike server Community docker image +### ----------------------------------------- +### Aerospike server docker image +### ----------------------------------------- + image: repository: aerospike/aerospike-server - tag: 4.7.0.5 + tag: 4.8.0.5 + +### ------------------------------- +### Aerospike init container image +### ------------------------------- -### Aerospike tools docker image -toolsImage: - repository: aerospike/aerospike-tools - tag: 3.22.0 +initImage: + repository: aerospike/aerospike-kubernetes-init + tag: 1.0.0 -### Aerospike Deployment configurations + +### --------------------------------- +### Aerospike related configurations +### --------------------------------- + +# Auto generate and assign node-id(s) based on Pod's Ordinal Index. autoGenerateNodeIds: false -aerospikeNamespace: "test" -aerospikeNamespaceMemoryGB: "1" -aerospikeReplicationFactor: "2" -aerospikeDefaultTTL: "0" +# Default Namespace related configuration + +# aerospikeNamespace: "test" +# aerospikeNamespaceMemoryGB: "1" +# aerospikeReplicationFactor: "2" +# aerospikeDefaultTTL: "0" +# Aerospike TCP ports + +# aerospikeClientPort: 3000 +# aerospikeHeartbeatPort: 3002 +# aerospikeFabricPort: 3001 +# aerospikeInfoPort: 3003 + + +### ----------------------------------- ### Deployment specific configurations +### ----------------------------------- # Rollout ConfigMap/Secrets changes on 'helm upgrade' # Alternatively, use 'kubectl rollout restart' @@ -54,6 +82,44 @@ autoRolloutConfig: false hostNetworking: false platform: none +# Enable NodePort Services (Type: NodePort) to expose aerospike statefulset (Use helm upgrade for scale up/down). +enableNodePortServices: false + +# Enable LoadBalancer Services (Type: LoadBalancer) to expose aerospike statefulset (Use helm upgrade for scale up/down). +enableLoadBalancerServices: false + +# Enable external IP Services (Type: ClusterIP) to expose aerospike statefulset (Use helm upgrade for scale up/down) +enableExternalIpServices: false +externalIpEndpoints: {} + # - IP: 10.160.15.216 + # Port: 7000 + # - IP: 10.160.15.216 + # Port: 7001 + # - IP: 10.160.15.216 + # Port: 7002 + # - IP: 10.160.15.216 + # Port: 7003 + # - IP: 10.160.15.216 + # Port: 7004 + # - IP: 10.160.15.217 + # Port: 8000 + # - IP: 10.160.15.217 + # Port: 8001 + # - IP: 10.160.15.217 + # Port: 8002 + # - IP: 10.160.15.217 + # Port: 8003 + # - IP: 10.160.15.217 + # Port: 8004 + +# Create and use a new ServiceAccount with a new ClusterRole for the Aerospike Statefulset deployment. If already have one, specify serviceAccountName below leaving create=false. +# -aerospike +# This serviceAccountName is used for aerospike, prometheus, grafana and alertmanager statefulsets. +# If the 'default' serviceAccount doesn't have enough permissions to read resources (or if you are not sure), set rbac.create=true. +rbac: + create: false + serviceAccountName: default + # Affinity / AntiAffinity configurations # Setting 'antiAffinity' option will prevent two pods of the same release be scheduled on the same node. # 'antiAffinity' levels can be "off" (not set), "soft" (preferredDuringSchedulingIgnoredDuringExecution) and "hard" (requiredDuringSchedulingIgnoredDuringExecution) @@ -71,6 +137,7 @@ affinity: {} # values: # - gke-gke-blr-default-pool-06a23412-0dkt +# Define storage devices for aerospike nodes (pods) persistenceStorage: {} # - mountPath: /opt/aerospike/data # enabled: false @@ -98,6 +165,7 @@ volumes: # template: # emptyDir: {} +# Resources - limits / requests resources: {} # limits: # cpu: 1 @@ -106,6 +174,198 @@ resources: {} # cpu: 1 # memory: 1Gi - +### ----------------------------------------------------------- ### Dynamic configuration - Used during 'helm install...' etc. -# confFilePath: \ No newline at end of file +### ----------------------------------------------------------- + +# Aerospike Configuration file path on helm "client" machine (from where the user is running 'helm install') +# confFilePath: + +# (Only when enableAerospikeMonitoring = true) Aerospike alert rules configuration file path on helm "client" machine (from where the user is running 'helm install') +# prometheus.aerospikeAlertRulesFilePath: + +# (Only when enableAerospikeMonitoring = true) Alertmanager configuration file path on helm "client" machine (from where the user is running 'helm install') +# alertmanager.alertmanagerConfFilePath: + + +### ----------------------------------------- +### Aerospike Monitoring Stack Configuration +### ----------------------------------------- + +# Enable Aerospike Monitoring - sidecar prometheus exporter, Prometheus, Grafana, Alertmanager stack +enableAerospikeMonitoring: false + + +### -------------------------------------------- +### Aerospike Prometheus Exporter configuration +### -------------------------------------------- + +exporterImage: + repository: aerospike/aerospike-prometheus-exporter + tag: 1.0.0 + +exporter: {} + # agentUpdateInterval: 5 + # agentTags: "'agent', 'aerospike'" + # agentBindHost: "" + # agentBindPort: 9145 + # agentTimeout: 10 + # agentLogLevel: "info" + # asHost: "localhost" + # asPort: 3000 + # tickerInterval: 5 + # tickerTimeout: 5 + # asAuthMode: "" + # asAuthUser: "" + # asAuthPassword: "" + + +### ------------------------- +### Prometheus Configuration +### ------------------------- + +prometheus: + # Number of replicas for prometheus statefulset + replicas: 2 + + # Prometheus server port + serverPort: 9090 + + # Prometheus statefulset configs + terminationGracePeriodSeconds: 120 + podManagementPolicy: "Parallel" + updateStrategy: + type: "RollingUpdate" + + # Prometheus docker image + image: + repository: prom/prometheus + tag: v2.11.1 + + # Define storage for Prometheus data + persistenceStorage: + # mountPath: /data + # enabled: false + # name: prometheus-data + # storageClass: standard + # accessMode: ReadWriteOnce + # volumeMode: Filesystem + # size: 1Gi + volume: + mountPath: /data + name: prometheus-data + template: + emptyDir: {} + + # Resources - limits / requests + resources: {} + # limits: + # cpu: 1 + # memory: 1Gi + # requests: + # cpu: 1 + # memory: 1Gi + + # Aerospike alert rules configuration file path on helm "client" machine (from where the user is running 'helm install') + # aerospikeAlertRulesFilePath: + + +### ---------------------- +### Grafana Configuration +### ---------------------- + +grafana: + # Number of replicas for grafana statefulset + replicas: 1 + + # Grafana server http_port + httpPort: 3000 + + # Grafana docker image + image: + repository: grafana/grafana + tag: 6.3.2 + + # Define storage for grafana data + persistenceStorage: + # mountPath: /var/lib/grafana + # enabled: false + # name: grafana-data + # storageClass: standard + # accessMode: ReadWriteOnce + # volumeMode: Filesystem + # size: 1Gi + volume: + mountPath: /var/lib/grafana + name: grafana-data + template: + emptyDir: {} + + # Grafana plugins to install at startup + plugins: "camptocamp-prometheus-alertmanager-datasource" + + # Grafana username and password + user: "admin" + password: "admin" + + # Resources - limits / requests + resources: {} + # limits: + # cpu: 1 + # memory: 1Gi + # requests: + # cpu: 1 + # memory: 1Gi + + +### --------------------------- +### Alertmanager Configuration +### --------------------------- + +alertmanager: + # Number of replicas for alertmanager statefulset + replicas: 1 + + # Alertmanager web port and gossip port + webPort: 9093 + meshPort: 9094 + + # Alertmanager statefulset configs + podManagementPolicy: "OrderedReady" + updateStrategy: + type: "RollingUpdate" + + # Alertmanager docker image + image: + repository: prom/alertmanager + tag: latest + + # Alertmanager logging level + loglevel: info + + # Define storage for alertmanager data + persistenceStorage: + # mountPath: /data + # enabled: false + # name: alertmanager-data + # storageClass: standard + # accessMode: ReadWriteOnce + # volumeMode: Filesystem + # size: 1Gi + volume: + mountPath: /data + name: alertmanager-data + template: + emptyDir: {} + + # Resources - limits / requests + resources: {} + # limits: + # cpu: 1 + # memory: 1Gi + # requests: + # cpu: 1 + # memory: 1Gi + + # Alertmanager configuration file path on helm "client" machine (from where the user is running 'helm install') + # alertmanagerConfFilePath: