AgileConfig-1.9.4 發布,支持 OpenTelemetry
Hello 大家好,最新版的 AgileConfig 1.9.4 發布了。現在它可以通過 OpenTelemetry 對外提供 logs,traces,metrics 三個維度的數據。用戶可以自由選擇支持 otlp 協議的工具來進行查詢與分析。比如 Seq,loki,prometheus, grafana 等等。
本來 AgileConfig 的日志是通過 Nlog 寫在本地的。但是文本日志無法進行集中的查詢與分析,況且現在絕大多數同學使用 docker 或者 k8s 來運行 AgileConfig 的服務端,這就導致日志會存儲在容器來,查看起來特別費勁。
于是就有同學提出對接第三日志組件的需求,比如要我直接對接 Seq 等等。當然 AgileConfig 對接 Seq 或者 ELK 等組件當然技術上沒有難度。但是,如果對接了特定的三方組件,這個就太定制化了,耦合性太強。如果用戶不用 Seq 也不用 ELK 而是使用 Loki 呢?難道要讓用戶特地安裝一套 Loki 嗎?
為了解決這個問題:既要把日志可以對外提供出來,又不依賴特定的三方組件,所以我決定讓 AgileConfig 對接 OpenTelemetry。
什么是 OpenTelemetry
OpenTelemetry 是一個開放源代碼項目,用于幫助開發人員生成、收集、處理和導出軟件性能和行為的可觀測性數據。它主要涵蓋三個方面的數據:分布式追蹤(tracing)、指標(metrics)和日志(logs)。OpenTelemetry 的目標是提供一個統一的工具和規范來簡化可觀測性數據的收集和分析,從而幫助開發者更好地理解和優化他們的應用程序。
也就是說 OpenTelemetry 不光支持 logs,而且還支持 tracing 跟 metrics。所以這次干脆除了 logs 其他兩個也一并集成進來了。
OTLP
OTLP(OpenTelemetry Protocol,OpenTelemetry 協議)是 OpenTelemetry 項目定義的一個協議,用于傳輸可觀測性數據,包括追蹤(traces)、指標(metrics)和日志(logs)。OTLP 的設計目標是高效、可擴展且易于實現,旨在統一不同類型的可觀測性數據傳輸,簡化數據收集和分析的過程。
OTLP 的特點
- 統一性:OTLP 提供了一個統一的協議,可以傳輸不同類型的可觀測性數據,減少了系統集成的復雜性。
- 高效性:OTLP 的設計注重性能和資源效率,確保在高負載情況下仍能穩定傳輸數據。
- 擴展性:協議具有良好的擴展性,可以適應未來的需求和新增的可觀測性數據類型。
多種傳輸方式:支持 gRPC 和 HTTP/JSON 傳輸方式,方便集成到不同的系統環境中。
查看 Logs
如果你想查看 AgileConfig 的 Logs 內容,你可以選擇任意一個支持 otlp 的 log 組件,如 Seq,loki 等等。
在 AgileConfig 服務啟動之前,你需要配置 logs 的 endpoint:
"otlp": {
"instanceId": "agileconfig_server_admin", // if empty, will generate a new one
"logs": {
"protocol": "http", // http grpc
"endpoint": "http://xxxx:5341/ingest/otlp/v1/logs"
},
或者配置環境變量:
otlp:logs:protocal=http
otlp:logs:endpoint=http://xxxx:5341/ingest/otlp/v1/logs
三方 log 組件的文檔上都會表明 otlp 的 endpoint 地址,如 Seq:
或者 loki:
如果配置正確服務啟動后就能在 log 組件里查詢到了。

查詢 Traces
跟上面的 logs 一樣,如果你想查看 AgileConfig 的 Traces 內容,你可以選擇任意一個支持 otlp 的 traces 組件,如 Seq,Jaeger 等等。
在 AgileConfig 服務啟動之前,你需要配置 traces 的 endpoint:
"otlp": {
"traces": {
"protocol": "http", // http grpc
"endpoint": "http://xxxx:5341/ingest/otlp/v1/traces"
},
或者配置環境變量:
otlp:traces:protocal=http
otlp:traces:endpoint=http://xxxx:5341/ingest/otlp/v1/traces
三方 traces 組件的文檔上都會表明 otlp 的 endpoint 地址,如 Seq:

創建 Metrics Dashboard
對 Metrics 進行查詢其實跟上面也是類似,只要配置好 otlp 地址就好了。但是為了更好的監控效果,metrics 一般會做成 dashboard 實時掛在大屏上展示。下面我們就以 prometheus + grafana 的方案來給 AgileConfig 定制一個 dashboard。
安裝 Prometheus
首先我們要安裝 prometheus,這次我偷懶直接在 windonws 下安裝了 prometheus。下載好安裝包后,直接解壓,如果運行如下命令:
./prometheus --enable-feature=otlp-write-receiver
訪問以下 localhost:9090 如果可以登錄那么就是成功了??梢钥吹?prometheus 其實自帶界面,但是功能上來說還是跟 grafana 差遠了。
安裝 Grafana
使用 docker 來安裝最新版的 grafana:
docker run --name=vk-grafana -p 3000:3000 grafana/grafana:6.7.4
訪問以下 localhost:3000 如果可以登錄那么就是成功了。
在 Grafana 內添加 Prometheus 數據源
在 grafana 的 datasource 菜單下添加 Prometheus 數據源。

填寫 Prometheus 的地址

配置服務端
跟 logs,traces 一樣,在服務啟動之前需要對 metrics 的 endpoint 進行配置:
"otlp": {
"metrics": {
"protocol": "http", // http grpc
"endpoint": "http://xxx:9090/api/v1/otlp/v1/metrics"
},
或者配置環境變量:
otlp:metrics:protocal=http
otlp:metrics:endpoint=http://xxx:9090/api/v1/otlp/v1/metrics
支持的 Metrics
如果以上步驟都沒問題,那么我們啟動 AgileConfig 的服務端后,稍等片刻就能在 grafana 里查詢到這些 metrics 了。

AgileConfig 對外提供了以下 metrics:
| 名稱 | 說明 |
|---|---|
| AppCount | 應用數量 |
| NodeCount | 節點數量 |
| ClientCount | 客戶端數量 |
| ServiceCount | 注冊的服務數量 |
| ConfigCount | 配置項數量 |
| CpuUsed | CPU 使用率,0~100 內的浮點數 |
| MemoryUsed | 內存使用量,單位 MB |
| PullAppConfigCounter | client 通過 http 接口拉取 app 配置的次數統計 |
制作 Dashboard
有了以上指標,我們就可以在 grafana 上來創建一個 dashboard 來監控我們的 AgileConfig 服務啦。因為本文不是 grafana 的介紹文章,所以如何來創建 dashboard 就不在這多說了。讓我們看一下效果吧。

總結
通過以上介紹。我們可以看到現在要采集 AgileConfig logs 或者進行 tracing 都非常簡單。只要找個支持 otlp 的組件配置一下 endpoint 就可以了。而且這并不依賴特定的組件。這次 AgileConfig 還支持了 opentelemetry metrics。有了這些 metrics,我們可以通過 grafana 輕松的創建出一個漂亮的 dashboard 來對 AgileConfig 進行監控。
最后
??? Github地址:https://github.com/dotnetcore/AgileConfig 開源不易,歡迎 star ???
演示地址:http://agileconfig-server.xbaby.xyz/ 超管賬號:admin 密碼:123456
關注我的公眾號一起玩轉技術

QQ群:1022985150 VX:kklldog 一起探討學習.NET技術
作者:Agile.Zhou(kklldog)
出處:http://www.rzrgm.cn/kklldog/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

浙公網安備 33010602011771號