1. 程式人生 > 其它 >雲原生愛好者週刊:揪出 Prometheus 中時間戳抖動

雲原生愛好者週刊:揪出 Prometheus 中時間戳抖動

開源專案推薦

O11y toolkit

O11y toolkit 是一個工具集,用來維護、除錯和增強你的可觀測性系統,改善我們日常對指標、日誌和鏈路追蹤的使用體驗。例如 oy-scrape-jitter 就是用來解決 Prometheus 抓取的指標時間戳間隔不一致的問題。Prometheus 使用的是 delta-of-delta 編碼和時間戳 XOR 壓縮技術,這就意味著當指標抓取的時間間隔完全一致時,一個時間戳儲存到 TSDB 中只需佔用一個位元(bit),可以大大節省磁碟的空間。雖然從理論上來說 Promtheus 每次抓取指標的間隔應該是一樣的,但實際上會出現抖動的情況,抓取間隔並不是完全一致的,因此會浪費磁碟空間。oy-scrape-jitter 可以找出那些抓取間隔發生抖動的指標,例如:

$ ./oy-scrape-jitter --prometheus.url=https://prometheus.demo.do.prometheus.io/ --plot.file=jitter.png
level=info metric="up{env=\"demo\", instance=\"demo.do.prometheus.io:9093\", job=\"alertmanager\"}" aligned=239 unaligned=0 max_ms=0 pc=100.00%
level=info metric="up{env=\"demo\", instance=\"demo.do.prometheus.io:9100\", job=\"node\"}" aligned=233 unaligned=6 max_ms=23 pc=97.49%
level=info metric="up{instance=\"demo.do.prometheus.io:3000\", job=\"grafana\"}" aligned=237 unaligned=2 max_ms=14 pc=99.16%
level=info metric="up{instance=\"demo.do.prometheus.io:8996\", job=\"random\"}" aligned=179 unaligned=60 max_ms=2 pc=74.90%
level=info metric="up{instance=\"demo.do.prometheus.io:8997\", job=\"random\"}" aligned=239 unaligned=0 max_ms=0 pc=100.00%
level=info metric="up{instance=\"demo.do.prometheus.io:8998\", job=\"random\"}" aligned=237 unaligned=2 max_ms=3 pc=99.16%
level=info metric="up{instance=\"demo.do.prometheus.io:8999\", job=\"random\"}" aligned=237 unaligned=2 max_ms=4 pc=99.16%
level=info metric="up{instance=\"demo.do.prometheus.io:9090\", job=\"prometheus\"}" aligned=237 unaligned=2 max_ms=8 pc=99.16%
level=info metric="up{instance=\"http://localhost:9100\", job=\"blackbox\"}" aligned=233 unaligned=6 max_ms=2 pc=97.49%
level=info metric="up{instance=\"localhost:2019\", job=\"caddy\"}" aligned=239 unaligned=0 max_ms=0 pc=100.00%
level=info aligned_targets=3 unaligned_targets=7 max_ms=23

輸出結果裡有一條是這樣的:

level=info metric="up{instance=\"demo.do.prometheus.io:8996\", job=\"random\"}" aligned=179 unaligned=60 max_ms=2 pc=74.90%

這表示指標 {instance="demo.do.prometheus.io:8996", job="random"} 有超過 25% 的樣本抓取時間間隔不一致。

Korb

Korb 可以用來在 Kubernetes 叢集中將 PVC 遷移到不同的 StorageClasses 中。例如:

