Slide 1

Slide 1 text

DevOpsDays Taipei 2 0 2 5 劉義瑋 Blueswen 從零到 一 :搭建你的第 一 個 Observability 平台

Slide 2

Slide 2 text

自 介  • 劉義瑋 Blueswen • blueswen @ GitHub • DevOps Engineer @ Berry AI • 領域 • DevOps • Observability • Developer Experience

Slide 3

Slide 3 text

Outline  • 1 0 min - Observability 基礎概念介紹 • 2 0 min - Observability Signals - Data Flow 與交互應 用 • 1 0 min - Hands-on:Observability 平台 • 1 0 min - Alerting 介紹與實作 • 1 0 min - Hands-on:Alerting • Recap 圖 片 來源:Grafana

Slide 4

Slide 4 text

目 標  • 使 用 Docker Compose 建 立 Observability 平台,釐清資料流與各元件功能 • 了解可觀測性資訊 Logs、Metrics、Traces 的 生 成、收集、儲存、使 用 • 學習在 Grafana 中交互應 用 Logs、Metrics、Traces 資訊,並設定告警規則

Slide 5

Slide 5 text

Dev or Ops? Python or Java?

Slide 6

Slide 6 text

你是怎麼排查問題的呢?

Slide 7

Slide 7 text

你也是被冠上天才之名的通靈奇才嗎?

Slide 8

Slide 8 text

強化 Observability 可觀測性, 人 人 都能通靈

Slide 9

Slide 9 text

Observability 基礎概念介紹

Slide 10

Slide 10 text

Observability Intro  圖 片 來源:Multi-Cloud Monitoring: A Cloud Security Essential Observability 系統可被觀測或測量的 一 種特性

Slide 11

Slide 11 text

Observability Intro  有 足 夠的資訊嗎? 是否散落各處,形成 Data Silo? 透過各種資訊,清楚了解系統狀態 Log 工 具 指標儀表板 APM 工 具

Slide 12

Slide 12 text

Observability Intro - Signals  有 足 夠的資訊嗎? 是否散落各處,形成 Data Silo? 透過各種資訊,清楚了解系統狀態 Log 工 具 指標儀表板 APM 工 具

Slide 13

Slide 13 text

Observability Signals - 可觀測性資訊  指標 不同時間採樣的系統量化指標 如:CPU 使 用 率、API 回應時間 日 誌 紀錄系統中發 生 的事情 如:Debug 訊息、Exception 分散式追蹤 紀錄 行 為在不同服務中的歷程 如:SSO 行 為橫跨多個服務 系統主動揭露讓我們能夠更理解它的資訊

Slide 14

Slide 14 text

Observability Signals - 可觀測性資訊  徵狀:有問題發 生 脈絡:怎麼發 生 的 發 生 什麼事 哪裡發 生 的 狀況如何 系統主動揭露讓我們能夠更理解它的資訊

Slide 15

Slide 15 text

Observability Signals - 應 用 於問題排除  圖 片 來源:Loki: Prometheus-inspired, open source logging for cloud natives 徵狀 脈絡

Slide 16

Slide 16 text

Observability Intro - Platform  有 足 夠的資訊嗎? 是否散落各處,形成 Data Silo? 透過各種資訊,清楚了解系統狀態 Log 工 具 指標儀表板 APM 工 具

Slide 17

Slide 17 text

Observability Platform - Grafana  Metrics 儀表板範例 OpenTelemetry Application Performance Management Grafana Labs 開源的資料視覺化與儀表板 工 具,並提供告警功能

Slide 18

Slide 18 text

Observability Platform - Grafana  Grafana 檢視 Log

Slide 19

Slide 19 text

Observability Platform - Grafana  Grafana 檢視 Trace

Slide 20

Slide 20 text

Observability Platform - Grafana  圖 片 來源:Grafana 支 援各種不同的資料來源(Data Source) Prometheus、ElasticSearch、PostgreSQL、Jaeger、Google Sheet

Slide 21

Slide 21 text

Observability Intro  有 足 夠的資訊嗎? 是否散落各處,形成 Data Silo? 透過各種資訊,清楚了解系統狀態 Log 工 具 指標儀表板 APM 工 具

Slide 22

Slide 22 text

Observability Signals - Data Flow

Slide 23

