Installation des Backends „ Instana “

Installieren Sie das Backend „ Instana “ für die Custom Edition.

Um das Backend „ Instana “ zu installieren, müssen Sie mehrere wichtige Schritte ausführen, um ein Core -Objekt und ein zugehöriges Unit -Objekt zu erstellen. Bevor Sie mit den Hauptschritten beginnen, müssen Sie mehrere Vorbereitungsschritte zum Erstellen von Namensbereichen und geheimen Schlüsseln ausführen.

Tipp: Das Plug-in „ Instana “ ( kubectl ) verfügt über einen Befehl zum Erstellen von „ YAML “-Vorlagen für Namespaces und benutzerdefinierte Ressourcen, die Ihnen den Einstieg erleichtern.

kubectl instana template --output-dir <dir>
 

Vorbereitungsschritte

Bevor Sie Core und Uniterstellen können, müssen Sie Namensbereiche erstellen und eine Reihe von geheimen Schlüsseln für die Namensbereiche platzieren, damit Sie Core -und Unit -Images aus der artifact-public.instana.io -Registry extrahieren können.

Namensbereiche erstellen

Core und Units müssen in verschiedenen Namensbereichen installiert werden. Jeder Core benötigt einen eigenen Namensbereich. Mehrere Einheiten , die zu demselben Core gehören, können in demselben Namensbereich installiert werden.

Namensbereichsnamen können frei gewählt werden. In diesem Handbuch werden die Namensbereiche instana-core und instana-units verwendet.

Der „ Instana “-Enterprise-Operator setzt voraus, dass im app.kubernetes.io/name Namensraum ein Label vorhanden ist. Der Wert muss der Name des Namensbereichs sein. Der Operator fügt diese Beschriftungen hinzu, wenn sie fehlen. Es ist sinnvoll, diese Labels direkt hinzuzufügen, insbesondere wenn „ GitOps “ für die Bereitstellung verwendet wird.

Erstellen Sie eine Datei namens „ YAML “ mit einem Namen wie z. B. namespaces.yaml. Sehen Sie sich das folgende Beispiel an:

apiVersion: v1
kind: Namespace
metadata:
  name: instana-core
  labels:
    app.kubernetes.io/name: instana-core
---
apiVersion: v1
kind: Namespace
metadata:
  name: instana-units
  labels:
    app.kubernetes.io/name: instana-units
 

Führen Sie anschließend den folgenden Befehl aus, um die Datei anzuwenden:

kubectl apply -f namespaces.yaml
 

Erstellen von Pull-Secrets für Images

Sofern Sie nicht über eine eigene Docker -Registry verfügen, die artifact-public.instana.io spiegelt und keine geheimen Schlüssel für Pull-Operationen erfordert, müssen Sie geheime Schlüssel für Pull-Operationen für Images in den beiden Namensbereichen erstellen, die Sie mit einer der folgenden Methoden erstellt haben:

  • Erstellen Sie den geheimen Schlüssel direkt.

    kubectl create secret docker-registry instana-registry \
        --namespace=<namespace> \
        --docker-username=_ \
        --docker-password=<agent_key> \
        --docker-server=artifact-public.instana.io
     
    • Ersetzen Sie < Namensbereichsname> durch den Namen des soeben erstellten Core-Namensbereichs oder Units-Namensbereichs.
    • Ersetzen Sie < Agentenschlüssel> durch Ihren Agentenschlüssel.
  • Erstellen Sie die „ YAML “ für das Geheimnis, ohne die „ YAML “ anzuwenden. Das Geheimnis wird ohne Erstellung gedruckt.

    kubectl create secret docker-registry instana-registry \
        --namespace=<namespace> \
        --docker-username=_ \
        --docker-password=<agent_key> \
        --docker-server=artifact-public.instana.io \
        --dry-run=client \
        --output=yaml
     

    Erstellen Sie anschließend den geheimen Schlüssel.

    kubectl create -f <secret-file-name.yaml> --namespace <namespace>
     
    • Ersetzen Sie <secret-file-name> durch den Dateinamen der Datei „ YAML “.
    • Ersetzen Sie < Namensbereichsname> durch den Namen des soeben erstellten Core-Namensbereichs oder Units-Namensbereichs.
  • Optional: Erstellen Sie einen „Image Pull Secret“, falls Ihre interne Image-Registry eine Authentifizierung erfordert.

    kubectl create secret docker-registry <secret_name> --namespace <namespace> \
    --docker-username=<registry_username> \
    --docker-password=<registry_password> \
    --docker-server=<internal-image-registry>:<internal-image-registry-port> \
    --docker-email=<registry_email>
     

Herunterladen der Lizenzdatei

Instana erfordert zur Aktivierung eine Lizenz, die auf Ihrer „ SalesKey “ basiert. Um diese Lizenzdatei mit dem Plug-in „ Instana “ ( kubectl ) abzurufen, führen Sie den folgenden Befehl aus:

kubectl instana license download --sales-key <SalesKey>
 

Führen Sie alternativ den folgenden Befehl aus, wenn Sie die Lizenz manuell herunterladen müssen:

curl https://instana.io/onprem/license/download/v2/allValid?salesId=<your-SalesKey> -o license.json
 

Dieser Lizenzschlüssel ist Teil der Datei config.yaml für Einheiten, die später generiert wird.

Geheime Schlüssel erstellen

Werte für geheime Schlüssel werden nicht mithilfe von Core -und Unit -Ressourcen konfiguriert. Diese gehen in den Bereich Kubernetes Secrets.

Für „ TLS “-Zertifikate muss im Namespace instana-tls von Core ein Geheimnis erstellt werden.

Für jede Core -und jede Unit -Ressource muss ein geheimer Schlüssel mit dem entsprechenden Namen im entsprechenden Namensbereich erstellt werden.

Das Geheimnis muss eine config.yamlDatei enthalten, deren Struktur CoreSpec bzw. UnitSpec ähnelt, wobei Anmeldedaten hinzugefügt werden.

Geheimes instana-tls

Das Passwort instana-tls ist für die Ingress-Konfiguration erforderlich. Sie müssen das Geheimnis im Namensraum von Core erstellen.

