From e37e626eeba9bca7ab96213da1925963aa7be49e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Kie=C5=82kowicz?= Date: Wed, 14 Feb 2024 16:47:54 +0100 Subject: [PATCH 01/12] [cartservice] Bump .NET to 8.0.2 (#1380) * [cartservice] bump dependencies * [cartservice] Bump .NET to 8.0.2 * changelog --- CHANGELOG.md | 2 ++ src/cartservice/src/Dockerfile | 4 ++-- src/cartservice/src/cartservice.csproj | 10 +++++----- src/cartservice/tests/cartservice.tests.csproj | 6 +++--- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b36f98a2df..c4a00c9836 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,8 @@ the release. ([#1363](https://github.com/open-telemetry/opentelemetry-demo/pull/1363)) * [tests] update trace based tests for semantic conventions ([#1377](https://github.com/open-telemetry/opentelemetry-demo/pull/1377)) +* [cartservice] update .NET to .NET 8.0.2 + ([#1380](https://github.com/open-telemetry/opentelemetry-demo/pull/1380)) ## 1.7.2 diff --git a/src/cartservice/src/Dockerfile b/src/cartservice/src/Dockerfile index d799647ff5..ec3960d9a1 100644 --- a/src/cartservice/src/Dockerfile +++ b/src/cartservice/src/Dockerfile @@ -15,7 +15,7 @@ # limitations under the License. # https://mcr.microsoft.com/v2/dotnet/sdk/tags/list -FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0.101 AS builder +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0.200 AS builder ARG TARGETARCH WORKDIR /usr/src/app/ @@ -30,7 +30,7 @@ RUN dotnet publish ./src/cartservice.csproj -v d -r linux-musl-$TARGETARCH --no- # ----------------------------------------------------------------------------- # https://mcr.microsoft.com/v2/dotnet/runtime-deps/tags/list -FROM mcr.microsoft.com/dotnet/runtime-deps:8.0.1-alpine3.18 +FROM mcr.microsoft.com/dotnet/runtime-deps:8.0.2-alpine3.18 WORKDIR /usr/src/app/ COPY --from=builder /cartservice/ ./ diff --git a/src/cartservice/src/cartservice.csproj b/src/cartservice/src/cartservice.csproj index 61f54bc803..4e24809a75 100644 --- a/src/cartservice/src/cartservice.csproj +++ b/src/cartservice/src/cartservice.csproj @@ -14,14 +14,14 @@ - - - + + + - - + + diff --git a/src/cartservice/tests/cartservice.tests.csproj b/src/cartservice/tests/cartservice.tests.csproj index ce5d2a9e8e..707d436391 100644 --- a/src/cartservice/tests/cartservice.tests.csproj +++ b/src/cartservice/tests/cartservice.tests.csproj @@ -6,9 +6,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive From 371b36f0d7f4e115731e2d31728ebfc60d006c7a Mon Sep 17 00:00:00 2001 From: Mike Dame Date: Thu, 15 Feb 2024 02:10:56 -0500 Subject: [PATCH 02/12] Add Google Cloud fork to demos list (#1381) --- README.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9fe57d9721..6f7d05fd39 100644 --- a/README.md +++ b/README.md @@ -56,15 +56,16 @@ keeping it up to date for you. | | | | |-----------------------------------------|-----------------------------|----------------------------------------------------------------| -| [AlibabaCloud LogService][AlibabaCloud] | [Elastic][Elastic] | [OpenSearch][OpenSearch] | -| [AppDynamics][AppDynamics] | [Grafana Labs][GrafanaLabs] | [Sentry][Sentry] | -| [Aspecto][Aspecto] | [Guance][Guance] | [ServiceNow Cloud Observability][ServiceNowCloudObservability] | -| [Axiom][Axiom] | [Helios][Helios] | [Splunk][Splunk] | -| [Axoflow][Axoflow] | [Honeycomb.io][Honeycombio] | [Sumo Logic][SumoLogic] | -| [Azure Data Explorer][Azure] | [Instana][Instana] | [TelemetryHub][TelemetryHub] | -| [Coralogix][Coralogix] | [Kloudfuse][Kloudfuse] | [Teletrace][Teletrace] | -| [Datadog][Datadog] | [Logz.io][Logzio] | [Tracetest][Tracetest] | -| [Dynatrace][Dynatrace] | [New Relic][NewRelic] | [Uptrace][Uptrace] | +| [AlibabaCloud LogService][AlibabaCloud] | [Google Cloud][GoogleCloud] | [Sentry][Sentry] | +| [AppDynamics][AppDynamics] | [Grafana Labs][GrafanaLabs] | [ServiceNow Cloud Observability][ServiceNowCloudObservability] | +| [Aspecto][Aspecto] | [Guance][Guance] | [Splunk][Splunk] | +| [Axiom][Axiom] | [Helios][Helios] | [Sumo Logic][SumoLogic] | +| [Axoflow][Axoflow] | [Honeycomb.io][Honeycombio] | [TelemetryHub][TelemetryHub] | +| [Azure Data Explorer][Azure] | [Instana][Instana] | [Teletrace][Teletrace] | +| [Coralogix][Coralogix] | [Kloudfuse][Kloudfuse] | [Tracetest][Tracetest] | +| [Datadog][Datadog] | [Logz.io][Logzio] | [Uptrace][Uptrace] | +| [Dynatrace][Dynatrace] | [New Relic][NewRelic] | | +| [Elastic][Elastic] | [OpenSearch][OpenSearch] | | ## Contributing @@ -114,6 +115,7 @@ Emeritus: [Datadog]: https://github.com/DataDog/opentelemetry-demo [Dynatrace]: https://www.dynatrace.com/news/blog/opentelemetry-demo-application-with-dynatrace/ [Elastic]: https://github.com/elastic/opentelemetry-demo +[GoogleCloud]: https://github.com/GoogleCloudPlatform/opentelemetry-demo [GrafanaLabs]: https://github.com/grafana/opentelemetry-demo [Guance]: https://github.com/GuanceCloud/opentelemetry-demo [Helios]: https://otelsandbox.gethelios.dev From 816ee5a53286fb060a689a94a3b0973b43da7202 Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Fri, 16 Feb 2024 17:56:23 +0100 Subject: [PATCH 03/12] [currencyservice] Add OTLP logs (#1378) * Add OTel logs to currencyservice * line break * changelog * Move OPENTELEMETRY_CPP_VERSION back * set opensearch version and timestamp field Signed-off-by: Pierre Tessier * add comment for opensearch version update Signed-off-by: Pierre Tessier * Change log to INFO --------- Signed-off-by: Pierre Tessier Co-authored-by: Pierre Tessier --- .env | 1 + CHANGELOG.md | 2 ++ docker-compose.minimal.yml | 4 +-- docker-compose.yml | 4 +-- src/currencyservice/src/logger_common.h | 35 +++++++++++++++++++ src/currencyservice/src/meter_common.h | 10 +----- src/currencyservice/src/server.cpp | 27 +++++++++----- .../provisioning/datasources/opensearch.yaml | 3 +- 8 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 src/currencyservice/src/logger_common.h diff --git a/.env b/.env index 29b9118758..dbddebf4fa 100644 --- a/.env +++ b/.env @@ -8,6 +8,7 @@ IMAGE_NAME=ghcr.io/open-telemetry/demo COLLECTOR_CONTRIB_IMAGE=otel/opentelemetry-collector-contrib:0.93.0 GRAFANA_IMAGE=grafana/grafana:10.3.1 JAEGERTRACING_IMAGE=jaegertracing/all-in-one:1.53 +# must also update version field in /src/grafana/provisioning/datasources/opensearch.yml OPENSEARCH_IMAGE=opensearchproject/opensearch:2.11.1 POSTGRES_IMAGE=postgres:16.1 PROMETHEUS_IMAGE=quay.io/prometheus/prometheus:v2.49.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index c4a00c9836..3747121921 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,8 @@ the release. ([#1363](https://github.com/open-telemetry/opentelemetry-demo/pull/1363)) * [tests] update trace based tests for semantic conventions ([#1377](https://github.com/open-telemetry/opentelemetry-demo/pull/1377)) +* [currencyservice] Add OTLP logs + ([#1378](https://github.com/open-telemetry/opentelemetry-demo/pull/1378)) * [cartservice] update .NET to .NET 8.0.2 ([#1380](https://github.com/open-telemetry/opentelemetry-demo/pull/1380)) diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index d7cdabb43b..54c37e4764 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -129,9 +129,6 @@ services: context: ./src/currencyservice cache_from: - ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice - args: - - GRPC_VERSION=1.46.0 - - OPENTELEMETRY_VERSION=1.5.0 deploy: resources: limits: @@ -141,6 +138,7 @@ services: - "${CURRENCY_SERVICE_PORT}" environment: - CURRENCY_SERVICE_PORT + - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index 4eaabc52bd..af86a0635d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -160,9 +160,6 @@ services: context: ./src/currencyservice cache_from: - ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice - args: - - GRPC_VERSION=1.46.0 - - OPENTELEMETRY_VERSION=1.5.0 deploy: resources: limits: @@ -172,6 +169,7 @@ services: - "${CURRENCY_SERVICE_PORT}" environment: - CURRENCY_SERVICE_PORT + - VERSION=${IMAGE_VERSION} - OTEL_EXPORTER_OTLP_ENDPOINT - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME depends_on: diff --git a/src/currencyservice/src/logger_common.h b/src/currencyservice/src/logger_common.h new file mode 100644 index 0000000000..cd58165580 --- /dev/null +++ b/src/currencyservice/src/logger_common.h @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h" +#include "opentelemetry/logs/provider.h" +#include "opentelemetry/sdk/logs/logger.h" +#include "opentelemetry/sdk/logs/logger_provider_factory.h" +#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h" +#include "opentelemetry/sdk/logs/logger_context_factory.h" +#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h" + +using namespace std; +namespace nostd = opentelemetry::nostd; +namespace otlp = opentelemetry::exporter::otlp; +namespace logs = opentelemetry::logs; +namespace logs_sdk = opentelemetry::sdk::logs; + +namespace +{ + void initLogger() { + otlp::OtlpGrpcLogRecordExporterOptions loggerOptions; + auto exporter = otlp::OtlpGrpcLogRecordExporterFactory::Create(loggerOptions); + auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter)); + std::vector> processors; + processors.push_back(std::move(processor)); + auto context = logs_sdk::LoggerContextFactory::Create(std::move(processors)); + std::shared_ptr provider = logs_sdk::LoggerProviderFactory::Create(std::move(context)); + opentelemetry::logs::Provider::SetLoggerProvider(provider); + } + + nostd::shared_ptr getLogger(std::string name){ + auto provider = logs::Provider::GetLoggerProvider(); + return provider->GetLogger(name + "_logger", name, OPENTELEMETRY_SDK_VERSION); + } +} diff --git a/src/currencyservice/src/meter_common.h b/src/currencyservice/src/meter_common.h index 61ae118994..72f86f4695 100644 --- a/src/currencyservice/src/meter_common.h +++ b/src/currencyservice/src/meter_common.h @@ -16,22 +16,14 @@ namespace otlp_exporter = opentelemetry::exporter::otlp; namespace { - std::string version{ "1.3.0" }; - std::string name{ "app_currency" }; - std::string schema{ "https://opentelemetry.io/schemas/1.2.0" }; - void initMeter() { // Build MetricExporter otlp_exporter::OtlpGrpcMetricExporterOptions otlpOptions; - // Configuration via environment variable not supported yet - //otlpOptions.aggregation_temporality = otlp_exporter::PreferredAggregationTemporality::kCumulative; auto exporter = otlp_exporter::OtlpGrpcMetricExporterFactory::Create(otlpOptions); // Build MeterProvider and Reader metric_sdk::PeriodicExportingMetricReaderOptions options; - //options.export_interval_millis = std::chrono::milliseconds(60000); - //options.export_timeout_millis = std::chrono::milliseconds(30000); std::unique_ptr reader{ new metric_sdk::PeriodicExportingMetricReader(std::move(exporter), options) }; auto provider = std::shared_ptr(new metric_sdk::MeterProvider()); @@ -40,7 +32,7 @@ namespace metrics_api::Provider::SetMeterProvider(provider); } - nostd::unique_ptr> initIntCounter() + nostd::unique_ptr> initIntCounter(std::string name, std::string version) { std::string counter_name = name + "_counter"; auto provider = metrics_api::Provider::GetMeterProvider(); diff --git a/src/currencyservice/src/server.cpp b/src/currencyservice/src/server.cpp index 26b07a6524..e824e9ff39 100644 --- a/src/currencyservice/src/server.cpp +++ b/src/currencyservice/src/server.cpp @@ -1,6 +1,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#include #include #include #include @@ -11,6 +12,7 @@ #include "opentelemetry/trace/span_context_kv_iterable_view.h" #include "opentelemetry/baggage/baggage.h" #include "opentelemetry/nostd/string_view.h" +#include "logger_common.h" #include "meter_common.h" #include "tracer_common.h" @@ -80,7 +82,11 @@ namespace {"ZAR", 16.0583}, }; + std::string version = std::getenv("VERSION"); + std::string name{ "currencyservice" }; + nostd::unique_ptr> currency_counter; + nostd::shared_ptr logger; class HealthServer final : public grpc::health::v1::Health::Service { @@ -127,10 +133,11 @@ class CurrencyService final : public oteldemo::CurrencyService::Service span->AddEvent("Currencies fetched, response sent back"); span->SetStatus(StatusCode::kOk); + + logger->Info(std::string(__func__) + " successful"); + // Make sure to end your spans! span->End(); - - std::cout << __func__ << " successful" << std::endl; return Status::OK; } @@ -203,14 +210,18 @@ class CurrencyService final : public oteldemo::CurrencyService::Service // End the span span->AddEvent("Conversion successful, response sent back"); span->SetStatus(StatusCode::kOk); - std::cout << __func__ << " conversion successful" << std::endl; + + logger->Info(std::string(__func__) + " conversion successful"); + span->End(); return Status::OK; } catch(...) { span->AddEvent("Conversion failed"); span->SetStatus(StatusCode::kError); - std::cout << __func__ << " conversion failure" << std::endl; + + logger->Error(std::string(__func__) + " conversion failure"); + span->End(); return Status::CANCELLED; } @@ -237,7 +248,7 @@ void RunServer(uint16_t port) builder.AddListeningPort(address, grpc::InsecureServerCredentials()); std::unique_ptr server(builder.BuildAndStart()); - std::cout << "Currency Server listening on port: " << address << std::endl; + logger->Info("Currency Server listening on port: " + address); server->Wait(); server->Shutdown(); } @@ -252,11 +263,11 @@ int main(int argc, char **argv) { uint16_t port = atoi(argv[1]); - std::cout << "Port: " << port << "\n"; - initTracer(); initMeter(); - currency_counter = initIntCounter(); + initLogger(); + currency_counter = initIntCounter(name, version); + logger = getLogger(name); RunServer(port); return 0; diff --git a/src/grafana/provisioning/datasources/opensearch.yaml b/src/grafana/provisioning/datasources/opensearch.yaml index 1de083338b..a6c085b122 100644 --- a/src/grafana/provisioning/datasources/opensearch.yaml +++ b/src/grafana/provisioning/datasources/opensearch.yaml @@ -16,4 +16,5 @@ datasources: logLevelField: severity logMessageField: body pplEnabled: true - timeField: "@timestamp" + timeField: observedTimestamp + version: 2.11.1 From 9d77fdfad7c83eb1af12ee6a830dad41117cba69 Mon Sep 17 00:00:00 2001 From: Austin Parker Date: Fri, 16 Feb 2024 15:15:10 -0500 Subject: [PATCH 04/12] prep for release (#1379) --- .env | 2 +- CHANGELOG.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.env b/.env index dbddebf4fa..ff341e49af 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ # Demo App version -IMAGE_VERSION=1.7.2 +IMAGE_VERSION=1.8.0 IMAGE_NAME=ghcr.io/open-telemetry/demo # Dependent images diff --git a/CHANGELOG.md b/CHANGELOG.md index 3747121921..00c4f09336 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ the release. ## Unreleased +## 1.8.0 + * [grafana] update grafana to 10.2.3 ([#1332](https://github.com/open-telemetry/opentelemetry-demo/pull/1332)) * [frontendproxy] Enable envoy environment resource detector From e8e355386bfd173c08dbe5c9597aed38701c210d Mon Sep 17 00:00:00 2001 From: Lam Tran Date: Mon, 19 Feb 2024 22:59:07 +0700 Subject: [PATCH 05/12] refactor(checkoutservice): reuse grpc service client (#1387) --- src/checkoutservice/main.go | 97 ++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 51 deletions(-) diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index b06bd44c0a..91b3c64da3 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -124,7 +124,13 @@ type checkoutService struct { paymentSvcAddr string kafkaBrokerSvcAddr string pb.UnimplementedCheckoutServiceServer - KafkaProducerClient sarama.AsyncProducer + KafkaProducerClient sarama.AsyncProducer + shippingSvcClient pb.ShippingServiceClient + productCatalogSvcClient pb.ProductCatalogServiceClient + cartSvcClient pb.CartServiceClient + currencySvcClient pb.CurrencyServiceClient + emailSvcClient pb.EmailServiceClient + paymentSvcClient pb.PaymentServiceClient } func main() { @@ -153,12 +159,37 @@ func main() { tracer = tp.Tracer("checkoutservice") svc := new(checkoutService) + mustMapEnv(&svc.shippingSvcAddr, "SHIPPING_SERVICE_ADDR") + c := mustCreateClient(context.Background(), svc.shippingSvcAddr) + svc.shippingSvcClient = pb.NewShippingServiceClient(c) + defer c.Close() + mustMapEnv(&svc.productCatalogSvcAddr, "PRODUCT_CATALOG_SERVICE_ADDR") + c = mustCreateClient(context.Background(), svc.productCatalogSvcAddr) + svc.productCatalogSvcClient = pb.NewProductCatalogServiceClient(c) + defer c.Close() + mustMapEnv(&svc.cartSvcAddr, "CART_SERVICE_ADDR") + c = mustCreateClient(context.Background(), svc.cartSvcAddr) + svc.cartSvcClient = pb.NewCartServiceClient(c) + defer c.Close() + mustMapEnv(&svc.currencySvcAddr, "CURRENCY_SERVICE_ADDR") + c = mustCreateClient(context.Background(), svc.currencySvcAddr) + svc.currencySvcClient = pb.NewCurrencyServiceClient(c) + defer c.Close() + mustMapEnv(&svc.emailSvcAddr, "EMAIL_SERVICE_ADDR") + c = mustCreateClient(context.Background(), svc.emailSvcAddr) + svc.emailSvcClient = pb.NewEmailServiceClient(c) + defer c.Close() + mustMapEnv(&svc.paymentSvcAddr, "PAYMENT_SERVICE_ADDR") + c = mustCreateClient(context.Background(), svc.paymentSvcAddr) + svc.paymentSvcClient = pb.NewPaymentServiceClient(c) + defer c.Close() + svc.kafkaBrokerSvcAddr = os.Getenv("KAFKA_SERVICE_ADDR") if svc.kafkaBrokerSvcAddr != "" { @@ -334,21 +365,20 @@ func (cs *checkoutService) prepareOrderItemsAndShippingQuoteFromCart(ctx context return out, nil } -func createClient(ctx context.Context, svcAddr string) (*grpc.ClientConn, error) { - return grpc.DialContext(ctx, svcAddr, +func mustCreateClient(ctx context.Context, svcAddr string) *grpc.ClientConn { + c, err := grpc.DialContext(ctx, svcAddr, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithStatsHandler(otelgrpc.NewClientHandler()), ) -} - -func (cs *checkoutService) quoteShipping(ctx context.Context, address *pb.Address, items []*pb.CartItem) (*pb.Money, error) { - conn, err := createClient(ctx, cs.shippingSvcAddr) if err != nil { - return nil, fmt.Errorf("could not connect shipping service: %+v", err) + log.Fatalf("could not connect to %s service, err: %+v", svcAddr, err) } - defer conn.Close() - shippingQuote, err := pb.NewShippingServiceClient(conn). + return c +} + +func (cs *checkoutService) quoteShipping(ctx context.Context, address *pb.Address, items []*pb.CartItem) (*pb.Money, error) { + shippingQuote, err := cs.shippingSvcClient. GetQuote(ctx, &pb.GetQuoteRequest{ Address: address, Items: items}) @@ -359,13 +389,7 @@ func (cs *checkoutService) quoteShipping(ctx context.Context, address *pb.Addres } func (cs *checkoutService) getUserCart(ctx context.Context, userID string) ([]*pb.CartItem, error) { - conn, err := createClient(ctx, cs.cartSvcAddr) - if err != nil { - return nil, fmt.Errorf("could not connect cart service: %+v", err) - } - defer conn.Close() - - cart, err := pb.NewCartServiceClient(conn).GetCart(ctx, &pb.GetCartRequest{UserId: userID}) + cart, err := cs.cartSvcClient.GetCart(ctx, &pb.GetCartRequest{UserId: userID}) if err != nil { return nil, fmt.Errorf("failed to get user cart during checkout: %+v", err) } @@ -373,13 +397,7 @@ func (cs *checkoutService) getUserCart(ctx context.Context, userID string) ([]*p } func (cs *checkoutService) emptyUserCart(ctx context.Context, userID string) error { - conn, err := createClient(ctx, cs.cartSvcAddr) - if err != nil { - return fmt.Errorf("could not connect cart service: %+v", err) - } - defer conn.Close() - - if _, err = pb.NewCartServiceClient(conn).EmptyCart(ctx, &pb.EmptyCartRequest{UserId: userID}); err != nil { + if _, err := cs.cartSvcClient.EmptyCart(ctx, &pb.EmptyCartRequest{UserId: userID}); err != nil { return fmt.Errorf("failed to empty user cart during checkout: %+v", err) } return nil @@ -388,15 +406,8 @@ func (cs *checkoutService) emptyUserCart(ctx context.Context, userID string) err func (cs *checkoutService) prepOrderItems(ctx context.Context, items []*pb.CartItem, userCurrency string) ([]*pb.OrderItem, error) { out := make([]*pb.OrderItem, len(items)) - conn, err := createClient(ctx, cs.productCatalogSvcAddr) - if err != nil { - return nil, fmt.Errorf("could not connect product catalog service: %+v", err) - } - defer conn.Close() - cl := pb.NewProductCatalogServiceClient(conn) - for i, item := range items { - product, err := cl.GetProduct(ctx, &pb.GetProductRequest{Id: item.GetProductId()}) + product, err := cs.productCatalogSvcClient.GetProduct(ctx, &pb.GetProductRequest{Id: item.GetProductId()}) if err != nil { return nil, fmt.Errorf("failed to get product #%q", item.GetProductId()) } @@ -412,12 +423,7 @@ func (cs *checkoutService) prepOrderItems(ctx context.Context, items []*pb.CartI } func (cs *checkoutService) convertCurrency(ctx context.Context, from *pb.Money, toCurrency string) (*pb.Money, error) { - conn, err := createClient(ctx, cs.currencySvcAddr) - if err != nil { - return nil, fmt.Errorf("could not connect currency service: %+v", err) - } - defer conn.Close() - result, err := pb.NewCurrencyServiceClient(conn).Convert(ctx, &pb.CurrencyConversionRequest{ + result, err := cs.currencySvcClient.Convert(ctx, &pb.CurrencyConversionRequest{ From: from, ToCode: toCurrency}) if err != nil { @@ -427,13 +433,7 @@ func (cs *checkoutService) convertCurrency(ctx context.Context, from *pb.Money, } func (cs *checkoutService) chargeCard(ctx context.Context, amount *pb.Money, paymentInfo *pb.CreditCardInfo) (string, error) { - conn, err := createClient(ctx, cs.paymentSvcAddr) - if err != nil { - return "", fmt.Errorf("failed to connect payment service: %+v", err) - } - defer conn.Close() - - paymentResp, err := pb.NewPaymentServiceClient(conn).Charge(ctx, &pb.ChargeRequest{ + paymentResp, err := cs.paymentSvcClient.Charge(ctx, &pb.ChargeRequest{ Amount: amount, CreditCard: paymentInfo}) if err != nil { @@ -465,12 +465,7 @@ func (cs *checkoutService) sendOrderConfirmation(ctx context.Context, email stri } func (cs *checkoutService) shipOrder(ctx context.Context, address *pb.Address, items []*pb.CartItem) (string, error) { - conn, err := createClient(ctx, cs.shippingSvcAddr) - if err != nil { - return "", fmt.Errorf("failed to connect email service: %+v", err) - } - defer conn.Close() - resp, err := pb.NewShippingServiceClient(conn).ShipOrder(ctx, &pb.ShipOrderRequest{ + resp, err := cs.shippingSvcClient.ShipOrder(ctx, &pb.ShipOrderRequest{ Address: address, Items: items}) if err != nil { From 6eab783cc005fdfb1db646acef4576d1009624a4 Mon Sep 17 00:00:00 2001 From: Lam Tran Date: Mon, 19 Feb 2024 23:55:10 +0700 Subject: [PATCH 06/12] chore: use semantic convention v1.24.0 (#1385) * chore(accountingservice): use semantic convention v1.24.0 * chore(checkoutservice): use semantic convention v1.24.0 --------- Co-authored-by: Austin Parker --- src/accountingservice/kafka/trace_interceptor.go | 8 ++++---- src/checkoutservice/main.go | 7 +++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/accountingservice/kafka/trace_interceptor.go b/src/accountingservice/kafka/trace_interceptor.go index 44110a5c17..16899a5891 100644 --- a/src/accountingservice/kafka/trace_interceptor.go +++ b/src/accountingservice/kafka/trace_interceptor.go @@ -9,7 +9,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/propagation" - semconv "go.opentelemetry.io/otel/semconv/v1.21.0" + semconv "go.opentelemetry.io/otel/semconv/v1.24.0" "go.opentelemetry.io/otel/trace" "github.com/IBM/sarama" @@ -27,9 +27,9 @@ func NewOTelInterceptor(groupID string) *OTelInterceptor { oi.tracer = otel.Tracer("github.com/open-telemetry/opentelemetry-demo/accountingservice/sarama") oi.fixedAttrs = []attribute.KeyValue{ - semconv.MessagingSystem("kafka"), + semconv.MessagingSystemKafka, semconv.MessagingKafkaConsumerGroup(groupID), - semconv.NetTransportTCP, + semconv.NetworkTransportTCP, } return &oi } @@ -52,7 +52,7 @@ func (oi *OTelInterceptor) OnConsume(msg *sarama.ConsumerMessage) { trace.WithAttributes( semconv.MessagingDestinationName(msg.Topic), semconv.MessagingKafkaMessageOffset(int(msg.Offset)), - semconv.MessagingMessagePayloadSizeBytes(len(msg.Value)), + semconv.MessagingMessageBodySize(len(msg.Value)), semconv.MessagingOperationReceive, semconv.MessagingKafkaDestinationPartition(int(msg.Partition)), ), diff --git a/src/checkoutservice/main.go b/src/checkoutservice/main.go index 91b3c64da3..687b7e307b 100644 --- a/src/checkoutservice/main.go +++ b/src/checkoutservice/main.go @@ -7,7 +7,7 @@ import ( "context" "encoding/json" "fmt" - semconv "go.opentelemetry.io/otel/semconv/v1.19.0" + semconv "go.opentelemetry.io/otel/semconv/v1.24.0" "net" "net/http" "os" @@ -502,9 +502,8 @@ func createProducerSpan(ctx context.Context, msg *sarama.ProducerMessage) trace. trace.WithSpanKind(trace.SpanKindProducer), trace.WithAttributes( semconv.PeerService("kafka"), - semconv.NetTransportTCP, - semconv.MessagingSystem("kafka"), - semconv.MessagingDestinationKindTopic, + semconv.NetworkTransportTCP, + semconv.MessagingSystemKafka, semconv.MessagingDestinationName(msg.Topic), semconv.MessagingOperationPublish, semconv.MessagingKafkaDestinationPartition(int(msg.Partition)), From 59e0528f997800c2a4c81999b43c8fc6b78c099a Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Mon, 19 Feb 2024 18:12:01 +0100 Subject: [PATCH 07/12] bump dependencies (#1390) --- src/quoteservice/Dockerfile | 4 ++-- src/quoteservice/composer.json | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/quoteservice/Dockerfile b/src/quoteservice/Dockerfile index 9f3079969a..f1ab3956be 100644 --- a/src/quoteservice/Dockerfile +++ b/src/quoteservice/Dockerfile @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -FROM php:8.2-cli as base +FROM php:8.3-cli as base ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions \ @@ -17,7 +17,7 @@ CMD php public/index.php USER www-data EXPOSE ${QUOTE_SERVICE_PORT} -FROM composer:2.6 AS vendor +FROM composer:2.7 AS vendor WORKDIR /tmp/ COPY ./src/quoteservice/composer.json . diff --git a/src/quoteservice/composer.json b/src/quoteservice/composer.json index 130fd1f910..83386dc0ba 100644 --- a/src/quoteservice/composer.json +++ b/src/quoteservice/composer.json @@ -3,17 +3,17 @@ "description": "Quote Service part of OpenTelemetry Demo", "license": "Apache-2.0", "require": { - "php": ">= 8.2", + "php": ">= 8.3", "ext-json": "*", "ext-pcntl": "*", "monolog/monolog": "3.5.0", - "open-telemetry/api": "1.0.0", - "open-telemetry/sdk": "1.0.0", - "open-telemetry/exporter-otlp": "1.0.0", - "open-telemetry/opentelemetry-auto-slim": "1.0.0", + "open-telemetry/api": "1.0.3", + "open-telemetry/sdk": "1.0.8", + "open-telemetry/exporter-otlp": "1.0.3", + "open-telemetry/opentelemetry-auto-slim": "1.0.4", "open-telemetry/detector-container": "1.0.0", "open-telemetry/opentelemetry-logger-monolog": "1.0.0", - "guzzlehttp/guzzle": "7.8.0", + "guzzlehttp/guzzle": "7.8.1", "php-di/php-di": "7.0.6", "php-di/slim-bridge": "3.4.0", "php-http/guzzle7-adapter": "1.0.0", From 64eb66e09976eefe2aba54be63556c9ace8ff9fb Mon Sep 17 00:00:00 2001 From: Juliano Costa Date: Tue, 20 Feb 2024 23:18:14 +0100 Subject: [PATCH 08/12] Update trace test sem conv (#1394) --- .env | 2 +- test/tracetesting/checkout-service/place-order.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env b/.env index ff341e49af..1ca16c7928 100644 --- a/.env +++ b/.env @@ -13,7 +13,7 @@ OPENSEARCH_IMAGE=opensearchproject/opensearch:2.11.1 POSTGRES_IMAGE=postgres:16.1 PROMETHEUS_IMAGE=quay.io/prometheus/prometheus:v2.49.1 REDIS_IMAGE=redis:7.2-alpine -TRACETEST_IMAGE_VERSION=v0.14.5 +TRACETEST_IMAGE_VERSION=v0.15.8 TRACETEST_IMAGE=kubeshop/tracetest:${TRACETEST_IMAGE_VERSION} # Demo Platform diff --git a/test/tracetesting/checkout-service/place-order.yaml b/test/tracetesting/checkout-service/place-order.yaml index 6334fc883a..29ab057b98 100644 --- a/test/tracetesting/checkout-service/place-order.yaml +++ b/test/tracetesting/checkout-service/place-order.yaml @@ -45,6 +45,6 @@ spec: assertions: - attr:rpc.grpc.status_code = 0 - name: It sends an order to be processed asyncronously - selector: span[tracetest.span.type="messaging" name="orders publish" messaging.system="kafka" messaging.destination.name="orders" messaging.destination.kind="topic" messaging.operation="publish"] + selector: span[tracetest.span.type="messaging" name="orders publish" kind="producer" messaging.system="kafka" messaging.destination.name="orders" messaging.operation="publish"] assertions: - attr:messaging.destination.name = "orders" From 6f38f5f4407653e221dab99fd0fb577c832e628c Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Tue, 20 Feb 2024 22:21:36 -0500 Subject: [PATCH 09/12] update to 1.8.0 release (#1395) Signed-off-by: Pierre Tessier --- kubernetes/opentelemetry-demo.yaml | 555 ++++++++++++++++++++++------- 1 file changed, 431 insertions(+), 124 deletions(-) diff --git a/kubernetes/opentelemetry-demo.yaml b/kubernetes/opentelemetry-demo.yaml index 54827c14bb..2b42d665f5 100644 --- a/kubernetes/opentelemetry-demo.yaml +++ b/kubernetes/opentelemetry-demo.yaml @@ -7,6 +7,23 @@ kind: Namespace metadata: name: otel-demo --- +# Source: opentelemetry-demo/charts/opensearch/templates/poddisruptionbudget.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: "otel-demo-opensearch-pdb" + labels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + app.kubernetes.io/version: "2.11.1" + app.kubernetes.io/component: otel-demo-opensearch +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo +--- # Source: opentelemetry-demo/charts/grafana/templates/serviceaccount.yaml apiVersion: v1 kind: ServiceAccount @@ -14,7 +31,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" name: opentelemetry-demo-grafana namespace: otel-demo --- @@ -26,7 +43,7 @@ metadata: labels: app.kubernetes.io/name: jaeger app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "1.51.0" + app.kubernetes.io/version: "1.53.0" app.kubernetes.io/component: all-in-one --- # Source: opentelemetry-demo/charts/opentelemetry-collector/templates/serviceaccount.yaml @@ -38,7 +55,7 @@ metadata: labels: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "0.92.0" + app.kubernetes.io/version: "0.93.0" --- # Source: opentelemetry-demo/charts/prometheus/templates/serviceaccount.yaml apiVersion: v1 @@ -48,7 +65,7 @@ metadata: app.kubernetes.io/component: server app.kubernetes.io/name: prometheus app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: v2.48.1 + app.kubernetes.io/version: v2.49.1 app.kubernetes.io/part-of: prometheus name: opentelemetry-demo-prometheus-server namespace: otel-demo @@ -65,7 +82,7 @@ metadata: opentelemetry.io/name: opentelemetry-demo app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/name: opentelemetry-demo - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo --- # Source: opentelemetry-demo/charts/grafana/templates/secret.yaml @@ -77,7 +94,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" type: Opaque data: @@ -94,9 +111,10 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" data: + plugins: grafana-opensearch-datasource grafana.ini: | [analytics] check_for_updates = true @@ -141,6 +159,20 @@ data: type: jaeger uid: webstore-traces url: http://opentelemetry-demo-jaeger-query:16686/jaeger/ui + - access: proxy + editable: true + isDefault: false + jsonData: + database: otel + flavor: opensearch + logLevelField: severity + logMessageField: body + pplEnabled: true + timeField: observedTimestamp + version: 2.11.1 + name: OpenSearch + type: grafana-opensearch-datasource + url: http://otel-demo-opensearch:9200/ dashboardproviders.yaml: | apiVersion: 1 providers: @@ -153,6 +185,69 @@ data: orgId: 1 type: file --- +# Source: opentelemetry-demo/charts/opensearch/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-demo-opensearch-config + labels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + app.kubernetes.io/version: "2.11.1" + app.kubernetes.io/component: otel-demo-opensearch +data: + opensearch.yml: | + cluster.name: opensearch-cluster + + # Bind to all interfaces because we don't know what IP address Docker will assign to us. + network.host: 0.0.0.0 + + # Setting network.host to a non-loopback address enables the annoying bootstrap checks. "Single-node" mode disables them again. + # Implicitly done if ".singleNode" is set to "true". + # discovery.type: single-node + + # Start OpenSearch Security Demo Configuration + # WARNING: revise all the lines below before you go into production + plugins: + security: + ssl: + transport: + pemcert_filepath: esnode.pem + pemkey_filepath: esnode-key.pem + pemtrustedcas_filepath: root-ca.pem + enforce_hostname_verification: false + http: + enabled: true + pemcert_filepath: esnode.pem + pemkey_filepath: esnode-key.pem + pemtrustedcas_filepath: root-ca.pem + allow_unsafe_democertificates: true + allow_default_init_securityindex: true + authcz: + admin_dn: + - CN=kirk,OU=client,O=client,L=test,C=de + audit.type: internal_opensearch + enable_snapshot_restore_privilege: true + check_snapshot_restore_write_privileges: true + restapi: + roles_enabled: ["all_access", "security_rest_api_access"] + system_indices: + enabled: true + indices: + [ + ".opendistro-alerting-config", + ".opendistro-alerting-alert*", + ".opendistro-anomaly-results*", + ".opendistro-anomaly-detector*", + ".opendistro-anomaly-checkpoints", + ".opendistro-anomaly-detection-state", + ".opendistro-reports-*", + ".opendistro-notifications-*", + ".opendistro-notebooks", + ".opendistro-asynchronous-search-response*", + ] + ######## End OpenSearch Security Demo Configuration ######## +--- # Source: opentelemetry-demo/charts/opentelemetry-collector/templates/configmap.yaml apiVersion: v1 kind: ConfigMap @@ -162,15 +257,21 @@ metadata: labels: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "0.92.0" + app.kubernetes.io/version: "0.93.0" data: relay: | connectors: - spanmetrics: null + spanmetrics: {} exporters: debug: {} logging: {} + opensearch: + http: + endpoint: http://otel-demo-opensearch:9200 + tls: + insecure: true + logs_index: otel otlp: endpoint: 'opentelemetry-demo-jaeger-collector:4317' tls: @@ -180,14 +281,10 @@ data: tls: insecure: true extensions: - health_check: {} + health_check: + endpoint: ${env:MY_POD_IP}:13133 processors: batch: {} - filter/ottl: - error_mode: ignore - metrics: - metric: - - name == "rpc.server.duration" k8sattributes: extract: metadata: @@ -220,13 +317,6 @@ data: - action: insert from_attribute: k8s.pod.uid key: service.instance.id - transform: - metric_statements: - - context: metric - statements: - - set(description, "") where name == "queueSize" - - set(description, "") where name == "rpc.server.duration" - - set(description, "") where name == "http.client.duration" receivers: jaeger: protocols: @@ -262,10 +352,12 @@ data: pipelines: logs: exporters: + - opensearch - debug processors: - k8sattributes - memory_limiter + - resource - batch receivers: - otlp @@ -276,8 +368,6 @@ data: processors: - k8sattributes - memory_limiter - - filter/ottl - - transform - resource - batch receivers: @@ -309,7 +399,7 @@ metadata: app.kubernetes.io/component: server app.kubernetes.io/name: prometheus app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: v2.48.1 + app.kubernetes.io/version: v2.49.1 app.kubernetes.io/part-of: prometheus name: opentelemetry-demo-prometheus-server namespace: otel-demo @@ -357,11 +447,11 @@ metadata: opentelemetry.io/name: opentelemetry-demo app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/name: opentelemetry-demo - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo data: - demo-dashboard.json: |- + demo-dashboard.json: | { "annotations": { "list": [ @@ -820,7 +910,7 @@ data: "type": "count" } ], - "query": "search source=otel\n| where serviceName=\"${service}\"\n| stats count() by severityText", + "query": "search source=otel\n| where resource.service.name=\"${service}\"\n| stats count() by severity.text", "queryType": "PPL", "refId": "A", "timeField": "time" @@ -908,7 +998,7 @@ data: "type": "count" } ], - "query": "search source=otel\n| where serviceName=\"${service}\"", + "query": "search source=otel\n| where resource.service.name=\"${service}\"", "queryType": "PPL", "refId": "A", "timeField": "time" @@ -7990,7 +8080,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" name: opentelemetry-demo-grafana-clusterrole rules: [] --- @@ -8002,7 +8092,7 @@ metadata: labels: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "0.92.0" + app.kubernetes.io/version: "0.93.0" rules: - apiGroups: [""] @@ -8023,7 +8113,7 @@ metadata: app.kubernetes.io/component: server app.kubernetes.io/name: prometheus app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: v2.48.1 + app.kubernetes.io/version: v2.49.1 app.kubernetes.io/part-of: prometheus name: opentelemetry-demo-prometheus-server rules: @@ -8073,7 +8163,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" subjects: - kind: ServiceAccount name: opentelemetry-demo-grafana @@ -8091,7 +8181,7 @@ metadata: labels: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "0.92.0" + app.kubernetes.io/version: "0.93.0" roleRef: apiGroup: rbac.authorization.k8s.io @@ -8110,7 +8200,7 @@ metadata: app.kubernetes.io/component: server app.kubernetes.io/name: prometheus app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: v2.48.1 + app.kubernetes.io/version: v2.49.1 app.kubernetes.io/part-of: prometheus name: opentelemetry-demo-prometheus-server subjects: @@ -8131,7 +8221,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" rules: [] --- # Source: opentelemetry-demo/charts/grafana/templates/rolebinding.yaml @@ -8143,7 +8233,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" roleRef: apiGroup: rbac.authorization.k8s.io kind: Role @@ -8162,7 +8252,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" spec: type: ClusterIP ports: @@ -8182,7 +8272,7 @@ metadata: labels: app.kubernetes.io/name: jaeger app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "1.51.0" + app.kubernetes.io/version: "1.53.0" app.kubernetes.io/component: service-agent spec: clusterIP: None @@ -8215,7 +8305,7 @@ metadata: labels: app.kubernetes.io/name: jaeger app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "1.51.0" + app.kubernetes.io/version: "1.53.0" app.kubernetes.io/component: service-collector spec: clusterIP: None @@ -8251,7 +8341,7 @@ metadata: labels: app.kubernetes.io/name: jaeger app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "1.51.0" + app.kubernetes.io/version: "1.53.0" app.kubernetes.io/component: service-query spec: clusterIP: None @@ -8267,6 +8357,58 @@ spec: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: all-in-one --- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: otel-demo-opensearch + labels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + app.kubernetes.io/version: "2.11.1" + app.kubernetes.io/component: otel-demo-opensearch + annotations: + {} +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + ports: + - name: http + protocol: TCP + port: 9200 + - name: transport + protocol: TCP + port: 9300 +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: otel-demo-opensearch-headless + labels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + app.kubernetes.io/version: "2.11.1" + app.kubernetes.io/component: otel-demo-opensearch + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + clusterIP: None # This is needed for statefulset hostnames like opensearch-0 to resolve + # Create endpoints also if the related pod isn't ready + publishNotReadyAddresses: true + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + ports: + - name: http + port: 9200 + - name: transport + port: 9300 + - name: metrics + port: 9600 +--- # Source: opentelemetry-demo/charts/opentelemetry-collector/templates/service.yaml apiVersion: v1 kind: Service @@ -8276,7 +8418,7 @@ metadata: labels: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "0.92.0" + app.kubernetes.io/version: "0.93.0" component: standalone-collector spec: @@ -8330,7 +8472,7 @@ metadata: app.kubernetes.io/component: server app.kubernetes.io/name: prometheus app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: v2.48.1 + app.kubernetes.io/version: v2.49.1 app.kubernetes.io/part-of: prometheus name: opentelemetry-demo-prometheus-server namespace: otel-demo @@ -8358,7 +8500,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: adservice app.kubernetes.io/name: opentelemetry-demo-adservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8381,7 +8523,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: cartservice app.kubernetes.io/name: opentelemetry-demo-cartservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8404,7 +8546,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: checkoutservice app.kubernetes.io/name: opentelemetry-demo-checkoutservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8427,7 +8569,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: currencyservice app.kubernetes.io/name: opentelemetry-demo-currencyservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8450,7 +8592,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: emailservice app.kubernetes.io/name: opentelemetry-demo-emailservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8473,7 +8615,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: featureflagservice app.kubernetes.io/name: opentelemetry-demo-featureflagservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8499,7 +8641,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: ffspostgres app.kubernetes.io/name: opentelemetry-demo-ffspostgres - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8522,7 +8664,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontend app.kubernetes.io/name: opentelemetry-demo-frontend - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8545,7 +8687,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontendproxy app.kubernetes.io/name: opentelemetry-demo-frontendproxy - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8568,7 +8710,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: kafka app.kubernetes.io/name: opentelemetry-demo-kafka - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8594,7 +8736,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: loadgenerator app.kubernetes.io/name: opentelemetry-demo-loadgenerator - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8617,7 +8759,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: paymentservice app.kubernetes.io/name: opentelemetry-demo-paymentservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8640,7 +8782,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: productcatalogservice app.kubernetes.io/name: opentelemetry-demo-productcatalogservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8663,7 +8805,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: quoteservice app.kubernetes.io/name: opentelemetry-demo-quoteservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8686,7 +8828,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: recommendationservice app.kubernetes.io/name: opentelemetry-demo-recommendationservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8709,7 +8851,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: redis app.kubernetes.io/name: opentelemetry-demo-redis - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8732,7 +8874,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: shippingservice app.kubernetes.io/name: opentelemetry-demo-shippingservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: type: ClusterIP @@ -8753,7 +8895,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" spec: replicas: 1 revisionHistoryLimit: 10 @@ -8769,7 +8911,7 @@ spec: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo annotations: - checksum/config: 14c983e68ef55d9c427adf47dcb9fd5f966593b39e3c5520e30f2775ad459bf9 + checksum/config: c38ec8ac5f042202a0d78fd7f3aec5c4ba388be7161c45d862097fb3bd7aec56 checksum/sc-dashboard-provider-config: 593c0a8778b83f11fe80ccb21dfb20bc46705e2be3178df1dc4c89d164c8cd9c checksum/secret: bed677784356b2af7fb0d87455db21f077853059b594101a4f6532bfbd962a7f kubectl.kubernetes.io/default-container: grafana @@ -8785,7 +8927,7 @@ spec: enableServiceLinks: true containers: - name: grafana - image: "docker.io/grafana/grafana:10.2.3" + image: "docker.io/grafana/grafana:10.3.1" imagePullPolicy: IfNotPresent securityContext: allowPrivilegeEscalation: false @@ -8833,6 +8975,11 @@ spec: secretKeyRef: name: opentelemetry-demo-grafana key: admin-password + - name: GF_INSTALL_PLUGINS + valueFrom: + configMapKeyRef: + name: opentelemetry-demo-grafana + key: plugins - name: GF_PATHS_DATA value: /var/lib/grafana/ - name: GF_PATHS_LOGS @@ -8873,7 +9020,7 @@ metadata: labels: app.kubernetes.io/name: jaeger app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "1.51.0" + app.kubernetes.io/version: "1.53.0" app.kubernetes.io/component: all-in-one prometheus.io/port: "14269" prometheus.io/scrape: "true" @@ -8908,11 +9055,11 @@ spec: value: "false" - name: COLLECTOR_OTLP_ENABLED value: "true" - image: jaegertracing/all-in-one:1.51.0 + image: jaegertracing/all-in-one:1.53.0 imagePullPolicy: IfNotPresent name: jaeger args: - - "--memory.max-traces=8000" + - "--memory.max-traces=5000" - "--query.base-path=/jaeger/ui" - "--prometheus.server-url=http://opentelemetry-demo-prometheus-server:9090" - "--prometheus.query.normalize-calls=true" @@ -8958,7 +9105,7 @@ spec: timeoutSeconds: 1 resources: limits: - memory: 300Mi + memory: 400Mi volumeMounts: serviceAccountName: opentelemetry-demo-jaeger volumes: @@ -8972,7 +9119,7 @@ metadata: labels: app.kubernetes.io/name: otelcol app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "0.92.0" + app.kubernetes.io/version: "0.93.0" spec: replicas: 1 @@ -8987,7 +9134,7 @@ spec: template: metadata: annotations: - checksum/config: 7563e99516eb72b05a80cc39036c81204b1e2167a65bff6ab75a7aca4cdf9ae3 + checksum/config: 0fb8456b7d63589eab739ee45fe80efd7bd73b2e191cec9da5788d62a12085b4 opentelemetry_community_demo: "true" prometheus.io/port: "9464" prometheus.io/scrape: "true" @@ -9008,7 +9155,7 @@ spec: - --config=/conf/relay.yaml securityContext: {} - image: "otel/opentelemetry-collector-contrib:0.92.0" + image: "otel/opentelemetry-collector-contrib:0.93.0" imagePullPolicy: IfNotPresent ports: @@ -9043,7 +9190,7 @@ spec: apiVersion: v1 fieldPath: status.podIP - name: GOMEMLIMIT - value: 160MiB + value: "160MiB" livenessProbe: httpGet: path: / @@ -9075,7 +9222,7 @@ metadata: app.kubernetes.io/component: server app.kubernetes.io/name: prometheus app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: v2.48.1 + app.kubernetes.io/version: v2.49.1 app.kubernetes.io/part-of: prometheus name: opentelemetry-demo-prometheus-server namespace: otel-demo @@ -9096,7 +9243,7 @@ spec: app.kubernetes.io/component: server app.kubernetes.io/name: prometheus app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: v2.48.1 + app.kubernetes.io/version: v2.49.1 app.kubernetes.io/part-of: prometheus spec: enableServiceLinks: true @@ -9104,7 +9251,7 @@ spec: containers: - name: prometheus-server - image: "quay.io/prometheus/prometheus:v2.48.1" + image: "quay.io/prometheus/prometheus:v2.49.1" imagePullPolicy: "IfNotPresent" args: - --storage.tsdb.retention.time=15d @@ -9171,7 +9318,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: accountingservice app.kubernetes.io/name: opentelemetry-demo-accountingservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9191,7 +9338,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: accountingservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-accountingservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-accountingservice' imagePullPolicy: IfNotPresent env: - name: OTEL_SERVICE_NAME @@ -9212,6 +9359,8 @@ spec: resources: limits: memory: 20Mi + volumeMounts: + volumes: initContainers: - command: - sh @@ -9232,7 +9381,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: adservice app.kubernetes.io/name: opentelemetry-demo-adservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9252,7 +9401,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: adservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-adservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-adservice' imagePullPolicy: IfNotPresent ports: @@ -9273,7 +9422,7 @@ spec: - name: FEATURE_FLAG_GRPC_SERVICE_ADDR value: 'opentelemetry-demo-featureflagservice:50053' - name: OTEL_EXPORTER_OTLP_ENDPOINT - value: http://$(OTEL_COLLECTOR_NAME):4317 + value: http://$(OTEL_COLLECTOR_NAME):4318 - name: OTEL_LOGS_EXPORTER value: otlp - name: OTEL_RESOURCE_ATTRIBUTES @@ -9281,6 +9430,8 @@ spec: resources: limits: memory: 300Mi + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -9293,7 +9444,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: cartservice app.kubernetes.io/name: opentelemetry-demo-cartservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9313,7 +9464,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: cartservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-cartservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-cartservice' imagePullPolicy: IfNotPresent ports: @@ -9344,6 +9495,8 @@ spec: resources: limits: memory: 160Mi + volumeMounts: + volumes: initContainers: - command: - sh @@ -9364,7 +9517,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: checkoutservice app.kubernetes.io/name: opentelemetry-demo-checkoutservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9384,7 +9537,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: checkoutservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-checkoutservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-checkoutservice' imagePullPolicy: IfNotPresent ports: @@ -9423,6 +9576,8 @@ spec: resources: limits: memory: 20Mi + volumeMounts: + volumes: initContainers: - command: - sh @@ -9443,7 +9598,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: currencyservice app.kubernetes.io/name: opentelemetry-demo-currencyservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9463,7 +9618,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: currencyservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-currencyservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-currencyservice' imagePullPolicy: IfNotPresent ports: @@ -9483,11 +9638,15 @@ spec: value: "8080" - name: OTEL_EXPORTER_OTLP_ENDPOINT value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: VERSION + value: '1.8.0' - name: OTEL_RESOURCE_ATTRIBUTES value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo resources: limits: memory: 20Mi + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -9500,7 +9659,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: emailservice app.kubernetes.io/name: opentelemetry-demo-emailservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9520,7 +9679,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: emailservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-emailservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-emailservice' imagePullPolicy: IfNotPresent ports: @@ -9547,6 +9706,8 @@ spec: resources: limits: memory: 100Mi + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -9559,7 +9720,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: featureflagservice app.kubernetes.io/name: opentelemetry-demo-featureflagservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9579,7 +9740,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: featureflagservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-featureflagservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-featureflagservice' imagePullPolicy: IfNotPresent ports: @@ -9618,6 +9779,8 @@ spec: port: 8081 initialDelaySeconds: 30 periodSeconds: 10 + volumeMounts: + volumes: initContainers: - command: - sh @@ -9638,7 +9801,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: ffspostgres app.kubernetes.io/name: opentelemetry-demo-ffspostgres - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9658,7 +9821,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: ffspostgres - image: 'postgres:16.1' + image: 'ghcr.io/open-telemetry/demo:1.8.0-ffspostgres' imagePullPolicy: IfNotPresent ports: @@ -9685,10 +9848,8 @@ spec: resources: limits: memory: 120Mi - securityContext: - runAsGroup: 999 - runAsNonRoot: true - runAsUser: 999 + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -9701,7 +9862,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frauddetectionservice app.kubernetes.io/name: opentelemetry-demo-frauddetectionservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9721,7 +9882,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: frauddetectionservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-frauddetectionservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-frauddetectionservice' imagePullPolicy: IfNotPresent env: - name: OTEL_SERVICE_NAME @@ -9736,12 +9897,14 @@ spec: - name: KAFKA_SERVICE_ADDR value: 'opentelemetry-demo-kafka:9092' - name: OTEL_EXPORTER_OTLP_ENDPOINT - value: http://$(OTEL_COLLECTOR_NAME):4317 + value: http://$(OTEL_COLLECTOR_NAME):4318 - name: OTEL_RESOURCE_ATTRIBUTES value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo resources: limits: memory: 200Mi + volumeMounts: + volumes: initContainers: - command: - sh @@ -9762,7 +9925,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontend app.kubernetes.io/name: opentelemetry-demo-frontend - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9782,7 +9945,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: frontend - image: 'ghcr.io/open-telemetry/demo:1.7.0-frontend' + image: 'ghcr.io/open-telemetry/demo:1.8.0-frontend' imagePullPolicy: IfNotPresent ports: @@ -9816,6 +9979,8 @@ spec: value: 'opentelemetry-demo-recommendationservice:8080' - name: SHIPPING_SERVICE_ADDR value: 'opentelemetry-demo-shippingservice:8080' + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) - name: OTEL_EXPORTER_OTLP_ENDPOINT value: http://$(OTEL_COLLECTOR_NAME):4317 - name: WEB_OTEL_SERVICE_NAME @@ -9824,8 +9989,6 @@ spec: value: http://localhost:8080/otlp-http/v1/traces - name: OTEL_RESOURCE_ATTRIBUTES value: service.name=$(OTEL_SERVICE_NAME),service.namespace=opentelemetry-demo - - name: OTEL_COLLECTOR_HOST - value: $(OTEL_COLLECTOR_NAME) resources: limits: memory: 200Mi @@ -9833,6 +9996,8 @@ spec: runAsGroup: 1001 runAsNonRoot: true runAsUser: 1001 + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -9845,7 +10010,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: frontendproxy app.kubernetes.io/name: opentelemetry-demo-frontendproxy - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9865,7 +10030,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: frontendproxy - image: 'ghcr.io/open-telemetry/demo:1.7.0-frontendproxy' + image: 'ghcr.io/open-telemetry/demo:1.8.0-frontendproxy' imagePullPolicy: IfNotPresent ports: @@ -9918,6 +10083,8 @@ spec: runAsGroup: 101 runAsNonRoot: true runAsUser: 101 + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -9930,7 +10097,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: kafka app.kubernetes.io/name: opentelemetry-demo-kafka - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -9950,7 +10117,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: kafka - image: 'ghcr.io/open-telemetry/demo:1.7.0-kafka' + image: 'ghcr.io/open-telemetry/demo:1.8.0-kafka' imagePullPolicy: IfNotPresent ports: @@ -9971,7 +10138,7 @@ spec: - name: KAFKA_ADVERTISED_LISTENERS value: PLAINTEXT://opentelemetry-demo-kafka:9092 - name: OTEL_EXPORTER_OTLP_ENDPOINT - value: http://$(OTEL_COLLECTOR_NAME):4317 + value: http://$(OTEL_COLLECTOR_NAME):4318 - name: KAFKA_HEAP_OPTS value: -Xmx200M -Xms200M - name: OTEL_RESOURCE_ATTRIBUTES @@ -9983,6 +10150,8 @@ spec: runAsGroup: 1000 runAsNonRoot: true runAsUser: 1000 + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -9995,7 +10164,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: loadgenerator app.kubernetes.io/name: opentelemetry-demo-loadgenerator - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -10015,7 +10184,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: loadgenerator - image: 'ghcr.io/open-telemetry/demo:1.7.0-loadgenerator' + image: 'ghcr.io/open-telemetry/demo:1.8.0-loadgenerator' imagePullPolicy: IfNotPresent ports: @@ -10044,7 +10213,7 @@ spec: - name: LOCUST_AUTOSTART value: "true" - name: LOCUST_BROWSER_TRAFFIC_ENABLED - value: "false" + value: "true" - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION value: python - name: OTEL_EXPORTER_OTLP_ENDPOINT @@ -10054,6 +10223,8 @@ spec: resources: limits: memory: 1Gi + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -10066,7 +10237,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: paymentservice app.kubernetes.io/name: opentelemetry-demo-paymentservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -10086,7 +10257,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: paymentservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-paymentservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-paymentservice' imagePullPolicy: IfNotPresent ports: @@ -10115,6 +10286,8 @@ spec: runAsGroup: 1000 runAsNonRoot: true runAsUser: 1000 + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -10127,7 +10300,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: productcatalogservice app.kubernetes.io/name: opentelemetry-demo-productcatalogservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -10147,7 +10320,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: productcatalogservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-productcatalogservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-productcatalogservice' imagePullPolicy: IfNotPresent ports: @@ -10174,6 +10347,8 @@ spec: resources: limits: memory: 20Mi + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -10186,7 +10361,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: quoteservice app.kubernetes.io/name: opentelemetry-demo-quoteservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -10206,7 +10381,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: quoteservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-quoteservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-quoteservice' imagePullPolicy: IfNotPresent ports: @@ -10237,6 +10412,8 @@ spec: runAsGroup: 33 runAsNonRoot: true runAsUser: 33 + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -10249,7 +10426,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: recommendationservice app.kubernetes.io/name: opentelemetry-demo-recommendationservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -10269,7 +10446,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: recommendationservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-recommendationservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-recommendationservice' imagePullPolicy: IfNotPresent ports: @@ -10302,6 +10479,8 @@ spec: resources: limits: memory: 500Mi + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -10314,7 +10493,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: redis app.kubernetes.io/name: opentelemetry-demo-redis - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -10359,6 +10538,8 @@ spec: runAsGroup: 1000 runAsNonRoot: true runAsUser: 999 + volumeMounts: + volumes: --- # Source: opentelemetry-demo/templates/component.yaml apiVersion: apps/v1 @@ -10371,7 +10552,7 @@ metadata: app.kubernetes.io/instance: opentelemetry-demo app.kubernetes.io/component: shippingservice app.kubernetes.io/name: opentelemetry-demo-shippingservice - app.kubernetes.io/version: "1.7.0" + app.kubernetes.io/version: "1.8.0" app.kubernetes.io/part-of: opentelemetry-demo spec: replicas: 1 @@ -10391,7 +10572,7 @@ spec: serviceAccountName: opentelemetry-demo containers: - name: shippingservice - image: 'ghcr.io/open-telemetry/demo:1.7.0-shippingservice' + image: 'ghcr.io/open-telemetry/demo:1.8.0-shippingservice' imagePullPolicy: IfNotPresent ports: @@ -10418,6 +10599,132 @@ spec: resources: limits: memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/charts/opensearch/templates/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: otel-demo-opensearch + labels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + app.kubernetes.io/version: "2.11.1" + app.kubernetes.io/component: otel-demo-opensearch + annotations: + majorVersion: "2" +spec: + serviceName: otel-demo-opensearch-headless + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + replicas: 1 + podManagementPolicy: Parallel + updateStrategy: + type: RollingUpdate + template: + metadata: + name: "otel-demo-opensearch" + labels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: opentelemetry-demo + app.kubernetes.io/version: "2.11.1" + app.kubernetes.io/component: otel-demo-opensearch + annotations: + configchecksum: dbabb255aa7aae76bc7e58190dfaef09eb4e8f64493754bc6266c5e81c27d8d + spec: + securityContext: + fsGroup: 1000 + runAsUser: 1000 + automountServiceAccountToken: false + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - opentelemetry-demo + - key: app.kubernetes.io/name + operator: In + values: + - opensearch + terminationGracePeriodSeconds: 120 + volumes: + - name: config + configMap: + name: otel-demo-opensearch-config + enableServiceLinks: true + containers: + - name: "opensearch" + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + + image: "opensearchproject/opensearch:2.11.1" + imagePullPolicy: "IfNotPresent" + readinessProbe: + failureThreshold: 3 + periodSeconds: 5 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + startupProbe: + failureThreshold: 30 + initialDelaySeconds: 5 + periodSeconds: 10 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + ports: + - name: http + containerPort: 9200 + - name: transport + containerPort: 9300 + - name: metrics + containerPort: 9600 + resources: + limits: + memory: 1Gi + requests: + cpu: 1000m + memory: 100Mi + env: + - name: node.name + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: discovery.seed_hosts + value: "opensearch-cluster-master-headless" + - name: cluster.name + value: "demo-cluster" + - name: network.host + value: "0.0.0.0" + - name: OPENSEARCH_JAVA_OPTS + value: "-Xms300m -Xmx300m" + - name: node.roles + value: "master,ingest,data,remote_cluster_client," + - name: discovery.type + value: "single-node" + - name: bootstrap.memory_lock + value: "true" + - name: DISABLE_INSTALL_DEMO_CONFIG + value: "true" + - name: DISABLE_SECURITY_PLUGIN + value: "true" + volumeMounts: + - name: config + mountPath: /usr/share/opensearch/config/opensearch.yml + subPath: opensearch.yml --- # Source: opentelemetry-demo/charts/grafana/templates/tests/test-serviceaccount.yaml apiVersion: v1 @@ -10426,7 +10733,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" name: opentelemetry-demo-grafana-test namespace: otel-demo annotations: @@ -10441,7 +10748,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" data: run.sh: |- @test "Test Health" { @@ -10459,7 +10766,7 @@ metadata: labels: app.kubernetes.io/name: grafana app.kubernetes.io/instance: opentelemetry-demo - app.kubernetes.io/version: "10.2.3" + app.kubernetes.io/version: "10.3.1" annotations: namespace: otel-demo spec: From f9053b700648d70a103a0cf5f9ddf5baec95cd8a Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Wed, 21 Feb 2024 08:53:30 -0500 Subject: [PATCH 10/12] [chore] make: fix restart, add redeploy targets (#1397) * fix restart, add redeploy Signed-off-by: Pierre Tessier * fix restart, add redeploy Signed-off-by: Pierre Tessier * use service or SERVICE Signed-off-by: Pierre Tessier --------- Signed-off-by: Pierre Tessier --- CHANGELOG.md | 3 +++ Makefile | 38 ++++++++++++++++++++++++++++++++++---- restart-service.sh | 19 ------------------- 3 files changed, 37 insertions(+), 23 deletions(-) delete mode 100755 restart-service.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 00c4f09336..98d4376f5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ the release. ## Unreleased +* [chore] fix Make targets for restart and redeploy + ([#1397](https://github.com/open-telemetry/opentelemetry-demo/pull/1397)) + ## 1.8.0 * [grafana] update grafana to 10.2.3 diff --git a/Makefile b/Makefile index 26c579e5da..bd304bc795 100644 --- a/Makefile +++ b/Makefile @@ -164,10 +164,40 @@ stop: @echo "" @echo "OpenTelemetry Demo is stopped." - -# Use to rebuild and restart a single service component +# Use to restart a single service component # Example: make restart service=frontend .PHONY: restart restart: - # work with `service` or `SERVICE` as input - ./restart-service.sh ${service}${SERVICE} +# work with `service` or `SERVICE` as input +ifdef SERVICE + service := $(SERVICE) +endif + +ifdef service + docker compose stop $(service) + docker compose rm --force $(service) + docker compose create $(service) + docker compose start $(service) +else + @echo "Please provide a service name using `service=[service name]` or `SERVICE=[service name]`" +endif + +# Use to rebuild and restart (redeploy) a single service component +# Example: make redeploy service=frontend +.PHONY: redeploy +redeploy: +# work with `service` or `SERVICE` as input +ifdef SERVICE + service := $(SERVICE) +endif + +ifdef service + docker compose build $(service) + docker compose stop $(service) + docker compose rm --force $(service) + docker compose create $(service) + docker compose start $(service) +else + @echo "Please provide a service name using `service=[service name]` or `SERVICE=[service name]`" +endif + diff --git a/restart-service.sh b/restart-service.sh deleted file mode 100755 index 5f80919dbe..0000000000 --- a/restart-service.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -# This script is used to build, then restart the newly built service container. It does this by forcing a full stop -# and removal of the container, then recreating it. This is useful for development, as it ensures the latest code -# is running in the container. - -if [ -z "$1" ] -then - echo "Please provide a service name" - exit 1 -fi - -docker compose build "$1" -docker compose stop "$1" -docker compose rm --force "$1" -docker compose create "$1" -docker compose start "$1" From 0d7e94b0af66967f5829896d6ea22b66ca1fc4d5 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Wed, 21 Feb 2024 08:58:36 -0500 Subject: [PATCH 11/12] [chore] - memory for collector and jaeger (#1396) * increase collector memory Signed-off-by: Pierre Tessier * increase collector memory Signed-off-by: Pierre Tessier * increase collector memory Signed-off-by: Pierre Tessier * increase collector memory Signed-off-by: Pierre Tessier --------- Signed-off-by: Pierre Tessier Co-authored-by: Austin Parker --- CHANGELOG.md | 2 ++ docker-compose.minimal.yml | 4 ++-- docker-compose.yml | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98d4376f5e..226ac01d5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ the release. ## Unreleased +* [chore] increase memory for Collector and Jaeger + ([#1396](https://github.com/open-telemetry/opentelemetry-demo/pull/1396)) * [chore] fix Make targets for restart and redeploy ([#1397](https://github.com/open-telemetry/opentelemetry-demo/pull/1397)) diff --git a/docker-compose.minimal.yml b/docker-compose.minimal.yml index 54c37e4764..f0596090fe 100644 --- a/docker-compose.minimal.yml +++ b/docker-compose.minimal.yml @@ -474,7 +474,7 @@ services: deploy: resources: limits: - memory: 300M + memory: 400M restart: unless-stopped ports: - "${JAEGER_SERVICE_PORT}" # Jaeger UI @@ -508,7 +508,7 @@ services: deploy: resources: limits: - memory: 125M + memory: 200M restart: unless-stopped command: [ "--config=/etc/otelcol-config.yml", "--config=/etc/otelcol-config-extras.yml" ] volumes: diff --git a/docker-compose.yml b/docker-compose.yml index af86a0635d..8f1c08b3e2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -626,7 +626,7 @@ services: deploy: resources: limits: - memory: 300M + memory: 400M restart: unless-stopped ports: - "${JAEGER_SERVICE_PORT}" # Jaeger UI @@ -660,7 +660,7 @@ services: deploy: resources: limits: - memory: 125M + memory: 200M restart: unless-stopped command: [ "--config=/etc/otelcol-config.yml", "--config=/etc/otelcol-config-extras.yml" ] volumes: From 1b9b117bd144afd47a8a6ab40e0a6b39ef9a76b6 Mon Sep 17 00:00:00 2001 From: Pierre Tessier Date: Wed, 21 Feb 2024 12:40:51 -0500 Subject: [PATCH 12/12] [chore]: nightly build and publish (#1398) * nightly build and publish Signed-off-by: Pierre Tessier * add nightly releases Signed-off-by: Pierre Tessier --------- Signed-off-by: Pierre Tessier --- .github/workflows/build-images.yml | 2 ++ .github/workflows/nightly-release.yml | 16 ++++++++++++++++ CHANGELOG.md | 2 ++ 3 files changed, 20 insertions(+) create mode 100644 .github/workflows/nightly-release.yml diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index aa0ac093e4..06b4595a9b 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -174,6 +174,8 @@ jobs: push: ${{ inputs.push }} tags: | ${{ env.DOCKERHUB_REPO }}:${{ inputs.version }}-${{matrix.file_tag.tag_suffix }} + ${{ env.DOCKERHUB_REPO }}:latest-${{matrix.file_tag.tag_suffix }} ${{ env.GHCR_REPO }}:${{ inputs.version }}-${{ matrix.file_tag.tag_suffix }} + ${{ env.GHCR_REPO }}:latest-${{ matrix.file_tag.tag_suffix }} cache-from: type=gha cache-to: type=gha diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml new file mode 100644 index 0000000000..4357759bfc --- /dev/null +++ b/.github/workflows/nightly-release.yml @@ -0,0 +1,16 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 +name: Nightly Release + +on: + schedule: + # Runs at 00:00 UTC every day + - cron: '0 0 * * *' + +jobs: + build_and_push_images: + uses: ./.github/workflows/build-images.yml + with: + push: true + version: nightly-${{ github.run_id }} + secrets: inherit diff --git a/CHANGELOG.md b/CHANGELOG.md index 226ac01d5d..6d31cb3888 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ the release. ([#1396](https://github.com/open-telemetry/opentelemetry-demo/pull/1396)) * [chore] fix Make targets for restart and redeploy ([#1397](https://github.com/open-telemetry/opentelemetry-demo/pull/1397)) +* [chore] add nightly releases + ([#1398](https://github.com/open-telemetry/opentelemetry-demo/pull/1398)) ## 1.8.0