Upgrade to Pro — share decks privately, control downloads, hide ads and more …

從零開始打造可觀測性平台

Blueswen
November 09, 2023

 從零開始打造可觀測性平台

MWC 2023 Workshop - 從零開始打造可觀測性平台
Lab: https://github.com/blueswen/observability-workshop-101

Blueswen

November 09, 2023
Tweet

More Decks by Blueswen

Other Decks in Programming

Transcript

  1. MWC
    2 0 2 3
    (
    2 0 2 3
    /
    1 1
    /
    0 9
    )


    劉義瑋 Blueswen
    從零開始打造可觀測性平台

    View full-size slide

  2. ⾃介

    • 劉義瑋 Blueswen


    • blueswen @ GitHub


    • 國泰⼈壽 投資資訊部 DevOps Team


    • 偶爾做做 ML 專案的 DevOps ⼯程師


    • 負責導⼊可觀測性與觀測平台


    • 領域


    • DevOps


    • Cloud Native


    • Machine Learning

    View full-size slide

  3. Outline


    1 0
    min: 可觀測性基礎概念介紹



    3 5
    min: Observability Signal Data
    Flow


    • Metrics、Logs、Traces


    • Hands-on Lab
    0
    、Lab
    1


    1 5
    min: Observability Signal
    Correlation


    • Metrics vs Logs


    • Metrics to Traces with Exemplar


    • Traces vs Logs


    • Hands-on Lab
    2


    2 5
    min: More Components


    • Grafana Mimir, Grafana Agent,
    OpenTelemetry Collector


    • Hands-on Lab
    3

    • OpenTelemetry Collector Span
    Metrics


    • Hands-on Lab
    4


    5
    min: Recap & Takeaway


    View full-size slide

  4. ⽬標

    • 瞭解 Logs、Metrics、Traces 的⽣成、收集、儲存、使⽤共四個
    階段的處理⽅式


    • 使⽤ Docker Compose 建⽴的簡易可觀測性平台,釐清資料傳
    遞⽅式與各⾃元件的⽤途


    • 學習在 Grafana 中交互應⽤ Logs、Metrics、Traces 三種資訊

    View full-size slide

  5. Pre requirements

    • GitHub Repo:https://github.com/blueswen/observability-workshop-
    1 0 1

    • 本機


    • 能夠連線⾄網際網路,以便連線⾄ GitHub、Docker Hub 取得相關資源


    • 預先安裝 Docker 與 Docker Compose,且可正常使⽤ Volume 掛載與 Port
    Forwarding 功能


    • GCP Cloud Shell


    • 配有 Docker 與 VSCode 的虛擬機環境,為免費服務無需⽀費任何費⽤,每週可使⽤
    50 ⼩時,其他使⽤限制請參考 Cloud Shell Doc - Limitations and restrictions


    • 開啟 Grafana 網⾴時會因為 Grafana 本⾝的安全機制阻擋出現 Origin not allowed 錯
    誤,可以使⽤ ngrok 建⽴網路通道即可繞過

    View full-size slide

  6. Dev or Ops?


    Front End or Back End?

    View full-size slide

  7. Python or Java?

    View full-size slide

  8. 基礎概念介紹

    View full-size slide

  9. 可觀測性介紹

    Observability is a characteristic of an application that refers to how well
    a system's state or status can be understood from its external outputs.
    Computer systems are measured by observing CPU time, memory, disk
    space, latency, errors, etc. The more observable a system is, the easier it
    is to understand how it’s doing by looking at it.
    來源:CNCF Observability Whitepaper
    可觀測性是⼀個應⽤程式的特性,指的是利⽤其外部輸出來理解系統狀態
    或狀態的程度。計算機系統通過觀察 CPU 時間、記憶體、磁碟空間、延
    遲、錯誤等來衡量。系統的可觀測性越⾼,越容易通過觀察來理解它的運
    ⾏情況。

    View full-size slide

  10. 可觀測性介紹

    有⾜夠的資訊嗎?


    他們都有被好好保存嗎?
    有好好利⽤這些資訊嗎?


    是否散落個處,形成 Data Silo?
    透過各種資訊,清楚了解系統狀態
    Log ⼯具
    指標儀表板 APM ⼯具

    View full-size slide

  11. 可觀測性資訊

    圖⽚來源:CNCF Observability Whitepaper
    Observability Signals 系統揭露出來讓我們更夠理解他的資訊

    View full-size slide

  12. 可觀測性資訊

    指標


    不同時間採樣的系統量化指標


    如:CPU 使⽤率、API 回應時間
    ⽇誌


    紀錄系統中發⽣的事情


    如:Debug 訊息、Exception
    分散式追蹤


    紀錄⾏為在不同服務中的歷程


    如:SSO ⾏為橫跨多個服務

    View full-size slide

  13. 可觀測性資訊

    徵狀:有問題發⽣ 脈絡:怎麼發⽣的
    發⽣什麼事 哪裡發⽣的
    狀況如何

    View full-size slide

  14. 可觀測性資訊 - 應⽤於問題排除

    圖⽚來源:Loki: Prometheus-inspired, open source logging for cloud natives
    徵狀
    脈絡

    View full-size slide

  15. 可觀測性資訊 - 應⽤於問題排除

    MTTR(Mean Time To Repair) 平均修復時間


    圖⽚來源:ManageEngine
    良好的 Observability 可以減少診斷與修復問題的時間

    View full-size slide

  16. 可觀測性介紹

    有⾜夠的資訊嗎?


    他們都有被好好保存嗎?
    有好好利⽤這些資訊嗎?


    是否散落個處,形成 Data Silo?
    透過各種資訊,清楚了解系統狀態
    Log ⼯具
    指標儀表板 APM ⼯具

    View full-size slide

  17. 可觀測性平台 - Grafana

    • Grafana Labs 開源的視覺化與儀表板⼯具,也提供告警功能
    Metrics 儀表板範例 OpenTelemetry Application Performance Management

    View full-size slide

  18. 可觀測性平台 - Grafana

    Grafana 檢視 Log

    View full-size slide

  19. 可觀測性平台 - Grafana

    Grafana 檢視 Trace

    View full-size slide

  20. 可觀測性平台 - Grafana

    • ⽀援各種不同的資料來源(Data Source),e.g. Prometheus、Loki、
    Tempo、PostgreSQL、Jaeger、Google Sheet
    圖⽚來源:Grafana

    View full-size slide

  21. Cloud Native Computing Foundation (CNCF)

    • 2015 年成⽴,Linus Foundation 旗下的⼦基⾦會


    • 推廣與促進 Cloud Native 相關技術與專案,倡導開放性、中⽴性


    • CNCF Project


    • 所有權屬於 CNCF,提供完整的技術、⾏銷、資安、審計⽀援


    • 依成熟度度分級:Sandbox、Incubating 、Graduated


    • CNCF Member


    • AWC、Google Cloud、Grafana Labs、Microsoft Azure、Oracle、IBM、
    Red Hat、VMware 等

    View full-size slide

  22. 可觀測性平台 Data Flow

    View full-size slide

  23. Data Flow

    ⽣成 收集 儲存 使⽤
    資訊處理四步驟

    View full-size slide

  24. 有在收集 Metrics 嗎?


    有不是⽤ Prometheus 的嗎?

    View full-size slide

  25. Metrics - Prometheus

    • Prometheus


    • 監控(Monitoring)與告警(Alerting)⼯具


    • 2012 年應 Sound Cloud 內部監控需求開發


    • 2016 年成為 CNCF 的第⼆個專案


    • 收集不同時間點的量化指標,將之儲存並以 PromQL 語法提供查詢
    Prometheus Metrics
    爬取 使⽤ PromQL查詢

    View full-size slide

  26. Metrics - ⽣成:Prometheus Metrics

    • Metrics ⽣成


    • 通⽤格式:Prometheus Metrics/OpenMetrics


    • 系統指標


    • 機器相關的資訊,如:CPU、Memory、磁碟空間、JVM 資訊


    • 產⽣指標的⼯具(Exporter)


    • Node Exporter、cAdvisor、JMX Exporter


    • 業務指標


    • 應⽤、業務相關的資訊,如:Request 頻率、API 回應時間、Error Rate


    • 產⽣指標的⼯具


    • Java Spring Boot:Spring Boot Actuator 搭配 Micrometer


    • 其他語⾔:Prometheus Client Library

    View full-size slide

  27. Metrics - ⽣成:Prometheus Metrics

    container_memery_usage_bytes{name="garafna"} [value] [unix timestamp]
    Metrics Name Label Pair

    View full-size slide

  28. Metrics - 收集與儲存:Prometheus

    http://app-a:
    8 0 0 0
    /metrics
    Scrape

    View full-size slide

  29. Metrics - 收集與儲存:Prometheus

    Prometheus Web UI 可以查看設定爬取的⽬標與爬取狀況

    View full-size slide

  30. Metrics - 使⽤:Prometheus Web UI

    使⽤ Prometheus Web UI 查詢 Metrics

    View full-size slide

  31. Metrics - 使⽤:Prometheus with Grafana

    Prometheus Data Source 設定

    View full-size slide

  32. Metrics - 使⽤:Prometheus with Grafana

    展開選單選擇 Explore
    左上選擇⽬標 Data Source 進⾏查詢

    View full-size slide

  33. Metrics - 使⽤:Prometheus with Grafana

    View full-size slide

  34. Metrics - Data Flow

    ⽣成
    收集


    儲存
    使⽤

    View full-size slide

  35. Hands-on - Lab
    0

    • GitHub Repo 連結


    • ⽬標


    • 透過 Prometheus、Grafana、cAdvisor 監控 Docker Container 與 Spring Boot App、
    FastAPI App 的 Metrics


    • 任務


    • Task
    1
    : 增加 Prometheus 爬取的⽬標,app-b, app-c


    • Task
    2
    : 使⽤ PromQL 語法於 Grafana 或 Prometheus UI 查詢 app-a 的 Container 記憶
    體使⽤量


    • Task
    3
    : 使⽤ PromQL 語法於 Grafana 或 Prometheus UI 查詢 app-c 的 JVM 記憶體使
    ⽤量

    View full-size slide

  36. Logs - ⽣成

    • 內容


    • 時間、Level、其他補充資訊


    • 格式


    • ⾮結構化


    • ⼀般搭配 Log Pattern,例如 %d{yyyy-MM-dd HH:mm:ss} [%-
    5
    p] [%c] [%t] %m%n


    • 結構化


    • JSON


    • Logfmt


    • time="
    2 0 2 1
    -
    0 9
    -
    1 9 1 5
    :
    0 0
    :
    0 0
    " level="INFO" logger="main" message="Hello World!"


    • ⽅式


    • Console:通過 STDOUT 或 STDERR 輸出⾄ Console


    • File:記錄在檔案中,可能搭配 Rotate 進⾏檔案管理


    • Stream:透過網路傳輸,直接將 Log 輸出⾄儲存 Log 的服務

    View full-size slide

  37. Logs - ⽣成

    • Container 的輸出在 Console 的 stdout 與 stderr 都會被⾃動儲存


    • Docker:/var/lib/docker/containers/


    • Podman:/var/lib/containers/storage/


    • containerd:/var/lib/containerd/


    • CRI-O:/var/log/pods/ 或 /var/log/containers/

    View full-size slide

  38. 使⽤哪些 Logs ⼯具?

    View full-size slide

  39. Logs - 收集與儲存:Loki & Promtail

    • Loki


    • Grafana Labs 開源的 Log 儲存與查詢⼯具


    • 借鑑 Prometheus,只針對時間與 Label 建⽴索引


    • 借鑑 PromQL,設計 LogQL 供查詢 Log


    • 簡單易⽤,就像是使⽤ Ctrl + F / CMD + F ⼀樣


    • Promtail


    • 專為 Loki 設計的 Log 收集器,爬取 Log 後推送⾄ Loki 儲存


    • 借鑑 Prometheus 爬取設定的⽅式

    View full-size slide

  40. Logs - 收集與儲存:Loki & Promtail

    Push
    Scrape
    Promtail 負責爬取 Log 後推送⾄ Loki

    View full-size slide

  41. Logs - 使⽤:Loki with Grafana

    Loki Data Source 設定

    View full-size slide

  42. Logs - 使⽤:Loki with Grafana

    查詢後可以利⽤ Show Context 查詢上下⽂

    View full-size slide

  43. Logs - 使⽤:Loki with Grafana

    查詢後可以利⽤ Show Context 查詢上下⽂

    View full-size slide

  44. Logs - Data Flow

    ⽣成 收集 儲存 使⽤

    View full-size slide

  45. 使⽤哪些 Trace ⼯具?


    有已經導⼊ OpenTelemetry 的嗎?

    View full-size slide

  46. Traces(Distributed Tracing)

    • ⽤於監控跨服務請求,透過統⼀的 Trace ID 串聯,紀錄同⼀個⾏為在不同服
    務間的歷程資訊,例如:執⾏時間、錯誤訊息、請求來源 IP、SQL 語法等

    View full-size slide

  47. Traces - OpenTelemetry

    • OpenTelemetry


    • A collection of APIs, SDKs, and tools to process telemetry data(traces, logs,
    metrics).


    • CNCF Incubating Project,
    2 0 1 9
    年由 OpenTracing 與 OpenCensus 合併⽽成


    • OpenTelemetry Protocol(OTLP) ⽬前已經有多達 50 家廠商⽀援
    API SDK Collector
    資料格式(OTLP)


    傳輸⽅式(HTTP、gRPC)
    開發⼯具 Telemetry Data 收集器

    View full-size slide

  48. Traces - ⽣成:OpenTelemetry Instrumentation

    • Instrumentation


    • Manual ⼿動設定:搭配 SDK ⾃⾏調整程式


    • Python:Instrumentaion


    • Automatic ⾃動設定:搭配語⾔、框架的機制,⾃動注⼊到程式中,無須
    調整程式碼,但仍可搭配 SDK 進⾏額外客製
    Python 與 Java 使⽤ Automatic Instrumentation 範例

    View full-size slide

  49. Traces - ⽣成:OpenTelemetry Instrumentation

    以 Java 的 Automatic Instrumentation 為例,使⽤後


    會⾃動紀錄進出該服務的 HTTP 與資料庫等網路請求

    View full-size slide

  50. Traces - ⽣成:OpenTelemetry Instrumentation

    HTTP Request,紀錄 URL、IP 、Status Code等資訊

    View full-size slide

  51. Traces - ⽣成:OpenTelemetry Instrumentation

    DB 操作,紀錄 SQL、Table 名稱等資訊

    View full-size slide

  52. Traces - ⽣成:OpenTelemetry Instrumentation

    Redis 操作,紀錄 Redis 資訊、指令等資訊

    View full-size slide

  53. Traces - ⽣成:OpenTelemetry Instrumentation

    • 搭配 Instrumentation 與 SDK,Application 可以取得 Trace 資訊注⼊ Log 中


    • Java:搭配 Log
    4
    j、Logback 應⽤ MDC 機制注⼊


    • Python:搭配 Logging Instrumentation
    帶有 Trace 與 Span 資訊的 Log

    View full-size slide

  54. Traces - 收集與儲存:Tempo

    • Tempo


    • Grafana Labs 開源的 Distributed Tracing 儲存後端


    • ⽀援 OpenTelemetry、Jaeger、Zipkin

    View full-size slide

  55. Traces - 使⽤:Tempo with Grafana

    Tempo Data Source 設定

    View full-size slide

  56. Traces - 使⽤:Tempo with Grafana

    Grafana 查詢 Tempo 範例

    View full-size slide

  57. Traces - 使⽤:Tempo with Grafana

    Tempo 也能⽣成服務拓樸圖與 RED Metrics(介紹⽂章)

    View full-size slide

  58. Traces - Data Flow

    ⽣成 儲存 使⽤

    View full-size slide

  59. 可觀測性平台 Data Flow

    View full-size slide

  60. Hands-on - Lab
    1

    • GitHub Repo 連結


    • ⽬標


    • 將 Promtail、Loki、Tempo 串連⾄ Lab
    0
    的架構中


    • 任務


    • Task
    1
    : 開啟 http://localhost:
    8 0 0 0
    後,查詢 App A 的 Log


    • Task
    2
    : 開啟 http://localhost:
    8 0 8 0
    /chain 後,查詢 App C 該筆 Request 的 Trace


    • Task
    3
    : 透過 App C 的 Swagger UI http://localhost:
    8 0 8 0
    /swagger-ui/index.html
    執⾏ POST /peanuts ⼀次建⽴⾓⾊,再執⾏ GET /peanuts/
    0
    兩次,查詢 App C
    這三筆 Request 的 Trace

    View full-size slide

  61. Signal Correlation

    View full-size slide

  62. Signal Correlation

    圖⽚來源:CNCF Observability Whitepaper
    可觀測資訊彼此間是有關係的,例如時間區段、Trace ID

    View full-size slide

  63. Correlation - Grafana

    Exemplar 時間區段同步
    Trace ID 連結

    View full-size slide

  64. Correlation - Metrics vs Logs

    利⽤同步時間功能同時查詢 Metrics 與 Logs

    View full-size slide

  65. Correlation - Metrics to Traces with Exemplar

    • Exemplar 是 OpenMetrics 新增加的資料型態,能夠將特定⼀筆的 Metrics 值
    紀錄於 Metrics 後,並加上其他資訊,如 Trace ID


    • Prometheus 已經⽀援 OpenMetrics,但需額外設定啟⽤儲存 Exemplar 功
    能,Prometheus 才會儲存爬取到的 Exemplar 資料
    OpenMetrics 中的 Exemplar

    View full-size slide

  66. Correlation - Metrics to Traces with Exemplar

    Prometheus Data Source 設定


    設定 Trace ID 在 Exemplar 中的 Label


    並指定連結的 Trace Data Backend
    查詢時必須開啟 Exemplars

    View full-size slide

  67. Correlation - Metrics to Traces with Exemplar

    View full-size slide

  68. Correlation - Traces vs Logs

    • Traces 與 Logs 彼此透過 Trace ID 進⾏連結
    Loki Data Source 設定


    使⽤正規表⽰式取出 Log 中的 Trace ID
    Tempo Data Source 設定


    將 Span 中的資訊作為 Loki Label 查詢條件


    Trace ID 作為內容篩選條件

    View full-size slide

  69. Correlation - Traces vs Logs

    點擊 Span 右側的 Log ICON 可查詢對應 Log

    View full-size slide

  70. Correlation - Traces vs Logs

    展開 Log 明細點擊連結可查看該筆 Trace

    View full-size slide

  71. Hands-on - Lab
    2

    • GitHub Repo 連結


    • ⽬標


    • 根據 Lab
    1
    架構,將 Prometheus、Loki、Tempo 資料源透過
    Grafana 的設定互相串連

    View full-size slide

  72. More Components

    View full-size slide

  73. More Components

    • CNCF Landscape 羅列各種 Cloud Native 相關 Project

    View full-size slide

  74. Prometheus 的潛在問題

    • ⻑期儲存與可擴展性問題


    • 官⽅⽂件中寫到當資料量超過千萬筆或需要⻑期儲存時,建
    議搭配其他儲存服務


    • 多個 Prometheus 不易查詢


    • 在網路控管嚴格的組織中,不同環境網路不互通,不同環境
    需要各⾃獨⽴的 Prometheus


    • 有多座 Kubernetes Cluster 時,都有各⾃獨⽴的 Prometheus

    View full-size slide

  75. 有已經導⼊ Prometheus 儲存服務的嗎?

    View full-size slide

  76. Mimir

    • Grafana Labs 開源的 Prometheus 儲存⽅案


    • 良好的可擴展性,查詢快速


    • 透過 Prometheus 的 Remote Write 功能彙整⾄ Mimir


    • API 與 Prometheus ⼀致,使⽤ PromQL 查詢

    View full-size slide

  77. Mimir

    在 Prometheus 設定檔中指定將 Metrics 同時寫出到 Mimir

    View full-size slide

  78. Mimir

    Mimir Data Source 設定,⼀樣使⽤ Prometheus

    View full-size slide

  79. Mimir - Data Flow

    ⽣成 收集 儲存 使⽤

    View full-size slide

  80. 可觀測性平台 Data Flow

    View full-size slide

  81. LGTM Stack

    圖⽚來源:Grafana

    View full-size slide

  82. 如果 Prometheus 只是負責爬取,那還需要完整的
    Prometheus 嗎?

    View full-size slide

  83. Grafana Agent

    • Grafana Labs 開源的資料收集器


    • 可收集 Metrics、Traces、Logs 再轉發⾄儲存資訊的服務

    View full-size slide

  84. Grafana Agent

    Metrics
    Grafana Agent 爬取 Metrics 的設定檔

    View full-size slide

  85. Grafana Agent - Data Flow

    ⽣成 收集 儲存 使⽤

    View full-size slide

  86. OpenTelemetry Collector(OTEL Collector)

    • Telemetry Data(traces, logs, metrics) 收集器


    • 資訊收集與 Data Backend 解耦


    • 豐富的輸⼊、處理、輸出 Plugin 可以使⽤


    • 分有 Core 版本與 Contrib 版本, Contrib 版本有較多 Plugin
    Application/Data Data Backend
    Data Backend
    OTEL Collector
    Application/Data

    View full-size slide

  87. OpenTelemetry Collector

    ⽣成 收集(處理、加⼯) 儲存

    View full-size slide

  88. OpenTelemetry Collector

    OTLP
    Jaeger
    Batch
    Filter
    OTLP
    Prometheus
    Loki

    View full-size slide

  89. OpenTelemetry Collector

    定義元件
    使⽤元件

    View full-size slide

  90. OpenTelemetry Collector - Data Flow

    ⽣成 收集 儲存 使⽤

    View full-size slide

  91. Hands-on - Lab
    3
    、Lab
    4

    • Lab
    3

    • GitHub Repo 連結


    • ⽬標


    • 將 Mimir 串連⾄ Lab
    2

    架構中


    • Lab
    4

    • GitHub Repo 連結


    • ⽬標


    • 將 OpenTelemetry
    Collector 串連⾄ Lab
    3
    的架構中,並以 Grafana
    Agent 取代 Prometheus

    View full-size slide

  92. 可觀測性平台 Data Flow

    View full-size slide

  93. OTEL Collector Span Metrics

    View full-size slide

  94. OTEL Collector Span Metrics

    你也有祖傳⼗⼋代的系統嗎?

    View full-size slide

  95. OTEL Collector Span Metrics

    View full-size slide

  96. OTEL Collector Span Metrics

    View full-size slide

  97. OTEL Collector Span Metrics

    祖傳系統(Legacy System)沒有辦法增加 Metrics


    透過 OpenTelemetry Collector 的 Span Metrics Connector 從 Trace 產出
    OpenTelemetry


    Automatic Instrumentation
    解析 Trace 資訊⽣成


    Request 相關 Metrics
    Scrape
    Push

    View full-size slide

  98. OTEL Collector Span Metrics

    View full-size slide

  99. OTEL Collector Span Metrics - Data Flow

    View full-size slide

  100. Hands-on - Lab
    5

    • GitHub Repo 連結


    • ⽬標


    • 利⽤ OpenTelemetry Collector Span Metrics Connector 將
    Span 轉換為 Metrics,並透過 Prometheus 爬取收集

    View full-size slide

  101. Recap & Takeaway

    View full-size slide

  102. Recap

    • 透過各種資訊,清楚了解系統狀態


    • 資訊的⽣成、收集、儲存、使⽤


    • 單⼀平台,建⽴關聯,產⽣綜效


    • 有各種不同⼯具,可依需求搭配


    • Mimir、Grafana Agent、
    OpenTelemetry Collector etc.

    View full-size slide

  103. Takeaway

    • Why You Need Observability/Observability Platform


    • 減少問題診斷與修復問題的時間


    • Lab Level 的可觀測平台 POC 效益


    • 快速驗證是否對你的團隊有幫助,思考是否要投注更多資源


    • 你還有更多選擇


    • 了解資料流,搭配出適合組織的 Stack


    • 避免 Vendor Locking(養套殺)

    View full-size slide

  104. 延伸閱讀

    • iThome 鐵⼈賽


    • 時光之鏡:透視過去、現在與未來的 Observability:Observability 概
    念、⼯具與應⽤介紹


    • 你以為你在學 Grafana 其實你建⽴了 Kubernetes 可觀測性宇宙:LGTM
    Stack


    • 淺談DevOps與Observability:Observability ⼯具與概介紹


    • Grafana 全家桶,如何打造⾼可⽤且具可擴充性的 o
    1 1
    y 平台


    • LINE TECHPULSE
    2 0 2 2
    - Implementing Observability Practices on
    Kubernetes


    • Observability Conference
    2 0 2 3

    View full-size slide

  105. 延伸閱讀

    • Prometheus: The Documentary - Prometheus 紀錄⽚


    • Demo Project


    • FastAPI Observability


    • Spring Boot Observability


    • FastAPI Tracing with Jaeger through OpenTelemetry


    • OpenTelemetry Application Performance Management

    View full-size slide