日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

envoy实现_如何利用 Envoy 的 Postgres 过滤器实现网络可观察性

發布時間:2023/12/10 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 envoy实现_如何利用 Envoy 的 Postgres 过滤器实现网络可观察性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:Christoph Pakulski

自發布版本 1.15.0 起,Envoy 代理就開始支持 Postgres 信息解碼用于統計目的了。該功能為網絡中發生的 Postgres 事務提供聚合視圖。有了聚合視圖,Postgres 作業的種類、故障的數量和嚴重性瞬間一目了然。通過時間序列格式,請求組合出錯率的變化也能清楚呈現出來。

值得留意的是,統計數據并不是存儲在 Postgres 的服務器中,也不是在客戶端,而是通過在網絡層面嗅探應用與 Postgres 服務器的信息來往而獲得的。這篇文章會帶你摸清這個新功能的運作原理,文末為你附上一個小練習,向你演示如何運作。如果你是一名系統工程師,又想知道 Envoy 在解構網絡中的 Postgres 流量發揮了什么作用,那么本文就對你很有幫助了。

利用 Envoy 觀察 Postgres 網絡流量

將 Envoy 部署為 Postgres 服務器中的負載均衡器時,所有數據庫事務都會自然通過 Envoy,所以收集數據并不困難。

此場景下,Envoy 作為負載均衡器對 Postgres 客戶端沒有什么架構方面的要求,不管該客戶應用使用宏大的單體架構,還是分布式的 Postgres 數據庫系統,都可輕松部署 Envoy。就架構而言,很重要的一點是, Envoy 是通往 Postgres 服務器集群的通道,故此每項事務都必須穿過 Envoy。如此一來,所需的 Envoy 數量相對有限,而且處于靜態。通常情況下,都會有多于一個 Envoy 實例作為備用,以免單點故障的出現。引導 Prometheus 爬取 Envoy 的指標數據其實是很簡單的,可以通過靜態配置實現。

利用服務網格觀察 Postgres 網絡流量

一旦你的架構模式開始應用服務網格,每個應用都會連上可以攔截的應用網絡流量 Envoy Sidecar。與前端代理架構相比,服務網格所需的 Envoy 數量更多,數據收集器必須向每個 Envoy 實例逐一收集信息。此外,應用(和相關的 Envoy Sidecar)只會短暫存在 —— 它們只會應要求出現,而且可以隨時關閉或移到另一個主機上運作。追蹤 Envoy 實例和引導數據收集器到所有現行的 Envoy 實例變得愈來愈困難,不能像以前一樣通過靜態配置實現。服務網格架構采用控制平面,能夠追蹤應用、Sidecar 和它們的端點,并把這些信息供給數據收集器。但效果也是一樣的。每條發生在網絡中的 Postgres 信息都會經過分析,繼而產生統計數據。

Sidecar 架構是分布式系統中約定俗成的標準。雖然我們現階段專注在它輕易收集數據這項優點上 —— 因為這些 Envoy Sidecar「大隊」可將應用和 Postgres 服務器間的流量來往通通攔截下來 —— 但實際上,它還有多不勝數的好處。比如說,Envoy 可以檢測每個 Postgres 實例故障,然后將請求路由到運作正常的服務器,并避開有問題的服務器。

運作原理

下文將描述如何啟用簡易的前端代理方案、生成半隨機的 Postgres 流量,和用圖表表示多種網絡中可見的 Postgres 信息。配置代碼段突顯配置中最核心的部分。想獲得整組檔案,可以點此下載?[1]。設置中的個別組件,例如 Envoy、Postgres 服務器、Postgres 客戶端、Prometheus 和 Grafana,都是以容器形式創建,再以 Docker Compose 部署的。

Envoy 配置

第一步是啟動 Envoy 數據平面。Envoy 會在端口 1999 偵聽,然后將所有請求轉發到 Postgres 服務器。Postgres 的預設端口是 5432,當然可以配置 Envoy 用來偵聽端口 5432,但為了強調 Envoy 一直積極轉發數據包,所以把它調配到了不同的端口,而非預設的 Postgres 端口 5432。

通過下列代碼,在端口 1999 創建偵聽器,然后綁定到全部接口:

- name: postgres_listener address: socket_address: address: 0.0.0.0 port_value: 1999

接下來,Filter Chain 必須附加在監聽器上。Filter Chain 描述監聽端口上接收到數據包后所發生的事件。這個場景的 Filter Chain 就包含了 PostgresProxy 和 TcpProxy。PostgresProxy 過濾器負責檢查 Postgres 服務器和客戶端之間來往的信息。而鏈上的最后一個過濾器 TcpProxy,亦即所謂的終端過濾器,則負責提供流量給上游主機,也就是這個場景使用的 Postgres 服務器。

filter_chains:- filters: - name: envoy.filters.network.postgres_proxy typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.postgres_proxy.v3alpha.PostgresProxy stat_prefix: egress_postgres - name: envoy.filters.network.tcp_proxy typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy stat_prefix: postgres_tcp cluster: postgres_cluster

從 TcpProxy 過濾器的配置可以看出來,請求會被路由至 postgres_cluster,它的定義如下:

