Grpc# Amorphie APM Tracking
## Tespitler - 13/9/2024
Uctan uca temel hedefler;
* Kullanici islemlerini anlamak. (Baslangic noktasi : **user** -> TCKN)
* Request by Request surecini anlamak. (Baslangic noktasi : **X-Request-Id**)
* X-Request-Id surec icinde is akisi ise **InstanceId** ve Zeebe **ProcessId**(s) sahibi olacaktir
**Login sonrasi kullanici sessionu JTI degeridir.**
### Meeting Notes
- [ ] @mehmettosun : Loginde, input edilen tckn header eklensin client side tarafinda.
- [ ] @mehmettosun : Androidde device id tekilliginden emin olunmasi. X-Token-Id redact edilmesinin engellenmesi.
- [ ] @mehmettosun : Son islemleri, tckn ve device id ile filtreleyerek test edip farkliliklarin kokenini duzeltmek lazim.
- [ ] @mehmettosun : amorphie projelerinde Id gruplama
- [ ] @mehmettosun : Workflow manager transitionlarda X-Workflow-name headeri gecerek wf ismide gecsin. X-Workflow-Id (Instance-id) X-Customer add also.
- [ ] @mehmettosun : **X-Request-Id** deki guid hypensiz eklesin header.
- [ ] if trace = wf icin instanceid hypensiz, if trace = bff, direct call icin x-request-id hypensiz
- [ ] @mehmettosun : HttpWorker ve SetState zeebe instance bilgileri. Ayrica paketlenmis headerlarda elk arama yapilamadigi icin ayrica eklenmesi.
- [ ] @mehmettosun : dapr zeebe command binding. command name ve correlation key icermiyor
- [ ] @Aydemir apisix-x2 ve PROD-APISIX-X2 konsolidasyionu ve isim degisikligi ayni zamanda kontrolu
- [ ] @Aydemir APISIX node dusmesi takibi. Tum podlar tek tek metric alarak yansitma yapilacak.
- [ ] @Aydemir APISIX error loglarinin prod ortamina tasinmasi. anomaly ve alert mekanizmalarinin kurgulanmasi.
- [ ] @aydemir Apisix Pluginlerinin calisma durumun takibi, ve her bir calismanin X-Request-ID ile loglandigindan emin olunmasi.
- [ ] @mehmettosun Zeebe worker latency takibi.
> STRESS TEST
> Vadesiz hesap acma ve kapama akislarinin tetiklenmesi ile.
> Kullanici basina 20 hesap acip akabinde 20 side kapanacak sekilde. Farkli doviz kodlarinda
> JMeter uzerinde long pooling yaparak.
> 10 kulllanici.
> Her 20 ac kapadan sonra yeniden login.
> View ler de cekilerek
> - [ ] @Taylan Stress Test, postman collection Cemilden alinacak.
### Amorphie Workflow
* [ ] */workflow/instance/cf476fa0-8656-1141-bfab-b5e344d72a19/transition/saving-account-opening-input-approve* linki yapisi */workflow/instance/{instanceid}/transition/saving-account-opening-input-approve* seklinde mi loglansa ?
* [x] User - TCKN
* [x] X-Request-Id
* [ ] Workflow Name (X-Amorphie-Workflow olarak method icinde eklenebilir mi ? )
* HttpWorker Log Detayi. Bu arada BFF ler APISIX uzerinden foraya kadar takip yapabiliyor. Ama HTTP worker kesiliyor !
* [x] User - TCKN
* [x] X-Request-Id
* [ ] Workflow Name (Workflow ve Instance worker icinde X-Amorphie-xxxxx seklinde sabit headerlara eklenebilir. Hatta state, transition gibi bilgileride gecebiliriz, zenginlesir. )
* [ ] Instance-Id
* [x] Zeebe Process Name
* [ ] Zeebe Process Id *(http.request.headers.X-Zeebe-Process-Instance-Key
[REDACTED] gorunuyor)*
* [x] Target URL Information
* Zeebe Publish Message
- [ ] Grpc call ile atilan zeebe mesasinda, instance processid, workflow bilgileri bulunmuyor.
- [ ] Mesaj
- [ ] zeebe processid (yani varsa correlationKey)
- [ ] process instanceid
- [ ] X-Request-Id
### Zeebe
* Health Monitoring
*
* Operation Monitoring
* [ ] Simply Zeebe Monitor tarafina bir push atarak variablelari gizleyebilir miyiz. Prod islem akisi gormek icin sadece. Variable donen rest var apide, o her ui tarafina bos donerse sorun basitce cozulebilir.
* [ ] Backoffice icerisinde Simply Monitor tarafina process linklerinin ui icine konmasi
### Apisix
* Health Monitoring
*
* Operation Monitoring
* Plugin gecisleri APM kaydi olusturmuyor.
### Skywalking/Zipkin
Future konusu
-------
# [OBSOLUTE]
## Temel Kavramlar
### Trace, Metric, Log
Sistemler tarafından işlenen her bir işlem için oluşan telemetri verilerileridir. İşlemler kullanıcı veya diğer sistemler tarafından tetiklenebilirken sistemin kendisi tarafından tetiklenebilir. Sistemler işlemleri için üç temel bilgi yayınlar.
#### Trace
Bir işlemin (**trace**) sistemler üzerindeki tüm yolculuğunu tanımlar.
Bir işlemin hiyerarşik olarak zaman gecirdiği alt iş parçacıkları (**span**) şeklinde takip edilir.
Her bir işlem bir tekil anahtar alır. Bu telil anahtar ULID olarak tanımlanır.
##### Span
Bir span temel olarak aşağıdaki bilgileri içerir
* Yapılan işlemin adı. `/account/bff/get-account-list` veya `load-view/workflow/checking-account-opening` gibi. İşlem isimlerinde instance veya sorgu parametreleri gibi veriler dahil edilmez.
* Başlama ve bitiş zamanı. İş parçacığının başladığı ve bittiği an timestamp olarak atanır. Format ISO 8601 formatındadır.
* Attributes: key-value seklinde iş parçacığını ayrıştıracak temel verileri içerir.
* Events: Span içerisinde anlık oluşan durumlar kayıt altına alınır.
* Parent's Span identifier.
* Links to zero or more causally-related Spans (via the SpanContext of those related Spans).
* SpanContext information required to reference a Span. See below.
### Timing
NTP
https://gist.github.com/mutin-sa/eea1c396b1e610a2da1e5550d94b0453
## Transactions
İki temel parametre ile correlated tracking hedeflenmektedir.
Tüm Methodlar için **X-Request-ID**. Özellikle Http GET servisleri için correlation anahtarıdır.
Amoprhie Workflow için Methodlar için **Instance-Id**
## Amoprhie Workflow
İş akışları sürecinin detaylı analizi ve hareketleri için **Instance-Id** üzerinden correlasyon kurulur.
İş akışı ile ilgili tüm servis başlıklarında **X-Instance-Id** (GUID) eklenerek yapılır. Ayrıca her bir sorgu için istemci tarafında **X-Request-Id** (GUID) eklenecek.
### Client
Flutter.Core tarafında http-client paketi her türlü request ve response datasını bir http servisine iletir.
İletilicek format;
### APISIX
### Amoprhie
### Zeebe
### http-worker