為了統一管理阿里雲Container ServiceACK叢集或自建 Kubernetes 叢集在多環境、多叢集情境下的日誌採集配置,避免因手動設定導致的不一致、效率低下及變更不可追溯等問題,可採用Kubernetes 的自訂資源(CRD)方式定義採集配置。通過該方式,無論是 ACK 叢集還是自建 Kubernetes 叢集,均可使用 kubectl 或 CI/CD 流水線實現配置的版本化管理、環境差異化部署和自動化發布。結合 LoongCollector 的熱載入能力,配置變更後可立即生效,無需重啟採集組件,提升營運效率與系統的可維護性。
舊版CRD-AliyunLogConfig的配置方式已停止維護,請使用新版AliyunPipelineConfig,新舊版的能力對比請參見CRD類型。對於通過自訂資源(CRD)建立的採集配置,只能通過更新對應的CRD進行修改。在Log Service控制台上所做的更改不會同步至CRD,也不會生效。
適用範圍
運行環境:
支援阿里雲Container ServiceACK(託管與專有版)和自建Kubernetes 叢集。
Kubernetes為1.16.0及以上版本且支援
Mount propagation: HostToContainer。容器運行時(僅支援Docker與Containerd)
Docker:
需具備訪問docker.sock的許可權。
標準輸出採集僅支援JSON類型的日誌驅動。
儲存驅動僅支援overlay、overlay2兩種儲存驅動(其他類型需手動掛載日誌目錄)。
Containerd:需具備訪問containerd.sock的許可權。
資源要求:LoongCollector(Logtail)以system-cluster-critical高優先順序運行,叢集資源不足時請勿部署,否則可能驅逐節點上原有的Pod。
CPU:至少預留0.1 Core。
記憶體:採集組件至少150MB,控制器組件至少100MB。
實際使用量與採集速率、監控目錄和檔案數量、發送阻塞程度有關,請保證實際使用率低於限制值的80%。
許可權要求:部署使用的阿里雲主帳號或子帳號需具備
AliyunLogFullAccess許可權。如需自訂權限原則,請參考AliyunCSManagedLogRolePolicy系統策略,將其包含的許可權內容複寫並賦予目標 RAM 使用者或角色,以實現精細化的許可權配置。
採集配置建立流程
安裝LoongCollector:通過DaemonSet模式部署LoongCollector,確保叢集中每個節點均運行一個採集容器,統一採集該節點上所有容器的日誌。
建立Logstore:Logstore是日誌資料的儲存單元,用於儲存日誌。一個 Project 內可建立多個 Logstore。
建立採集配置YAML檔案:使用kubectl串連叢集,您可以通過以下兩種方式建立採集設定檔:
方式一:使用採集配置產生器
通過Log Service控制台的採集配置產生器,可視化填寫參數,自動產生標準YAML檔案。
方式二:手動編寫YAML
結合本文檔提供的典型情境樣本與配置流程,根據實際業務需求手動編寫 YAML 檔案。建議按本文結構逐步構建配置:從極簡配置起步 → 添加處理邏輯 → 啟用進階功能。
對於本文未覆蓋的複雜情境或需要深度定製的欄位,可進一步參考AliyunPipelineConfig參數說明,擷取完整欄位列表、取值規則及外掛程式能力詳情。
一個完整的採集配置通常包含以下部分:
極簡配置(必選):構建從叢集到Log Service的資料通道。包含兩部分:
常用處理配置(可選):通過定義
processors欄位,對原始日誌進行結構化解析(如正則解析、分隔字元解析)或脫敏、過濾處理等。本文僅介紹原生處理外掛程式,覆蓋常見Tlog情境,如需更多功能,請參考擴充處理外掛程式。
其他進階配置(可選):實現多行文本日誌的採集、日誌標籤富化等,滿足更精細化的採集需求。
結構樣本:
apiVersion: telemetry.alibabacloud.com/v1alpha1 # 使用預設值,無需修改。 kind: ClusterAliyunPipelineConfig # 使用預設值,無需修改。 metadata: name: test-config # 設定資源名,在當前Kubernetes叢集內唯一。 spec: project: # 設定目標Project名稱。 name: k8s-your-project config: # 設定Logtail採集配置。 inputs: # 設定Logtail採集配置裡的輸入外掛程式 ... processors: # 設定Logtail採集配置的處理外掛程式 ... flushers: # 設定Logtail採集配置裡的輸出外掛程式 ...應用配置
kubectl apply -f <your_yaml>
安裝LoongCollector(Logtail)
LoongCollector 是阿里雲Log Service(SLS)推出的新一代日誌採集 Agent,是 Logtail 的升級版,二者不能同時存在,如需安裝Logtail,請參考Logtail安裝與配置。
本文僅介紹LoongCollector的基礎安裝步驟,如需瞭解詳細參數請參考LoongCollector安裝(Kubernetes)。如果您已安裝LoongCollector或Logtail,可跳過此步驟,直接建立儲存採集日誌的Logstore。
ACK叢集
通過Container Service控制台安裝LoongCollector,預設將日誌發送到當前阿里雲帳號的Log ServiceProject中。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,進入叢集詳情頁。
在左側導覽列,單擊組件管理。
在日誌與監控頁簽中,找到loongcollector,單擊安裝。
說明對於建立叢集,在組件配置頁面,勾選使用Log Service,支援建立新Project或使用已有Project。
安裝完成後,Log Service會自動在ACK所屬地區下建立相關資源,您可登入Log Service控制台查看。
資源類型
資源名稱
作用
Project
k8s-log-${cluster_id}資源嵌入式管理單元,隔離不同業務日誌。
如需自行建立Project以實現更靈活的日誌資源管理,請參考建立Project。
機器組
k8s-group-${cluster_id}日誌採集節點集合。
Logstore
config-operation-log重要請不要刪除該Logstore。
用於儲存loongcollector-operator組件的日誌,其計費方式與普通Logstore相同,詳見按寫入資料量計費模式計費項目。建議不要在此Logstore下建立採集配置。
自建叢集
串連Kubernetes叢集,並根據地區選擇對應命令,下載LoongCollector及其相依元件:
中國地區:
wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh海外地區:
wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh進入
loongcollector-custom-k8s-package目錄,修改設定檔./loongcollector/values.yaml。# ===================== 必需要補充的內容 ===================== # 管理採集日誌的Project名,例如 k8s-log-custom-sd89ehdq。 projectName: "" # Project所屬地區,例如上海:cn-shanghai region: "" # Project所屬主帳號uid,請用引號包圍,例如"123456789" aliUid: "" # 使用網路,選擇性參數:公網Internet,內網Intranet,預設使用公網 net: Internet # 主帳號或者子帳號的AK,SK,需具備AliyunLogFullAccess系統策略許可權 accessKeyID: "" accessKeySecret: "" # 自訂叢集ID,命名只支援大小寫,數字,短劃線(-)。 clusterID: ""在
loongcollector-custom-k8s-package目錄下執行如下命令,安裝LoongCollector及其他相依元件:bash k8s-custom-install.sh install安裝完成後,查看組件運行狀態。
若Pod未成功啟動,請確認values.yaml配置是否正確,相關鏡像拉取是否成功。
# 檢查Pod狀態 kubectl get po -n kube-system | grep loongcollector-ds同時,Log Service會自動建立如下資源,可登入Log Service控制台查看。
資源類型
資源名稱
作用
Project
values.yaml檔案中自訂的
projectName的值資源嵌入式管理單元,隔離不同業務日誌。
機器組
k8s-group-${cluster_id}日誌採集節點集合。
Logstore
config-operation-log重要請不要刪除該Logstore。
儲存loongcollector-operator組件的日誌,其計費方式與普通Logstore相同,詳見按寫入資料量計費模式計費項目。建議不要在此Logstore下建立採集配置。
建立Logstore
若您已提前建立好Logstore,可直接跳過此步驟,進行採集配置。
登入Log Service控制台,單擊目標Project名稱。
在左側導覽列,選擇
,單擊+。在建立Logstore頁面,完成以下核心配置:
Logstore名稱:設定一個在Project內唯一的名稱。該名稱建立後不可修改。
Logstore類型:根據規格對比選擇標準型或查詢型。
計費模式:
按使用功能計費:按儲存、索引、讀寫次數等各項資源獨立計費。適合小規模或功能使用不確定的情境。
按寫入資料量計費:僅按原始寫入資料量計費,並提供30天的免費儲存周期及免費的資料加工、投遞等功能。成本模型簡單,適合儲存周期接近30天或資料處理鏈路複雜的情境。
資料儲存時間:設定日誌的保留天數,取值範圍為1~3650天(3650天表示永久儲存)。預設為30天。
其他配置保持預設,單擊確定。如需瞭解其他配置資訊,請參考管理Logstore。
極簡配置
在spec.config中,通過配置輸入(inputs)與輸出(flushers)外掛程式,定義日誌採集的核心路徑:從哪裡採集日誌,以及日誌要發送到哪裡。
容器標準輸出-新版
用途:採集直接列印到控制台的容器標準輸出日誌(stdout/stderr)。
採集配置的起點,定義日誌來源。目前只允許配置1個輸入外掛程式。
| 樣本 |
通過配置
|
採集容器內文字檔
用途:採集寫入到容器內特定檔案路徑的日誌,如傳統的access.log或app.log。
採集配置的起點,定義日誌來源。目前只允許配置1個輸入外掛程式。
| 樣本 |
通過
|
常用處理配置
在完成極簡配置後,您可以通過添加processors外掛程式進行處理配置,將原始日誌進行結構化解析或脫敏、過濾處理。
核心配置:在spec.config中添加processors,配置處理外掛程式,支援同時啟用多個外掛程式。
此處僅介紹原生處理外掛程式,覆蓋常見Tlog情境,如需更多功能,請參考擴充處理外掛程式。
對於Logtail 2.0及以上版本以及LoongCollector組件,推薦遵循以下外掛程式組合規則:
優先使用原生外掛程式。
當原生外掛程式無法滿足需求時,可在原生外掛程式後配置擴充外掛程式。
原生外掛程式只能在擴充外掛程式之前使用。
結構化配置
正則解析
通過Regex提取日誌欄位,並將日誌解析為索引值對形式。
關鍵字段 | 樣本 |
Type 外掛程式類型,固定為 | |
SourceKey 源欄位名。 | |
Regex 匹配日誌的Regex。 | |
Keys 提取的欄位列表。 | |
KeepingSourceWhenParseFail 解析失敗時,是否保留源欄位,預設為 | |
KeepingSourceWhenParseSucceed 解析成功時,是否保留源欄位,預設為 | |
RenamedSourceKey 保留源欄位時,用於儲存源欄位的欄位名,預設不改名。 |
分隔字元解析
通過分隔字元將日誌內容結構化,解析為多個索引值對形式。支援單字元分隔字元和多字元分隔字元。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,固定值 | |
SourceKey 源欄位名。 | |
Separator 欄位分隔符號,例如 CSV 使用逗號 (,)。 | |
Keys 提取的欄位列表。 | |
Quote 引用符,用於包裹包含特殊字元(如逗號)的欄位內容。 | |
AllowingShortenedFields 是否允許提取的欄位數量小於 Keys 的數量,預設為 | |
OverflowedFieldsTreatment 當提取的欄位數量大於 Keys 的數量時的行為,預設為
| |
KeepingSourceWhenParseFail 解析失敗時,是否保留源欄位,預設為 | |
KeepingSourceWhenParseSucceed 解析成功時,是否保留源欄位,預設為 | |
RenamedSourceKey 保留源欄位時,用於儲存源欄位的欄位名,預設不改名。 |
標準JSON解析
將Object類型的JSON日誌結構化,解析為索引值對形式。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,固定值為 | |
SourceKey 源欄位名。 | |
KeepingSourceWhenParseFail 解析失敗時,是否保留源欄位,預設為 | |
KeepingSourceWhenParseSucceed 解析成功時,是否保留源欄位,預設為 | |
RenamedSourceKey 保留源欄位時,用於儲存源欄位的欄位名,預設不改名。 |
嵌套JSON解析
通過指定展開深度,將嵌套的JSON日誌解析為索引值對形式。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,固定值 | |
SourceKey 源欄位名。 | |
ExpandDepth JSON 展開深度,預設值為0。
| |
ExpandConnector JSON 展開時欄位名的串連符,預設為底線(_)。 | |
Prefix 指定 JSON 展開後欄位名的首碼。 | |
IgnoreFirstConnector 是否忽略第一個串連符,即是否在頂級欄位前添加串連符,預設為 | |
ExpandArray 是否展開數群組類型,預設為
說明 Logtail 1.8.0 及以上版本支援該參數。 | |
KeepSource 被解析後的日誌中是否保留原始欄位,預設為
| |
NoKeyError 原始日誌中沒有指定的原始欄位時,系統是否報錯,預設為
| |
UseSourceKeyAsPrefix 是否將原始欄位名作為所有 JSON 展開欄位名的首碼。 | |
KeepSourceIfParseError 解析日誌失敗時,是否保留原始日誌,預設為
|
JSON數組解析
使用json_extract函數,從JSON數組中提取JSON對象,更多json函數請參考JSON函數。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,SPL外掛程式類型為 | |
Script SPL 指令碼內容,用於從 content 欄位中提取 JSON 數組中的元素。 | |
TimeoutMilliSeconds 指令碼逾時時間,取值範圍0~10000,單位為毫秒,預設1000。 |
Nginx日誌解析
根據log_format中的定義將日誌內容結構化,解析為多個索引值對形式。如預設內容不符合您的需求,可使用自訂格式。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,Nginx日誌解析的外掛程式類型為 | |
SourceKey 源欄位名。 | |
Regex Regex。 | |
Keys 提取的欄位列表。 | |
Extra
| |
KeepingSourceWhenParseFail 解析失敗時是否保留原始欄位,預設為 | |
KeepingSourceWhenParseSucceed 解析成功時是否保留原始欄位,預設為 | |
RenamedSourceKey 保留原始欄位時,用於儲存原始的欄位名,預設不改名。 |
Apache日誌解析
根據Apache日誌設定檔中的定義將日誌內容結構化,解析為多個索引值對形式。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,固定值為 | |
SourceKey 源欄位名。 | |
Regex Regex。 | |
Keys 提取的欄位列表。 | |
Extra
| |
KeepingSourceWhenParseFail 解析失敗時是否保留原始欄位,預設為 | |
KeepingSourceWhenParseSucceed 解析成功時是否保留原始欄位,預設為 | |
RenamedSourceKey 保留原始欄位時,用於儲存原始的欄位名,預設不改名。 |
資料脫敏
使用 processor_desensitize_native 外掛程式對日誌中的敏感性資料進行脫敏處理。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,固定值 | |
SourceKey 源欄位名。 | |
Method 脫敏方式。可選值包括:
| |
ReplacingString 用於替換敏感內容的常量字串。當 | |
ContentPatternBeforeReplacedString 敏感內容的首碼Regex。 | |
ReplacedContentPattern 敏感內容的Regex。 | |
ReplacingAll 解析成功時是否保留原始欄位,預設為 |
內容過濾
通過配置 processor_filter_regex_native 外掛程式,基於Regex匹配日誌欄位值,僅保留滿足條件的日誌。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,固定值 | |
FilterRegex 匹配日誌欄位的Regex。 | |
FilterKey 匹配的日誌欄位名。 |
時間解析
配置 processor_parse_timestamp_native 外掛程式對日誌中的時間欄位進行解析,並將解析結果設定為日誌的__time__欄位。
關鍵字段詳解 | 樣本 |
Type 外掛程式類型,固定值 | |
SourceKey 源欄位名。 | |
SourceFormat 時間格式,需與日誌中的時間欄位格式完全符合。 | |
SourceTimezone 日誌時間所屬時區,預設使用機器時區,即LoongCollector進程所在環境的時區。 格式:
|
其他進階配置
在完成極簡配置後,您可以參考下述操作採集多行日誌、配置日誌主題類型等,以滿足更精細化的日誌採集需求。以下是常見進階配置及其功能:
配置多行日誌採集:當一條日誌內容(如異常堆棧資訊)佔用多行時,需啟用多行模式,並配置行首Regex以匹配日誌的起始行,將佔用多行的日誌作為一條日誌採集並儲存到Log Service的Logstore中。
配置日誌主題類型:為不同的日誌流設定不同的主題(Topic),可用於組織和分類日誌資料,更好地管理和檢索相關日誌。
指定容器採集(過濾與黑名單):指定特定容器與路徑採集,包括白名單與黑名單配置。
日誌標籤富化:將環境變數、Pod標籤相關的元資訊添加到日誌中,作為日誌的擴充欄位。
配置多行日誌採集
Log Service預設為單行模式,按行進行日誌的切分與儲存,導致含堆棧資訊的多行日誌被逐行切分,每一行作為獨立日誌儲存和展示,不利於分析。
針對上述問題,可通過開啟多行模式來改變Log Service的切分方式,並通過配置Regex匹配日誌起始行,從而將原始日誌按照起始行規則進行切分和儲存。
核心配置:在spec.config.inputs配置中添加Multiline參數。
關鍵字段詳解 | 樣本 |
Multiline 開啟多行日誌採集功能。
| |
配置日誌主題類型
核心配置:在spec.config中增加global參數以設定Topic。
關鍵字段詳解 | 樣本 |
TopicType topic類型,可選值:
| 機器組Topic檔案路徑提取自訂 |
TopicFormat Topic 格式。當 TopicType 取值為 filepath 或 custom 時必填。 |
指定容器採集(過濾與黑名單)
過濾
只採集合格容器,多個條件之間為“且”的關係,任意條件為空白表示忽略該條件;條件支援使用Regex。
核心配置:在spec.config.inputs中配置ContainerFilters容器過濾相關參數。
關鍵字段詳解 | 樣本 |
ContainerFilters 容器過濾
所有正則匹配均基於 Go 語言的 RE2 正則引擎,功能較 PCRE 等引擎有所限制,請遵循附錄:Regex使用限制(容器過濾)編寫Regex。 | |
黑名單
排除指定條件的檔案。需要在YAML的config.inputs下按需使用如下參數:
關鍵字段詳解 | 樣本 |
ExcludeFilePaths 檔案路徑黑名單,排除指定條件的檔案。路徑必須為絕對路徑,支援使用 * 萬用字元。 | |
ExcludeFiles 檔案名稱黑名單,排除指定條件的檔案。支援使用 * 萬用字元。 | |
ExcludeDirs 目錄黑名單,排除指定條件的檔案。路徑必須為絕對路徑,支援使用 * 萬用字元。 |
日誌標籤富化
核心配置:通過在spec.config.inputs中配置ExternalEnvTag 和 ExternalK8sLabelTag,向日誌中添加與容器環境變數、Pod標籤相關的tag。
關鍵字段詳解 | 樣本 |
ExternalEnvTag 將指定的環境變數值對應為 tag 欄位,格式為: | |
ExternalK8sLabelTag 將 Kubernetes Pod 的標籤值對應為 tag 欄位,格式為: |
常見情境完整配置樣本
情境一:採集Nginx Access log並解析為結構化欄位
解析Nginx日誌,根據log_format中的定義將日誌內容結構化,解析為多個索引值對形式。
情境二:採集並處理多行日誌
Log Service預設為單行模式,按行進行日誌的切分與儲存,導致含堆棧資訊的多行日誌被逐行切分,每一行作為獨立日誌儲存和展示,不利於分析。
針對上述問題,可通過開啟多行模式來改變Log Service的切分方式,並通過配置Regex匹配日誌起始行,從而將原始日誌按照起始行規則進行切分和儲存。樣本如下:
常見問題
如何將ACK叢集日誌傳輸到另一個阿里雲帳號的Project?
通過在ACK叢集中手動安裝Log Service LoongCollector(Logtail) 組件,並為其配置目標帳號的主帳號ID或訪問憑證(AccessKey),即可實現將容器日誌發送到另一個阿里雲帳號的Log ServiceProject中。
情境描述:當因為組織架構、許可權隔離或統一監控等原因,需要將某個ACK叢集的日誌資料擷取到另一個獨立的阿里雲帳號的Log ServiceProject時,可通過手動安裝 LoongCollector(Logtail)進行跨帳號配置。
操作步驟:此處以手動安裝LoongCollector為例,如需瞭解如何安裝Logtail,請參考Logtail安裝與配置。
串連Kubernetes叢集,並根據地區選擇對應命令,下載LoongCollector及其相依元件:
中國地區:
wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh海外地區:
wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh進入
loongcollector-custom-k8s-package目錄,修改設定檔./loongcollector/values.yaml。# ===================== 必需要補充的內容 ===================== # 管理採集日誌的Project名,例如 k8s-log-custom-sd89ehdq。 projectName: "" # Project所屬地區,例如上海:cn-shanghai region: "" # Project所屬主帳號uid,請用引號包圍,例如"123456789" aliUid: "" # 使用網路,選擇性參數:公網Internet,內網Intranet,預設使用公網 net: Internet # 主帳號或者子帳號的AK,SK,需具備AliyunLogFullAccess系統策略許可權 accessKeyID: "" accessKeySecret: "" # 自訂叢集ID,命名只支援大小寫,數字,短劃線(-)。 clusterID: ""在
loongcollector-custom-k8s-package目錄下執行如下命令,安裝LoongCollector及其他相依元件:bash k8s-custom-install.sh install安裝完成後,查看組件運行狀態。
若Pod未成功啟動,請確認values.yaml配置是否正確,相關鏡像拉取是否成功。
# 檢查Pod狀態 kubectl get po -n kube-system | grep loongcollector-ds同時,Log Service會自動建立如下資源,可登入Log Service控制台查看。
資源類型
資源名稱
作用
Project
values.yaml檔案中自訂的
projectName的值資源嵌入式管理單元,隔離不同業務日誌。
機器組
k8s-group-${cluster_id}日誌採集節點集合。
Logstore
config-operation-log重要請不要刪除該Logstore。
儲存loongcollector-operator組件的日誌,其計費方式與普通Logstore相同,詳見按寫入資料量計費模式計費項目。建議不要在此Logstore下建立採集配置。
如何讓同一個記錄檔或容器標準輸出被多個採集配置同時採集?
預設情況下,Log Service為了防止資料重複,限制了每個日誌源只能被一個採集配置採集:
一個 文本記錄檔只能匹配一個 Logtail 採集配置;
一個 容器的標準輸出(stdout) 也只能被一個標準輸出採集配置採集。
登入Log Service控制台,進入目標Project。
在左側導航選擇
日誌庫,找到目標Logstore。單擊其名稱前的
展開Logstore。單擊Logtail配置,在配置列表中,找到目標Logtail配置,單擊操作列的管理Logtail配置。
在Logtail配置頁面,單擊編輯,下滑至輸入配置地區:
採集文字檔日誌:開啟允許檔案多次採集。
採集容器標準輸出:開啟允許標準輸出多次採集。
附錄:Regex使用限制(容器過濾)
容器過濾時所使用的Regex基於Go語言的RE2引擎,與PCRE等其他引擎相比存在部分文法限制。請在編寫Regex時注意以下事項:
1. 命名分組文法差異
Go語言使用 (?P<name>...) 文法定義命名分組,不支援 PCRE中的 (?<name>...) 文法。
正確樣本:
(?P<year>\d{4})錯誤寫法:
(?<year>\d{4})
2. 不支援的正則特性
以下常見但複雜的正則功能在RE2中不可用,請避免使用:
斷言:
(?=...)、(?!...)、(?<=...)、(?<!...)條件運算式:
(?(condition)true|false)遞迴匹配:
(?R)、(?0)子程式引用:
(?&name)、(?P>name)原子組:
(?>...)
3. 使用建議
推薦使用 Regex101等工具調試Regex時,選擇 Golang (RE2) 模式進行驗證,以確保相容性。若使用了上述不支援的文法,外掛程式將無法正確解析或匹配。