<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jade Lassery</title>
    <description>The latest articles on Forem by Jade Lassery (@jadelassery).</description>
    <link>https://forem.com/jadelassery</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1191037%2F0b692db7-ebe6-4de3-a884-06c85cda976a.jpeg</url>
      <title>Forem: Jade Lassery</title>
      <link>https://forem.com/jadelassery</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jadelassery"/>
    <language>en</language>
    <item>
      <title>From Zero to Observability: Your first steps sending OpenTelemetry data to an Observability backend</title>
      <dc:creator>Jade Lassery</dc:creator>
      <pubDate>Tue, 10 Dec 2024 16:51:52 +0000</pubDate>
      <link>https://forem.com/jadelassery/from-zero-to-observability-your-first-steps-sending-opentelemetry-data-to-an-observability-backend-29l7</link>
      <guid>https://forem.com/jadelassery/from-zero-to-observability-your-first-steps-sending-opentelemetry-data-to-an-observability-backend-29l7</guid>
      <description>&lt;p&gt;In formal terms, OpenTelemetry 🔭 is an open source framework used for instrumenting, generating, collecting, and exporting telemetry data for applications, services, and infrastructure. It provides vendor-neutral tools, SDKs and APIs for generating, collecting, and exporting telemetry data such as traces, metrics, and logs to any observability backend, including both open source and commercial tools&lt;/p&gt;

&lt;p&gt;While some concepts might seem straightforward to experienced engineers, I believe it’s important to share ideas in a way that’s inclusive and approachable. With that in mind, think of OpenTelemetry (a.k.a OTel) as an universal translator for data from various applications and systems. Imagine you’re managing a group of machines or software programs, each speaking its own language. Clearly you need to understand what they’re saying to monitor their performance and spot issues. &lt;/p&gt;

&lt;p&gt;This is where OTel steps in to gather and standardize this data—things like error logs or performance metrics—and organizes it so you can send this data to a “central location” or backend for analysis.  OTel transforms raw information into something clear and actionable, making it easier for users to gain deep visibility into their workloads, helping to observe, monitor, troubleshoot, and optimize software systems. &lt;/p&gt;

&lt;h2&gt;
  
  
  What to expect in this guide
&lt;/h2&gt;

&lt;p&gt;This Hands-on article will seek to guide you on how to start your observability journey, sending logs, metrics and traces from Kubernetes-deployed applications to an observability backend/vendor using OTel. Whether you're a first-time user or an experienced engineer seeking a fast, hands-on setup, this is your chance to enhance your OTel and Kubernetes observability skills. &lt;/p&gt;

&lt;p&gt;With OTel growing its contributor base and ranking as the second &lt;a href="https://www.cncf.io/reports/cncf-annual-report-2023/#projects:~:text=CNCF%20PROJECT%20VELOCITY" rel="noopener noreferrer"&gt;highest velocity project&lt;/a&gt; in the CNCF ecosystem, there's never been a better time to dive in and explore its potential for optimizing observability.&lt;/p&gt;