Slide 23 text

Observability Signals - Data Flow 

Slide 24

Slide 24 text

Observability Signals - Data Flow  生 成 收集 儲存 使 用 資訊處理四步驟

Slide 25

Slide 25 text

Observability Signals - Data Flow  生 成 收集 儲存 使 用 了解 工 具在 Data Flow 中的定位

Slide 26

Slide 26 text

Observability Signals - Metrics

Slide 27

Slide 27 text

Metrics - Prometheus  • Prometheus • 監控(Monitoring)與告警(Alerting) 工 具 • 2012 年由 SoundCloud 開發並開源 • 2024 年 11 月 進 入 3.0 版本 • 收集不同時間點的量化指標,儲存後能以 PromQL 語法查詢 Prometheus Metrics 爬取 使 用 PromQL查詢 生 成 收集 儲存 使 用

Slide 28

Slide 28 text

Metrics - 生 成:Prometheus Metrics  • Metrics 生 成 • 格式:Prometheus Metrics • 系統指標 • 機器、服務相關的資訊,如:CPU、Memory、磁碟空間、JVM 資訊 • 產 生 指標的 工 具(Exporter) • Node Exporter、cAdvisor、JMX Exporter、PostgreSQL Exporter • 業務指標 • 應 用 、業務相關的資訊,如:Request 頻率、API 回應時間、Error Rate • 產 生 指標的 工 具 • Java Spring Boot:Spring Boot Actuator 搭配 Micrometer • 其他語 言 :Prometheus Client Library

Slide 29

Slide 29 text

Metrics - 生 成:Prometheus Metrics  container_memery_usage_bytes{name="garafna"} [value] [unix timestamp] Metrics Name Label Pair Prometheus Metrics 範例

Slide 30

Slide 30 text

Metrics - 收集與儲存:Prometheus  http://app-a: 8 0 0 0 /metrics Scrape

Slide 31

Slide 31 text

Metrics - 收集與儲存:Prometheus  Prometheus Web UI 可以查看設定的爬取 目 標與爬取狀況

Slide 32

Slide 32 text

Metrics - 使 用 :Prometheus Web UI  使 用 Prometheus Web UI 查詢 Metrics

Slide 33

Slide 33 text

Metrics - 使 用 :Prometheus with Grafana 

Slide 34

Slide 34 text

Metrics - Data Flow  生 成 收集 儲存 使 用

Slide 35

Slide 35 text

Observability Signals - Logs

Slide 36

Slide 36 text

Logs - 生 成  • 核 心 內容 • 時間、Level、metadata、訊息 • 常 見 格式 • 非 結構化, 自 訂的 Log Pattern • 2 0 2 5 - 0 5 - 3 0 T 1 6 : 0 0 : 0 0 Z INFO [main] Hello World! • 結構化,JSON、logfmt • {"ts":" 2 0 2 5 - 0 5 - 3 0 T 1 6 : 0 0 : 0 0 Z","level":"INFO","msg":"Hello World!"} • 輸出 方 式 • Console:通過 STDOUT 或 STDERR 輸出 至 Console • File:儲存在檔案中,可能搭配 Rotate 進 行 檔案管理 • 網路傳輸:將 Log 送往遠端儲存服務

Slide 37

Slide 37 text

Logs - 收集與儲存:Loki & Docker Driver  • Loki • Grafana Labs 開源的 Log 儲存 工 具 • 借鑑 Prometheus 與 PromQL 設計理念,透過 LogQL 查詢 Log • Loki Docker Driver • 使 用 Docker 的 Logging Driver 機制,收集 Container Log 送 至 Loki • 支 援 Loki 的收集 工 具:Fluent Bit、Vector …

Slide 38

Slide 38 text

Logs - 收集與儲存:Loki & Loki Docker Driver  Push Loki Dokcer Driver 收集 Log 後推送 至 Loki

Slide 39

Slide 39 text

Logs - 使 用 :Loki with Grafana 

Slide 40

Slide 40 text

Logs - Data Flow  生 成 收集 儲存 使 用

Slide 41

Slide 41 text

Observability Signals - Traces

Slide 42

Slide 42 text

Traces(Distributed Tracing)  • 監控跨服務請求,利 用 統 一 的 Trace ID 關聯 一 個 行 為在不同服務之間的歷程 與資訊,例如:執 行 時間、請求來源 IP、SQL 語法、錯誤訊息等