- name: postgres_cluster connect_timeout: 1s type: strict_dns load_assignment: cluster_name: postgres_cluster endpoints: - lb_endpoints: - endpoint: address: socket_address: address: postgres port_value: 5432

集群包含了一系列標識為 postgres 的端點,而 Envoy 會用 DNS 來查找出該端點的 IP 地址。至于 DNS 的運作,可以有多種方法。例如是單獨的 DNS 服務器,或是作為 Kubernetes 架構的一部分。在這個場景中,Docker Compose 網絡提供了它的 DNS 解析。

收集數據

這個場景中, Prometheus 會負責收集統計數據。而 Envoy 能將統計數據直接以?Prometheus 格式?[2]?導出。所以你只需將 Prometheus 與 Envoy 對接。Prometheus 的 config 配置文件如下:

global: scrape_interval: 15sscrape_configs: - job_name: 'envoy_stats' scrape_interval: 5s metrics_path: /stats/prometheus static_configs: - targets: ['proxy:8001'] labels: group: 'services'

…… proxy 是 Envoy 的 DNS 名稱,并由 Docker Compose 網絡解析。Envoy 的管理接口是可見于 /stats/prometheus 路徑下的端口 8001。

可觀察性

Grafana 通過圖表表示 Postgres 的種類。全部所需數據都會收集并存儲在 Prometheus 上,而 Grafana 會定期讀取該些數據。Grafana 需要兩組配置。第一組是數據源:

datasources: - name: prometheus type: prometheus access: proxy url: http://prometheus:9090

讀者可以特別注意 type 和 url 兩行。type 定義了數據的格式。url 指出數據所在的端點。prometheus 是 DNS 名稱,必須被解析為 IP 地址。在這個場景中,Docker Compose 網絡會提供地址的解析。

Grafana 的第二組配置是儀表板規格(dashboard spec),基本上定義了哪些數據會顯示出來,以及如何顯示。經過手工搭建了這個儀表板后,你會注意到這個由 Grafana 創建的文件將是一個特別長的 json 檔案。在這個場景中,我們會追蹤 3 組 Postgres 信息:所有前端信息(由客戶端產生并輸出到服務器的信息)、服務器回饋的故障,及客戶端發出的 SELECT 語句的數量。

"targets": [ { "expr": "rate(envoy_postgres_egress_postgres_messages_frontend[1m])", "interval": "", "legendFormat": "frontend msgs", "refId": "A" }, { "expr": "rate(envoy_postgres_egress_postgres_errors[1m])", "interval": "", "legendFormat": "errors", "refId": "B" }, { "expr": "rate(envoy_postgres_egress_postgres_statements_select[1m])", "interval": "", "legendFormat": "select statements", "refId": "C" }],

生成流量

此次演示的最后一步就是生成 Postgres 流量。我們可以通過重復運行幾組代碼,生成不同的 Postgres 事務。這些代碼位于代碼目錄(script directory)中。它們會循環地運行,每一回它都會隨機生成一個數字,數值代表事務序列重復的次數。如此一來,便帶點半隨機性。

啟用系統

啟用系統 此次演示中的所有個別組件都是以容器形式啟用,再以 Docker Compose 將它們組合。點擊下列鏈接可以下載 docker-compose 文件:https://github.com/tetratelabs/envoy-postgres-stats-example。這個文件已基本列出了所有服務,還有基本的網絡配置跟原始數據。

啟用整個系統,只需在 envoy-postgres-stats-example 目錄中輸入

docker-compose up

這個場景中所涉及的組件也會以容器形式啟用。它們通過環回接口通信,也如上所述,組件是按 docker-compose 文件所命名的。下列是以 docker-compose 建立的系統的概念圖表。

img

練習

開始練習之前,先點擊以下鏈接下載全部文件:https://github.com/tetratelabs/envoy-postgres-stats-example。假設 Docker 已經在系統中安裝成功,啟用整個系統只需輸入:

docker-compose up

Grafana 的用戶接口可見于端口 3000。將你的網頁瀏覽器對接到 docker-compose 調用的端口上。如果系統在本地運行,請輸入?http://localhost:3000。如果在云端上運行,請注明 IP 地址(確保防火墻規則允許流量通往 TCP 端口 3000)。Grafana 的預設賬號密碼是?admin/admin。

登錄 Grafana 后,選擇 PostgreSQL 儀表板(dashboard)。下列的儀表板例子包含 3 個查詢:

??前端信息的數量(由產生代碼的流量所產生的信息)?Postgres 服務器故障回復的次數?SELECT 語句的數量

引用鏈接

[1]?點此下載:?https://github.com/tetratelabs/envoy-postgres-stats-example[2]?Prometheus 格式:?https://songjiayang.gitbooks.io/prometheus/content/exporter/text.html


關于我們

Tetrate?是一家總部位于美國硅谷,全球化的企業級服務網格公司。旗艦產品 Tetrate Service Bridge,基于 Istio、Envoy 和 Apache SkyWalking 而構建。我們正在招聘!點擊下方“閱讀原文”查看更多↓↓↓

總結

以上是生活随笔為你收集整理的envoy实现_如何利用 Envoy 的 Postgres 过滤器实现网络可观察性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。