&lt;p&gt;In this guide we’ll use the &lt;a href="https://opentelemetry.io/docs/demo/" rel="noopener noreferrer"&gt;OpenTelemetry Demo App&lt;/a&gt; and the &lt;a href="https://logz.io/welcome-back-page/" rel="noopener noreferrer"&gt;Logz.io&lt;/a&gt; exporter (I chose Logz.io as my observability backend, but you can choose any that supports OTel). It’s not mandatory to use the OTel Demo, but it’s a nice starting point if you don’t have a real-world implementation or if it’s your first time trying Logz.io and OTel. &lt;br&gt;
The OpenTelemetry Demo includes microservices written in multiple programming languages, communicating over gRPC and HTTP; and a load generator that uses Locust to fake user traffic automatically, eliminating the need to manually create scenarios. You can check the Demo architecture &lt;a href="https://opentelemetry.io/docs/demo/architecture/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Prerequisites:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://logz.io/freetrial/" rel="noopener noreferrer"&gt;Logz.io account&lt;/a&gt; (I choose this one to be my observability backend)&lt;/li&gt;
&lt;li&gt;Any Kubernetes cluster 1.24+ + &lt;a href="https://kubernetes.io/docs/tasks/tools/" rel="noopener noreferrer"&gt;Kubectl&lt;/a&gt; configured (for this guide, I’m using an EKS. But &lt;a href="https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fbinary+download" rel="noopener noreferrer"&gt;Minikube&lt;/a&gt;/&lt;a href="https://kind.sigs.k8s.io/" rel="noopener noreferrer"&gt;Kind&lt;/a&gt; is also welcome) &lt;/li&gt;
&lt;li&gt;6 GB of free RAM for the application&lt;/li&gt;
&lt;li&gt;Helm 3.14+ installation (for Helm installation method only)&lt;/li&gt;
&lt;li&gt;OpenTelemetry Collector (for this guide, I’m using the official &lt;a href="https://opentelemetry.io/docs/demo/" rel="noopener noreferrer"&gt;OpenTelemetry Demo for Kubernetes&lt;/a&gt;, it already provides you the Collector)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  OpenTelemetry Core Components - quick explanation:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Instrumentation libraries:&lt;/strong&gt; Tools and SDKs integrated into applications to automatically or manually generate telemetry data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Collector:&lt;/strong&gt; Vendor-agnostic proxy that can receive, process, and export telemetry data. It supports receiving telemetry data in multiple formats (for example, OTLP, Jaeger, Prometheus, as well as many commercial/proprietary tools) and sending data to one or more backends. It also supports processing and filtering telemetry data before it gets exported.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exporters:&lt;/strong&gt; Exporters take the processed data and send it to your chosen observability platform, such as Logz.io, Prometheus, Jaeger…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context for this guide:&lt;/strong&gt; The OTel Demo App will handle instrumentation, and the OTel Collector (which comes by default when deploying the Otel Demo Helm chart) will send telemetry data to Logz.io using the Logz.io exporter.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Demo Application → Otel SDK → Otel Collector with Logz.io Exporter → Logz.io Backend&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now let’s see how it works in practical terms…&lt;/p&gt;
&lt;h2&gt;
  
  
  Deploying the OTel Demo App:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add the OpenTelemetry Helm chart repository:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Deploy the app (in my case I deployed with the release name my-otel-demo):
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm install my-otel-demo open-thelemetry/opentelemetry-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Verify that app pods are running:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Accessing the Otel app:
&lt;/h2&gt;

&lt;p&gt;After you’ve deployed the Helm, the Demo application needs the services exposed outside of the Kubernetes cluster in order to use and navigate them. You can easily expose the services to your local system using &lt;code&gt;kubectl port-forward&lt;/code&gt;command or by configuring service types (ie: LoadBalancer) with optionally &lt;a href="https://opentelemetry.io/docs/demo/kubernetes-deployment/#:~:text=Expose%20Demo%20components%20using%20service%20or%20ingress%20configurations" rel="noopener noreferrer"&gt;deployed ingress resources&lt;/a&gt;.&lt;br&gt;
The easiest way is to expose services is by using &lt;code&gt;kubectl port-forward&lt;/code&gt;, which I’m using in this guide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the frontendproxy port-forward set up, you can access:&lt;br&gt;
Web store: &lt;a href="http://localhost:8080/" rel="noopener noreferrer"&gt;http://localhost:8080/&lt;/a&gt;&lt;br&gt;
Grafana: &lt;a href="http://localhost:8080/grafana/" rel="noopener noreferrer"&gt;http://localhost:8080/grafana/&lt;/a&gt;&lt;br&gt;
Load Generator UI: &lt;a href="http://localhost:8080/loadgen/" rel="noopener noreferrer"&gt;http://localhost:8080/loadgen/&lt;/a&gt;&lt;br&gt;
Jaeger UI: &lt;a href="http://localhost:8080/jaeger/ui/" rel="noopener noreferrer"&gt;http://localhost:8080/jaeger/ui/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Bringing your own backend:
&lt;/h2&gt;

&lt;p&gt;Now it’s time to configure the OTel Collector for Logz.io, using the Logz.io exporter and some additional Logz.io parameters. This will allow us to start sending telemetry from the OTel App to Logz.io. &lt;/p&gt;

&lt;p&gt;The OpenTelemetry Collector’s configuration is exposed in the Helm chart that we just deployed in the previous steps. Any additions you make will be merged into the default configuration and you can choose any backend of your choice, that’s the main idea of using OTel: &lt;strong&gt;vendor-neutrality.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a configuration file named &lt;code&gt;my-values-file.yaml&lt;/code&gt; with the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;opentelemetry-collector:
  config:
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: "0.0.0.0:4317"
          http:
            endpoint: "0.0.0.0:4318"

    exporters:
      logzio/logs:
        account_token: "YOUR-LOGS-SHIPPING-TOKEN"
        region: "your-region-code"
        headers:
          user-agent: logzio-opentelemetry-logs
      prometheusremotewrite:
        endpoint: https://listener.logz.io:8053
        headers:
          Authorization: "Bearer YOUR-METRICS-SHIPPING-TOKEN"
          user-agent: logzio-opentelemetry-metrics
        target_info:
            enabled: false
      logzio/traces:
        account_token: "YOUR-TRACES-SHIPPING-TOKEN"
        region: "your-region-code"
        headers:
          user-agent: logzio-opentelemetry-traces
      prometheusremotewrite/spm:
        endpoint: "https://listener-uk.logz.io:8053"
        add_metric_suffixes: false
        headers:
          Authorization: "Bearer YOUR-METRICS-SHIPPING-TOKEN"
               user-agent: "logzio-opentelemetry-apm" 