Slide 43

Slide 43 text

Traces - OpenTelemetry  • OpenTelemetry • CNCF Project, 目 前主流的 Trace 規範,已經有超過 80 個組織 支 援 • 2019 年由 OpenTracing 與 OpenCensus 合併 而 成 • 處理 Telemetry Data(Metrics、Logs、Traces)的 API、SDK、Tool 組合包 API SDK Tool 資料格式(OTLP) 傳輸 方 式(HTTP、gRPC) 開發 工 具 Instrumentation Telemetry Data Collector

Slide 44

Slide 44 text

Traces - OpenTelemetry  • OpenTelemetry • CNCF Project, 目 前主流的 Trace 規範,已經有超過 80 個組織 支 援 • 2019 年由 OpenTracing 與 OpenCensus 合併 而 成 • 處理 Telemetry Data(Metrics、Logs、Traces)的 API、SDK、Tool 組合包 API SDK 資料格式(OTLP) 傳輸 方 式(HTTP、gRPC) 開發 工 具 Instrumentation Tool Telemetry Data Collector

Slide 45

Slide 45 text

Traces - 生 成:OpenTelemetry Instrumentation  • 配備 OpenTelemetry 的 Instrumentation Package 後,就像是多了 一 層收 集資料的 Middleware,能 自 動串連與收集資料作為 Trace 資訊

Slide 46

Slide 46 text

Traces - 生 成:OpenTelemetry Instrumentation  FastAPI Instrumentation,紀錄 URL、IP 、Status Code 等資訊

Slide 47

Slide 47 text

Traces - 生 成:OpenTelemetry Instrumentation  psycopg 2 Instrumentation,紀錄 DB、SQL 相關資訊

Slide 48

Slide 48 text

Traces - 生 成:Instrumentation 使 用方 式  • Instrumentation 使 用方 式 • Code-based Insturmentation:需調整程式, 自行 啟 用 Intrumentator • Zero-code Insturmentation:無須調整程式碼,搭配語 言 、框架的機制, 自 動注 入 到程式中, 支 援多種語 言 :Python、Java、JavaScript、.NET … Python 與 Java 使 用 Zero-code Insturmentation 範例

Slide 49

Slide 49 text

Traces - 收集與儲存:Tempo  • Tempo • Grafana Labs 開源的 Traces 儲存 工 具 • 接收 OpenTelemetry Protocol (OTLP) 格式的 Trace 資料

Slide 50

Slide 50 text

Traces - 使 用 :Tempo with Grafana 

Slide 51

Slide 51 text

Traces - Data Flow  生 成 儲存 使 用

Slide 52

Slide 52 text

Observability Signals - Data Flow 

Slide 53

Slide 53 text

Observability Signals - 資訊交互應 用

Slide 54

Slide 54 text

Observability Signals - 資訊交互應 用  圖 片 來源:CNCF Observability Whitepaper Observability Signals 彼此具有關聯,例如時間區段、Trace ID 透過交互應 用 產 生 綜效

Slide 55

Slide 55 text

Observability Signals - 資訊交互應 用  Exemplar 時間區段同步 Trace ID 連結

Slide 56

Slide 56 text

Observability Signals - 資訊交互應 用  Exemplar 時間區段同步 Trace ID 連結

Slide 57

Slide 57 text

資訊交互應 用 - Metrics vs Logs  利 用 同步時間功能同時查詢 Metrics 與 Logs

Slide 58

Slide 58 text

Observability Signals - 資訊交互應 用  Exemplar 時間區段同步 Trace ID 連結

Slide 59

Slide 59 text

資訊交互應 用 - Traces vs Logs  • OpenTelemtry 的 Logging Instrumentation,注 入 Trace 資訊到 Log 中 • Java:搭配 Log 4 j、Logback 應 用 MDC 機制注 入 • Python:搭配 Logging Instrumentation

Slide 60

Slide 60 text

資訊交互應 用 - Traces vs Logs  點擊 Span 中的 Log 按鈕可查詢對應 Log

Slide 61

Slide 61 text

資訊交互應 用 - Traces vs Logs  展開 Log 明細點擊按鈕可查看該筆 Trace

Slide 62

