Grafana에서 MySQL Data Source 연결 후 아래 쿼리를 패널에 붙여넣으세요.
Time series 패널에서는 첫 번째 컬럼이 DATETIME, 나머지가 수치여야 합니다.
mfg_sensor.values_json 에서 특정 센서값을 추출하는 방법
SELECT ts -- Grafana Time 컬럼 , JSON_EXTRACT(values_json, '$.temperature_c') AS temperature_c , JSON_EXTRACT(values_json, '$.pressure_bar') AS pressure_bar , JSON_EXTRACT(values_json, '$.vibration_mm_s') AS vibration_mm_s FROM mfg_sensor WHERE ts BETWEEN $__timeFrom() AND $__timeTo() AND factory_id = 'F01' -- 공장 필터 (선택) ORDER BY ts
SELECT process_status AS status , COUNT(*) AS count FROM mfg_sensor WHERE ts BETWEEN $__timeFrom() AND $__timeTo() GROUP BY process_status
SELECT DATE_FORMAT(ts, '%Y-%m-%d %H:%i:00') AS ts , AVG(JSON_EXTRACT(values_json, '$.temperature_c')) AS avg_temp , AVG(JSON_EXTRACT(values_json, '$.pressure_bar')) AS avg_pressure FROM mfg_sensor WHERE ts BETWEEN $__timeFrom() AND $__timeTo() GROUP BY DATE_FORMAT(ts, '%Y-%m-%d %H:%i:00') ORDER BY ts
SELECT ts , CASE severity WHEN 'CRITICAL' THEN 3 WHEN 'WARNING' THEN 2 ELSE 1 END AS severity_level , value FROM mfg_alarm WHERE ts BETWEEN $__timeFrom() AND $__timeTo() ORDER BY ts
SELECT alarm_type , COUNT(*) AS cnt , SUM(CASE WHEN severity = 'CRITICAL' THEN 1 ELSE 0 END) AS critical FROM mfg_alarm WHERE ts BETWEEN $__timeFrom() AND $__timeTo() GROUP BY alarm_type ORDER BY cnt DESC
SELECT DATE_FORMAT(ts, '%Y-%m-%d %H:%i:00') AS ts , ROUND(AVG(CASE WHEN result = 'NG' THEN 100.0 ELSE 0 END), 2) AS defect_rate_pct , COUNT(*) AS total FROM mfg_quality WHERE ts BETWEEN $__timeFrom() AND $__timeTo() GROUP BY DATE_FORMAT(ts, '%Y-%m-%d %H:%i:00') ORDER BY ts
SELECT ts , power_kw , voltage_v , pf , frequency_hz FROM mfg_energy WHERE ts BETWEEN $__timeFrom() AND $__timeTo() ORDER BY ts
SELECT meter_id , ROUND(AVG(power_kw), 2) AS avg_power_kw , ROUND(MAX(power_kw), 2) AS max_power_kw FROM mfg_energy WHERE ts BETWEEN $__timeFrom() AND $__timeTo() GROUP BY meter_id
Grafana 설정 팁:
• Time series 패널: 첫 컬럼을 $__timeFrom()/$__timeTo() 필터 사용
• Grafana의 $__timeGroup(ts, '1m') 매크로로 자동 집계 가능
• 변수(Variable) 기능으로 factory_id, equipment_id를 드롭다운으로 만들 수 있음