# Observability Architecture </br> (可觀測性架構) </br> --- ```mermaid graph LR; Service1("AspNetCore Server</br>+</br>OpenTelemetry auto instrumentations") --log/metrics/tracing--> OpenTelemetryCollector; Service2("AspNetCore Server</br>+</br>OpenTelemetry auto instrumentations") --log/metrics/tracing--> OpenTelemetryCollector; Service3("AspNetCore Server</br>+</br>OpenTelemetry auto instrumentations") --log/metrics/tracing--> OpenTelemetryCollector; Service2 --> Service3 OpenTelemetryCollector(<img src='https://opentelemetry.io/img/logos/opentelemetry-horizontal-color.svg' width='100'>) --> Tempo; OpenTelemetryCollector --> Loki; OpenTelemetryCollector --> Prometheus; Tempo(<img src='https://grafana.com/static/img/menu/grafana-tempo.svg' width='20'>Tempo) --> Grafana(<img src='https://grafana.com/static/img/menu/grafana2.svg' width='25'>Grafana); Loki(<img src='https://grafana.com/static/img/menu/loki.svg' width='25'>Loki) --> Grafana; Prometheus(<img src='https://prometheus.io/icon.svg?7aa022e51797bcef' width='25'>Prometheus) --> Grafana; ``` ---- ## 圖中服務、技術 | | | | --------------- | ----------------------------------- | | 服務 | \.Net (AspNetCore) | | 資料傳輸套件 | OpenTelemetry auto instrumentations | | 資料傳輸協議 | OpenTelemetry (otel) | | 資料集中器 | OpenTelemetry Collector | | Log Server | Grafana Loki | | Metrices Server | Prometheus | | Trace Server | Grafana Tempo | | UI (Dashboard) | Grafana | --- # 可觀測性 (Observability) ---- ## 什麼是可觀測性?</br>跟監控(Monitor)有什麼關係? ---- ### Observability vs Monitor | Observability | Monitor | | --------------------------------------------------- | ------------------------------------------- | | 得知系統為什麼 `不工作` | 得知系統有沒有 `正常工作` | | 基於探索未預先定義的屬性和模式 | 基於預先定義的程式指標或日誌 | | 依據一段時間的各項資料指標判斷這段時間的系統 `行為` | 依據特定時間的各項指標判斷當下的系統 `狀態` | ---- ## Observability 三大資料群 - Logs - Traces - Metrics ---- ## 應用 - Application Performance Monitoring (APM) - Monitoring (Security, Network) - User Analyze - SRE Metrics (SLO/SLA/SLI) - 延伸閱讀:[iKala Cloud 技術部落格-SRE 必修課](https://ikala.cloud/understanding-sli-slo-sla-in-sre/) ---- ## 建立可觀測性架構的目的 - 利用 APM 達成 - 理解系統運作方式、狀態 - 縮短平均修復時間 (MTTR) > 此節資訊參考 .net conf 2022 [再不使用 APM 就芭比Q 了](https://speakerdeck.com/marcustung/zai-bu-shi-yong-apm-jiu-ba-bi-q-liao?slide=16) ---- ## 常見服務 - [Datadog](https://www.datadoghq.com.tw/) - [Elastic Observability](https://www.elastic.co/observability) ( [ELK Stack](https://www.elastic.co/elastic-stack/) ) - [Grafana Lab](https://grafana.com/) ( Liki / Tempo / Mimir ) - [Dynatrace](https://www.dynatrace.com/) - [SigNoz](https://signoz.io/) ---- ### 簡易試用心得-ELK - UX 設計優良 - 面板資訊完善 - 免費版沒有告警服務 - ElasticSearch 的資料庫控制需要學習 ---- ### 簡易試用心得-SigNoz - 查詢速度快 - 功能豐富 - 不大需要額外調整設定 - 介面編排需要適應 - 追蹤介面的甘特圖不容易閱讀 - 免費版的 clickhouse 就可以進行 s3 資料備份 ---- ### 簡易試用心得-Grafana - 底層資料服務需要自行安裝 - loki, tempo, mimir(or prometheus) - alerts mamanger - 可自訂程度高 - 帶來的問題是很多東西都要自己做 - 追蹤甘特圖、網路延遲等資訊都需要自己找合適的儀表板或是自己製作 - 底層服務的資料存儲設定相對麻煩,但是可以使用 s3 進行備份 ---- ## 使用技術 | | | | -------- | ---------------------------------------------------------------------------------------------------------- | | 資料協議 | [Open Telemetry](https://opentelemetry.io/)</br>OpenTelemetry 為目前 CNCF 中活耀度僅次於 Kubernetes 的專案 | | 網路 | Http2 / gRPC | ---- ## 對軟體開發/維運的影響 ---- ### 幫助 - 易於查看服務效能問題 - 易於排查錯誤 - 取得個別功能的使用率、錯誤率 - 分析系統使用狀況 ---- ### 需求 - 服務軟體框架更新 - 專用伺服器與儲存空間 - 規劃資料留存時間與長期留存資料類型 - 網路支援 (gRPC/HTTP2) --- # 替服務加上可觀測性 ---- ## Web Backend (.net) ---- ### Framwork Version Request | | | | -------------- | -------------- | | .net | 6 or newer | | .net framework | 4.6.2 or newer | ---- ### Nuget Package Request - System.Diagnostics.DiagnosticSource ---- ### Open Telemetry Auto Instrument - 程式碼改動幅度低 - 埋設追蹤點 - 定義資料指標 - 可在 Windows / Linux / MacOs 安裝並於背景執行 - 支援 IIS 追蹤 - container friendly - 部分微軟常用套件需與 Auto Instrument 工具使用的版本相同 ---- ### Open Telemetry Nuget Package - 專案直接倚賴 Open Telemetry 套件 - 本機開發時也能啟用追蹤 ---- ## Web Frontend - [OpenTelemetry Instrumentation Doc - Javascript](https://opentelemetry.io/docs/instrumentation/js/) - [SigNoz Doc - Javascript OpenTelemetry Instrumentation](https://signoz.io/docs/instrumentation/javascript/) ---- ## Mobile Application - [OpenTelemetry Instrumentation Doc - Swift](https://opentelemetry.io/docs/instrumentation/swift/) - [Datadog - End-to-End Mobile Application Monitoring](https://www.datadoghq.com/mobile-application-monitoring/) - [Elastic Doc - Monitoring android](https://www.elastic.co/blog/monitoring-android-applications-elastic-apm) - [Dynatrace Doc - Mobile Applications](https://www.dynatrace.com/support/help/platform-modules/digital-experience/mobile-applications)
{"slideOptions":"{}","description":"可觀測性 (Observability) 三本柱","lang":"zh-TW","title":"Observability Architecture Slide","contributors":"[{\"id\":\"8a766cac-b39c-4722-8be8-f794a1d1520f\",\"add\":7111,\"del\":1499,\"latestUpdatedAt\":null}]"}
    399 views