> For the complete documentation index, see [llms.txt](https://docs.kangal.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kangal.dev/tr/production-operasyonlari/troubleshooting.md).

# Sorun giderme

Read-only evidence ile başlayın. Restart veya scale işleminden önce UTC zamanını, environment, release tag, Helm revision, incident/change ID, etkilenen tenant ve route'ları, ilk belirtiyi ve last-known-good zamanını kaydedin.

## İlk beş dakika

```bash
kubectl config current-context
helm status "$RELEASE" -n "$NAMESPACE"
kubectl -n "$NAMESPACE" get deploy,pod,svc,ingress,hpa,pdb
kubectl -n "$NAMESPACE" get events --sort-by=.lastTimestamp | tail -n 50
curl -sS -o /dev/null -w 'health=%{http_code}\n' "$PUBLIC_URL/health"
curl -sS -o /dev/null -w 'ready=%{http_code}\n' "$PUBLIC_URL/ready"
```

Ardından release ve component label ile log toplayın. Container restart olmadıysa `--previous` eklemeyin. Authorization header, cookie, connection string, private key ve customer data temizlenmeden raw log'u support kanalına yapıştırmayın.

## Probe'ları doğru yorumlama

* `/health`, API process HTTP sunabiliyorsa `200` döndürür. MongoDB, Redis, upstream veya provider integration kontrol etmez.
* `/ready`, MongoDB ve Redis'e ping atar. İki dependency'den biri başarısızsa `503` döndürür.
* Healthy fakat unready pod hayatta kalmalı, Service endpoint listesinden çıkmalıdır. Sürekli restart etmek dependency'yi onarmaz.

## Belirti matrisi

| Belirti                                    | Olası sınır                                   | İlk kontrol                                                    |
| ------------------------------------------ | --------------------------------------------- | -------------------------------------------------------------- |
| `/health` başarısız                        | Process, pod, Service, ingress veya TLS       | Pod state, log, endpoint, ingress event                        |
| `/health` 200; `/ready` 503                | MongoDB veya Redis                            | DNS, TLS/auth, network policy, primary/Redis availability      |
| Frontend açılıyor, API çağrıları başarısız | Frontend API URL, ingress path, CORS          | Browser request URL, API Service, configured origin            |
| API ready, login başarısız                 | Signing key, Redis session, identity provider | Auth log, Secret version, callback URL, provider status        |
| Queue depth büyüyor                        | Worker, shared Redis, provider outage         | Worker replica, worker health, pending/retry/dead-letter count |
| Config rollout ilerlemiyor                 | Data plane bağlantısı veya NACK               | Heartbeat, desired/applied version, checksum, rollout phase    |
| Rollback/snapshot 503                      | MongoDB transaction desteklemiyor             | Topology, writable primary, replica-set URI option             |
| Ingress 502/504                            | Service endpoint, network policy, timeout     | Endpoint, pod readiness, ingress log, upstream latency         |
| TLS hatası                                 | Certificate, SNI, DNS veya trust chain        | Sunulan certificate, Certificate condition, DNS target         |
| Helm upgrade timeout                       | Scheduling, probe, PDB, image pull, hook      | Event, Pending reason, image status, readiness, PDB            |

## API crash loop

1. Terminated container reason ve previous log'u okuyun.
2. Production'da değerini okumadan `SECRET_KEY` varlığını doğrulayın.
3. MongoDB/Redis environment key isimlerini ve Secret projection'ı kontrol edin.
4. Root filesystem read-only ise writable `/tmp` ve projected CA/token path'lerini doğrulayın.
5. Image architecture ve immutable tag'in cluster ile eşleştiğini kontrol edin.
6. Replica artırmadan önce memory limit ve `OOMKilled` durumuna bakın.

Pod'u başlatmak için production signing key yerine geçici değer koymayın; session'ları geçersiz kılar ve encrypted data erişimini bozabilir.

## MongoDB hataları

Writable primary, majority, member health ve last committed point'i belirlemek için provider tool'ları veya read-only `hello`/replica status kullanın. URI'nin doğru replica-set ya da sharded topology ile TLS/auth option'larını içerdiğini doğrulayın.

Writable majority yokken configuration rollout, snapshot, rollback ve restore write'larını durdurun. Replica reconfiguration'ı force etmeyin, member çıkarmayın, standalone database'e downgrade etmeyin ve election tamamlanabilirken restore yapmayın.

Exact gateway rollback ve transaction-consistent configuration capture, transaction yoksa ilk write'tan önce fail olur. Topology desteğini geri getirin, live ve snapshot checksum'larını karşılaştırın, ardından yeni fenced rollout başlatın.

## Redis ve background job

`/ready` Redis'e bağlıdır. Redis job kabul edemiyor veya okuyamıyorsa durable job producer inline execution yerine `503` döndürür. Worker acknowledge etmeyi bırakıp retry eder; Redis geri geldiğinde pending entry'ler lease sonrasında reclaim edilir.

Kontrol edin:

* API ve worker'ın hedeflenen Redis endpoint'ini kullanması;
* multi-region producer ve worker'ların aynı durable-job endpoint ve prefix'i kullanması;
* Redis persistence, memory, eviction, latency, stream group, pending entry ve dead-letter büyümesi;
* kayıtlı her payload version için en az bir healthy worker bulunması.

Incident'i çözmek için production'ı in-memory backend'e geçirmeyin veya Redis'i flush etmeyin. Replay öncesi external side effect'in tamamlanıp tamamlanmadığını doğrulayın ve job ya da workload idempotency key kullanın.

## Stale veya offline data plane

Offline data plane, doğrulanmış imzalı last-known-good bundle ile çalışmaya devam edebilir. Stale bundle süresiz çalışma izni değildir.

1. Control plane erişimi, DNS, TLS, node token ve client-certificate fingerprint'i karşılaştırın.
2. Desired/current version ve checksum, bundle issue time, last heartbeat, pending report ve NACK reason kaydedin.
3. Cache ve anti-rollback storage'ı koruyun; korumayı aşmak için cache envelope'u düzenlemeyin veya trust storage'ı silmeyin.
4. Bağlantıyı onarıp doğru imzalanmış daha yeni bundle yayınlayın.
5. Online mode, temizlenmiş stale state, ACK, checksum convergence ile değişmeyen ve yeni route'ları doğrulayın.

Seçili node'larda geçerli last-known-good snapshot yoksa veya rollout policy failure threshold aşılmışsa promotion'ı durdurun.

## NetworkPolicy ve ingress

Aktif policy'leri render edip gerekli flow'larla karşılaştırın. API ve worker DNS, MongoDB, Redis, identity, email, observability, provider ve upstream egress'e ihtiyaç duyabilir. Frontend API egress'e; data plane control plane ve upstream erişimine ihtiyaç duyar.

Security policy izin veriyorsa aynı namespace, ServiceAccount, DNS ve policy label'ını kullanan kısa ömürlü diagnostic pod'dan test edin. Policy sorununu unrestricted internet egress açarak çözmeyin; gerekli destination'ı ekleyip testi saklayın.

mTLS için TLS terminator, trusted değerleri inject etmeden önce client tarafından gönderilen verification/certificate header'larını silmelidir. Doğrudan pod erişimi engellenmezse caller trust boundary'yi bypass edebilir.

## Certificate hatası

1. Certificate, CertificateRequest, issuer, DNS challenge ve Secret reference'ı inceleyin.
2. Current certificate serial, validity ve Secret resource version kaydedin.
3. Issuance onarılırken son geçerli TLS Secret'i yerinde tutun.
4. Ingress üzerinden gerçekten sunulan certificate'i `openssl s_client` ile doğrulayın.
5. Public TLS path üzerinden `/health` kontrol edin.

İlk recovery adımı olarak canlı TLS Secret'i silmeyin.

## Backup veya restore job hatası

* Existing PVC'nin bound, backup için writable, restore için read-only olduğunu doğrulayın.
* Değeri yazdırmadan Secret'ta `MONGODB_URL` bulunduğunu kontrol edin.
* Database DNS, TLS/auth, NetworkPolicy, image pull, deadline ve storage alanını inceleyin.
* Archive ve manifest adlarının yan yana olduğunu, SHA-256'nin eşleştiğini doğrulayın.
* Belirsiz target'a karşı `--drop` retry etmeyin; önce database identity'yi tekrar teyit edin.

## Helm rollout hatası

`helm status`, release history, event, pod scheduling, image pull, probe, PDB, HPA ve hook'ları inceleyin. `--atomic` önceki revision'ı zaten geri getirmiş olabilir. Başka rollback çalıştırmadan önce active revision ve image digest'i doğrulayın.

Workload ready olduktan sonra smoke test başarısızsa log ve evidence'i koruyun, ardından önceki known-good revision'ı kullanın. Database/configuration rollback'i ayrı yönetin.

## Incident durdurma koşulları

Tenant leakage, beklenmeyen mutation, yanlış restore target, bilinmeyen database writer, error-budget breach, evidence expiry, başarısız cleanup veya onaylı scope dışı etki görülürse recovery ya da drill'i durdurun. Redacted log, request/correlation ID, version ve checksum, topology state, timeline ve uygulanan adımlarla escalation yapın.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.kangal.dev/tr/production-operasyonlari/troubleshooting.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