Tabelle 1. Konfiguration von secret instana-tls
Schlüssel Wert
tls.crt Das TLS-Zertifikat für die Domäne, unter der Instana erreichbar ist. Der CN (Common Name) muss mit dem baseDomain übereinstimmen, der unter CoreSpec konfiguriert ist.
tls.key Der Schlüssel „ TLS “.
Hinweis: Dieser Secret muss vom Typ kubernetes.io/tls. sein.

Führen Sie die folgenden Schritte aus, um den geheimen Schlüssel instana-tlszu erstellen:

  1. Erstellen Sie die Datei san.conf wie im folgenden Beispiel gezeigt:

    [req]
    default_bits = 4096
    prompt = no
    default_md = sha256
    x509_extensions = req_ext
    req_extensions = req_ext
    distinguished_name = dn
    [ dn ]
    C=<two_letter_country_code>
    ST=<site>
    L=<location>
    O=<organization>
    OU=<organizational_unit>
    emailAddress=<email_address>
    CN = <base_domain>
    [ req_ext ]
    subjectAltName = @alt_names
    [ alt_names ]
    DNS.1 = <base_domain>
    DNS.2 = agent-acceptor.<base_domain>
    DNS.3 = oopamp-acceptor.<base_domain>
    DNS.4 = otlp-grpc.<base_domain>
    DNS.5 = otlp-http.<base_domain>
    DNS.6 = <unit_name>-<tenant_name>.<base_domain>
     

    Ersetzen Sie <base_domain> durch den Domainnamen, unter dem Sie das Backend von „ Instana “ installieren möchten. Ersetzen Sie < country>, < site>, < location>, < organization>, < organizational_unit>, < email_address>, < unit_name> und < tenant_name> durch Ihre Informationen.

  2. Führen Sie einen der folgenden Schritte aus:

    • Verwenden Sie ein Zertifikat, das von einer internen oder öffentlichen Zertifizierungsstelle ausgestellt wurde.

    • Ein selbstsigniertes Zertifikat erstellen:

      openssl req -x509 -newkey rsa:2048 -keyout tls.key -out tls.crt -days 365 -nodes -config san.conf
       
  3. Erstellen Sie einen geheimen Schlüssel, der das Zertifikat enthält.

    kubectl create secret tls instana-tls --namespace instana-core \
        --cert=path/to/tls.crt \
        --key=path/to/tls.key
     

Das zentrale Geheimnis

Erstellen Sie eine config.yaml -Datei mit dem Inhalt wie im folgenden Beispiel gezeigt. Die Struktur der Datei entspricht genau der CoreSpec , die wie folgt erstellt wird.

Geheime Werte müssen in diesen geheimen Kernschlüssel aufgenommen werden. Alles andere wird in CoreSpecaufgenommen.

# Diffie-Hellman parameters to use
dhParams: |
  -----BEGIN DH PARAMETERS-----
  <snip/>
  -----END DH PARAMETERS-----
# The repository password for accessing the Instana agent repository.
# Use the download key that you received from us
repositoryPassword: mydownloadkey
# The sales key you received from us
salesKey: mysaleskey
# Seed for creating crypto tokens. Pick a random 12 char string
tokenSecret: mytokensecret
# Configuration for raw spans storage
storageConfigs:
  rawSpans:
    # Required if using S3 or compatible storage bucket.
    # Credentials should be configured.
    # Not required if IRSA on EKS is used.
    s3Config:
      accessKeyId: ...
      secretAccessKey: ...
    # Required if using Google Cloud Storage.
    # Credentials should be configured.
    # Not required if GKE with workload identity is used.
    gcloudConfig:
      serviceAccountKey: ...

# SAML/OIDC configuration
serviceProviderConfig:
  # Password for the key/cert file
  keyPassword: mykeypass
  # The combined key/cert file
  pem: |
    -----BEGIN RSA PRIVATE KEY-----
    <snip/>
    -----END RSA PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
    <snip/>
    -----END CERTIFICATE-----
# Required if a proxy is configured that needs authentication
proxyConfig:
  # Proxy user
  user: myproxyuser
  # Proxy password
  password: my proxypassword
emailConfig:
  # Required if SMTP is used for sending e-mails and authentication is required
  smtpConfig:
    user: mysmtpuser
    password: mysmtppassword
  # Required if using for sending e-mail.
  # Credentials should be configured.
  # Not required if using IRSA on EKS.
  sesConfig:
  # The sesConfig configuration is mandatory when you use the Simple Email Service (SES) of Amazon for sending emails from the application. The sesConfig section includes two fields: accessKeyId and secretAccessKey, which are used to authenticate the application with Amazon SES allowing it to send emails on behalf of the specified AWS account.
    accessKeyId: ...
    secretAccessKey: ...
# Optional: You can add one or more custom CA certificates to the component trust stores
# in case internal systems (such as LDAP or alert receivers) which Instana talks to use a custom CA.
# Optional: You can use the following fields to override the default values.
geoDbUser: <GeoDB download username>
geoDbPassword: <GeoDB download password>
customCACert: |
  -----BEGIN CERTIFICATE-----
  <snip/>
  -----END CERTIFICATE-----
  # Add more certificates if you need
  # -----BEGIN CERTIFICATE-----
  # <snip/>
  # -----END CERTIFICATE-----
datastoreConfigs:
  kafkaConfig:
    adminUser: strimzi-kafka-user
    adminPassword: <RETRIEVED_FROM_SECRET>
    consumerUser: strimzi-kafka-user
    consumerPassword: <RETRIEVED_FROM_SECRET>
    producerUser: strimzi-kafka-user
    producerPassword: <RETRIEVED_FROM_SECRET>
  elasticsearchConfig:
    adminUser: elastic
    adminPassword: <RETRIEVED_FROM_SECRET>
    user: elastic
    password: <RETRIEVED_FROM_SECRET>
  postgresConfigs:
    - user: <username in Postgres data store>
      password: <RETRIEVED_FROM_SECRET>
      adminUser: <username in Postgres data store>
      adminPassword: <RETRIEVED_FROM_SECRET>
  cassandraConfigs:
    - user: instana-superuser
      password: <RETRIEVED_FROM_SECRET>
      adminUser: instana-superuser
      adminPassword: <RETRIEVED_FROM_SECRET>
  clickhouseConfigs:
    - user: clickhouse-user
      password: <USER_GENERATED_PASSWORD>
      adminUser: clickhouse-user
      adminPassword: <USER_GENERATED_PASSWORD>
 
