Skywalking的這個插件apm-trace-ignore-plugin不知道為什么要設置為可選插件,我感覺基本上都會屏蔽一些沒用的接口,避讓監控檢查之類的。
以前在8.x版本的時候直接配置環境變量skywalking.trace.ignore_path就可以了。
最近skywalking換到9.7版本以后,配置這個插件怎么都不生效。
先看看官方9.1給的配置方法:
有兩種方法可以配置忽略模式。通過系統環境進行設置具有更高的優先級。
1.通過系統環境變量設置,需要將skywalking.trace.ignore_path添加到系統變量中,該值為需要忽略的路徑,多個路徑之間應分隔。
2.在/agent/config/dir中創建名為apm-trace-ignore-plugin.config的文件,并添加規則以篩選跟蹤
trace.ignore_path=/your/path/1/**,/your/path/2/**
方案一也是支持skywalking.trace.ignore_path環境變量。
我的配置是:
skywalking.trace.ignore_path: /actuator/health,/actuator/**, /actuator/*
怎么測試都不生效。

看了skywalking的日志發現有個ignore的報錯
ERROR 2023-12-13 11:23:25.571 main IgnoreConfigInitializer : Failed to read the config file, skywalking is going to run in default config. org.apache.skywalking.apm.agent.core.conf.ConfigNotFoundException: Fail to load ignore config file. at org.apache.skywalking.apm.plugin.trace.ignore.conf.IgnoreConfigInitializer.loadConfigFromAgentFolder(IgnoreConfigInitializer.java:99) at org.apache.skywalking.apm.plugin.trace.ignore.conf.IgnoreConfigInitializer.initialize(IgnoreConfigInitializer.java:50) at org.apache.skywalking.apm.plugin.trace.ignore.TraceIgnoreExtendService.boot(TraceIgnoreExtendService.java:50) at org.apache.skywalking.apm.agent.core.boot.ServiceManager.lambda$startup$2(ServiceManager.java:115) at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) at java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:352) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) at org.apache.skywalking.apm.agent.core.boot.ServiceManager.startup(ServiceManager.java:113) at org.apache.skywalking.apm.agent.core.boot.ServiceManager.boot(ServiceManager.java:45) at org.apache.skywalking.apm.agent.SkyWalkingAgent.premain(SkyWalkingAgent.java:142) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386) at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
我猜測應該是apm-trace-ignore-plugin插件新版本沒有默認的配置文件導致。
于是我手動創建了一個/skywalking/agent/config/apm-trace-ignore-plugin.config
trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:/test}
然后再配置
SW_AGENT_TRACE_IGNORE_PATH: /actuator/health
測試發現還是不生效,但是日志沒有報錯了。
最后發現需要配置methods方法:
SW_AGENT_TRACE_IGNORE_PATH: GET:/actuator/health

另外新版本中skywalking.trace.ignore_path環境變量也不行了。
在k8s中可以選項在初始化鏡像的時候創建一個默認配置文件,也可以使用ConfigMap的方式掛載到POD里面。


