# 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}]"}