Hinweis: Ersetzen Sie <username in Postgres data store> durch den Benutzernamen, der unter „Erstellen eines Postgres -Datenspeichers“ angegeben ist.

Hinweise:

  • Wenn Sie „ Instana “-Datenspeicher mithilfe von „ Kubernetes “-Operatoren von Drittanbietern einrichten, müssen Sie den datastoreConfigs Teil der config.yaml Datei, der im Abschnitt „Überprüfen der endgültigen Konfigurationsdatei mit Benutzernamen und Passwörtern“ beschrieben ist, in diese „Core config.yaml Secret“-Datei kopieren.

  • Geben Sie die Diffie-Hellman-Parameter an. Führen Sie den folgenden Befehl aus, um Diffie-Hellman-Parameter zu generieren:

    openssl dhparam -out dhparams.pem 2048
     
  • Ein verschlüsselter Schlüssel zum Signieren oder Validieren von Nachrichten, die mit dem IDP ausgetauscht werden, muss konfiguriert werden. Unverschlüsselte Schlüssel werden nicht akzeptiert.

    1. Erstellen Sie den Schlüssel mit dem folgenden Befehl:
      openssl genrsa -aes128 -out key.pem 2048
       
    2. Erstellen Sie das Zertifikat mit dem folgenden Befehl:
      openssl req -new -x509 -key key.pem -out cert.pem -days 365
       
    3. Kombinieren Sie die beiden zu einer Datei, indem Sie den folgenden Befehl ausführen:
      cat key.pem cert.pem > sp.pem
       
  • Sie müssen einen geheimen Schlüssel mit demselben Namen im Namespace des Kerns erstellen. Wenn der Name des Core-Objekts beispielsweise instana-corelautet, erstellen Sie einen geheimen Schlüssel, indem Sie den folgenden Befehl ausführen:

    kubectl create secret generic instana-core --namespace instana-core --from-file=path/to/config.yaml
     
  • Sie können mehrere Zertifikate verknüpfen, indem Sie die Datei config.yaml konfigurieren. Sehen Sie sich das folgende Beispiel an:

    customCACert: |
      -----BEGIN CERTIFICATE-----
      74ZaqWwi/JDwLnpi4HnW7h6OlM39I9qeKv1o9qbGUaXdgL+IkcJB4PVgCgeQKGlZ
      B3ng/iOFe47dTV6Dx3D5v3j7lxuihPJXwcHtRRjSD0GBH0IJeQAL2fK3rk4ldqhI
      FouqgoyjdONrV0YInRdNWzpl2Nxob33B/U4pwdvKVqDzWDk17+tZEdFvaoqzXFgt
      hGfnmDtNiGVSLrJjbH+lwN0JHVeUSZHQ0iTfHOna5f39ConGgwIkVDVsDjfYqAW1
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      1fm2rJVtuImDPnFMjH75d3SwYPyca+4ZLZwnXgMjE7PJFtUe0niEr40wsPuq4i5L
      B6LrAoGBAPl/PnwPBdst4AhbNn8FmxLje/DZWtpmZoyITBDq129KCM4xGjS3FyDY
      7l69VdaiiFDBXHVDQ6SxQ85z69rk45oGgaU0AVzOb+ZCfTocYb6/xcOVFhLc8h6E
      HzdlW/vjyvYij+o5hNAyo+2VV7y8DZ92V0fMaVsxQzcU+6vKy6VRAoGBAPK/Jnqg
      I0MWhP7zgWo4g+9TM67OxeYkXHV1UUEirjH7LQrMhomlJ7yEYUencfY1md/Fssl1
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      3LzEkVtMxHiusHVq7a7q8ZMMNEQpdSkPcJU7AoGBAIdw9gjU9IztBJbSbgpwweWu
      sP8W6C1qyfSEgRB/fEO6ec8EtnRjZFOo9m3xwOI6+Yrsn+fir7EtB41U3x8Oii8K
      2Koji7YJqnWvEMfGQ7CxP3jNRn9EvfNPCaG6rkbpX4zuMN48e0xzQwvx/G3FK/d6
      waqiKpCXFdwStIHUfS3bAoGAUzo5FBmlsJoBtn9fkiIBWV5a3Nkt6IF+yS+JkqzO
      AoIA0ICjJ+DabIUoqtpS9VQ0wcAgCo6T5SMrBWOJi7yVaFgMqfe3Sq5tochSI7DC
      -----END CERTIFICATE-----
     
    Hinweis: Sie können den Vertrauensspeichern der Komponente ein oder mehrere benutzerdefinierte CA-Zertifikate hinzufügen. Für interne Systeme wie „ LDAP “ oder Benachrichtigungsempfänger verwendet „ Instana “ eine benutzerdefinierte Zertifizierungsstelle.

Geheimnis der Einheit

Erstellen Sie die Datei config-unit.yaml mit dem Inhalt wie im folgenden Beispiel gezeigt. Die Struktur der Datei entspricht genau der UnitSpec , die wie folgt erstellt wird.

Geheime Werte müssen in diesen geheimen Einheitenschlüssel aufgenommen werden. Alles andere geht in die UnitSpecüber.

# The initial user of this tenant unit with admin role, default admin@instana.local.
# Must be a valid e-mail address.
# NOTE:
# This only applies when setting up the tenant unit.
# Changes to this value won't have any effect.
initialAdminUser: myuser@example.com
# The initial admin password.
# NOTE:
# This is only used for the initial tenant unit setup.
# Changes to this value won't have any effect.
initialAdminPassword: mypass
# A list of Instana licenses. Multiple licenses may be specified.
licenses: [ "license1", "license2" ]
# A list of agent keys. Specifying multiple agent keys enables gradually rotating agent keys.
agentKeys:
  - myagentkey
