# Scope PoC
- Monitoring OpenShiftu, VMWare
- Automatická instrumentace aplikací
- Vazby mezi komponenty aplikací a infrastruktury
- Automatická detekce probléml a root-cause
- Analýza traců a metrik
- Log monitoring
- End User Monitoring (website monitoring)
- Syntentické testy
- SLO/SLI
- Vlastní dashboardy
- Integrace dat z externích systémů (Prometheus) a OpenTelemetry
- Příklady spouštění automatizovaných akcí
- Instana REST API pro automatizovanou konfiguraci a integraci
Další možná témata:
- Pipeline feedback - pro CI/CD team
- Custom eventy
# Technické požadavky pro Instana PoC
Tento dokument shrnuje hlavní technické požadavky na PoC instalaci monitorovacího systému IBM Instana. Sizing je pro tzv. **single-host** instalaci.
## Minimální hardwarové požadavky pro Instana backend server
Platí pro standardní [**single-node PoC instalaci**](https://www.ibm.com/docs/en/instana-observability/1.0.311?topic=backend-installation-options#d8e15__title__1), kde všechny backendové komponenty běží na jednom serveru (výjimkou je point-of-presence (PoP) pro syntetické testy, který se obvykle instaluje na vnější samostatný server). PoC předpokládá obecně *malý objem* sbíraných dat.
### Požadavky na CPU a paměť
Detailní popis požadavků je uveden v dokumentaci na [tomto odkaze](https://www.ibm.com/docs/en/instana-observability/1.0.311?topic=cluster-system-requirements)
Základní minimální instalaci (Instana core) lze doplnit řadou volitelných funkčních modulů. Tyto moduly lze zapínat a vypínat i po instalaci, je však nutné striktně dodržet příslušné požadavky na CPU/RAM (tyto jsou vyžadovány jako tzv. *Resource Requests* vnitřním Kubernetes clusterem). V tabulce jsou uvedeny požadavky pro základní minimální instalaci a doporučené volitelné moduly. Celkový součet CPU/RAM je uveden pro případ, že se použijí všechny volitelné moduly současně.
| Modul | CPU cores | RAM (GB) | poznámka |
| --- | --- | --- | --- |
| **Instana core** | 16 | 64 | základní instalace |
| Log management | 1 | 5.5 | lze insatlovat později|
| Automation framework | 1 | 4 | lze instalovat později |
| End user monitoring | 1 | 4 | lze instalovat později |
| Self-monitoring| 1 | 2 | doporučeno se základní instalací |
| Synthetic monitoring | 1 | 5 | lze aktivovat později |
Celkem tedy 21 CPU jader a 85 GB RAM. Doporučujeme zaokrouhlovat nahoru ;)
Ideální zaokrouhlený sizing je 32 CPU a 128 GB RAM, který zaručuje dostatečnou rezervu.
### Storage
Jednotlivá datová úložiště budou namapována jako adresáře uvnitř Instana serveru (postup je v dokumentaci). Pro PoC je možné použít thin-provisioning.
Dokumentace uvádí následující pořadavky na storage volumes:
- root directory 100GB
- data directory (Elastisearch, PostgreSQL, Kafka) `mnt/instana/stanctl/data` 150GB
- metrics (Cassandra) `/mnt/instana/stanctl/metrics` 300GB
- analytics (ClickHouse) `/mnt/instana/stanctl/analytics` 500GB
- objects (sapns, Synthetics, EUM) `/mnt/instana/stanctl/objects` 250GB
- cluster data `/var` ~100GB
Poznámka: požadavky na disky nejsou tak striktní jako v případě CPU a paměti. Lze je případně upravit (snížit), pakliže nelze použit thin-provisioning.
**Retence dat** je ve výchozím nastavení definována takto:
- website monitoring - všechna data po dobu 7 dní, agregovaná data 1 rok
- tracing - vše 7 dní, aplikační metriky 31 dní, agregovaná data 1 rok
- logy - vše 7 dní (lze prodloužit na 30, 60 nebo 90 dní)
- syntetické transakce - všechny testy 60 dní
- infrastrukturní metriky - 1s granularita po 24 hodin, 1min agregace 1 měsíc, 5min agregace 3 měsíce, 1h agregace 13 měsíců
- eventy - 13 měsíců
- konfiguace a topologie - neomezeno
Více [v dokumnetaci](https://www.ibm.com/docs/en/instana-observability/1.0.310?topic=policies#data-retention-policy__title__1)
### Operační systém serveru
Doporčujeme virtuální linuxový x86_64 systém kompatibilní s RHEL 9, např. Alma Linux.
Nejsou stanoveny žádné extra nastavení pro virtualizaci.
Viz [dokumnetace](https://www.ibm.com/docs/en/instana-observability/1.0.311?topic=cluster-system-requirements#supported-platforms-and-operating-systems__title__1)
Příprava a konfigurace operačního systému včetně vytvoření a namapování diskových adresářů je podrobně popsána [zde v dokumentaci](https://www.ibm.com/docs/en/instana-observability/1.0.311?topic=cluster-preparing).
## HW požadavky na Instana Agenty
Agent typicky vyžaduje 0.5 CPU core a 781MB RAM. Instalace probíhá do adresáře `/opt.`. Agent vyžaduje privilegovaný přístup.
V Kubernetes (a v OpenShiftu) se spolu s Instana agentem (jeden agent na worker node) instaluje i Operátor a jeden pod, který monitoruje cluster (10m CPU, 128Mi RAM).
Pro sběr logů (volitelný modul) se používá OpenTelemetry Collector, který se instaluje podle potřeby na zdrojový host.
## HW požadavky na Synthetic PoP
Pro spouštění syntetických testů použijeme samostatný server. Minimální parametry pro PoC jsou
- 8 CPU cores
- 8 GB RAM
- OS RHEL-compatible
Server bude mít přímou konektivitu na Instana server a na externí repozitáře.
*Poznámka:* PoP se instaluje jako K8s deployment, čili je možné jej spustit i v OpenShiftu. Při instalaci na samostatný server použijeme minimalistický single-node cluster ([k3s](https://docs.k3s.io/) nebo [k0s](https://k0sproject.io/))
## Síťové požadavky
### Porty na serveru
| Port | Směr | Protokol | Zdroj | Popis |
| --- | --- | --- | --- | -- |
| 22 | inbound | TCP | z venku | SSH |
| 443 | inbound | TCP/HTTPs | z venku | port pro všechny vstupy: UI, REST API, EUM, OTel, agent acceptor |
| 443 | outbound | TCP/HTTPS | z venku | online přístup pro agenty a backend |
| 8443 | inbound | TCP | z venku | agent acceptor (nepovinný) |
| všechny | | TCP/UDP | interní 10.42.0.0/16 a 10.43.0.0/16 | Subnety pro interní komponenty Instany. Platí pouze pro multi-host deployment. Předpokládáme single-host. |
| všechny | | TCP/UDP | localhost | Především porty na monitorovaných serverech - agent se senzory komunikuje přes síťové sockety. Na OpenShiftu nutno povolit v NetworkPolicies |
[Odkaz na dokumentaci](https://www.ibm.com/docs/en/instana-observability/1.0.311?topic=cluster-system-requirements#networking-requirements__title__1)
### Interní domény a DNS
Výchozí způsob routování vstupních dat a requestů je v Instaně implementován na L7 aplikační vrstvě pomocí subdomén, které je před instalací nutné nastavit na firemním DNS (Instana neposkytuje vlastní DNS službu). Všechny uvedené domény směrují traffic na IP adresu síťového rozhraní Instana backend serverů, čili stejná IP pro všechny domény.
| Doména | Popis | Příklad nastavení |
| --- | --- | --- |
| Base domain `<base_domain>` | FQDN hostname pro Instanu. | `instana.ceps.cz` |
| Agent acceptor subdomain `agent-acceptor.<base_domain>` | Doména pro data přicházející od Agentů. | `agent-acceptor.instana.ce` |
| OTLP HTTP acceptor subdomain `otlp-http.<base_domain>` | Doména pro OpenTelemetry data přes OTLP/HTTP protokol. | `otlp-http.instana.ceps.cz` |
| OTLP gRPC acceptor subdomain `otlp-grpc.<base_domain>` | Doména pro OpenTelemetry data přes OTLP/gRPC protokol. | `otlp-grpc.instana.ceps.cz` |
| **Tenant** a **unit** subdoména `<unit-name>-<tenant-name>.<base_domain>` | Hlavní doména na kterou se přihlašují uživatelé. | `poc-ceps.instana.ceps.cz` |
Pro všechny uvedené domény musí být vystaven společný TLS certifikát (firemní nebo self-signed).
Viz také [dokumentace](https://www.ibm.com/docs/en/instana-observability/1.0.311?topic=cluster-preparing)
### Přístupy na externí domény
Instana backend sever a agenti vyžadují v online režimu (preferovaný a předpokládaný) přístup k následujícím veřejným doménám na standardním HTTPs portu 443. Lze nastavit komunikaci skrze HTTP/s proxy.
| URL | uživatel | účel |
| --- | --- | --- |
| https://artifact-public.instana.io | agent, backend | images, sensory, artefakty, aktualizace|
| https://instana.io | backend | licence a statistiky |
| https://setup.instana.io | agent | instalační skript |
| https://icr.io/instana | agent | container images |
| https://packages.instana.io | server, agent | instalační balíčky |
| https://agents.instana.io/helm | agent, PoP | Helm charts |
V dokumentaci se ještě uvádějí URL dalších externích služeb pro různé analytické a compliance reportování, které by měly být povoleny na uživatelských prohlížečích.
[Odkaz na dokumentaci](https://www.ibm.com/docs/en/instana-observability/1.0.311?topic=requirements-instana-self-hosted-deployments)
### HTTP/s proxy
HTTP/s proxy (URL, port) lze nastavit jak na backend serveru, tak na agentech.
### SMTP server
V případě vlastní authentifiakce Instana nově vytvořeným uživatelům odesílá verifikační email. Je proto nutné využít SMTP server, ze kterého se emaily budou rozesílat.
Pokud není možné nebo praktické využít stávající firemní SMTP, lze uživatelské účty vytvořit záložním postupem lokálně, ovšem za cenu ztráty flexibility a komfortu při správě uživatelů.
## PoC architektura
[Draw.io link](https://viewer.diagrams.net/?tags=%7B%7D&lightbox=1&highlight=0000ff&edit=_blank&layers=1&nav=1&dark=auto#G19Gw9WN6qt5CKv8Zz583abP1Wf5oJsg1K)
## Požadavky na instalaci agentů do OpenShiftu
#### Minimální požadavky na zdroje
- Jeden agent per Worker node (`DaemonSet`)
- Pro jeden agent pod:
```yaml!
resources:
requests:
cpu: 0.5
memory: "768Mi"
limits:
cpu: 1.5
memory: "768Mi"
```
- Pro k8s sensor (`Deployment replicas=1`):
```yaml
resources:
requests:
cpu: "10m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "1536Mi"
```
#### Síťové požadavky
- Ve výchozím *online* režimu musí mít agent přístup k externím repositářům, viz kapitola [Přístupy na externí domény](#Přístupy-na-externí-domény)
- Lze nastavit HTTP(S) proxy
- Musí být prostupnost mezi namespace `instana-agent` a namespacy monitorovaných aplikací na portech `42699` a `4317`/`4318`. Podrobnosti [zde](https://www.ibm.com/docs/en/instana-observability/1.0.312?topic=requirements-instana-agent#network-requirements__title__1)
#### Namespace a ServiceAccount
Pody Instany běží v namespace `instana-agent`. Agent vyžaduje privilegovaný SCC.
```bash!
oc login -u system:admin
oc new-project instana-agent
oc adm policy add-scc-to-user privileged -z instana-agent -n instana-agent
oc adm policy add-scc-to-user anyuid -z instana-agent-remote -n instana-agent
```
Více viz [dokumentace](https://www.ibm.com/docs/en/instana-observability/1.0.312?topic=openshift-checking-agent-prerequisites-red-hat#setting-up-project-and-service-accounts__title__1)
#### Instalační metody:
- Operator
- [Helm](https://www.ibm.com/docs/en/instana-observability/1.0.312?topic=openshift-installing-agent-red-hat#installing-by-using-the-helm-chart__title__1) (**doporučeno pro PoC**)
- YAML
Helm repo: https://agents.instana.io/helm
Helm chart source: https://github.com/instana/helm-charts
#### Poznámky k funkci agenta v Kubernetes
- Selektivní custom deployment agentů se řeší přes node labels a taints.
- Konfigurace agenta je standardně unitř secretu v `instana-agent` namespacu, ale lze využít GitOps a konfiguraci spravovat v git repositáři. Pro sensitivní data (hesla) lze napojit Vault.
- Podle typu aplikačních workloadů bude případně potřeba nastavit některé parametry na monitorovaných podech/containerech, typicky env. variables.
- Auto-instrumentace pro vybrané runtimes (NGINX, Node.js, .NET Core, Ruby, Python) se provádí přes admission webhook připojením init containeru k aplikačnímu podu. AutoTrace webhook se instaluje jako samostatný Helm deployment.
- Selektivní auto-instrumentace aplikací se řídí speciálními labely (podů, namespaců)
Celý postup instalace na OCP je v produktové dokumentaci [na tomto odkaze](https://www.ibm.com/docs/en/instana-observability/1.0.312?topic=agents-installing-red-hat-openshift).