# Metrics account token for span metrics


    processors:
      batch:
      tail_sampling:
        policies:
          [
            {
              name: policy-errors,
              type: status_code,
              status_code: {status_codes: [ERROR]}
            },
            {
              name: policy-slow,
              type: latency,
              latency: {threshold_ms: 1000}
            }, 
            {
              name: policy-random-ok,
              type: probabilistic,
              probabilistic: {sampling_percentage: 10}
            }        
          ]

    extensions:
      pprof:
        endpoint: :1777
      zpages:
        endpoint: :55679
      health_check:

    service:
      Extensions: [health_check, pprof, zpages]
      pipelines:
        logs:
          receivers: [otlp]
          processors: [batch]
          exporters: [logzio/logs]
        metrics:
          receivers: [otlp,spanmetrics]
          exporters: [prometheusremotewrite]
        traces:
          receivers: [otlp]
          processors: [tail_sampling, batch]
          exporters: [logzio/traces,logzio/logs,spanmetrics]
      Telemetry: #log verbosity for the Collector logs.
        logs:
          level: "debug"     

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;❗️&lt;strong&gt;Notes:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Receivers:&lt;/em&gt; Defines how telemetry data is received&lt;/li&gt;
&lt;li&gt;otlp: Specifies the protocol (grpc and http) for receiving logs, metrics, or traces from applications.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Exporters:&lt;/em&gt; Specifies where and how telemetry data is sent.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Services:&lt;/em&gt; Defines the data flow pipelines for processing telemetry.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tail_sampling&lt;/code&gt; defines which traces to sample after all spans in a request are completed. By default, it collects all traces with an error span, traces slower than 1000 ms, and 10% of all other traces.&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;extensions&lt;/em&gt; session is optional. &lt;/li&gt;
&lt;li&gt;When merging YAML values with Helm, objects are merged and arrays are replaced. The &lt;code&gt;spanmetrics&lt;/code&gt; exporter must be included in the array of exporters for the &lt;code&gt;traces&lt;/code&gt; pipeline if overridden. Not including this exporter will result in an error.&lt;/li&gt;
&lt;li&gt;You can find all your personal parameters and Data shipping tokens logging into the Logz.io platform, going to Settings &amp;gt; Data shipping tokens. Or, going to Integrations &amp;gt; OpenTelemetry. &lt;/li&gt;
&lt;li&gt;You can also find the full OTel configuration directly in the Logz.io platform, under Integrations and searching for OpenTelemetry or accessing the Logz.io &lt;a href="https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/logzioexporter" rel="noopener noreferrer"&gt;exporter GitHub documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;To finalize, apply the YAML configuration changes to start sending telemetry to Logz.io:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;helm upgrade my-otel-demo open-telemetry/opentelemetry-demo --values my-values-file.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will apply the changes to the current OTel Helm release without requiring a fresh installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validating and exploring your OpenTelemetry data in the vendor backend:
&lt;/h2&gt;

&lt;p&gt;After deploying the OTel Demo App and configuring the collector to send data to your chosen backend, it’s important to validate that the telemetry data is flowing correctly. After a few seconds, you can start exploring all your logs, metrics and traces quickly within the vendor platform!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In my case I can go to the Logz.io Logs section to view the incoming log data and interact with them: &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzs2yyxhbuclxb5h54nri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzs2yyxhbuclxb5h54nri.png" alt="Log Management" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Logz.io App 360 menu is where you’ll find all the OpenTelemetry microservices deployed, creating the ability to dive into a specific service to get even more app-level details, traces and app metrics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn24wgwignavshwy0ena5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn24wgwignavshwy0ena5.png" alt="Applications List" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3drmq29gaozevbdzheg4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3drmq29gaozevbdzheg4.png" alt="Application Overview" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Well done!&lt;/strong&gt; your OTel configuration and the data were well collected and exported to the vendor backend! &lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up:
&lt;/h2&gt;