# The download key that you received from us (in the license e-mail, this is called initial agent key).
downloadKey: mydownloadkey
 

Hinweise:

  • Um das Feld licenses zu konfigurieren, rufen Sie die Lizenzen ab, die im Abschnitt Lizenzdatei herunterladen heruntergeladen wurden:

    # cat /path/to/license.json && echo
    ["abcdefghijklmnopqrstuvwxyz0123456789"]
     
  • Sie müssen einen geheimen Schlüssel mit demselben Namen im Namensbereich der Einheit erstellen. Wenn der Name des Unit -Objekts beispielsweise tenant0-unit0lautet, erstellen Sie einen geheimen Schlüssel, indem Sie den folgenden Befehl ausführen:

    kubectl create secret generic tenant0-unit0 --namespace instana-units --from-file=config.yaml=/path/to/config-unit.yaml
     

Core erstellen

Ein Core stellt gemeinsam genutzte Komponenten dar und ist für die Konfiguration des Datenspeicherzugriffs verantwortlich. Daher werden die meisten Konfigurationen hier ausgeführt.

Weitere Informationen finden Sie unter „ API -Referenz “.

Eine angepasste Core -Ressource muss die Version instana.io/v1beta2 und die Art Corehaben. Konfigurationen für Core werden im Abschnitt spec beschrieben.

Erstellen Sie eine core.yaml-Datei. Konfigurationen für Core werden im Abschnitt spec beschrieben.

apiVersion: instana.io/v1beta2
kind: Core
metadata:
  namespace: instana-core
  name: instana-core
spec:
  ...
 

Geben Sie Toleranzen und den Knotenselektor für IBM Z® und LinuxONE ( s390x ) an

Hinweis: Dieser Abschnitt gilt nur für die Installation der Custom Edition auf IBM Z® und LinuxONE ( s390x ).

Stellen Sie sicher, dass mindestens ein Knoten im Cluster nicht markiert ist und nicht über das Label verfügt node-role.kubernetes.io/monitor: "true". Fügen Sie die folgenden Zeilen in die Datei core.yaml ein, um die Toleranzen und den Knotenselektor festzulegen.

 spec:
   tolerations:
     - key: node.instana.io/monitor
       operator: Equal
       effect: NoSchedule
       value: "true"
   nodeSelector:
     node-role.kubernetes.io/monitor: "true"
 

Basiskonfiguration

Führen Sie einige Basiskonfigurationen wie folgt aus:

apiVersion: instana.io/v1beta2
kind: Core
metadata:
  namespace: instana-core
  name: instana-core
spec:
  # The domain under which Instana is reachable
  baseDomain: <instana.example.com>

  # Depending on your cluster setup, you may need to specify an image pull secret.
  imagePullSecrets:
    - name: my-registry-secret

  # This configures an SMTP server for sending e-mails.
  # Alternatively, Amazon SES is supported. Please see API reference for details.
  emailConfig:
    smtpConfig:
      from: smtp@example.com
      host: smtp.example.com
      port: 465
      useSSL: true
 

CPU-/Speicherressourcen

Sie können für jeden Komponenten-Pod individuelle CPU- und Speicherressourcen konfigurieren. Im folgenden Beispiel wird die Komponente filler verwendet. Ersetzen Sie filler durch die Komponente, die verwendet werden soll, und geben Sie CPU-und Speicherressourcen mit den Gesamtsummen an, die Sie bereitstellen möchten.

spec:
  componentConfigs:
    - name: filler
      resources:
        requests:
          cpu: 2.5
          memory: 5000Mi
        limits:
          cpu: 4
          memory: 20000Mi
 

Agent-Akzeptor

Die folgende Konfiguration ist veraltet. Verwenden Sie die Konfiguration, die unter „Gateway-Konfiguration“ angegeben ist.

Der Acceptor ist der Endpunkt, den die Agenten von „ Instana “ erreichen müssen, um Traces oder Metriken an das Backend von „ Instana “ zu übermitteln. Der Akzeptor ist normalerweise eine Unterdomäne für baseDomain , die zuvor im Abschnitt Basiskonfiguration konfiguriert wurde.

spec:
  agentAcceptorConfig:
    host: ingress.<instana.example.com>
    port: 443
 

Gateway-Konfiguration

Sie können die Hosts und Ports für die folgenden Arten von eingehendem Datenverkehr konfigurieren:

  • Instana-Agent
  • Synthetics
  • Serverless
  • OTLP (HTTP/gRPC)
  • EUM
  • OpAMP

Um die Hosts und Ports für die verschiedenen „ Instana “-Akzeptoren zu konfigurieren, fügen Sie die folgende Konfiguration in die CoreSpec ein:

Hinweis: Ist das host Feld leer, wird die Basisdomain als Standardwert verwendet; ist das Feld „Port“ leer, lautet der Standardwert 443
spec:
  gatewayConfig:
    enabled: true # enables gateway-v2 and gateway-controller
  acceptors:
    agent:
      host: ingress.<instana.example.com>
      port: 443
    opamp:
      host: opamp-acceptor.<instana.example.com>
      port: 443
    otlp:
      http:
        host: otlp-http.<instana.example.com>
        port: 443
      grpc:
        host: otlp-grpc.<instana.example.com>
        port: 443
    eum:
      host: eum.<instana.example.com>
      port: 443
    synthetics:
      host: synthetics.<instana.example.com>
      port: 443
    serverless:
      host: serverless.<instana.example.com>
      port: 443
 
Hinweis: Weitere Informationen zu den Konfigurationsparametern finden Sie .spec.gatewayConfigunter GatewayConfig.

