最後呈現結果 #

系統架構設計 #
- 中央氣象署-開放資料平臺 提供氣象監控資訊
- 監控主機 負責抓取 API 資料
- prometheus push gateway 負責接收 prometheus 資料
- Prometheus 負責抓取 prometheus push gateway 資料
- Grafana 從 Prometheus 繪製資料
|
|

資訊流設計 #
- 監控主機抓取 API 資料
- 將資料傳送到 prometheus push gateway
- Prometheus 抓取 prometheus push gateway 資料
- Grafana 從 Prometheus 繪製資料
|
|

實做紀錄 #
- 到 中央氣象署-開放資料平臺 加入會員 並申請 API Key
URL: https://opendata.cwa.gov.tw/index
註記
取得授權碼: 註冊並登入後,至會員中心取得「授權碼 (Authorization Token)」,這是在後續呼叫 API 時驗證身分用的必要資訊。
- 測試 URL
|
|
提示
資料結構確認: 建議先在終端機執行這個指令確認 API 授權碼是否有效,並觀察回傳的 JSON 資料結構,這有助於了解稍後使用 jq 工具解析資料的邏輯。
- 建立抓取資料腳本 與 排程
註記
工作原理: 我們會先撰寫一支 Bash 腳本 (get-weather-to-prometheus.sh),負責向氣象署 API 請求資料,並轉換成 Prometheus 認可的指標 (Metrics) 格式,最後將結果推送到 Push Gateway。接著,透過 Systemd 建立定期排程來自動執行這支腳本。
- get-weather-to-prometheus.sh
|
|
註記
腳本重點說明:
- 資料解析 (
jq):因為氣象局回傳的 JSON 資料非常龐大,我們使用jq指令精準篩選出測站名稱 (StationName)、氣溫 (AirTemperature) 與相對濕度 (RelativeHumidity)。 - 指標格式設計:Prometheus 接收的資料格式為
指標名稱{標籤名稱="標籤值"} 數值。我們將測站名稱設計成標籤 (Label:station="$STATION_NAME"),這樣未來在 Grafana 畫圖時,如果有多個測站資料,就能輕鬆切換與篩選。 - 推送至 Push Gateway:透過
curl --data-binary將純文字格式的指標以 HTTP POST 方法推送到 Push Gateway 指定的 Job 端點 (/metrics/job/weather_station)。
- /etc/systemd/system/get-weather.service
|
|
註記
Service 設定說明:
Type=oneshot:代表這個服務啟動後,執行完一次ExecStart所指定的腳本就會自動結束。這種設定非常適合用來搭配定時器 (Timer) 單次觸發執行。
- /etc/systemd/system/get-weather.timer
|
|
註記
Timer 設定說明:
OnCalendar=*-*-* *:00,30:00:這行定義了排程的時間。表示在每天每小時的 00 分 與 30 分 各觸發一次,也就是每半小時更新一次氣象資料。Persistent=true:如果系統因為關機或重開機錯過了排定的執行時間,系統開機後會立刻補執行一次,確保資料不會遺漏太久。
最後,載入設定並啟動排程:
|
|