&lt;p&gt;By following the steps laid out in this guide, you've taken the critical first steps in using OpenTelemetry. You’ve learned how to collect telemetry data from applications deployed in a Kubernetes environment using the OTel demo app and send it to a vendor backend,  using the native vendor &lt;em&gt;Exporter&lt;/em&gt;. In just a few simple steps, you’ve set up logs, metrics, and traces streaming into a unified observability platform/backend, enabling seamless monitoring and troubleshooting of your systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Appendix: Troubleshooting &amp;amp; references
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Common issues and fixes:&lt;br&gt;
No data in Logz.io: Verify the API tokens you used in my-values-file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Further Reading:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://opentelemetry.io/" rel="noopener noreferrer"&gt;OpenTelemetry documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opentelemetry.io/docs/demo/kubernetes-deployment/" rel="noopener noreferrer"&gt;OpenTelemetry Demo App for Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.logz.io/docs/shipping/other/opentelemetry-data/" rel="noopener noreferrer"&gt;Sending Otel data to Logz.io documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.logz.io/docs/telemetry-collector/telemetry-collector-k8s/" rel="noopener noreferrer"&gt;Send Kubernetes Data with Logz.io Telemetry Collector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/logzioexporter" rel="noopener noreferrer"&gt;Logz.io Exporter GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://minikube.sigs.k8s.io/docs/" rel="noopener noreferrer"&gt;Setting up your local Kubernetes environment&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>opensource</category>
      <category>kubernetes</category>
      <category>observability</category>
      <category>opentelemetry</category>
    </item>
    <item>
      <title>Migrating from DIY ELK to a full SaaS platform</title>
      <dc:creator>Jade Lassery</dc:creator>
      <pubDate>Tue, 10 Dec 2024 15:07:15 +0000</pubDate>
      <link>https://forem.com/jadelassery/migrating-from-diy-elk-to-a-full-saas-platform-1m8p</link>
      <guid>https://forem.com/jadelassery/migrating-from-diy-elk-to-a-full-saas-platform-1m8p</guid>
      <description>&lt;p&gt;Managing modern systems requires a constant balance between operational efficiency and innovation; going a little further, maintaining seamless operations and delivering exceptional customer experiences increasingly depend on ensuring robust observability.&lt;/p&gt;

&lt;p&gt;For years, the ELK stack (Elasticsearch, Logstash, Kibana) has been the go-to solution for many organizations for log management and observability, offering flexibility control and an open source approach. However, as organizations scale and their data demands grow, maintaining ELK often becomes a real challenge, requiring more resources, generating higher costs and driving increasing complexity.&lt;/p&gt;

&lt;p&gt;Shifting to a full SaaS observability platform — purpose-built solutions designed to simplify operations, enhance insights and scale effortlessly — offers a strategic alternative. The shift allows businesses to offload the operational challenges of DIY ELK, enabling teams to focus on delivering value instead of maintaining infrastructure.  It’s not just about swapping tools, it’s about transforming the way you approach observability to support long-term business success by aggregating innovation and managed capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Do Organizations Choose Saas Over DIY ELK?
&lt;/h2&gt;

&lt;p&gt;To begin understanding the migration process, it’s important to consider why organizations choose SaaS over DIY ELK. The answer lies in the challenges of managing this kind of stack. &lt;/p&gt;

&lt;p&gt;As organizations expand, their data requirements become more demanding. Scaling a DIY ELK stack to handle increasing log volumes and infrastructure requirements can lead to performance issues, data loss, downtime and creating a constant need for manual intervention. SaaS platforms, on the other hand, manage all the hurdles for you, automatically scaling to accommodate growing data levels, reducing operational complexity and ensuring near-seamless performance.&lt;/p&gt;

&lt;p&gt;But scalability is just one part of the equation. Operating and maintaining a DIY ELK stack also means handling constant updates, security patches and rebalancing of infrastructure — tasks that consume time and resources. SaaS platforms handle these tasks in the background, allowing teams to focus on strategic work. Moreover, while DIY ELK might seem cost-effective initially, hidden expenses for scaling, maintenance and management can add up. SaaS platforms offer predictable observability pricing, simplifying budget management. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Benefits of Moving to a SaaS Observability Platform
&lt;/h2&gt;

&lt;p&gt;A significant benefit of moving to a SaaS platform is access to advanced features that go beyond traditional log management. Many SaaS observability platforms provide integrated solutions for logs, metrics and traces in one unified interface. These platforms now also frequently leverage AI-powered observability tools for anomaly detection and root cause analysis (RCA) to quickly surface issues —- reducing time spent troubleshooting and enabling proactive incident management.&lt;/p&gt;

&lt;p&gt;Beyond these operational benefits, SaaS platforms also offer enhanced security and compliance features that can be difficult and costly to implement with a DIY stack. With built-in encryption, access controls and industry certifications (such as SOC 2, GDPR compliance, etc), SaaS providers help ensure that your data remains secure and meets regulatory standards, without requiring additional overhead from your internal teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  When is it Time to Move?
&lt;/h2&gt;