Die folgenden Beispiele zeigen, wie Sie die Datenaufnahme Ihres Akzeptors entsprechend unterschiedlichen Anforderungen konfigurieren können:

  1. Verwenden Sie Subdomains mit einem einzigen Port (443). Dieser Ansatz ermöglicht es Ihnen, nur einen Port (443) freizugeben und gleichzeitig Subdomains zu nutzen, um den Datenverkehr für jeden Acceptor zu unterscheiden.

     spec:
       acceptors:
         agent:
           host: ingress.<instana.example.com>
           port: 443
         opamp:
           host: opamp-acceptor.<instana.example.com>
           port: 443
         otlp:
           http:
             host: otlp-http.<instana.example.com>
             port: 443
           grpc:
             host: otlp-grpc.<instana.example.com>
             port: 443
         eum:
           host: eum.<instana.example.com>
           port: 443
         synthetics:
           host: synthetics.<instana.example.com>
           port: 443
         serverless:
           host: serverless.<instana.example.com>
           port: 443
     
  2. Verwenden Sie eine einzige Domain mit unterschiedlichen Ports. Mit diesem Ansatz können Sie eine einzige Domain verwenden und den eingehenden Datenverkehr anhand der Portnummern unterscheiden. Sie können nur die Custom Edition v 1.3.0 und höher mit einer einzigen Domäne konfigurieren.

     spec:
       acceptors:
         agent:
           port: 1444
         otlp:
           http:
             port: 4318
           grpc:
             port: 4317
         eum:
           port: 1555
         synthetics:
           port: 1666
         serverless:
           port: 1777
     

    In diesem Fall müssen Sie die Konfiguration Ihres Loadbalancers in Ihrem Cluster aktualisieren, um die verschiedenen Acceptor-Ports freizugeben. Siehe „Einrichten von Load Balancern“ und „ DNS “.

Unterstützung für eine einzelne Eingangsdomäne aktivieren

Ihre Custom Edition -Umgebung kann den Datenverkehr für alle Mandanten über eine einzige Basisdomain leiten. Um dieses Verhalten zu aktivieren, konfigurieren Sie die folgende Eigenschaft in Ihrem CoreSpec :

kind: Core
metadata:
  name: instana-core
  namespace: instana-core
spec:
  properties:
    ...
    - name: config.url.format.pathStyle
      value: "true"
    ...
 

Nachdem Sie diese Funktion aktiviert haben, wird die URL „ URL “ für den Zugriff auf die Benutzeroberfläche aller Ihrer „ Instana “-Mandanten unter <basedomain>.com/<unitname>/<tenantname> anstelle von bereitgestellt <unitname>-<tenantname>.<basedomain>.com. Der gesamte eingehende Datenverkehr von Instana kann über einen einzigen A-Eintrag in Ihrer DNS geleitet werden, indem Sie diesen mit der Konfiguration im zweiten Beispiel unter „Gateway-Konfiguration“ verknüpfen.

LoadBalancer -Dienste automatisch erstellen

Hinweis: Die automatische Erstellung von „ LoadBalancer “-Diensten wird auf „ Red Hat OpenShift Container Platform “ (OCP) nicht unterstützt. Um die Registrierung von „ DNS “ auf OCP zu aktivieren, müssen Sie eine Route-Ressource erstellen.

Ihre Custom Edition -Umgebung unterstützt die automatische Erstellung der Dienste „ LoadBalancerKubernetes “ für die Komponente „ gateway-v2 “. Sie müssen die „ LoadBalancer “-Dienste nicht manuell erstellen.

Um diese Funktion zu aktivieren, fügen Sie die folgende Konfiguration zu Ihrem CoreSpec hinzu:

spec:
  gatewayConfig:
    enabled: true
    gateway:
      loadBalancerConfig:
        enabled: true # enables automatic loadbalancer creation
        ip: <your public IP>
        externalTrafficPolicy: Local # default
        annotations:
          your-annotation-key: your-annotation-value
 

Deaktivieren der Beendigung von „ TLS “ in „ Gateway-v2 “

Bevor Sie diese Funktion aktivieren, stellen Sie sicher, dass ein Front-Proxy bereitgestellt wurde, um den gesamten eingehenden Datenverkehr von Instana an den Dienst gateway-v2 weiterzuleiten. Wenn für jeden Akzeptor eigene Ports konfiguriert sind, stellen Sie sicher, dass der Front-Proxy den Datenverkehr an diese Ports weiterleitet. Die Ports auf gateway-v2 müssen eine Eins-zu-Eins-Zuordnung zu den Ports aufweisen, die vom Front-Proxy freigegeben werden.

Ihre Custom Edition -Umgebung unterstützt zudem die Deaktivierung der „ TLS “-Terminierung (d. h. die Annahme von eingehendem Datenverkehr ohne „ SSL “). Diese Option ist nützlich, wenn Sie einen Front-Proxy bereitstellen, der die Beendigung von TLS vor Ihrer Custom Edition -Umgebung übernimmt.

Um dieses Verhalten zu aktivieren, fügen Sie die folgende Konfiguration zu Ihrem CoreSpec hinzu:

spec:
  gatewayConfig:
    enabled: true
    disableTLS: true # disables TLS termination for all ingress traffic
 
Hinweis: Sie müssen die Konfiguration Ihrer „ LoadBalancer “-Dienste nicht ändern, da die Ports des „ gateway-v2 “-Dienstes unverändert bleiben.

Raw-Speicher

Sie müssen eine der folgenden drei Optionen verwenden, um unformatierte Spandaten zu speichern:

  • S3 (oder kompatibel)
  • Google Cloud Storage (GCS)
  • Dateisystem Azure
  • Dateisystem

S3 (oder kompatibel)

Der S3 -Endpunkt ist je nach Region unterschiedlich.

Wenn Sie S3 (oder kompatibel) zum Speichern von unformatierten Daten verwenden möchten, konfigurieren Sie Core wie im folgenden Beispiel gezeigt:

spec:
  storageConfigs:
    rawSpans:
      s3Config:
        # Endpoint address of the object storage.
        # S3 Endpoint Ref: https://docs.aws.amazon.com/general/latest/gr/s3.html#s3_region
        endpoint:
        # Region.
        region: eu-central-1
        # Bucket name.
        bucket: mybucket
        # Prefix for the storage bucket.
        prefix: myspans
        # Storage class.
        storageClass: STANDARD
        # Bucket name for long-term storage.
        bucketLongTerm: mybucket
        # Prefix for the long-term storage bucket.
        prefixLongTerm: myspans-longterm
        # Storage class for objects that are written to the long-term bucket.
        storageClassLongTerm: STANDARD

  # If using IRSA
  # Appropriate IAM Role should be provisioned including IAM policy with sufficient privileges.
  serviceAccountAnnotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-role
 