Slide 62 text

Observability Signals - 資訊交互應 用  Exemplar 時間區段同步 Trace ID 連結

Slide 63

Slide 63 text

資訊交互應 用 - Exemplar: Metrics vs Traces  • Exemplar:在 Metrics 後附上 一 筆資料,紀錄 Trace ID 與 Metrics 數值 • 例如:Trace ID 5 5 6 6 API request duration 為 20 秒 • Prometheus 需要額外啟 用 Exemplar 功能後,才會收集與儲存 Exemplar 帶有 Trace ID 的 Metrics

Slide 64

Slide 64 text

資訊交互應 用 - Exemplar: Metrics vs Traces  透過 Exemplar 的 Trace ID,連結 Metrics 與 Traces

Slide 65

Slide 65 text

Hands-on - Lab 0 1 : Observability 平台  • GitHub URL:Lab 0 1 • Goals:檢視 Grafana 設定,操作交互應 用 • Tasks • 開啟 http://localhost: 8 0 0 0 ,在 Explore 中查詢 App A 的 Log • 開啟 http://localhost: 8 0 0 0 /chain,在 Explore 中查詢 App A 該筆 Request 的 Trace • 執 行 k 6 -script-todo.js,檢視 FastAPI Observability Dashboard,排查 App A /todos/ 時間偏 高 的原因

Slide 66

Slide 66 text

Alerting

Slide 67

Slide 67 text

Alerting - Grafana Alerting  Query Alert Condition Notify CPU 使 用 率 > 90% 記憶體 用 量 > 1 GB 回應時間 > 3s Grafana Alerting 支 援多種資料來源與通知 方 式

Slide 68

Slide 68 text

Alerting - Grafana Alerting  不是所有 Data Source 都 支 援 Alerting

Slide 69

Slide 69 text

Alerting - Alert State  • Grafana Alerting 定期執 行 查詢,達到告警條件時轉換 Alert State • Pending Period:持續超過指定時 長 才觸發告警 • Recovering Period*:持續超過指定時 長 才恢復正常 Ref: Grafana Doc - Alert instance state /PSNBM 1FOEJOH "MFSUJOH 3FDPWFSJOH 滿 足 恢復等待時間 達到告警條件 未達到告警條件 滿 足 觸發等待時間 未達到告警條件 達到告警條件 *Recovering 是 Grafana 1 2 新增的 State

Slide 70

Slide 70 text

Alerting - Alert Rule  5JNF $16࢖༻཰ 4UBUF ࣋᠃࣌ؒ   ˔/PSNBM   ˔1FOEJOH NJO   ˔1FOEJOH NJO   ˔"MFSUJOH NJO   ˔"MFSUJOH   ˔3FDPWFSJOH NJO   ˔3FDPWFSJOH NJO   ˔/PSNBM NJO Ref: Grafana Doc - Evaluation example 告警條件:CPU 使 用 率 > 90% 查詢週期:5 min ● Pending Period: 1 0 min ● Recovering Period: 1 0 min Noramal Pending Alerting Recovering 滿 足 Pending 滿 足 Recovering Alert State 轉換 Flow

Slide 71

Slide 71 text

Alerting - Alert Rule  5JNF $16࢖༻཰ 4UBUF ࣋᠃࣌ؒ   ˔/PSNBM   ˔1FOEJOH NJO   ˔1FOEJOH NJO   ˔"MFSUJOH NJO   ˔"MFSUJOH   ˔3FDPWFSJOH NJO   ˔3FDPWFSJOH NJO   ˔/PSNBM NJO 告警條件:CPU 使 用 率 > 90% 查詢週期:5 min ● Pending Period: 1 0 min ● Recovering Period: 1 0 min 設定查詢語法與告警條件

Slide 72

Slide 72 text

Alerting - Alert Rule  5JNF $16࢖༻཰ 4UBUF ࣋᠃࣌ؒ   ˔/PSNBM   ˔1FOEJOH NJO   ˔1FOEJOH NJO   ˔"MFSUJOH NJO   ˔"MFSUJOH   ˔3FDPWFSJOH NJO   ˔3FDPWFSJOH NJO   ˔/PSNBM NJO 告警條件:CPU 使 用 率 > 90% 查詢週期:5 min ● Pending Period: 1 0 min ● Recovering Period: 1 0 min 設定查詢週期、等待時間