&lt;p&gt;There are many factors to consider for when it might be the correct time to migrate from a DIY ELK stack to a SaaS platform. Here are some things to watch out for: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data growth is overwhelming: Your ELK stack struggles to keep up with increasing data volumes, leading to slow query times and infrastructure strain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operational complexity: is draining resources: Managing and maintaining the stack is consuming your DevOps team’s time, leaving little room for innovation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Costs are escalating or unpredictable:Infrastructure, storage and operational expenses are becoming unpredictable and hard to justify.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified and advanced observability is needed: Siloed tools for logs, metrics and traces make it challenging to diagnose and resolve issues quickly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security or compliance is a concern:You need advanced security features or compliance certifications that are difficult to implement in a DIY stack.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you’ve identified that your stack is no longer meeting your needs — whether due to scaling issues, rising costs, or operational inefficiencies — the next step is to start planning your migration to a SaaS platform. Making this shift doesn’t have to be overwhelming, but it does require careful consideration and a strategic approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are the key steps that you can use as a baseline to ensure a smooth transition:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Evaluate your needs:&lt;/strong&gt; Understand what you need from your observability stack. Are you looking for better scalability, advanced features, simplified management? What else?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Choose the right platform:&lt;/strong&gt; Not all SaaS platforms are built equal. Here’s a tip, look for one that offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Native integrations with your current tools such as Logstash, Beats or OpenTelemetry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified support for logs, metrics, traces and extra visualizations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AI-powered insights and automation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Platforms like Logz.io, for example, support the same ingestion methods as ELK, so you can reuse your existing configurations with minimal changes, besides providing advanced capabilities like root cause analysis to help businesses proactively manage their systems with minimal effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Plan and test:&lt;/strong&gt; Begin by setting up the SaaS platform alongside your existing ELK stack. Test data ingestion using a subset of your logs or metrics to validate compatibility and performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Migrate gradually:&lt;/strong&gt; Move workloads incrementally, starting with non-critical systems. Once the process is stable and workflows are optimized, transition critical systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Recreate dashboards and alerts:&lt;/strong&gt; Export dashboards and alerts from ELK and import them into the new managed platform. Take advantage of pre-built templates and advanced alerting options to refine your observability strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Optimize and train:&lt;/strong&gt; Ensure your team is trained on the new platform and continue optimizing configurations to align with your needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Decommission DIY ELK:&lt;/strong&gt; Once all systems are successfully migrated, phase out your ELK infrastructure, archiving historical data in an external storage if needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unlocking Value for the Long Term
&lt;/h2&gt;

&lt;p&gt;Migrating to a SaaS observability platform is more than just a technical upgrade or getting everything up and running. It’s a strategic decision that drives long-term value. By offloading operational complexity, businesses can focus on innovation, improve system reliability and enhance customer experiences.&lt;/p&gt;

&lt;p&gt;Organizations that make this shift often find they’re not just solving operational headaches, they’re positioning themselves for scalable, data-driven growth. It’s a step toward making observability a seamless enabler of success, rather than a persistent challenge.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>observability</category>
      <category>saas</category>
    </item>
    <item>
      <title>How to monitor Openshift using Datadog Operator</title>
      <dc:creator>Jade Lassery</dc:creator>
      <pubDate>Mon, 11 Mar 2024 04:58:58 +0000</pubDate>
      <link>https://forem.com/jadelassery/how-to-monitor-openshift-using-datadog-operator-ffp</link>
      <guid>https://forem.com/jadelassery/how-to-monitor-openshift-using-datadog-operator-ffp</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Co-authors: &lt;a href="https://www.linkedin.com/in/blevenhagen/" rel="noopener noreferrer"&gt;Luiz Bernardo Levenhagen&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/leonardo-alves-de-araujo/" rel="noopener noreferrer"&gt;Leonardo Araujo&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  In this article, we will demonstrate how to integrate Openshift with Datadog using &lt;code&gt;Datadog operator&lt;/code&gt; to collect metrics,logs, events and also applications' data.
&lt;/h3&gt;