$ ./korb --new-pvc-storage-class ontap-ssd redis-data-redis-master-0
DEBU[0000] Created client from kubeconfig                component=migrator kubeconfig=/home/jens/.kube/config
DEBU[0000] Got current namespace                         component=migrator namespace=prod-beryju-org
DEBU[0000] Got Source PVC                                component=migrator name=redis-data-redis-master-0 uid=e4b5476f-b965-4e81-bfee-d7cbbf4f6317
DEBU[0000] No new Name given, using old name             component=migrator
DEBU[0000] Compatible Strategies:                        component=migrator
DEBU[0000] Copy the PVC to the new Storage class and with new size and a new name, delete the old PVC, and copy it back to the old name.  component=migrator
DEBU[0000] Only one compatible strategy, running         component=migrator
DEBU[0000] Set timeout from PVC size                     component=strategy strategy=copy-twice-name timeout=8m0s
WARN[0000] This strategy assumes you've stopped all pods accessing this data.  component=strategy strategy=copy-twice-name
DEBU[0000] creating temporary PVC                        component=strategy stage=1 strategy=copy-twice-name
DEBU[0002] starting mover job                            component=strategy stage=2 strategy=copy-twice-name
DEBU[0004] Pod not in correct state yet                  component=mover-job phase=Pending
DEBU[0006] Pod not in correct state yet                  component=mover-job phase=Pending
[...]
[mover logs]: sending incremental file list
[mover logs]: ./
[mover logs]: appendonly.aof
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)
[mover logs]: dump.rdb
            175 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=0/3)
DEBU[0022] Cleaning up successful job                    component=mover-job
DEBU[0022] deleting original PVC                         component=strategy stage=3 strategy=copy-twice-name
DEBU[0024] creating final destination PVC                component=strategy stage=4 strategy=copy-twice-name
DEBU[0024] starting mover job to final PVC               component=strategy stage=5 strategy=copy-twice-name
DEBU[0026] Pod not in correct state yet                  component=mover-job phase=Pending
DEBU[0028] Pod not in correct state yet                  component=mover-job phase=Pending
[...]
[mover logs]: sending incremental file list
[mover logs]: ./
[mover logs]: appendonly.aof
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)
[mover logs]: dump.rdb
            175 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=0/3)
DEBU[0048] Cleaning up successful job                    component=mover-job
DEBU[0048] deleting temporary PVC                        component=strategy stage=6 strategy=copy-twice-name
INFO[0050] And we're done                                component=strategy strategy=copy-twice-name
INFO[0050] Cleaning up...                                component=strategy strategy=copy-twice-name

websocat

websocat 與 curl 類似,但專門為 Websockets 而設計,更便於測試 Websockets。例如:

A$ websocat -s 1234
Listening on ws://127.0.0.1:1234/
ABC
123

B$ websocat ws://127.0.0.1:1234/
ABC
123

《站點可靠性工作手冊》中文版

本書是 Google SRE 工作手冊的續集,偏實踐,這是本書的中文翻譯。

文章推薦

快速上手 OpenFunction Node.js 非同步函式服務開發

近日,“OpenFunction 順利通過了雲原生計算基金會 CNCF 技術監督委員會(TOC)的投票,正式進入 CNCF 沙箱(Sandbox)託管”。作為 OpenFunction 社群的一份子,非常期待能有更多開發者和合作夥伴參與到專案中來,共同建設和發展社群,“使 Serverless 函式與應用執行更簡單”!同時,作為 Node.js 函式框架(Function Framework)目前的 Maintainer 之一,也想借此機會和大家分享一下 Node.js 函式框架最近的研發進展,特別是在 0.4.1 版本中已經實現的對於非同步函式的支援。

本文將從以下幾方面來介紹 Node.js 函式框架目前的研發進展和之後的工作展望。

國星宇航 SaaS 系統容器化最佳實踐

國星宇航是一家 Al 衛星網際網路科技公司,期望基於 K8s 搭建 PaaS 雲端計算基礎平臺,多租戶管理使用資源,整合 CI/CD、支援靈活擴容與升級叢集,構建企業級一站式 DevOps 架構,提高叢集資源可監控性,可溯源操作審計。本文介紹了國星宇航如何使用 KubeSphere 來實現這個目標。

使用 Cilium Service Mesh 實現新一代的雙向認證

雙向認證(Mutual Authentication)一直是安全的基石,我們日常使用的 SSH、mTLS 或 IPsec 等協議和技術都依賴於雙向認證,雲原生的世界也不例外,我們希望使用強大的雙向認證來確保 Kubernetes 和整個雲原生基礎設施中服務之間的相互通訊。

這篇文章研究了 Cilium 和 Cilium Service Mesh 是如何利用 eBPF 為服務提供一種新的基於身份的雙向認證的方式,其高效能的資料平面可以支援任何網路協議,而不需要對應用程式進行更改,也無需注入 Sidecar。

