This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 8ff67d09e9 Allow excluding ServiceEntries in some namespaces when
looking up ServiceEntries (#11640)
8ff67d09e9 is described below
commit 8ff67d09e90712341c7889e0e6f4dc9506f4ad16
Author: kezhenxu94 <[email protected]>
AuthorDate: Fri Dec 8 22:02:17 2023 +0800
Allow excluding ServiceEntries in some namespaces when looking up
ServiceEntries (#11640)
---
docs/en/changes/changes.md | 2 ++
docs/en/setup/backend/configuration-vocabulary.md | 1 +
.../oap/server/receiver/envoy/EnvoyMetricReceiverConfig.java | 8 ++++++++
.../receiver/envoy/als/istio/IstioServiceEntryRegistry.java | 3 +++
oap-server/server-starter/src/main/resources/application.yml | 6 ++++++
5 files changed, 20 insertions(+)
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 2e245bd334..1498f81d56 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -9,6 +9,8 @@
* Remove unreasonable default configurations for gRPC thread executor.
* Remove `gRPCThreadPoolQueueSize (SW_RECEIVER_GRPC_POOL_QUEUE_SIZE)`
configuration.
+* Allow excluding ServiceEntries in some namespaces when looking up
+ ServiceEntries as a final resolution method of service metadata.
#### UI
* Fix the mismatch between the unit and calculation of the "Network Bandwidth
Usage" widget in Linux-Service Dashboard.
diff --git a/docs/en/setup/backend/configuration-vocabulary.md
b/docs/en/setup/backend/configuration-vocabulary.md
index ceec116d0e..c9a7c301a9 100644
--- a/docs/en/setup/backend/configuration-vocabulary.md
+++ b/docs/en/setup/backend/configuration-vocabulary.md
@@ -191,6 +191,7 @@ The Configuration Vocabulary lists all available
configurations provided by `app
| - | - | alsTCPAnalysis
| Starts Envoy TCP Access
Log Service analysis. Value = `k8s-mesh` means starting the analysis.
[...]
| - | - | k8sServiceNameRule
| `k8sServiceNameRule`
allows you to customize the service name in ALS via Kubernetes metadata. The
available variables are `pod` and `service`. E.g. you can use
`${service.metadata.name}-${pod.metadata.labels.version}` to append the version
number to the service name. Note that [...]
| - | - | istioServiceNameRule
| `istioServiceNameRule`
allows you to customize the service name in ALS via Kubernetes metadata. The
available variables are `serviceEntry`. E.g. you can use
`${serviceEntry.metadata.name}-${serviceEntry.metadata.labels.version}` to
append the version number to the service name [...]
+| - | - | istioServiceEntryIgnoredNamespaces
| When looking up service
informations from the Istio ServiceEntries, some of the ServiceEntries might be
created in several namespaces automatically by some components, and OAP will
randomly pick one of them to build the service name, users can use this config
to exclude Servic [...]
| receiver-otel | default | A receiver for analyzing metrics
data from OpenTelemetry.
| -
[...]
| - | - | enabledHandlers
| Enabled handlers for
otel.
[...]
| - | - | enabledOtelMetricsRules
| Enabled metric rules
for OTLP handler.
[...]
diff --git
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/EnvoyMetricReceiverConfig.java
b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/EnvoyMetricReceiverConfig.java
index fd34c808b8..0ef2d77429 100644
---
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/EnvoyMetricReceiverConfig.java
+++
b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/EnvoyMetricReceiverConfig.java
@@ -18,12 +18,14 @@
package org.apache.skywalking.oap.server.receiver.envoy;
+import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
import lombok.Getter;
import org.apache.skywalking.oap.meter.analyzer.prometheus.rule.Rule;
@@ -41,6 +43,7 @@ public class EnvoyMetricReceiverConfig extends ModuleConfig {
private String k8sServiceNameRule;
@Getter
private String istioServiceNameRule;
+ private String istioServiceEntryIgnoredNamespaces;
private final ServiceMetaInfoFactory serviceMetaInfoFactory = new
ServiceMetaInfoFactoryImpl();
@Getter
@@ -71,4 +74,9 @@ public class EnvoyMetricReceiverConfig extends ModuleConfig {
public ServiceMetaInfoFactory serviceMetaInfoFactory() {
return serviceMetaInfoFactory;
}
+
+ public Set<String> getIstioServiceEntryIgnoredNamespaces() {
+ final var s = Strings.nullToEmpty(istioServiceEntryIgnoredNamespaces);
+ return
Splitter.on(",").omitEmptyStrings().trimResults().splitToStream(s).collect(Collectors.toSet());
+ }
}
diff --git
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/istio/IstioServiceEntryRegistry.java
b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/istio/IstioServiceEntryRegistry.java
index 47da033887..a525c4fea5 100644
---
a/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/istio/IstioServiceEntryRegistry.java
+++
b/oap-server/server-receiver-plugin/envoy-metrics-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/envoy/als/istio/IstioServiceEntryRegistry.java
@@ -58,6 +58,8 @@ public class IstioServiceEntryRegistry {
serviceNameFormatter = new
ServiceNameFormatter(config.getIstioServiceNameRule());
+ final var ignoredNamespaces =
config.getIstioServiceEntryIgnoredNamespaces();
+
final var cacheBuilder =
CacheBuilder.newBuilder().expireAfterWrite(Duration.ofMinutes(3));
ipServiceMetaInfoMap = cacheBuilder.build(new CacheLoader<>() {
@@ -69,6 +71,7 @@ public class IstioServiceEntryRegistry {
.parallelStream()
.filter(se -> se.getMetadata() != null)
.filter(se -> se.getSpec() != null)
+ .filter(se ->
!ignoredNamespaces.contains(se.getMetadata().getNamespace()))
.filter(se -> {
final var spec = se.getSpec();
switch (spec.getResolution()) {
diff --git a/oap-server/server-starter/src/main/resources/application.yml
b/oap-server/server-starter/src/main/resources/application.yml
index 26d345372d..17681d8539 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -316,6 +316,12 @@ envoy-metric:
# Be careful, when using environment variables to pass this configuration,
use single quotes(`''`) to avoid it being evaluated by the shell.
k8sServiceNameRule:
${K8S_SERVICE_NAME_RULE:"${pod.metadata.labels.(service.istio.io/canonical-name)}"}
istioServiceNameRule:
${ISTIO_SERVICE_NAME_RULE:"${serviceEntry.metadata.name}"}
+ # When looking up service informations from the Istio ServiceEntries, some
+ # of the ServiceEntries might be created in several namespaces
automatically
+ # by some components, and OAP will randomly pick one of them to build the
+ # service name, users can use this config to exclude ServiceEntries that
+ # they don't want to be used. Comma separated.
+ istioServiceEntryIgnoredNamespaces:
${SW_ISTIO_SERVICE_ENTRY_IGNORED_NAMESPACES:""}
kafka-fetcher:
selector: ${SW_KAFKA_FETCHER:-}