Hinweis: accessKeyId und secretAccessKey müssen in das Core -Secret aufgenommen werden, wie im Abschnitt „Core-Secret“ angegeben. Alternativ werden IAM-Rollen für Dienstkonten unterstützt.

Google Cloud Storage

Wenn Sie GCS zum Speichern von unformatierten Daten verwenden möchten, konfigurieren Sie Core wie folgt:

spec:
  storageConfigs:
    rawSpans:
      gcloudConfig:
        # Bucket name.
        bucket: mybucket
        # Prefix for the storage bucket.
        prefix: myspans
        # Storage class.
        storageClass: STANDARD
        # Bucket name for long-term storage.
        bucketLongTerm: mybucket
        # Prefix for the long-term storage bucket.
        prefixLongTerm: myspans-longterm
        # Storage class for objects that are written to the long-term bucket.
        storageClassLongTerm: STANDARD

  # If using Workload Identity
  serviceAccountAnnotations:
    iam.gke.io/gcp-service-account: rawspans@myproject.iam.gserviceaccount.com
 
Hinweis: Das serviceAccountKey muss gemäß den Angaben im Abschnitt „Core Secret“ in das Core Secret eingegeben werden. Alternativ wird „Workload Identity “ unterstützt.

Dateisystem Azure

Hinweis: Stellen Sie sicher, dass das Speicherkonto „ Azure “ mit Zugriff auf den Cluster eingerichtet ist. Azure Zur Bereitstellung eines persistenten Volumes ist ein Speicherkontoschlüssel erforderlich.

Führen Sie die folgenden Schritte aus, um das Dateisystem Azure zum Speichern von unformatierten span-Daten zu verwenden:

  1. Erstellen Sie einen geheimen Schlüssel mit dem Speicherkontonamen und dem Datenträger:
    kubectl create secret generic storage-account --from-literal=azurestorageaccountname={storage_account_name} --from-literal=azurestorageaccountkey={storage_account_key} -n instana-core
     
  2. Erstellen Sie einen persistenten Datenträger, indem Sie pv.yamlerstellen:
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: my-nfs-volume
    spec:
      capacity:
        storage: 100Gi
      accessModes:
        - ReadWriteMany
      azureFile:
        secretName: storage-account
        shareName: <storage_account_name>
        readOnly: false
      persistentVolumeReclaimPolicy: Retain
     
  3. Konfigurieren Sie Core wie im folgenden Beispiel gezeigt:
    spec:
      storageConfigs:
        rawSpans:
          pvcConfig:
            accessModes:
              - ReadWriteMany
            resources:
              requests:
                storage: 100Gi
            volumeName: my-nfs-volume
     

Dateisystem

Konfigurieren Sie Core wie folgt, um das Dateisystem zum Speichern von unformatierten Spans zu verwenden:

spec:
  storageConfigs:
    rawSpans:
      pvcConfig:
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 100Gi
        volumeName: my-nfs-volume
        storageClassName: ""
 
Hinweis: Sie müssen konfigurieren pvcConfig, wobei es sich um einen „ PersistentVolumeclaimSpec “ handelt. Das Volume muss über einen Zugriffsmodus ReadWriteMany verfügen.

Datenspeicher

Sie müssen die folgenden Datenspeicher im Abschnitt spec von Corekonfigurieren:

  • cassandra
  • postgres
  • clickhouse
  • elasticsearch
  • kafka

Hinweise:

  • Für jeden Datenspeicher müssen mindestens Adressen konfiguriert werden. Sehen Sie sich das folgende Beispiel an:

    spec:
      datastoreConfigs:
        cassandraConfigs:
          - hosts:
              - <IP address or hostname>
        clickhouseConfigs:
          - hosts:
              - <IP address or hostname>
        postgresConfigs:
          - hosts:
              - <IP address or hostname>
        elasticsearchConfig:
          hosts:
            - <IP address or hostname>
        kafkaConfig:
          hosts:
            - <IP address or hostname>
     

    Ersetzen Sie < IP-Adresse oder Hostname > durch die IP-Adresse oder den Hostnamen des Datenspeichers.

  • Wenn Datenspeicher mithilfe von Operatoren von Drittanbietern im selben Cluster installiert werden, können Sie die Verbindung zu den Datenspeichern datastoreConfigs so konfigurieren, dass die Hostnamen der „ DNS “ innerhalb des Clusters verwendet werden, wie im folgenden Konfigurationsbeispiel gezeigt:

    spec:
      datastoreConfigs:
        cassandraConfigs:
          - authEnabled: true
            datacenter: cassandra
            hosts:
              - <IP address or hostname>
        clickhouseConfigs:
          - authEnabled: true
            clusterName: local
            hosts:
              - <IP address or hostname>
              - <IP address or hostname>
        elasticsearchConfig:
          authEnabled: true
          clusterName: instana
          hosts:
            - <IP address or hostname>
        kafkaConfig:
          saslMechanism: SCRAM-SHA-512
          authEnabled: true
          hosts:
            - <IP address or hostname>
        postgresConfigs:
          - authEnabled: true
            hosts:
              - <IP address or hostname>
     
  • Stellen Sie sicher, dass der korrekte Name für das Cassandra -Data Center (Standardwert: cassandra) im Abschnitt cassandraConfigs der Kernspezifikation über das Attribut datacenter konfiguriert ist.

  • Für Power-Architektur: Stellen Sie sicher, dass der genaue Name des Cassandra -Data Centers (Standardwert: datacenter1) im Abschnitt cassandraConfigs der Kernspezifikation über das Attribut datacenter konfiguriert ist.

  • ClickHouse (Standardwert: local) und Elasticsearch (Standardwert onprem_onprem) akzeptieren einen Clusternamen über das Attribut clusterName .

    Datenspeicher ermöglichen die Konfiguration eines tcp -Ports. Außerdem kann ein http -Port für clickhouse und elasticsearchkonfiguriert werden.

    spec:
      datastoreConfigs:
        clickhouseConfigs:
          - clusterName: local
            hosts:
              - <IP address or hostname>
            ports:
              - name: tcp
                port: 9000
              - name: http
                port: 8123
     

