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>
Voraussetzungen
- Das Plug-in „ Instana “ kubectl muss installiert sein.
- Erforderliche Datenspeicher müssen betriebsbereit sein. Siehe „Einrichten von Datenspeichern “.
- Der „ Instana Enterprise“-Operator muss installiert sein.
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=yamlErstellen 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.
| 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 “. |
kubernetes.io/tls. sein.Führen Sie die folgenden Schritte aus, um den geheimen Schlüssel instana-tlszu erstellen:
Erstellen Sie die Datei
san.confwie 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.
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
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>
<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
datastoreConfigsTeil derconfig.yamlDatei, der im Abschnitt „Überprüfen der endgültigen Konfigurationsdatei mit Benutzernamen und Passwörtern“ beschrieben ist, in diese „Coreconfig.yamlSecret“-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 2048Ein 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.
- Erstellen Sie den Schlüssel mit dem folgenden Befehl:
openssl genrsa -aes128 -out key.pem 2048 - Erstellen Sie das Zertifikat mit dem folgenden Befehl:
openssl req -new -x509 -key key.pem -out cert.pem -days 365 - Kombinieren Sie die beiden zu einer Datei, indem Sie den folgenden Befehl ausführen:
cat key.pem cert.pem > sp.pem
- Erstellen Sie den Schlüssel mit dem folgenden Befehl:
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.yamlSie können mehrere Zertifikate verknüpfen, indem Sie die Datei
config.yamlkonfigurieren. 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
licenseszu 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
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:
host Feld leer, wird die Basisdomain als Standardwert verwendet; ist das Feld „Port“ leer, lautet der Standardwert 443spec:
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
.spec.gatewayConfigunter GatewayConfig.Die folgenden Beispiele zeigen, wie Sie die Datenaufnahme Ihres Akzeptors entsprechend unterschiedlichen Anforderungen konfigurieren können:
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: 443Verwenden 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: 1777In 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
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
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
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
serviceAccountKey muss gemäß den Angaben im Abschnitt „Core Secret“ in das Core Secret eingegeben werden. Alternativ wird „Workload Identity “ unterstützt.Dateisystem Azure
Führen Sie die folgenden Schritte aus, um das Dateisystem Azure zum Speichern von unformatierten span-Daten zu verwenden:
- 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 - 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 - 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: ""
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:
cassandrapostgresclickhouseelasticsearchkafka
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
datastoreConfigsso 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 AbschnittcassandraConfigsder Kernspezifikation über das Attributdatacenterkonfiguriert ist.Für Power-Architektur: Stellen Sie sicher, dass der genaue Name des Cassandra -Data Centers (Standardwert:
datacenter1) im AbschnittcassandraConfigsder Kernspezifikation über das Attributdatacenterkonfiguriert ist.ClickHouse (Standardwert:
local) und Elasticsearch (Standardwertonprem_onprem) akzeptieren einen Clusternamen über das AttributclusterName.Datenspeicher ermöglichen die Konfiguration eines
tcp-Ports. Außerdem kann einhttp-Port fürclickhouseundelasticsearchkonfiguriert 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:
| 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"
...
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.dayswird 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.dayswird 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.dayswird 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.dayswird 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.dayswird von 7 Tagen auf 14 Tage geändert: Kurzfristige Daten werden gelöscht, sobald sie älter als 14 Tage sind.config.appdata.shortterm.retention.dayswird von 14 Tagen auf 7 Tage geändert: Kurzfristige Daten werden gelöscht, sobald sie älter als 7 Tage sind.config.appdata.longterm.retention.dayswird 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.dayswird 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.dayswird 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.dayswurde 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
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 “.