This content originally appeared on DEV Community and was authored by Misha Zaslavskiy
My previous post describes installation of the flexlm_exporter utility with a standard Grafana dashboard. Out-of-the box this dashboard gives very useful license usage statistic. However I always wanted to see more concise summary. For the contract renewal or license remix, CAD team needs to identify underutilized and overutilized licenses, and with default dashboard this could be a tedious process if your company uses many EDA tools. Moreover EDA companies are not financially interested to make it any easier, so their license scheme is often quite murky. A single tool may use dozens of different licenses depending on the input, tool version, available hardware, phase of the moon, or who knows what else. Some licenses could be used interchangeably for the same run, others can be only used in conjunction with one another, and more often then not, those details are not described in the documentation.
To simplify long-term utilization analysis, I prepared an additional dashboard. It gives an average and peak utilization over specified time period, say the last 6 months. You could then sort your licenses and find the most and least busy ones. I have more ideas what other metrics could be useful, for example plot weekly average usage over time to filter-out noise, nights and weekends. Or measure percentage of the time when a given license was over-subscribed or unused. I hope I will have spare time to implement those metrics as well, so let me know in the comments below if you are interested and check this page for updates.
Below is the JSON file for the dashboard. For some reason I couldn't share it through Grafana site, maybe this is because this feature is not available with free account that I use? Again feel free to share any tips for that issue.
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"description": "EDA license utilization summary with average and peak usage. This dashboard uses data from FLEXlm Exporter utility.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 5,
"links": [],
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "aesxdkp9md43kb"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"fillOpacity": 80,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"lineWidth": 1,
"scaleDistribution": {
"type": "linear"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
},
"unit": "percent"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 0
},
"id": 1,
"options": {
"barRadius": 0,
"barWidth": 0.97,
"fullHighlight": false,
"groupWidth": 0.7,
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"orientation": "auto",
"showValue": "auto",
"stacking": "none",
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
},
"xTickLabelRotation": 0,
"xTickLabelSpacing": 0
},
"pluginVersion": "12.1.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "aesxdkp9md43kb"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(avg_over_time(flexlm_feature_used{app=\"[[app]]\"}[$__range]) /\navg_over_time(flexlm_feature_issued{app=\"[[app]]\"}[$__range]) * 100) by (name)",
"format": "table",
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
}
],
"title": "Average utilization for $app",
"type": "barchart"
},
{
"datasource": {
"type": "prometheus",
"uid": "aesxdkp9md43kb"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"inspect": false
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": 0
},
{
"color": "red",
"value": 80
}
]
},
"unit": "percent"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "# of licenses"
},
"properties": [
{
"id": "unit",
"value": "none"
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 8
},
"id": 2,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"frameIndex": 2,
"showHeader": true,
"sortBy": [
{
"desc": true,
"displayName": "avg utilization"
}
]
},
"pluginVersion": "12.1.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "aesxdkp9md43kb"
},
"editorMode": "code",
"exemplar": false,
"expr": "avg_over_time(flexlm_feature_issued{app=\"[[app]]\"}[$__range])",
"format": "table",
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "aesxdkp9md43kb"
},
"editorMode": "code",
"exemplar": false,
"expr": "avg_over_time(flexlm_feature_used{app=\"[[app]]\"}[$__range]) /\navg_over_time(flexlm_feature_issued{app=\"[[app]]\"}[$__range]) * 100",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "aesxdkp9md43kb"
},
"editorMode": "code",
"exemplar": false,
"expr": "max_over_time(flexlm_feature_used{app=\"[[app]]\"}[$__range]) /\nmax_over_time(flexlm_feature_issued{app=\"[[app]]\"}[$__range]) * 100",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "C"
}
],
"title": "Utilization metrics for $app",
"transformations": [
{
"id": "merge",
"options": {}
},
{
"id": "filterFieldsByName",
"options": {
"include": {
"names": [
"name",
"Value #A",
"Value #B",
"Value #C"
]
}
}
},
{
"id": "organize",
"options": {
"excludeByName": {},
"includeByName": {},
"indexByName": {},
"renameByName": {
"Value #A": "# of licenses",
"Value #B": "avg utilization",
"Value #C": "peak utilization",
"app": "tool",
"name": "feature"
}
}
}
],
"type": "table"
}
],
"preload": false,
"schemaVersion": 41,
"tags": [],
"templating": {
"list": [
{
"current": {
"text": "arm_and_leg_inc",
"value": "arm_and_leg_inc"
},
"definition": "label_values(flexlm_server_status,app)",
"includeAll": false,
"label": "App",
"name": "app",
"options": [],
"query": {
"qryType": 1,
"query": "label_values(flexlm_server_status,app)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "",
"sort": 1,
"type": "query"
}
]
},
"time": {
"from": "now-6M",
"to": "now"
},
"timepicker": {},
"timezone": "browser",
"title": "EDA license utilization",
"uid": "07f96ab4-e63e-427e-8059-67539087c6ea",
"version": 6
}
This content originally appeared on DEV Community and was authored by Misha Zaslavskiy
Misha Zaslavskiy | Sciencx (2025-08-28T15:25:57+00:00) EDA license utilization dashboard. Retrieved from https://www.scien.cx/2025/08/28/eda-license-utilization-dashboard-2/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.