Wenn keine Ports konfiguriert sind, gelten die folgenden Standardwerte:

Tabelle 2. Standardwert für den Datenspeicher
Datenspeicher Standardports
cassandra tcp=9042
postgres tcp=5432
clickhouse tcp=9000, http=8123
elasticsearch tcp=9300, http=9200
kafka tcp=9092

Überschreiben der Standardeinstellungen für die Datenaufbewahrung

Das Überschreiben der Standardaufbewahrungseinstellungen ist optional und sollte nur bewusst erfolgen. Diese Werte für Aufbewahrungseinstellungen werden als Eigenschaften in CoreSpeckonfiguriert.

Einstellungen zur Aufbewahrung von Infrastrukturkennzahlen

Die folgenden Aufbewahrungseigenschaften gelten für die Metrik-Rollup-Tabellen und die aufgelisteten Werte sind die Standardwerte in Sekunden. Der Wert 0 weist das System an, keine Rollups dieser Zeitspanne zu löschen. Ein Wert von Null für Rollups mit geringerer Größe kann dazu führen, dass sich die Festplatten schnell füllen.

kind: Core
metadata:
  name: instana-core
  namespace: instana-core
spec:
  properties:
    - name: retention.metrics.rollup5
      value: "86400"
    - name: retention.metrics.rollup60
      value: "2678400"
    - name: retention.metrics.rollup300
      value: "8035200"
    - name: retention.metrics.rollup3600
      value: "34214400"
    - name: retention.metrics.rawPayload
      value: "2592000"
...
 
Hinweis: Die Detailgenauigkeit des Diagramms richtet sich ausschließlich nach der Länge des ausgewählten Zeitraums. Das bedeutet, dass eine Änderung der Aufbewahrungsdauer für Metrikdaten keinen Einfluss auf die Granularität der Metrikdaten hat, die in den Dashboards von „ Instana “ angezeigt werden. Diese Eigenschaften für die Metrikaufbewahrung dienen nur zur Information und sollten nicht geändert werden.

Einstellungen zur Beibehaltung von Anwendungen

Anwendungsperspektiven und die Endbenutzerüberwachung (EUM) verwenden jeweils dieselben Aufbewahrungseinstellungen für Kurzzeit- und Langzeitdaten. Der Kurzzeit-Speicher speichert die Daten vollständig und ist standardmäßig auf 7 Tage eingestellt. Bei der Langzeitaufbewahrung wird eine zufällige Stichprobe von 1 % der Daten gespeichert; die Standardeinstellung beträgt 13 Monate. Bei Standardeinstellungen und kontinuierlicher Datenerfassung beanspruchen Langzeitdaten etwa die Hälfte des Speicherplatzes von Kurzzeitdaten.

Sie können die kurzfristige Aufbewahrungsdauer auf einen Zeitraum zwischen 2 und 31 Tagen festlegen. Sie können die langfristige Aufbewahrungsdauer auf einen Wert zwischen 31 und 396 Tagen festlegen. Wenn Sie Werte außerhalb dieser Bereiche angeben, schlagen die Dienste von „ Instana “ beim Start fehl.

Neben vollständigen Kurzzeitdaten und Stichproben aus Langzeitdaten speichert „ Instana “ aggregierte Kennzahlen, um die Abfrageleistung zu verbessern. Instana Es ist nicht möglich, die Aufbewahrungsdauer für aggregierte Metriken zu konfigurieren; sie ist standardmäßig auf 31 Tage festgelegt.

kind: Core
metadata:
  name: instana-core
  namespace: instana-core
spec:
  properties:
    - name: config.appdata.shortterm.retention.days
      value: "7"

    - name: config.appdata.longterm.retention.days
      value: "396"
...
 

Änderungen an den Aufbewahrungseinstellungen wirken sich auf unterschiedliche Weise auf die Anwendungsansichten und die Überwachungsdaten der Endbenutzer aus:

  • Kurzfristige Speicherung für Anwendungszwecke: Das System wendet die neue Einstellung nur auf neue Daten an. Es löscht zuvor gespeicherte Daten gemäß der Aufbewahrungsdauer, die zum Zeitpunkt der Speicherung galt. Nach der Änderung passt sich die tatsächliche Datenspeicherdauer schrittweise an den neuen Wert an.
  • Kurzfristige Speicherung für EUM: Das System wendet die neue Einstellung sowohl auf bereits vorhandene als auch auf neue Daten an. Es löscht alle Daten gemäß der aktuellen Aufbewahrungsdauer.
  • Langfristige Speicherung: Das System wendet Änderungen auf alle bestehenden und neuen Langzeitdaten für Anwendungsperspektiven und EUM an.

Sehen Sie sich die folgenden Auswirkungen auf Daten aus Anwendungsperspektiven an:

Beispiele:

  • config.appdata.shortterm.retention.days wird von 7 Tagen auf 14 Tage geändert: Das System löscht Daten, die vor der Änderung gespeichert wurden, sobald sie älter als 7 Tage sind. Es löscht Daten, die nach der Änderung gespeichert wurden, sobald sie älter als 14 Tage sind. Das System benötigt 14 Tage, um einen vollständigen Datenverlauf für „ 14‑day “ zu erstellen. Instana geht jedoch sofort davon aus, dass vollständige Daten für 14 Tage vorliegen, was während der Umstellungsphase vorübergehend zu ungenauen Ergebnissen führen kann.
  • config.appdata.shortterm.retention.days wird von 14 Tagen auf 7 Tage geändert: Das System löscht Daten, die vor der Änderung gespeichert wurden, sobald sie älter als 14 Tage sind. Es löscht Daten, die nach der Änderung gespeichert wurden, sobald sie älter als 7 Tage sind. Das gespeicherte Kurzzeitdatenvolumen schrumpft innerhalb von 14 Tagen auf die neue Größe. Instana beschränkt jedoch Abfragen, die über die letzten 7 Tage hinausgehen, sofort auf Langzeit- oder aggregierte Daten.
  • config.appdata.longterm.retention.days wird von 396 Tagen auf 60 Tage geändert: Das System löscht Langzeit-Messdaten, sobald diese älter als 60 Tage sind. Es löscht im nächsten Bereinigungszyklus alle derzeit gespeicherten Daten, die älter als 60 Tage sind.
  • config.appdata.longterm.retention.days wird von 60 Tagen auf 120 Tage geändert: Das System löscht langfristig erfasste Daten erst, wenn sie älter als 120 Tage sind. Daten, die bereits 60 Tage alt sind, bleiben nun für den verlängerten Zeitraum von 120‑day verfügbar.

