diff options
author | Ola Aunronning <olaa@yahooinc.com> | 2024-04-08 13:52:44 +0200 |
---|---|---|
committer | Arne Juul <arnej@vespa.ai> | 2024-04-12 14:14:10 +0000 |
commit | 1e51fba9cbf5c7bd2480a9df7de56287ec82d848 (patch) | |
tree | 63662bf32c6d302c3f80135bafff07755675889e /config-model/src/main/java/com/yahoo/vespa | |
parent | ba03495a7e60872ca3ab1f5e8c915df4921f5c5e (diff) |
Otel on logserver WIP
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa')
4 files changed, 104 insertions, 0 deletions
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, |