πŸ“Š Grafana Γ— MySQL μƒ˜ν”Œ 쿼리

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

β‘‘ μ„Όμ„œ β€” 곡정 μƒνƒœλ³„ 건수 (Pie Chart)

SELECT
    process_status             AS status
  , COUNT(*)                   AS count
FROM  mfg_sensor
WHERE ts BETWEEN $__timeFrom() AND $__timeTo()
GROUP BY process_status

β‘’ μ„Όμ„œ β€” 1λΆ„ 평균 집계 (Time series)

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

β‘€ μ•ŒλžŒ β€” μœ ν˜•λ³„ 건수 (Bar chart)

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

β‘₯ ν’ˆμ§ˆ β€” OK/NG λΆˆλŸ‰λ₯  (1λΆ„ 집계)

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

β‘§ μ—λ„ˆμ§€ β€” 미터별 평균 μ „λ ₯ (Stat νŒ¨λ„)

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λ₯Ό λ“œλ‘­λ‹€μš΄μœΌλ‘œ λ§Œλ“€ 수 있음