-
Change Request
-
Resolution: Fixed
-
Trivial
-
None
-
None
-
Sprint 101 (Jun 2023)
-
1
In kubernetes tempaltes the LLD data is generated using the following preprocessing steps
- prometheus to json (to convert the required metrics to JSON format)
- javascript (so simplify converted JSON and embed LLD macros)
- throttle
The second step (javascript) could be dropped by defining LLD macros in LLD rule configuration.
For example the following data can be extracted with prometheus to json:
[ { "name": "kube_replicaset_status_replicas", "value": "2", "line_raw": "kube_replicaset_status_replicas{namespace=\"kube-system\",replicaset=\"coredns-787d4945fb\"} 2", "labels": { "namespace": "kube-system", "replicaset": "coredns-787d4945fb" }, "type": "gauge", "help": "The number of replicas per ReplicaSet." }, { "name": "kube_replicaset_status_replicas", "value": "1", "line_raw": "kube_replicaset_status_replicas{namespace=\"monitoring\",replicaset=\"zabbix-kube-state-metrics-56b6f796bc\"} 1", "labels": { "namespace": "monitoring", "replicaset": "zabbix-kube-state-metrics-56b6f796bc" }, "type": "gauge", "help": "The number of replicas per ReplicaSet." }, { "name": "kube_replicaset_status_replicas", "value": "1", "line_raw": "kube_replicaset_status_replicas{namespace=\"monitoring\",replicaset=\"zabbix-proxy-858c66755c\"} 1", "labels": { "namespace": "monitoring", "replicaset": "zabbix-proxy-858c66755c" }, "type": "gauge", "help": "The number of replicas per ReplicaSet." }, { "name": "kube_replicaset_status_replicas", "value": "6", "line_raw": "kube_replicaset_status_replicas{namespace=\"default\",replicaset=\"nginx-deployment-57b4bdfdf7\"} 6", "labels": { "namespace": "default", "replicaset": "nginx-deployment-57b4bdfdf7" }, "type": "gauge", "help": "The number of replicas per ReplicaSet." }, { "name": "kube_replicaset_status_replicas", "value": "1", "line_raw": "kube_replicaset_status_replicas{namespace=\"kube-system\",replicaset=\"calico-kube-controllers-56dd5794f\"} 1", "labels": { "namespace": "kube-system", "replicaset": "calico-kube-controllers-56dd5794f" }, "type": "gauge", "help": "The number of replicas per ReplicaSet." } ]
Then with javascript it's converted to:
[ { "{#NAME}": "coredns-787d4945fb", "{#NAMESPACE}": "kube-system" }, { "{#NAME}": "zabbix-kube-state-metrics-56b6f796bc", "{#NAMESPACE}": "monitoring" }, { "{#NAME}": "zabbix-proxy-858c66755c", "{#NAMESPACE}": "monitoring" }, { "{#NAME}": "nginx-deployment-57b4bdfdf7", "{#NAMESPACE}": "default" }, { "{#NAME}": "calico-kube-controllers-56dd5794f", "{#NAMESPACE}": "kube-system" } ]
This could be simplified by dropping the conversion and defining the following LLD macros
| {#NAME} | $.labels.replicaset | | {#NAMESPACE} | $.labels.namespace |
It will result in slightly more memory usage to keep old values for throttling, however it will be partially offset by not having to cache javascript and its bytecode.