&lt;p&gt;In this article we use the following versions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Openshift v4.13.11&lt;/li&gt;
&lt;li&gt;Datadog Operator v1.3.0&lt;/li&gt;
&lt;li&gt;Datadog account (more information on how to request a trial at the bottom of the blog)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;About&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This article is aimed at users who would like to integrate or monitor their &lt;code&gt;Openshift Cluster&lt;/code&gt; using the &lt;code&gt;Datadog monitoring solution&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We will use the datadog operator to instantiate our agent and collect all metrics(cluster/containers), cluster and container/pod logs, network, cpu, memory consumption as well as applications' data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Red Hat does not support the DataDog operator or its configuration, for any questions related to the use of the platform or operator, contact DataDog.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;User with the cluster-admin cluster role&lt;/li&gt;
&lt;li&gt;Openshift 4.10 or +&lt;/li&gt;
&lt;li&gt;Datadog account (more information on how to request a trial at the bottom of the blog)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Procedure&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Datadog
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Add API Keys
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;To add a new &lt;code&gt;datadog API Key&lt;/code&gt;, navigate to &lt;code&gt;Organization Settings&lt;/code&gt; &amp;gt; &lt;code&gt;API Keys&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you have the permission to create API keys, click &lt;code&gt;New Key&lt;/code&gt; in the top right corner.&lt;/li&gt;
&lt;li&gt;Define the desired name, something that can help you identify in the future.&lt;/li&gt;
&lt;li&gt;Once created, copy the Key so we can use it later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtpxc1mexjswf7wn45ma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtpxc1mexjswf7wn45ma.png" alt="Image description" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Add Application keys
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;To add a new &lt;code&gt;datadog Application Key&lt;/code&gt;, navigate to &lt;code&gt;Organization Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Application Keys&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you have the permission to create Application Keys, click &lt;code&gt;New Key&lt;/code&gt; in the top right corner.&lt;/li&gt;
&lt;li&gt;Define the desired name, something that can help you identify in the future.&lt;/li&gt;
&lt;li&gt;Once created, copy the Key so we can use it later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrbyeppblcifiokr028d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrbyeppblcifiokr028d.png" alt="Image description" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Openshift
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Datadog Operator Install
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;In the Openshift console, in the left side menu, click &lt;code&gt;Operator&lt;/code&gt; &amp;gt; &lt;code&gt;OperatorHub&lt;/code&gt; &amp;gt; in the &lt;code&gt;search field&lt;/code&gt;, type &lt;code&gt;datadog&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyatnmfo5dv4p5wdrbky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhyatnmfo5dv4p5wdrbky.png" alt="Image description" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Tip&lt;br&gt;
Whenever available, use a certified option.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As we can see, we are using version 1.3.0 of operator, click &lt;code&gt;Install&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9vdx406jkpr9e2v75up.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9vdx406jkpr9e2v75up.png" alt="Image description" width="800" height="709"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On this screen, we will keep all the default options:

&lt;ul&gt;
&lt;li&gt;Update channel: &lt;code&gt;stable&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Installation mode: &lt;code&gt;All namespaces the cluster(default)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Installed Namespace: &lt;code&gt;openshift-operators&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Update approval: &lt;code&gt;Automatic&lt;/code&gt; 

&lt;ul&gt;
&lt;li&gt;Obs.: &lt;em&gt;If you prefer, you can use the Manual option.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Click &lt;code&gt;Install&lt;/code&gt;.
&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqxy187v5d97gtljevp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqqxy187v5d97gtljevp3.png" alt="Image description" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wait until the installation is complete.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuw9o0bbxf0c7xkjaflgh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuw9o0bbxf0c7xkjaflgh.png" alt="Image description" width="690" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Create secret with Datadog keys (not mandatory, but good practice)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;In the terminal, access the openshift-operators namespace context
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;oc project openshift-operators
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now let's create a secret to store in this API Key and Application Key, replace the values below with the keys we generated previously in the Datadog console.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;oc create secret generic datadog-secret &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--from-literal&lt;/span&gt; api-key&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;REPLACE_ME&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--from-literal&lt;/span&gt; app-key&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;REPLACE_ME&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's now instatiate our datadog agent using the yaml below
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; datadog_agent.yaml
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
  namespace: openshift-operators
