aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java7
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java43
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java46
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java12
5 files changed, 111 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
index 11d3a48ee51..72eabafadf6 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java
@@ -83,6 +83,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
private boolean allowUserFilters = true;
private List<DataplaneToken> dataplaneTokens;
private int contentLayerMetadataFeatureLevel = 0;
+ private boolean logserverOtelCol = false;
@Override public ModelContext.FeatureFlags featureFlags() { return this; }
@Override public boolean multitenant() { return multitenant; }
@@ -139,6 +140,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
@Override public boolean allowUserFilters() { return allowUserFilters; }
@Override public List<DataplaneToken> dataplaneTokens() { return dataplaneTokens; }
@Override public int contentLayerMetadataFeatureLevel() { return contentLayerMetadataFeatureLevel; }
+ @Override public boolean logserverOtelCol() { return logserverOtelCol; }
public TestProperties sharedStringRepoNoReclaim(boolean sharedStringRepoNoReclaim) {
this.sharedStringRepoNoReclaim = sharedStringRepoNoReclaim;
@@ -369,6 +371,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea
return this;
}
+ public TestProperties setLogserverOtelCol(boolean logserverOtelCol) {
+ this.logserverOtelCol = logserverOtelCol;
+ return this;
+ }
+
public static class Spec implements ConfigServerSpec {
private final String hostName;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java
index 654c81f0519..629ce54d9dd 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogserverContainerCluster.java
@@ -5,6 +5,8 @@ import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.TreeConfigProducer;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.search.config.QrStartConfig;
+import com.yahoo.vespa.model.admin.otel.OpenTelemetryCollector;
+import com.yahoo.vespa.model.admin.otel.OpenTelemetryConfigGenerator;
import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.container.PlatformBundles;
import com.yahoo.vespa.model.container.component.Handler;
@@ -29,6 +31,7 @@ public class LogserverContainerCluster extends ContainerCluster<LogserverContain
setJvmGCOptions(deployState.getProperties().jvmGCOptions(Optional.of(ClusterSpec.Type.admin)));
if (isHostedVespa())
addAccessLog(getName());
+
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java
new file mode 100644
index 00000000000..71e2a670034
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryCollector.java
@@ -0,0 +1,43 @@
+// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.admin.otel;
+
+import com.yahoo.cloud.config.OpenTelemetryConfig;
+import com.yahoo.config.model.producer.TreeConfigProducer;
+import com.yahoo.vespa.model.AbstractService;
+import com.yahoo.vespa.model.PortAllocBridge;
+
+import java.util.Optional;
+
+public class OpenTelemetryCollector extends AbstractService implements OpenTelemetryConfig.Producer {
+
+ private final String config;
+
+ public OpenTelemetryCollector(TreeConfigProducer<?> parent, String config) {
+ super(parent, "otelcol");
+ setProp("clustertype", "admin");
+ setProp("clustername", "admin");
+ this.config = config;
+ }
+
+ /**
+ * @return the startup command for the otelcol wrapper
+ */
+ @Override
+ public Optional<String> getStartupCommand() {
+ return Optional.of("exec $ROOT/bin/vespa-otelcol-start");
+ }
+
+
+ @Override
+ public void allocatePorts(int start, PortAllocBridge from) {}
+
+ @Override
+ public int getPortCount() {
+ return 0;
+ }
+
+ @Override
+ public void getConfig(OpenTelemetryConfig.Builder builder) {
+ builder.config(config);
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java
new file mode 100644
index 00000000000..7d18cf36f58
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/otel/OpenTelemetryConfigGenerator.java
@@ -0,0 +1,46 @@
+// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.admin.otel;
+
+/**
+ * @author olaa
+ */
+public class OpenTelemetryConfigGenerator {
+
+ // For now - just create dummy config
+ /*
+ TODO: Create config
+ 1. polling /state/v1 handler of every service
+ 2. Processing with mapping/filtering from metric sets
+ 3. Exporter to correct endpoint (alternatively amended)
+ */
+ public static String generate() {
+
+ return """
+ receivers:
+ prometheus_simple:
+ collection_interval: 60s
+ endpoint: 'localhost:4080'
+ metrics_path: '/state/v1/metrics
+ params:
+ format: 'prometheus'
+ tls:
+ ca_file: '/opt/vespa/var/vespa//trust-store.pem'
+ cert_file: '/var/lib/sia/certs/vespa.external.cd.tenant.cert.pem'
+ insecure_skip_verify: true
+ key_file: '/var/lib/sia/keys/vespa.external.cd.tenant.key.pem'
+ exporters:
+ file:
+ path: /opt/vespa/logs/vespa/otel-test.json
+ rotation:
+ max_megabytes: 10
+ max_days: 3
+ max_backups: 1
+ service:
+ pipelines:
+ metrics:
+ receivers: [ prometheus_simple ]
+ processors: [ ]
+ exporters: [ file ]
+ """;
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
index f722cf375f3..79866980170 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.builder.xml.dom;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.model.api.ConfigServerSpec;
import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.config.model.producer.TreeConfigProducer;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.vespa.model.HostResource;
import com.yahoo.vespa.model.HostSystem;
@@ -12,6 +13,8 @@ import com.yahoo.vespa.model.admin.Logserver;
import com.yahoo.vespa.model.admin.LogserverContainer;
import com.yahoo.vespa.model.admin.LogserverContainerCluster;
import com.yahoo.vespa.model.admin.Slobrok;
+import com.yahoo.vespa.model.admin.otel.OpenTelemetryCollector;
+import com.yahoo.vespa.model.admin.otel.OpenTelemetryConfigGenerator;
import com.yahoo.vespa.model.container.Container;
import com.yahoo.vespa.model.container.ContainerModel;
import org.w3c.dom.Element;
@@ -113,9 +116,18 @@ public class DomAdminV4Builder extends DomAdminBuilderBase {
logServerCluster.addContainer(container);
admin.addAndInitializeService(deployState, hostResource, container);
admin.setLogserverContainerCluster(logServerCluster);
+ if (deployState.featureFlags().logserverOtelCol())
+ addOtelcol(admin, deployState, hostResource);
context.getConfigModelRepoAdder().add(logserverClusterModel);
}
+
+ private void addOtelcol(TreeConfigProducer<?> parent, DeployState deployState, HostResource hostResource) {
+ var otelcol = new OpenTelemetryCollector(parent, OpenTelemetryConfigGenerator.generate());
+ otelcol.setHostResource(hostResource);
+ otelcol.initService(deployState);
+ }
+
private Collection<HostResource> allocateHosts(HostSystem hostSystem, String clusterId, NodesSpecification nodesSpecification) {
return nodesSpecification.provision(hostSystem,
ClusterSpec.Type.admin,