雲原生動態

儲存容量跟蹤在 Kubernetes 1.24 中達到通用標準

Kubernetes 1.24 版本將儲存容量跟蹤作為一個普遍可用的功能。

儲存容量跟蹤允許 CSI 驅動釋出關於剩餘容量的資訊。然後,當 Pod 具有仍需要配置的卷時,kube-scheduler 使用該資訊為 Pod 選擇合適的節點。

如果沒有這些資訊,Pod 可能會被卡住而無法被安排到合適的節點上,因為 kube-scheduler 不得不盲目選擇而且最終總是選擇一個無法配置卷的節點,因為由 CSI 驅動程式管理的底層儲存系統確實如此沒有足夠的容量。

因為 CSI 驅動程式釋出的儲存容量資訊在以後可能不再是最新的時候被使用,所以仍然可能會發生一個節點被選中而最終無法正常工作。卷配置通過通知排程程式它需要使用不同的節點重試來從中恢復。

KubeKey 2.1.0 釋出,增強 K8s 離線交付體驗

2022 年 5 月 6 日,KubeKey 2.1.0 正式釋出,這是 KubeKey 的第 8 個正式版本。該版本增強了離線部署能力和交付體驗,同時支援“一雲多芯”,即同一個 K8s 叢集中可以同時包含 ARM64 節點和 AMD64 節點。

KubeKey v2.1.0 不相容 KubeKey v2.0.0 製作的製品,請使用 KubeKey v2.1.0 重新匯出 KubeKey 製品。這是因為 KubeKey v2.1.0 優化了製品的儲存結構。目前製品採用 OCI 標準對映象進行拉取和歸檔儲存,實現了複用基礎映象層,其儲存空間佔用可降低近一半。

Argo CD 釋出 v2.4 RC 版本

日前,Argo CD 釋出了第一個 v2.4 候選版本。該版本有以下變化:

  • Argo CD 提供了一個 web 使用者介面,作為一個超級強大的 Kubernetes 儀表板,幫助開發人員更好地瞭解他們的應用程式;
  • 引入了額外的訪問控制設定,以控制對 Kubernetes Pod 日誌和新的 Web 終端功能的訪問;
  • v2.4 版本引入了 OpenTelemery 追蹤整合,為 Argo CD 操作器(operator)提供了更多可見性;
  • 支援的架構列表已經擴充套件,現在包括 IBM Z(s390x)和 PowerPC(ppc64le)。從 v2.4 版本開始,官方 quay.io 倉庫將提供 amd64、arm64、ppc64le 和 s390x 架構的映象。

有關更多詳細資訊和安裝說明,請檢視釋出說明升級說明

Docker 提供 Docker Extensions,適用於 Linux 的 Docker Desktop

Docker 在其產品組合中添加了新產品,以幫助開發人員查詢工具並將其新增到 Docker Desktop,並協助開發人員在基於 Linux 的系統上工作。

在 DockerCon 2022 虛擬會議上,Docker 宣佈了 Docker Extensions 和適用於 Linux 的 Docker Desktop。由多個合作伙伴構建的 Docker 擴充套件可幫助開發人員免去安裝、配置和管理新工具的繁瑣工作。

為了提高開發人員的工作效率,Docker Desktop for Linux 預裝了 Docker Compose、Docker CLI 和 Kubernetes 等工具,簡化了該工具的安裝和更新過程。

2022 年歐洲 KubeCon + CloudNativeCon 即將開啟

2022 年 5 月 16 日至 5 月 20 日,KubeCon + CloudNativeCon Europe 2022 將在西班牙的瓦倫西亞,線下+線上同步召開!

此次盛會,得到了國內外眾多 IT 巨頭的鼎力支援,匯聚了全球最活躍的開源雲原生社群、最先進的技術代表以及最優秀的行業落地實踐!

OpenFunction 的創始人霍秉傑將於北京時間 5 月 18 日 21:25-22:00 帶來主題分享:用雲原生 Serverless 技術賦能自動駕駛。歡迎大家關注!

本文由部落格一文多發平臺 OpenWrite 釋出!