spec:
  features:
    apm:
      enabled: true
      unixDomainSocketConfig:
        enabled: true
    clusterChecks:
      enabled: true
      useClusterChecksRunners: true
    dogstatsd:
      originDetectionEnabled: true
      unixDomainSocketConfig:
        enabled: true
    eventCollection:
      collectKubernetesEvents: true
    liveContainerCollection:
      enabled: true
    liveProcessCollection:
      enabled: true
    logCollection:
      containerCollectAll: true
      enabled: true
    npm:
      collectDNSStats: true
      enableConntrack: true
      enabled: true
  global:
    clusterName: DemoLab
    credentials:
      apiSecret:
        keyName: api-key
        secretName: datadog-secret
      appSecret:
        keyName: app-key
        secretName: datadog-secret
    criSocketPath: /var/run/crio/crio.sock
    kubelet:
      tlsVerify: false
    site: datadoghq.eu
  override:
    clusterAgent:
      containers:
        cluster-agent:
          securityContext:
            readOnlyRootFilesystem: false
      replicas: 2
      serviceAccountName: datadog-agent-scc
    nodeAgent:
      hostNetwork: true
      securityContext:
        runAsUser: 0
        seLinuxOptions:
          level: s0
          role: system_r
          type: spc_t
          user: system_u
      serviceAccountName: datadog-agent-scc
      tolerations:
      - operator: Exists
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
&lt;/span&gt;&lt;span class="no"&gt;EOF        
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Some explanations about what we are enabling in this agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enabling the &lt;code&gt;APM&lt;/code&gt; (&lt;em&gt;Application Performance Monitoring&lt;/em&gt;) feature&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;unixDomainSocketConfig&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Cluster Check&lt;/code&gt; extends the autodiscover function to non-containerized resources and checks if there is some integration/technology to monitor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;clusterChecks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;useClusterChecksRunners&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Dogstatsd&lt;/code&gt; is responsible for collecting custom metrics and events and sending them from time to time to a metrics aggregation service on the Datadog server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dogstatsd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;originDetectionEnabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;unixDomainSocketConfig&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Here we are enabling the collection of all logs (including container logs) and events generated in our cluster and sending them to Datadog.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;eventCollection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;collectKubernetesEvents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;liveContainerCollection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;liveProcessCollection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;logCollection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containerCollectAll&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;With &lt;code&gt;NPM&lt;/code&gt; (&lt;em&gt;Network Performance Monitoring&lt;/em&gt;), we can have visibility of all traffic in our cluster, nodes, containers, availability zones, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;npm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;collectDNSStats&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;enableConntrack&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;credentials&lt;/code&gt; block in &lt;strong&gt;Global&lt;/strong&gt;, we have the definition of the secret previously created with the API and app key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;apiSecret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;keyName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api-key&lt;/span&gt;
    &lt;span class="na"&gt;secretName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;datadog-secret&lt;/span&gt;
  &lt;span class="na"&gt;appSecret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;keyName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-key&lt;/span&gt;
    &lt;span class="na"&gt;secretName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;datadog-secret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;In this block, we define the path to the cri-o service socket, we define the non-checking of tls for communication with the kubelet and in website, we define which datadog server will receive the data sent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;criSocketPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/var/run/crio/crio.sock&lt;/span&gt;
&lt;span class="na"&gt;kubelet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;tlsVerify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;site&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;datadoghq.eu&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;clusterAgent&lt;/code&gt; block in &lt;strong&gt;override&lt;/strong&gt;, we add SecurityContext(scc) settings and which &lt;code&gt;serviceaccount&lt;/code&gt; should be used in the &lt;code&gt;datadog-cluster-agent&lt;/code&gt; pods.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;clusterAgent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cluster-agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;securityContext&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;readOnlyRootFilesystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
  &lt;span class="na"&gt;serviceAccountName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;datadog-agent-scc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;❗Note&lt;br&gt;