Slide 73

Slide 73 text

Alerting - Alert Rule  設定通知 方 式

Slide 74

Slide 74 text

Alerting - Alert Rule  設定通知額外資訊 額外資訊效果

Slide 75

Slide 75 text

Alerting - Alert Rule View  檢視 Alert Rule 詳細資訊

Slide 76

Slide 76 text

Alerting - Alert Rule View  • Alert State History:Grafana 1 0 新功能,啟 用 後搭配 Loki 能以視覺化的 方 式查看 Alert Rule 中每個 Instance 的 State 變化紀錄

Slide 77

Slide 77 text

Alerting - Alerting History  • Alerting History Page:Grafana 1 1 . 2 新功能,啟 用 後搭配 Loki 可以查看所 有 Alert 的 State 變化紀錄

Slide 78

Slide 78 text

Alerting - Contact Point  Grafana Alerting 支 援多種通知 方 式(Contact Point) *Line Notify 已於 2025 年 3 月 31 日 結束服務

Slide 79

Slide 79 text

Alerting - Contact Point:Email、Slack、Telegram  Grafana Zero to Hero - Alerting:強化告警通知 Grafana Zero to Hero - Noti fi cation:隨時隨地接收告警

Slide 80

Slide 80 text

Alerting - Contact Point:Event - Webhook、Kafka  Grafana Zero to Hero - Noti fi cation:事件驅動 Webhook with n 8 n Kafka

Slide 81

Slide 81 text

Hands-on - Lab 0 2 : Grafana Alerting  • GitHub URL:Lab 0 2 • Goals:設定與檢視 Grafana Alerting • Task • 建 立 Container Memory 使 用 量超過 100 MB 的 Alert • 每 30 秒查詢 一 次 • 連續 1 分鐘都 高 於觸發條件,進 入 Alerting 狀態 • 連續 3 分鐘都低於觸發條件,解除 Alerting 狀態 • Contact Point:使 用 預先建 立 的 webhook Contact Point

Slide 82

Slide 82 text

Recap  • 透過各種資訊,清楚了解系統狀態 • 資訊的 生 成、收集、儲存、使 用 • 打破 Silo,建 立 關聯,產 生 綜效 • 定期執 行 查詢,根據條件轉換狀態 • 支 援多種訊息、事件通知機制 Observability Alerting

Slide 83

Slide 83 text

延伸閱讀  • Demo Project • FastAPI Observability • Spring Boot Observability • FastAPI Tracing with Jaeger through OpenTelemetry • OpenTelemetry Application Performance Management • 時光之鏡:透視過去、現在與未來的 Observability:概念、 工 具與應 用 • Grafana Zero to Hero:Grafana 基礎操作與進階應 用 • Observability 1 0 1 :從零開始了解可觀測性:可觀測性基礎介紹 • 全 方 位強化 Python 服務可觀測性:以 FastAPI 和 Grafana Stack 為例

Slide 84

Slide 84 text

更多 Observability 議程  • 2 0 2 5 - 0 6 - 0 5 • 為什麼我們需要 Observability? • Observability 入門 班:可觀測性的核 心 技術架構與 OpenTelemetry 實作指南 • SRE的未來:LLM 引領的可觀測性與可追溯性 革 命 • 從開發到架構設計的可觀測性實踐 • Data Observability:企業資料管理技術的未來顯學 • 深 入 Grafana 探討告警事件中 心 實踐 • 為什麼你裝了 一 堆 O 1 1 y 工 具,卻沒 人用 ? • 2 0 2 5 - 0 6 - 0 6 • 【Bootcamp】從 Day 0 開始的可觀測性: 用 ODD 與 SLO 的實作 工 作坊 • 【Bootcamp】初探 LLM 可觀測性:從概念到實踐 • 更 高 效率低成本的 Observability 2 . 0 時代即將來臨 • 黑 暗 大 陸內的 Containerization & Pulumi IaC

Slide 85

Slide 85 text

• 徵 Backend Engineer • Tech Stack • AWS • FastAPI、Django • DBT、Celery • PostgreSQL、MongoDB、Redis • Kubernetes、Docker 工 商時間  可觀測性概念、 工 具介紹 天瓏網路書店 Job Description