🔗 OpenResty XRay 是什麼?
🔗 OpenResty XRay 是什麼?
OpenResty XRay 是一個動態追蹤產品,它可以即時分析各種雲和伺服器應用程式。它將執行中的程序和容器視為只讀資料庫,並提取必要的資訊來解決效能問題、異常、錯誤和安全漏洞。OpenResty XRay 擁有知識庫、推理引擎和數百個高階分析器,可以在不改變或影響目標應用程式的情況下診斷和縮小深層問題的根源。
🔗 誰應該使用 OpenResty XRay?
DevOps 可以利用 OpenResty XRay 快速發現任意問題或找出問題根源,然後將發現的問題和生成的自動報告轉發給開發人員。
開發團隊也可以利用 OpenResty XRay 來檢查日常開發中或新的軟體產品釋出前的任何迴歸問題。
🔗 OpenResty XRay 可以分析不在 OpenResty 上執行的應用程式嗎?
當然!OpenResty XRay 是一個通用平臺,可以分析任何軟體。好吧,至少是您控制的軟體(比如您可以訪問 DWARF 的除錯符號,原始碼等)。
不過,OpenResty XRay 目前分析 OpenResty 和 Nginx 技術棧的效果最好。告訴我們您希望 OpenResty XRay 儘快支援的開源軟體!
🔗 OpenResty XRay 需要以任何方式改變我的應用程式嗎?
不!OpenResty XRay 使用先進的動態追蹤技術,不需要目標應用程式的協作。它是 100% 非侵入的。
- 我們不要求在您的應用程式中新增外掛或模組。
- 我們不需要對您的應用程式的程式碼打上補丁。
- 我們不需要特殊的編譯或啟動選項(好吧,在編譯 C/C++ 程式時,您確實需要
-g選項來發送 DWARF 資料,但這是非常標準的做法)。 - 我們不向您的應用程式程序注入任何程式碼。
使用 OpenResty XRay 分析器不會以任何方式損害您的應用程式程序甚至使其崩潰,因為我們不會向您的程序新增任何東西。
🔗 是否有提供個人使用的個人版?
是的有提供!只要個人版不用於任何公司、政府或其他商業用途。不過,我們通常不為個人版提供 SLA。
🔗 安裝與部署
🔗 如何為我的應用程式部署安裝 OpenResty XRay?
您需要在裝有應用程式或容器的伺服器上安裝並執行 OpenResty XRay agent 程式。agent 程式是一個獨立的守護程序,可以檢查您在同一伺服器上的所有應用程式。它也是作為 OpenResty XRay web 控制檯的一個客戶端。
有幾種方法來安裝 OpenResty XRay agent。
- 安裝我們為相應的 Linux 發行版提供的 RPM 或 Deb 軟體包庫。
- 安裝一個大的
.tar.gz包,其中包含我們為您的 Linux 發行版提供的所有 RPM 或 Deb 包。 - 安裝我們的官方 Docker 或 Kubernetes(K8s)容器映象。
一個常見的錯誤是在您自己的容器中安裝 agent。這總會失敗的,因為您的容器基本總會缺乏許可權或檔案系統訪問權,使 agent 無法檢查其他程序和容器。
🔗 我們支援哪些作業系統?
Ubuntu 24.04 noble, Ubuntu 22.04 Jammy, Ubuntu 20.04 Focal, Ubuntu 18.04 Bionic, Debian 12 Bookworm, Debian 11 Bullseye, Debian 10 Buster, Debian 9 Stretch, Red Hat Enterprise Linux 8, Red Hat Enterprise Linux 7, Rocky Linux 9, Rocky Linux 8, AlmaLinux 9, AlmaLinux 8, Cent OS 8, Cent OS 7, Cent OS 6, Fedora 36, Fedora 35, Fedora 34, Fedora 33, Fedora 32, Amazon Linux 2023, Amazon Linux 2, Amazon Linux 1, Alibaba Cloud Linux 3, Alibaba Cloud Linux 2, Tencent Linux 3, Tencent Linux 2, OpenSUSE 15, Kylin 10, Kylin 7, CBL-Mariner 2
我們的官方 Docker 或 K8s 容器映象可以在任何支援容器的現代 Linux 發行版上執行,只要這些目標應用容器內使用的 Linux 發行版在 支援列表 內。
如果您想原生執行 OpenResty XRay 的 agent 服務,我們是支援大多數主流 Linux 發行版的。請檢視最新的 發行版支援列表 瞭解詳情。
如果您有新的 Linux 發行版需要原生支援,請聯絡我們:info@openresty.com!
以後我們可能也會支援非 Linux 作業系統,如 Android、macOS、*BSD 和 Microsoft Windows 等。
🔗 需要非常新的 Linux 核心嗎?
不需要!我們支援舊的核心,如 CentOS 7 的 3.10 核心。但不支援像 CentOS 6 的 2.6 這樣的舊核心。
🔗 我可以使用我自己的 Linux 核心嗎?
可以!但您需要聯絡我們的團隊,以便我們能夠在軟體包資料庫中索引您的核心,並徹底測試它們與我們產品的相容性。我們還不支援對自定義或未知核心的自動索引。我們可能會考慮在未來增加這一支援。
🔗 是否支援自編譯核心?
支援,需要上傳相關的核心包。具體需要的核心包可以參考 OpenResty XRay Console 的上傳頁面。
🔗 OpenResty XRay 支援哪些應用和程式語言?
支援的程式語言與執行時:Python, Java, Rust, Perl, PHP, Erlang, Ruby, Go, LuaJIT, C/C++ 支援的伺服器與代理:OpenResty, Envoy, Kong, CockroachDB, Nginx,
🔗 OpenResty XRay agent 能否分析 AWS EKS 上執行的應用?
支援。
🔗 我可以在 VMWare/VirtualBox/KVM/ 等本地虛擬機器上使用 OpenResty XRay 嗎?
可以!所有這樣的全系統虛擬化技術都應該可以與 OpenResty XRay 一起開箱工作。如果不能,請向我們報告。
請注意,不支援在您自己的 Docker 或 K8s 容器內安裝我們的 agent。但您可以隨時使用我們的官方 Docker 和 K8s 容器映象來安裝 agent。
🔗 我可以在公有云虛擬機器中執行 OpenResty XRay 嗎?
可以!比如微軟 Azure、谷歌雲(GCP)、亞馬遜雲(AWS)或 Digital Ocean。虛擬化的雲伺服器都可以。不是一定要物理機。
🔗 agent 需要安裝 C 編譯器工具鏈嗎?
不需要。與那些開源的動態追蹤框架如 SystemTap 或 eBPF/BCC 不同,OpenResty XRay 不要求在目標機器上安裝任何 C 或 C++ 編譯器工具鏈。沒有 gcc,沒有 clang,什麼都沒有。此外,它不需要安裝任何 Linux 核心標頭檔案。
🔗 OpenResty XRay agent 是如何部署在 K8s 上的?
OpenResty XRay Agent 在 Kubernetes 環境中通常採用 DaemonSet 的方式進行部署。
🔗 agent 使用與管理
🔗 agent 的開銷多大?
我們儘量將 agent 程式對您標記為“生產”的伺服器的效能影響降到最低。agent 使用事件觸發的取樣方法,因此它不會一直試圖收集資料,只是在有真正需要的時候才收集。當不採樣時,您的所有程序嚴格意義上產生的額外開銷是 0。這是由於動態追蹤的真正非侵入性。即使在取樣時,我們大多數的分析器的開銷也應該小於您的應用的5%。即使是那些原本開銷比較昂貴的工具,系統也會嘗試自動調整這些分析器的頻率和程序範圍,以儘量減少影響。
如果您不在 web 控制檯中把您的伺服器標記為“生產”,系統會認為它們是開發或測試環境。因此,它將不再對資源的使用持謹慎態度,所有的分析器將全速執行,以便您能儘快得到結果。
🔗 安裝 agent 後,我需要重新啟動我的程序嗎?
不需要!動態追蹤技術的一個優點是事後分析。您不需要重新啟動您的應用程式或任何現有的程序,讓新安裝的 OpenResty XRay agent 進行分析。我們可以做到這一點,因為我們不需要任何新的外掛、新的啟動選項,也不需要向您的應用程式注入任何程式碼。它是無汙染和非侵入的。
我們理解,您可能有一些程序進入了一些罕見的狀態,重新啟動它們會使問題消失。這就是為什麼事後分析和除錯是如此關鍵。
🔗 我怎樣才能停止 agent?
要停止 OpenResty XRay agent 服務,只需執行以下 shell 命令。
sudo systemctl stop orxray-agent
但這只是暫時的。如果系統重新啟動或重啟,agent 服務會再次啟動。要永久停止它,您也可以在執行前一個命令後再執行這個命令。
sudo systemctl disable orxray-agent
對於容器化的 agent 服務,您可以用 Docker 或 Kubernetes 停止 agent 容器例項。
🔗 我如何重新啟動 agent?
要重新啟動您的 agent,只需執行命令
sudo systemctl restart orxray-agent
等待幾分鐘,新的 agent 例項就會生效。
🔗 我的 agent 不工作了,我應該怎麼做?
有些時候,由於網路或硬碟問題,agent 不能正常工作。在這種情況下,請檢視該目錄下的錯誤日誌檔案。
/usr/local/orxray-agent/logs/
如果您對錯誤日誌檔案中的錯誤還需要幫助,請隨時聯絡我們。
🔗 如何執行 OpenResty XRay 分析記憶體、CPU 等問題?
要執行 OpenResty XRay 分析記憶體、CPU 等問題,您可以利用其引導式分析功能。詳細的操作步驟和相關案例,請參閱 OpenResty 官方部落格中關於 XRay 線上分析記憶體及高 CPU 問題的系列文章。
🔗 agent 可以分析私人軟體嗎?
是的,如果您編寫了私有軟體的話。例如,如果您沒有得到其他供應商的許可,您就不應該分析他們的專有軟體。但是,如果您編寫了這個軟體,或者有機會接觸到原始碼,並且有編譯的許可權,那就可以了。而且您甚至可以使用我們的 Y 語言(lang)來為您的程式編寫高階分析器。請確保您用 DWARF 資料(或 "除錯符號")來編譯私有軟體。例如,C/C++ 程式在使用 gcc 或 g++ 時,應使用 g 或 g3 選項進行編譯。使用 DWARF 符號編譯對程式的執行效能沒有任何影響,大多數主流的 Linux 發行版在其標準軟體包中都預設這樣做。
然而,DWARF 資料並不總是必需的。OpenResty XRay 中一些基本分析器不需要“除錯符號”來工作。我們曾經幫助一個客戶在 C/C++ 函式層面上準確定位了一個第三方專有庫的記憶體洩漏。但要確保您符合第三方的許可要求。
🔗 資料安全
🔗 agent 會收集哪些資料?
OpenResty XRay agent 程式只收集用於分析效能問題、排除穩定性和行為上的問題以及掃描安全漏洞的基本資料。我們從不從您的業務級程式碼中收集任何潛在的敏感資料。我們還實施保護措施,以避免意外地收集資料來源中的敏感資料,使其不會洩露到您的應用程式程序之外。
🔗 你們如何處理 agent 收集的資料?
我們非常謹慎地保護我們客戶的資料和隱私。這是我們的第一要務。在傳輸所有資料到我們的 web 控制檯時,我們總是使用工業標準的加密方法(如 TLS)。我們 web 控制檯的資料儲存和管理也符合所有 SOC 2 準則。只有最近 2 周的原始資料存放在我們的 web 控制檯中(更高級別的報告資料存放時間更長些)。如果有些客戶有更短的資料生命週期要求,我們也可以滿足。
🔗 你們會出售或分享我們的資料嗎?
不,永遠不會。我們不會把您的資料賣給任何第三方。我們只可能與我們的一些外部承包商分享一些經過審計和混淆的資料。而我們所有的承包商必須與我們簽署保密協議(NDA)。
🔗 我可以避免上傳任何資料到你們的控制檯嗎?
是的!我們為有嚴格的資料處理政策的公司提供 OpenResty XRay 的自主部署版本。它比雲版本更貴。對於自主部署版本,使用者在自己的環境中部署 web 控制檯;因此,沒有資料會被上傳到 OpenResty Inc 的伺服器上。
🔗 除錯符號與分析能力
🔗 我需要在我所有的伺服器上安裝除錯符號包嗎?
不需要。OpenResty XRay 在一個叫做 package database 的遠端資料庫中索引它發現的所有除錯符號。每當 agent 發現一個二進位制的可執行檔案,它就會自動查詢包資料庫中相應的除錯符號。
我們執行爬蟲程式,在網際網路上一直獲取公共軟體包的除錯符號(或 DWARF 資料)。而且我們還自動索引使用者自己的 DWARF 資料和除錯符號。每個 OpenResty XRay 租戶都有自己獨立的軟體包資料庫以保護隱私。如果您自己編譯軟體,那麼請確保您有一臺離線(或線上)的機器,安裝了所有的軟體二進位制檔案和除錯符號,並且讓 OpenResty XRay agent 在那執行(至少有一段時間)。一旦 DWARF 資料和二進位制程式被索引到使用者的軟體包資料庫中,使用者就可以在他所有的機器上擺脫除錯符號了。
🔗 OpenResty XRay 說我的程式缺乏除錯符號,我應該怎麼做?
如果程式是自行編譯的,試著找到與您的主軟體包相關的除錯符號包(比如基於 RPM 的發行版上的 *-debuginfo 包,基於 Deb 的發行版上的 *-dbgsym.ddeb 或*-dbgsym.deb檔案)。將 debuginfo 包安裝在一臺安裝並運行了 agent 的機器上,並等待 agent 對除錯符號進行索引。
假設您的程式在編譯時沒有除錯符號,或者您找不到相應的 debuginfo 包。在這種情況下,您可以嘗試在啟用除錯符號的情況下重新編譯您的程式(對於 C/C++ 程式,在編譯器命令列中傳遞 -g 或-g3選項)。另外,確保您的打包指令碼生成一個 debuginfo 包(如 *-debuginfo*.rpm 或*-dbgsym.deb),而不是把除錯符號丟棄。
我們理解尋找除錯符號有時是一件很麻煩的事。我們一直在開發一個人工智慧系統,可以從現有的 DWARF 資料中自動重建相似但不完全相同的二進位制程式的 DWARF 資料。一旦這個準備就緒,OpenResty XRay 將能夠徹底分析大量缺少除錯符號的開源軟體二進位制檔案。
值得一提的是,OpenResty XRay 中的一些基本分析器並不要求“除錯符號”來工作。事實上,我們曾經幫助一個客戶在 C/C++ 函式層面上準確定位了一個第三方專有庫的記憶體洩漏。
🔗 我可以編寫自己的分析器嗎?
可以!您可以使用我們的 Y 語言(或 Ylang)來編寫您自己的分析器。Ylang 是 C 程式語言的一個大的子集,有我們自己的動態追蹤的擴充套件。我們還提供了 Ylua 語言,這是一個帶有擴充套件的 Lua 語言的子集,以及 YSQL,一個 SQL 方言。
🔗 其他問題
🔗 這些核心訊息是否有影響
🔗 vsyscall read attempt denied
在啟動現場錄製後,核心可能會丟擲類似下面這樣的訊息。這個訊息是無害的,可以忽略。
[29389.731303] redis-server[298169] vsyscall read attempt denied -- look up the vsyscall kernel parameter if you need a workaround ip:7f000013d241 cs:33 sp:2aaacbcf6f08 ax:0 si:7f00003db659 di:ffffffffff600000
🔗 1 個 License 支援多少個賬戶登入?
1 個 License 支援 2 個賬號登入。
🔗 OpenResty XRay 怎麼配置 HTTP 代理?
如果您的 OpenResty XRay Agent 部署在一個需要透過 HTTP 代理訪問公網的環境中,您可以按照該文件的步驟配置和使用 HTTP 代理。