The &lt;code&gt;datadog-agent-scc serviceaccount&lt;/code&gt; is created automatically by the operator and already has all the necessary permissions for the agent to run correctly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;nodeAgent&lt;/code&gt; block in &lt;strong&gt;override&lt;/strong&gt;, we define settings for SecurityContext for the &lt;code&gt;datadog-agent&lt;/code&gt; pods, we will use the same datadog-agent-scc serviceaccount and we also define the &lt;code&gt;tolerations&lt;/code&gt; for the nodes that have taints created, in our case for the master nodes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;nodeAgent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hostNetwork&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;securityContext&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runAsUser&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
    &lt;span class="na"&gt;seLinuxOptions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;s0&lt;/span&gt;
      &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;system_r&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;spc_t&lt;/span&gt;
      &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;system_u&lt;/span&gt;
  &lt;span class="na"&gt;serviceAccountName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;datadog-agent-scc&lt;/span&gt;
  &lt;span class="na"&gt;tolerations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;operator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Exists&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;effect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NoSchedule&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-role.kubernetes.io/master&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After some explanations, let's deploy our datadog agent. Execute this command to create the object:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;oc &lt;span class="nt"&gt;-n&lt;/span&gt; openshift-operators create &lt;span class="nt"&gt;-f&lt;/span&gt; datadog_agent.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Once created, we will validate that our agent was created correctly
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;oc &lt;span class="nt"&gt;-n&lt;/span&gt; openshift-operators get datadogagent
&lt;span class="nv"&gt;$ &lt;/span&gt;oc &lt;span class="nt"&gt;-n&lt;/span&gt; openshift-operators get pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;❗Note&lt;br&gt;
Here we should have a datadog-agent running on each available openshift node.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqziejgi1u5u4wecy1c1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqziejgi1u5u4wecy1c1.png" alt="Image description" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;❗Information&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;datadog-agent-xxxxx&lt;/code&gt; pods, is responsible for collecting all metrics, events, traces and logs from each node in the cluster.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;datadog-cluster-agent-xxxxx&lt;/code&gt; pods, will act as a proxy between the API server and node-based agents, Cluster Agent helps to ease the server load.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now let's validate the logs of the datadog-agent-xxxxx pods, to identify if there is any communication error.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;oc logs &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; app.kubernetes.io/managed-by&lt;span class="o"&gt;=&lt;/span&gt;datadog-operator &lt;span class="nt"&gt;--max-log-requests&lt;/span&gt; 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w4mnq6qtotbuqmg46y4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4w4mnq6qtotbuqmg46y4.png" alt="Image description" width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Datadog platform/UI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Now on the Datadog platform, in the left side menu, click on &lt;code&gt;Infrastructure &amp;gt; and then on&lt;/code&gt;Infrastructure List`&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2075y4d52n2gtmv1wjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2075y4d52n2gtmv1wjg.png" alt="Image description" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;❗Information &lt;br&gt;
Server data, such as status, cpu information, memory and other details, may take a few minutes to be displayed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To view more details about a specific node, click on the node name and navigate through the available tabs. It’s just the simplest way to check your nodes/hosts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvssj0bf9h2j6g8trvo8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvssj0bf9h2j6g8trvo8q.png" alt="Image description" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under the &lt;code&gt;Infrastructure&lt;/code&gt; menu, Datadog also gives you an exclusive &lt;code&gt;Kubernetes&lt;/code&gt; menu where you have the full picture about your cluster. You can check the state of all of your Kubernetes resources, troubleshoot patterns, access out-of-the-box Dashboards and enable some recommended Alerts to monitor your environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci7cukbn32g8jw4n4kj3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci7cukbn32g8jw4n4kj3.gif" alt="Image description" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can also explore deeper the containers running in your Openshift environment, going to &lt;code&gt;Infrastructure &amp;gt; Containers&lt;/code&gt;. Here you get chance to analyse things like logs from containers, traces, networking layer, processes running inside the container and so on...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8mx2ekb6lwr8l2a1r77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8mx2ekb6lwr8l2a1r77.png" alt="Image description" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To view more details about network traffic, in the left side menu, go to &lt;code&gt;Infrastructure &amp;gt; &lt;/code&gt;Network Map`&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiidte9vcbho7l92lsr34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiidte9vcbho7l92lsr34.png" alt="Image description" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To view the logs received from the cluster or from any application or technology running in your kubernetes environment, in the left side menu, go to &lt;code&gt;Logs&lt;/code&gt; &amp;gt; &lt;code&gt;Analytics&lt;/code&gt;, on this screen, we can view all the details, filter application logs and even view the processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F882e4r8pktbirmaojxdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F882e4r8pktbirmaojxdy.png" alt="Image description" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To view all collected metrics, in the left side menu, go to &lt;code&gt;Metrics &amp;gt;&lt;/code&gt;Explorer`, here we can view all metrics, run and save queries or create dashboards based on queries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7hzpoe72fxjq8qtrdkx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7hzpoe72fxjq8qtrdkx.png" alt="Image description" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Datadog provides out-of-the-box Dashboards that can be used and customized. To use one available, in the left side menu, go to &lt;code&gt;Dashboards &amp;gt; &lt;/code&gt;Dashboard List` &amp;gt; choose the dashboard and click on the name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6b9suenv7uwfg4f1ku06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6b9suenv7uwfg4f1ku06.png" alt="Image description" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;❗Note:&lt;br&gt;
To customize a dashboard provided by Datadog, use the Clone feature to make the desired changes and save.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt; &lt;br&gt;
 &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Using the Datadog Operator solution, we can have a complete monitoring solution for our Openshift cluster with main features such as APM, Network Analysis, Logs, Events and Metrics.&lt;/p&gt;

&lt;p&gt;To request an Openshift trial and learn more about our solution, &lt;a href="https://www.redhat.com/en/technologies/cloud-computing/openshift/try-it" rel="noopener noreferrer"&gt;click here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To request a Datadog trial and be able to replicate this knowledge, &lt;a href="https://www.datadoghq.com/dg/monitor/free-trial" rel="noopener noreferrer"&gt;click here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;References&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For more details and other configurations, start with the reference documents below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a&gt;Red Hat Catalog - Datadog Operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.datadoghq.com/integrations/openshift/?tab=operator" rel="noopener noreferrer"&gt;Datadog Documentation - Openshift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.datadoghq.com/containers/guide/operator-advanced/" rel="noopener noreferrer"&gt;Datadog Documentation - Advanced setup for Datadog Operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.datadoghq.com/integrations/openshift/?tab=operator#custom-datadog-scc-for-all-features" rel="noopener noreferrer"&gt;Custom Datadog SCC for all features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>containers</category>
      <category>operator</category>
    </item>
  </channel>
</rss>