Beachten Sie die folgenden Auswirkungen auf die Überwachungsdaten der Endbenutzer:

Beispiele:

  • config.appdata.shortterm.retention.days wird von 7 Tagen auf 14 Tage geändert: Kurzfristige Daten werden gelöscht, sobald sie älter als 14 Tage sind.
  • config.appdata.shortterm.retention.days wird von 14 Tagen auf 7 Tage geändert: Kurzfristige Daten werden gelöscht, sobald sie älter als 7 Tage sind.
  • config.appdata.longterm.retention.days wird von 396 Tagen auf 60 Tage geändert: Alle langfristig erfassten Daten werden gelöscht, sobald sie älter als 60 Tage sind.
  • config.appdata.longterm.retention.days wird von 60 Tagen auf 120 Tage geändert: Alle langfristig erfassten Daten werden gelöscht, sobald sie älter als 120 Tage sind.

Einstellungen für die Speicherdauer bei der synthetischen Überwachung

Die synthetische Überwachung verfügt über eine separate Datenaufbewahrungseigenschaft mit einem Standardwert von 60 Tagen. Über diese Einstellung wird die Beibehaltung der Ergebnisse des synthetischen Tests und der Details des Ergebnisses des synthetischen Tests gesteuert.

kind: Core
metadata:
  name: instana-core
  namespace: instana-core
spec:
  properties:
    - name: config.synthetics.retention.days
      value: "60"
...
 

Sehen Sie sich die folgenden Auswirkungen auf synthetische Überwachungsdaten an:

Beispiele:

  • config.synthetics.retention.days wird von 60 Tagen in 90 Tage geändert: Daten, die vor der Konfigurationsänderung gespeichert wurden, werden gelöscht, wenn sie älter als 60 Tage sind, und Daten, die nach der Konfigurationsänderung gespeichert wurden, wenn sie älter als 90 Tage ist.
  • config.synthetics.retention.days wurde von 60 Tagen in 7 Tage geändert: Daten, die vor der Konfigurationsänderung gespeichert wurden, werden gelöscht, wenn sie älter als 60 Tage sind, und Daten, die nach der Konfigurationsänderung gespeichert sind, werden gelöscht, wenn sie älter als 7 Tage sind.

Anwenden von Kernkonfigurationen

Wenn Ihre Konfigurationsdatei für Core bereit ist, wenden Sie sie wie folgt an:

kubectl apply -f path/to/core.yaml
 

Überprüfen Sie, ob alle Pods ausgeführt werden, bevor Sie wie folgt fortfahren:

kubectl get pods -n instana-core
 

Überprüfen Sie den Status der Ressource „core“ im Namespace „instana-core“:

kubectl get core -n instana-core
 

Das folgende Beispiel zeigt eine Beispielausgabe:

NAME           VERSION   INSTANA VERSION   DB MIGRATION STATUS   COMPONENTS STATUS
instana-core   1.2.0     3.289.589-0       Ready                 Ready
 

Eine Einheit und einen Mieter anlegen

Das Erstellen einer Einheit und eines Tenants ist einfach.

Um eine Einheit und einen Mieter anzulegen, erstellen Sie eine Datei „Unit YAML “, unit.yaml wie im folgenden Beispiel gezeigt:

apiVersion: instana.io/v1beta2
kind: Unit
metadata:
  namespace: instana-units
  name: tenant0-unit0
spec:
  # Must refer to the namespace of the associated Core object that was created previously
  coreName: instana-core

  # Must refer to the name of the associated Core object that was created previously
  coreNamespace: instana-core

  # The name of the tenant
  # Tenant name must match the regular expression pattern `^[a-z][a-z0-9]*$`
  # Tenant name must not exceed a maximum length of 15 characters
  # Tenant name must begin with an alphabetical character
  # Tenant name can consist of alphanumeric characters
  # Characters must be in lowercase
  tenantName: tenant0

  # The name of the unit within the tenant
  unitName: unit0

  # The same rules apply as for Cores. May be ommitted. Default is 'medium'
  resourceProfile: large
 

Wenn Ihre Konfiguration bereit ist, wenden Sie Ihre Einstellungen wie folgt an:

kubectl apply -f path/to/unit.yaml
 

Überprüfen Sie, ob alle Pods ausgeführt werden, bevor Sie wie folgt fortfahren:

kubectl get pods -n instana-units
 

Eine Liste der Einheiten im Namensraum „instana-units“ abrufen:

kubectl get unit -n instana-units
 

Das folgende Beispiel zeigt eine Beispielausgabe:

AME           VERSION   INSTANA VERSION   DB MIGRATION STATUS   COMPONENTS STATUS
instana-unit   1.2.0     3.289.589-0       Ready                 Ready
 

Geben Sie Toleranzen und den Knotenselektor für IBM Z® und LinuxONE ( s390x ) an

Hinweis: Dieser Abschnitt gilt nur für die Installation der Custom Edition auf IBM Z® und LinuxONE ( s390x ).

Fügen Sie die folgenden Zeilen in die Datei unit.yaml ein, um die Toleranzen und den Knotenselektor festzulegen

 spec:
   tolerations:
     - key: node.instana.io/monitor
       operator: Equal
       effect: NoSchedule
       value: "true"
   nodeSelector:
     node-role.kubernetes.io/monitor: "true"
 

Zusatzfunktionen aktivieren

Einige Funktionen sind in einem selbst gehosteten Back-End standardmäßig nicht aktiviert. Sie können diese Funktionen mithilfe zusätzlicher Konfigurationsoptionen aktivieren.

Weitere Informationen zu den optionalen Funktionen und deren Aktivierung finden Sie unter „Optionale Funktionen aktivieren “.