[{"data":1,"prerenderedAt":849},["ShallowReactive",2],{"blog-en-/en/blog/grafana-industrial-data-visualization":3},{"id":4,"title":5,"body":6,"description":833,"extension":834,"meta":835,"navigation":844,"path":845,"seo":846,"stem":847,"__hash__":848},"en_blog/en/blog/grafana-industrial-data-visualization.md","Industrial Data Visualization with Grafana: Real-Time Monitoring and Dashboard Design",{"type":7,"value":8,"toc":796},"minimark",[9,14,23,26,30,33,61,65,68,79,84,98,109,113,116,141,145,148,180,184,187,191,212,216,237,241,256,260,275,279,282,367,371,375,406,410,442,446,522,526,532,536,540,551,555,566,570,573,579,583,650,656,660,667,679,683,687,690,694,697,703,707,710,714,721,736,740,743,756,764,768,792],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17,18,22],"p",{},"In industrial facilities, data flows from dozens of sensors every second: temperature, pressure, weight, vibration... However, if this data is not made meaningful, it remains just \"numbers.\" This is where ",[19,20,21],"strong",{},"Grafana"," stands out as the most powerful open-source tool for visualizing and making industrial data meaningful.",[15,24,25],{},"In this article, we'll cover how to use Grafana in industrial IoT projects, its integration with our ZMA/GDT devices, and professional dashboard design.",[10,27,29],{"id":28},"what-is-grafana","What is Grafana?",[15,31,32],{},"Grafana is an open-source platform used to visualize data from time-series databases (InfluxDB, Prometheus, TimescaleDB, Amazon Timestream, etc.). It's particularly preferred in IoT and industrial monitoring systems because:",[34,35,36,43,49,55],"ul",{},[37,38,39,42],"li",{},[19,40,41],{},"Real-Time Data Flow",": Can update at millisecond intervals.",[37,44,45,48],{},[19,46,47],{},"Flexible Dashboard Design",": Create rich visualization panels with drag-and-drop.",[37,50,51,54],{},[19,52,53],{},"Alarm System",": Generates automatic alarms at defined threshold values (email, Slack, Telegram, etc.).",[37,56,57,60],{},[19,58,59],{},"Multiple Data Sources",": Can combine multiple databases in a single dashboard.",[10,62,64],{"id":63},"grafana-architecture-for-industrial-iot","Grafana Architecture for Industrial IoT",[15,66,67],{},"A typical industrial Grafana integration works like this:",[69,70,75],"pre",{"className":71,"code":73,"language":74},[72],"language-text","ZMA/GDT Devices → MQTT/Modbus → IoT Gateway → Time Series DB (InfluxDB) → Grafana Dashboard\n","text",[76,77,73],"code",{"__ignoreMap":78},"",[80,81,83],"h3",{"id":82},"_1-data-collection-zma-and-gdt","1. Data Collection: ZMA and GDT",[15,85,86,87,92,93,97],{},"Our ",[88,89,91],"a",{"href":90},"/en/products/zma-data-acquisition","ZMA Data Acquisition"," and ",[88,94,96],{"href":95},"/en/products/gdt-digital-transmitter","GDT Digital Transmitter"," devices:",[34,99,100,103,106],{},[37,101,102],{},"Collect high-precision data with 24-bit resolution",[37,104,105],{},"Communicate via Modbus RTU/TCP",[37,107,108],{},"Transmit to cloud/local servers via MQTT or HTTP",[80,110,112],{"id":111},"_2-time-series-database","2. Time Series Database",[15,114,115],{},"Data sources that work best with Grafana:",[34,117,118,124,135],{},[37,119,120,123],{},[19,121,122],{},"InfluxDB",": Open-source, high-performance time-series DB",[37,125,126,129,130,134],{},[19,127,128],{},"Amazon Timestream",": Cloud-based, managed service (",[88,131,133],{"href":132},"/en/blog/time-series-data-management-amazon-timestream","Our Amazon Timestream article",")",[37,136,137,140],{},[19,138,139],{},"TimescaleDB",": PostgreSQL-based time-series extension",[80,142,144],{"id":143},"_3-grafana-dashboard","3. Grafana Dashboard",[15,146,147],{},"Dashboards consist of different panels:",[34,149,150,156,162,168,174],{},[37,151,152,155],{},[19,153,154],{},"Graph Panel",": Time series charts",[37,157,158,161],{},[19,159,160],{},"Gauge Panel",": Instant value indicator (RPM, temperature, etc.)",[37,163,164,167],{},[19,165,166],{},"Stat Panel",": Single numerical value display",[37,169,170,173],{},[19,171,172],{},"Table Panel",": Tabular data display",[37,175,176,179],{},[19,177,178],{},"Heatmap",": Density maps",[10,181,183],{"id":182},"real-world-application-weighing-system-dashboard","Real-World Application: Weighing System Dashboard",[15,185,186],{},"Example Grafana dashboard structure for a milk tank monitoring system:",[80,188,190],{"id":189},"panel-1-current-weight-gauge","Panel 1: Current Weight (Gauge)",[69,192,196],{"className":193,"code":194,"language":195,"meta":78,"style":78},"language-sql shiki shiki-themes github-light github-dark","SELECT last(\"weight\") FROM \"tank_data\"\nWHERE (\"device_id\" = 'GDT-001') AND time > now() - 5m\n","sql",[76,197,198,206],{"__ignoreMap":78},[199,200,203],"span",{"class":201,"line":202},"line",1,[199,204,205],{},"SELECT last(\"weight\") FROM \"tank_data\"\n",[199,207,209],{"class":201,"line":208},2,[199,210,211],{},"WHERE (\"device_id\" = 'GDT-001') AND time > now() - 5m\n",[80,213,215],{"id":214},"panel-2-fill-trend-graph","Panel 2: Fill Trend (Graph)",[69,217,219],{"className":193,"code":218,"language":195,"meta":78,"style":78},"SELECT mean(\"weight\") FROM \"tank_data\"\nWHERE time > now() - 24h\nGROUP BY time(10m)\n",[76,220,221,226,231],{"__ignoreMap":78},[199,222,223],{"class":201,"line":202},[199,224,225],{},"SELECT mean(\"weight\") FROM \"tank_data\"\n",[199,227,228],{"class":201,"line":208},[199,229,230],{},"WHERE time > now() - 24h\n",[199,232,234],{"class":201,"line":233},3,[199,235,236],{},"GROUP BY time(10m)\n",[80,238,240],{"id":239},"panel-3-temperature-monitoring","Panel 3: Temperature Monitoring",[69,242,244],{"className":193,"code":243,"language":195,"meta":78,"style":78},"SELECT \"temperature\" FROM \"sensor_data\"\nWHERE (\"sensor_id\" = 'ZMA-TEMP-01') AND time > now() - 1h\n",[76,245,246,251],{"__ignoreMap":78},[199,247,248],{"class":201,"line":202},[199,249,250],{},"SELECT \"temperature\" FROM \"sensor_data\"\n",[199,252,253],{"class":201,"line":208},[199,254,255],{},"WHERE (\"sensor_id\" = 'ZMA-TEMP-01') AND time > now() - 1h\n",[80,257,259],{"id":258},"panel-4-alarm-status-stat-panel","Panel 4: Alarm Status (Stat Panel)",[69,261,263],{"className":193,"code":262,"language":195,"meta":78,"style":78},"SELECT count(\"alarm\") FROM \"alerts\"\nWHERE time > now() - 1h\n",[76,264,265,270],{"__ignoreMap":78},[199,266,267],{"class":201,"line":202},[199,268,269],{},"SELECT count(\"alarm\") FROM \"alerts\"\n",[199,271,272],{"class":201,"line":208},[199,273,274],{},"WHERE time > now() - 1h\n",[10,276,278],{"id":277},"grafana-alert-configuration","Grafana Alert Configuration",[15,280,281],{},"Automatic alarm setup for critical situations:",[69,283,287],{"className":284,"code":285,"language":286,"meta":78,"style":78},"language-yaml shiki shiki-themes github-light github-dark","alert:\n  name: \"Tank Overflow Warning\"\n  condition:\n    - query: SELECT last(\"weight\") FROM \"tank_data\"\n    - threshold: > 950 kg\n  notification:\n    - email: alarm@factory.com\n    - telegram: @factory_alarms\n","yaml",[76,288,289,299,311,318,331,349,355,361],{"__ignoreMap":78},[199,290,291,295],{"class":201,"line":202},[199,292,294],{"class":293},"s9eBZ","alert",[199,296,298],{"class":297},"sVt8B",":\n",[199,300,301,304,307],{"class":201,"line":208},[199,302,303],{"class":293},"  name",[199,305,306],{"class":297},": ",[199,308,310],{"class":309},"sZZnC","\"Tank Overflow Warning\"\n",[199,312,313,316],{"class":201,"line":233},[199,314,315],{"class":293},"  condition",[199,317,298],{"class":297},[199,319,321,324,327,329],{"class":201,"line":320},4,[199,322,323],{"class":297},"    - ",[199,325,326],{"class":293},"query",[199,328,306],{"class":297},[199,330,205],{"class":309},[199,332,334,336,339,341,345],{"class":201,"line":333},5,[199,335,323],{"class":297},[199,337,338],{"class":293},"threshold",[199,340,306],{"class":297},[199,342,344],{"class":343},"szBVR",">",[199,346,348],{"class":347},"s7hpK"," 950 kg\n",[199,350,352],{"class":201,"line":351},6,[199,353,354],{"class":309},"  notification:\n",[199,356,358],{"class":201,"line":357},7,[199,359,360],{"class":309},"    - email: alarm@factory.com\n",[199,362,364],{"class":201,"line":363},8,[199,365,366],{"class":309},"    - telegram: @factory_alarms\n",[10,368,370],{"id":369},"zmagdt-integration-with-grafana","ZMA/GDT Integration with Grafana",[80,372,374],{"id":373},"step-1-mqtt-broker-setup","Step 1: MQTT Broker Setup",[69,376,380],{"className":377,"code":378,"language":379,"meta":78,"style":78},"language-bash shiki shiki-themes github-light github-dark","# Mosquitto MQTT broker installation\nsudo apt-get install mosquitto mosquitto-clients\n","bash",[76,381,382,388],{"__ignoreMap":78},[199,383,384],{"class":201,"line":202},[199,385,387],{"class":386},"sJ8bj","# Mosquitto MQTT broker installation\n",[199,389,390,394,397,400,403],{"class":201,"line":208},[199,391,393],{"class":392},"sScJk","sudo",[199,395,396],{"class":309}," apt-get",[199,398,399],{"class":309}," install",[199,401,402],{"class":309}," mosquitto",[199,404,405],{"class":309}," mosquitto-clients\n",[80,407,409],{"id":408},"step-2-influxdb-installation","Step 2: InfluxDB Installation",[69,411,413],{"className":377,"code":412,"language":379,"meta":78,"style":78},"# InfluxDB 2.x installation\nwget https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.1-amd64.deb\nsudo dpkg -i influxdb2-2.7.1-amd64.deb\n",[76,414,415,420,428],{"__ignoreMap":78},[199,416,417],{"class":201,"line":202},[199,418,419],{"class":386},"# InfluxDB 2.x installation\n",[199,421,422,425],{"class":201,"line":208},[199,423,424],{"class":392},"wget",[199,426,427],{"class":309}," https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.1-amd64.deb\n",[199,429,430,432,435,439],{"class":201,"line":233},[199,431,393],{"class":392},[199,433,434],{"class":309}," dpkg",[199,436,438],{"class":437},"sj4cs"," -i",[199,440,441],{"class":309}," influxdb2-2.7.1-amd64.deb\n",[80,443,445],{"id":444},"step-3-data-flow-with-node-red","Step 3: Data Flow with Node-RED",[69,447,451],{"className":448,"code":449,"language":450,"meta":78,"style":78},"language-javascript shiki shiki-themes github-light github-dark","// Writing ZMA data from MQTT to InfluxDB\nmsg.payload = {\n  measurement: 'sensor_data',\n  tags: {\n    device_id: msg.topic.split('/')[1],\n  },\n  fields: {\n    weight: parseFloat(msg.payload.weight),\n    temperature: parseFloat(msg.payload.temp),\n  },\n  timestamp: new Date(),\n}\nreturn msg\n","javascript",[76,452,453,458,463,468,473,478,483,488,493,499,504,510,516],{"__ignoreMap":78},[199,454,455],{"class":201,"line":202},[199,456,457],{},"// Writing ZMA data from MQTT to InfluxDB\n",[199,459,460],{"class":201,"line":208},[199,461,462],{},"msg.payload = {\n",[199,464,465],{"class":201,"line":233},[199,466,467],{},"  measurement: 'sensor_data',\n",[199,469,470],{"class":201,"line":320},[199,471,472],{},"  tags: {\n",[199,474,475],{"class":201,"line":333},[199,476,477],{},"    device_id: msg.topic.split('/')[1],\n",[199,479,480],{"class":201,"line":351},[199,481,482],{},"  },\n",[199,484,485],{"class":201,"line":357},[199,486,487],{},"  fields: {\n",[199,489,490],{"class":201,"line":363},[199,491,492],{},"    weight: parseFloat(msg.payload.weight),\n",[199,494,496],{"class":201,"line":495},9,[199,497,498],{},"    temperature: parseFloat(msg.payload.temp),\n",[199,500,502],{"class":201,"line":501},10,[199,503,482],{},[199,505,507],{"class":201,"line":506},11,[199,508,509],{},"  timestamp: new Date(),\n",[199,511,513],{"class":201,"line":512},12,[199,514,515],{},"}\n",[199,517,519],{"class":201,"line":518},13,[199,520,521],{},"return msg\n",[80,523,525],{"id":524},"step-4-grafana-data-source-configuration","Step 4: Grafana Data Source Configuration",[69,527,530],{"className":528,"code":529,"language":74},[72],"URL: http://localhost:8086\nOrganization: amazeng\nToken: [InfluxDB API Token]\nDefault Bucket: industrial_data\n",[76,531,529],{"__ignoreMap":78},[10,533,535],{"id":534},"dashboard-design-tips","Dashboard Design Tips",[80,537,539],{"id":538},"_1-color-coding","1. Color Coding",[34,541,542,545,548],{},[37,543,544],{},"🟢 Green: Normal operation (0-80%)",[37,546,547],{},"🟡 Yellow: Caution (80-95%)",[37,549,550],{},"🔴 Red: Critical (95-100%)",[80,552,554],{"id":553},"_2-panel-organization","2. Panel Organization",[34,556,557,560,563],{},[37,558,559],{},"Top row: Instant values (Gauge, Stat)",[37,561,562],{},"Middle section: Trend graphs (Graph)",[37,564,565],{},"Bottom section: Alarm logs (Table)",[80,567,569],{"id":568},"_3-variable-usage","3. Variable Usage",[15,571,572],{},"Add dynamism to your dashboard:",[69,574,577],{"className":575,"code":576,"language":74},[72],"$device_id = InfluxDB Query: SHOW TAG VALUES WITH KEY = \"device_id\"\n",[76,578,576],{"__ignoreMap":78},[10,580,582],{"id":581},"grafana-cloud-vs-self-hosted","Grafana Cloud vs. Self-Hosted",[584,585,586,602],"table",{},[587,588,589],"thead",{},[590,591,592,596,599],"tr",{},[593,594,595],"th",{},"Feature",[593,597,598],{},"Grafana Cloud",[593,600,601],{},"Self-Hosted",[603,604,605,617,628,639],"tbody",{},[590,606,607,611,614],{},[608,609,610],"td",{},"Cost",[608,612,613],{},"Limited free, then paid",[608,615,616],{},"Server cost only",[590,618,619,622,625],{},[608,620,621],{},"Maintenance",[608,623,624],{},"None",[608,626,627],{},"Updates and backups required",[590,629,630,633,636],{},[608,631,632],{},"Performance",[608,634,635],{},"High",[608,637,638],{},"Hardware-dependent",[590,640,641,644,647],{},[608,642,643],{},"Data Control",[608,645,646],{},"In cloud",[608,648,649],{},"On-premise",[15,651,652,655],{},[19,653,654],{},"Amazeng Recommendation",": Self-hosted InfluxDB + Grafana setup for critical data.",[10,657,659],{"id":658},"example-dashboard-zma-desk-integration","Example Dashboard: ZMA Desk Integration",[15,661,662,663,666],{},"You can visualize data generated by our ",[88,664,665],{"href":90},"ZMA Desk"," software in Grafana:",[668,669,670,673,676],"ol",{},[37,671,672],{},"ZMA Desk → CSV/JSON export",[37,674,675],{},"Transfer to InfluxDB via Telegraf",[37,677,678],{},"Create custom dashboard in Grafana",[10,680,682],{"id":681},"advanced-features","Advanced Features",[80,684,686],{"id":685},"_1-annotations","1. Annotations",[15,688,689],{},"Mark important events (maintenance, failures, etc.) on the timeline.",[80,691,693],{"id":692},"_2-variables-and-templating","2. Variables and Templating",[15,695,696],{},"Monitor all devices with a single dashboard:",[69,698,701],{"className":699,"code":700,"language":74},[72],"SELECT * FROM \"data\" WHERE \"device_id\" = '$device'\n",[76,702,700],{"__ignoreMap":78},[80,704,706],{"id":705},"_3-grafana-loki-log-management","3. Grafana Loki (Log Management)",[15,708,709],{},"Search and analyze device logs within Grafana.",[10,711,713],{"id":712},"real-project-fully-integrated-solution","Real Project: Fully Integrated Solution",[15,715,86,716,720],{},[88,717,719],{"href":718},"/en/blog/fully-integrated-solution-zma-gdt-hmi-aws","fully integrated weighing system"," offered by Amazeng:",[34,722,723,726,729],{},[37,724,725],{},"GDT → Modbus → ZMA → MQTT → InfluxDB → Grafana",[37,727,728],{},"HMI Panel (local) + Grafana (remote monitoring)",[37,730,731,732],{},"Cloud integration with ",[88,733,735],{"href":734},"/en/blog/industrial-data-collection-with-aws-iot-core","AWS IoT Core",[10,737,739],{"id":738},"conclusion-and-recommendations","Conclusion and Recommendations",[15,741,742],{},"Grafana is a powerful tool that makes industrial data meaningful and accelerates decision-making processes. When integrated with our ZMA and GDT devices:",[15,744,745,746,749,750,752,753,755],{},"✅ Real-time factory monitoring",[747,748],"br",{},"\n✅ Proactive maintenance (predictive maintenance)",[747,751],{},"\n✅ Data-driven decision making",[747,754],{},"\n✅ Remote access and mobile monitoring",[15,757,758,759,763],{},"For more information about Grafana-based monitoring systems and ZMA/GDT integration, ",[88,760,762],{"href":761},"/en/contact","contact our engineers",".",[10,765,767],{"id":766},"related-articles","Related Articles",[34,769,770,775,780,786],{},[37,771,772],{},[88,773,774],{"href":132},"Time Series Data Management with Amazon Timestream",[37,776,777],{},[88,778,779],{"href":734},"Industrial Data Collection with AWS IoT Core",[37,781,782],{},[88,783,785],{"href":784},"/en/blog/industrial-iot-automation-with-n8n","Industrial IoT Automation with n8n",[37,787,788],{},[88,789,791],{"href":790},"/en/blog/zma-desk-monitoring-and-datalog-features","ZMA Desk Monitoring and Datalog Features",[793,794,795],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":78,"searchDepth":208,"depth":208,"links":797},[798,799,800,805,811,812,818,823,824,825,830,831,832],{"id":12,"depth":208,"text":13},{"id":28,"depth":208,"text":29},{"id":63,"depth":208,"text":64,"children":801},[802,803,804],{"id":82,"depth":233,"text":83},{"id":111,"depth":233,"text":112},{"id":143,"depth":233,"text":144},{"id":182,"depth":208,"text":183,"children":806},[807,808,809,810],{"id":189,"depth":233,"text":190},{"id":214,"depth":233,"text":215},{"id":239,"depth":233,"text":240},{"id":258,"depth":233,"text":259},{"id":277,"depth":208,"text":278},{"id":369,"depth":208,"text":370,"children":813},[814,815,816,817],{"id":373,"depth":233,"text":374},{"id":408,"depth":233,"text":409},{"id":444,"depth":233,"text":445},{"id":524,"depth":233,"text":525},{"id":534,"depth":208,"text":535,"children":819},[820,821,822],{"id":538,"depth":233,"text":539},{"id":553,"depth":233,"text":554},{"id":568,"depth":233,"text":569},{"id":581,"depth":208,"text":582},{"id":658,"depth":208,"text":659},{"id":681,"depth":208,"text":682,"children":826},[827,828,829],{"id":685,"depth":233,"text":686},{"id":692,"depth":233,"text":693},{"id":705,"depth":233,"text":706},{"id":712,"depth":208,"text":713},{"id":738,"depth":208,"text":739},{"id":766,"depth":208,"text":767},"How to visualize industrial IoT data with Grafana, create meaningful dashboards, and set up real-time monitoring systems. Grafana integration with ZMA and GDT devices.","md",{"date":836,"author":837,"readTime":363,"tags":838},"2026-01-01","Amazeng Technical Team",[21,839,840,841,842,122,843],"Data Visualization","Dashboard","IoT","Monitoring","Time Series",true,"/en/blog/grafana-industrial-data-visualization",{"title":5,"description":833},"en/blog/grafana-industrial-data-visualization","5IZMzCdvnoTuT8YqFoYaniAm9USRB0q_B2SPH6jD47k",1778229658541]