Files
OmniRoute/docs/i18n/yo/docs/ops/MONITORING_GUIDE.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

34 KiB

Monitoring & Observability Guide (Yorùbá)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Ní ṣókí: OmniRoute ní àbójútó ìlera tí a kọ sínú rẹ̀, autopilot olùpèsè, ìtọ́pinpin ìpín lílò, àti àwọn ìkọ́ fún àkíyèsí. Ìtọ́sọ́nà yìí ṣàlàyé pátákó ìṣàkóso, àwọn ìkìlọ̀, àti ìṣàwárí àti àtúnṣe ìṣòro.

Àwọn orísun:

  • src/lib/monitoring/observability.ts — àwòrán ìpamọ́ àkíyèsí
  • src/lib/monitoring/comboHealthAutopilot.ts — autopilot ìlera àkópọ̀
  • src/lib/monitoring/providerHealthAutopilot.ts — autopilot olùpèsè
  • src/lib/monitoring/providerHealthMatrix.ts — mátríìsì ìlera olùpèsè
  • src/lib/localHealthCheck.ts — àyẹ̀wò ìlera agbègbè
  • src/lib/tokenHealthCheck.ts — ìlera ìsọ̀tun token
  • src/lib/proxyHealth.ts — cache ìlera proxy (a ṣàlàyé rẹ̀ nínú PROXY_GUIDE.md)

Àwọn Ojú-ìwé Pátákó Ìṣàkóso

/dashboard/health (Ìlera Ètò)

Pátákó ìṣàkóso ìlera àgbà ń ṣàfihàn:

Abala Ohun tí ó ń ṣàfihàn
Ipò server Àkókò tí ó ti ń ṣiṣẹ́, version, port, àwọn ìsopọ̀ tó ń ṣiṣẹ́
Database Ìsopọ̀, ìdúróṣinṣin, ìwọ̀n WAL, àwọn ìṣíkiri àìpẹ́
Àkótán olùpèsè Iye tó ń ṣiṣẹ́, iye tó ní ìlera, iye breaker tó ṣí
Àwọn olùṣọ́ ìpín lílò Àwọn session tó ń ṣiṣẹ́, ìkìlọ̀, èyí tó ti tán
Àwọn àṣìṣe àìpẹ́ Àwọn àṣìṣe mẹ́wàá tó ṣẹ̀ṣẹ̀ wá pẹ̀lú stack trace
Lílò ohun àmúlò Memory, CPU, àmì ìkìlọ̀ fún ìpọ́njú heap

/dashboard/providers (Ìlera Olùpèsè)

Pátákó ìṣàkóso fún olùpèsè kọ̀ọ̀kan:

Kọ́lọ̀mù Àpèjúwe
Olùpèsè ID olùpèsè + orúkọ àfihàn
Ìlera Ipò àwọ̀ ewé/ofeefee/pupa
Circuit Ipò ṣí/tì/ṣí-ní-ààbọ̀
Àwọn ìsopọ̀ Iye àwọn ìsopọ̀, ìsọ̀tun tó ṣẹ̀ṣẹ̀ wá
Àwọn model Àwọn model tó wà, ìlera model kọ̀ọ̀kan
Iye owó Iye owó òní, ìtẹ̀sí ọjọ́ méje
Àwọn àṣìṣe Iye àṣìṣe láàárín wákàtí 24 tó kọjá, ẹ̀ka àṣìṣe tó ga jù

Tẹ olùpèsè kan láti rí:

  • Àwọn request àìpẹ́ pẹ̀lú àlàyé pípín latency
  • Àwọn àmì ìlera fún ìsopọ̀ kọ̀ọ̀kan
  • Àwọn ìdènà fún model kọ̀ọ̀kan
  • Àwọn àbá autopilot

/dashboard/quota (Ìtọ́pinpin Ìpín Lílò)

Fún API key kọ̀ọ̀kan:

  • Lílò lọ́wọ́lọ́wọ́ ní ìfiwéra pẹ̀lú ààlà (progress bar)
  • Ìtẹ̀sí ìpín lílò (àwòrán ọjọ́ 30)
  • Àkókò ìtọ́padà tó kàn
  • Ìtàn àwọn ìkìlọ̀

/dashboard/combos (Ìlera Àkópọ̀)

Fún àkópọ̀ kọ̀ọ̀kan:

  • Ọgbọ́n + àwọn ibi àfojúsùn
  • Ìlera ibi àfojúsùn kọ̀ọ̀kan
  • Àwọn ìṣẹ̀lẹ̀ fallback àìpẹ́
  • Ìwọ̀n àṣeyọrí (wákàtí 24, ọjọ́ 7, ọjọ́ 30)

API Àyẹ̀wò Ìlera

OmniRoute ń pèsè ojú-ọ̀nà ìlera HTTP méjì. Wọn kò ṣeé fi pààrọ̀ fún àwọn olùṣètò iṣẹ́.

Ọ̀nà Ète Ìwọ̀n iṣẹ́ Lò ó fún
GET /healthz Ìwàláàyè/ìmúrasílẹ̀ ìyípo-ayé (ok / starting / stopping) Fẹ́ẹ́rẹ́ (àmì ìpele nìkan) readiness Kubernetes; liveness rírọ̀ tí o bá gbọdọ̀ lo HTTP
GET /api/monitoring/health Àkópọ̀ ìlera jíjinlẹ̀ ti ẹ̀rọ + olùpèsè (DB, heap, iye catalog, …) Wúwo (iṣẹ́ DB amúlétutù / iṣẹ́ àbójútó) Àwọn dashboard, àyẹ̀wò jíjinlẹ̀ blackbox, healthcheck inú Docker

Àkíyèsí: Àwọn matrix ìlera olùpèsè, àwọn ìṣòro autopilot, àwọn olùṣọ́ quota, ìlera token, àti ẹ̀kúnrẹ́rẹ́ latency tó kọjá /api/monitoring/health wà nípasẹ̀ irinṣẹ́ MCP observability_snapshot tàbí àwọn ojú-ewé dashboard — kò sí àwọn ọ̀nà REST pàtó fún wọn.

Àwọn ọ̀nà méjèèjì ń ṣiṣẹ́ lórí Node event loop kan náà pẹ̀lú ìmúlò àwọn ìbéèrè. Ọ̀nà tó di CPU mú (iṣẹ́ catalog ńlá ti GET /v1/models, compression àyíká-ọ̀rọ̀ gígùn / kíkà token) lè fa ìdádúró fún gbogbo olùmúlò HTTP, títí kan /healthz. Event-loop tó dí ≠ process tó kú. Ó dára jù láti tún ohun tó ń gba gbogbo agbára náà ṣe; ṣíṣàtúnṣe probe kàn ń dín pípa process ní àṣìṣe kù.

Probe fẹ́ẹ́rẹ́ fún olùṣètò iṣẹ́

GET /healthz
# tàbí HEAD /healthz
  • 200 + body ok nígbà tí ìpele ìyípo-ayé server bá ti múra
  • 503 + starting / stopping nígbà ìbẹ̀rẹ̀ tàbí ìparí iṣẹ́
  • Ìmúṣẹ: src/app/healthz/route.ts (kò sí ping DB)

Ìlera Ẹ̀rọ (jíjinlẹ̀)

GET /api/monitoring/health

Ìdáhùn:

{
  "status": "healthy",
  "version": "3.8.16",
  "uptime": 123456,
  "checks": {
    "database": { "status": "pass", "latency_ms": 2 },
    "writeable": { "status": "pass" },
    "integrity": { "status": "pass", "result": "ok" },
    "foreign_keys": { "status": "pass", "violations": 0 },
    "heap_pressure": { "status": "pass", "usage_mb": 142, "threshold_mb": 512 },
    "active_sessions": 12,
    "providers": {
      "total": 7,
      "healthy": 6,
      "degraded": 1,
      "down": 0
    }
  }
}

credentialHealth: probe-cache sí SQLite test_status

GET /api/monitoring/healthcredentialHealth ni òṣùwọ̀n probe-cache inú memory, kì í ṣe ìtújáde tààrà ti provider_connections.test_status. Lẹ́yìn #12532, ọ̀nà ìbéèrè náà ń ka getCachedCredentialHealthSummary() nìkan; àwọn probe abẹ́lẹ̀ ń sọ cache náà dọ̀tun ní ẹ̀yìn event loop.

Ìpele Ibi Ohun tó túmọ̀ sí
Òṣùwọ̀n probe-cache credentialHealth.total / healthy / failed / unknown / stale Àwọn àbájáde probe ìlera credential tó ṣẹ̀ṣẹ̀ kẹ́yìn tí a ṣì fi pamọ́ sínú memory process. source jẹ́ probe-cache ní gbogbo ìgbà.
Ẹ̀kúnrẹ́rẹ́ connection tó kùnà credentialHealth.failedConnections Ó wà nígbà tí failed > 0 nìkan. Àtòjọ tó ní ààlà ti àwọn row cache pẹ̀lú status=error (connectionId, status, lastError / lastErrorType tí a ti fọ́ mọ́). A máa ṣètò failedOmitted tí a bá gé àtòjọ náà kúrú.
Ipo lílẹ̀mọ́ SQLite credentialHealth.staleDbNonOkCount Iye àwọn row connection tó ń ṣiṣẹ́ (is_active=1) tí test_status tí a fi pamọ́ jẹ́ non-ok tí a mọ̀ (error, expired, credits_exhausted, banned, deactivated, unavailable).

Àwọn ìpele méjèèjì lè má bára mu ní ìmọ̀ọ́mọ̀:

  • Òṣùwọ̀n failed=0 nígbà tí staleDbNonOkCount>0 — SQLite ṣì ní test_status lílẹ̀mọ́ (fún àpẹẹrẹ expired tàbí credits_exhausted) tí snapshot probe-cache tuntun kò kà sí status=error.
  • Òṣùwọ̀n failed>0 nígbà tí SQLite dà bí ẹni pé ó ní ìlera — probe kan tó ṣẹ̀ṣẹ̀ wá kùnà, a sì fi í pamọ́ sínú cache; a kò tíì ṣe ìmúdójúìwọ̀n row DB náà, tàbí a ti parẹ́ rẹ̀ lẹ́yìn náà.

Má ṣe fi ìkìlọ̀ ránṣẹ́ nítorí provider_connections.test_status nìkan nígbà tí o ń scrape endpoint yìí. Lo failed + failedConnections fún àwọn ìkùnà probe tààrà, kí o sì lo staleDbNonOkCount nígbà tí o bá nílò iye sticky-status tí a fi pamọ́.

Àwọn àbá probe Kubernetes

OmniRoute jẹ́ process Node kan ṣoṣo (event loop kan). HEALTHCHECK Docker àkọ́kọ́ ń tọ́ka sí /healthz fẹ́ẹ́rẹ́. /api/monitoring/health wúwo jù fún àwọn àkókò liveness kubelet.

Ìwádìí Àfojúsùn tí a dámọ̀ràn Àwọn àkíyèsí
Ìbẹ̀rẹ̀ HTTP GET /healthz pẹ̀lú failureThreshold gígùn (tàbí startPeriod ńlá) Ìbẹ̀rẹ̀ láti ipò tútù + ìṣípadà SQLite lè gba ju ìṣẹ́jú-àáyá díẹ̀ lọ
Ìmúrasílẹ̀ HTTP GET /healthz Àyíká ìgbésí-ayé ok / starting / stopping (200 sí 503). Ó ṣì lè má dúró ṣinṣin bí CPU bá dí lúpù náà. 200 tí ó gba ọ̀pọ̀ ìṣẹ́jú-àáyá kò túmọ̀ sí pé ó ní ìlera (#10303) — ó túmọ̀ sí pé ebi iṣẹ́ pa lúpù ìṣẹ̀lẹ̀ kí olùmúlò ìbéèrè oníbáìtì mẹ́ta tó ṣiṣẹ́
Wíwàláàyè HTTP GET /livez, tàbí TCP lórí pọ́ọ̀tù iṣẹ́ àkọ́kọ́ (PORT, àìyípadà 20128) /livez ń ṣàyẹ̀wò pé ìlànà náà ṣì ń ṣiṣẹ́ nìkan (200 ní gbogbo ìgbà tí olùmúlò ìbéèrè bá ṣiṣẹ́). Ó ṣì ń lo lúpù ìṣẹ̀lẹ̀ kan náà — dí dí ≠ kú, kò sì lè ṣàwárí ebi iṣẹ́ lúpù ìṣẹ̀lẹ̀ (#10303) ju bí TCP ṣe lè ṣe lọ. Yan TCP bí àwọn ìwádìí HTTP bá ń parí àkókò lábẹ́ ẹrù katalogi/ìfúnpọ̀; má sì pa pod náà nítorí ìdádúró lúpù ìṣẹ̀lẹ̀ fún ìgbà díẹ̀, èyíkéyìí tí o bá lò
Ìlera jíjinlẹ̀ GET /api/monitoring/health láti ọ̀dọ̀ olùṣàyẹ̀wò òde Kì í ṣe fún livenessProbe kubelet / readinessProbe aláàlà àkókò tó há

Àpẹẹrẹ ìrísí (ṣàtúnṣe àwọn àlà gẹ́gẹ́ bí ìbẹ̀rẹ̀ láti ipò tútù àti ẹrù ìfúnpọ̀ rẹ):

ports:
  - name: http
    containerPort: 20128
startupProbe:
  httpGet:
    path: /healthz
    port: http
  failureThreshold: 30
  periodSeconds: 5
readinessProbe:
  httpGet:
    path: /healthz
    port: http
  periodSeconds: 5
  timeoutSeconds: 2
  failureThreshold: 6
livenessProbe:
  httpGet:
    path: /livez
    port: http
  periodSeconds: 10
  timeoutSeconds: 3
  failureThreshold: 6
  # Nígbà tí lúpù ìṣẹ̀lẹ̀ bá dúró, HTTP /livez ṣì lè parí àkókò. TCP ni
  # àṣàyàn àfidípò tó ṣọ́ra jù:
  # tcpSocket:
  #   port: http

Má ṣe darí wíwàláàyè kubelet sí /api/monitoring/health. Ojú-ọ̀nà yẹn ń ṣe iṣẹ́ DB/àbójútó gidi, yóò sì fúnni ní àmì rere èké lábẹ́ ẹrù.

Àwọn tó jọmọ́: #10052 (àwọn ìwádìí nígbà tí lúpù ìṣẹ̀lẹ̀ dí), #9685 / #10055 (iṣẹ́ ìdíyelé katalogi tó ń gba ohun àmúlò púpọ̀), #10117 (kíkà token ìfúnpọ̀ tó ń gba ohun àmúlò púpọ̀).

Iṣẹ́ ojú-ọ̀nà ìbéèrè àṣàyàn (ìrántí, àwọn ọgbọ́n, ìtúnṣe token)

Yíyọ ìrántí jáde, fífi àwọn ọgbọ́n sínú rẹ̀, àti ìtúnṣe token OAuth ń lo lúpù ìṣẹ̀lẹ̀ Node àkọ́kọ́ kan náà pẹ̀lú /healthz. Àwọn wọ̀nyí jẹ́ àwọn ẹ̀ya tí a ń tan tàbí pa lórí dashboard (memoryEnabled, skillsEnabled), kì í ṣe àkójọpọ̀ òṣìṣẹ́. Wo Àyíká — iye iṣẹ́ lúpù ìṣẹ̀lẹ̀.

Ìlera Olùpèsè

Kò sí ojú-ọ̀nà REST. Dátà ìlera olùpèsè wà nípasẹ̀ irinṣẹ́ MCP observability_snapshot tàbí ojú-ewé dashboard /dashboard/providers.

Àlàyé Olùpèsè

Kò sí ojú-ọ̀nà REST. Àlàyé olùpèsè kọ̀ọ̀kan wà nípasẹ̀ ojú-ewé dashboard /dashboard/providers.


Ìṣàkóso Aládàáṣiṣẹ́ fún Ìlera Olùpèsè

Módù providerHealthAutopilot.ts jẹ́ ètò tí ń tún ara rẹ̀ ṣe tí ó:

  1. Ń ṣàwárí àwọn ìṣòro olùpèsè (circuit tí ó ṣí, àwọn cooldown, àwọn lockout, àwọn ìkìlọ̀ quota)
  2. Ń ṣe àgbéjáde àwọn ìgbésẹ̀ tí a dábàá láti yanjú wọn
  3. ṣe àwọn ìgbésẹ̀ ewu kékeré ní aládàáṣiṣẹ́ bí a bá yàn bẹ́ẹ̀

Àwọn Irú Ìṣòro Tí A Ṣàwárí

Irú ìṣòro Ìpele ewu Àpẹẹrẹ ipò
provider_circuit_open líle koko Circuit breaker ṣí lẹ́yìn ìkùnà márùn-ún
provider_circuit_half_open ìkìlọ̀ Circuit ń dán ìmúpadàbọ̀ wò
connection_cooldown ìkìlọ̀ Ìsopọ̀ wà ní cooldown lẹ́yìn 429
stale_connection_error ìkìlọ̀ Ìmúdójúìwọ̀n tó kẹ́yìn kùnà ní ìṣẹ́jú 30+ sẹ́yìn
terminal_connection_error líle koko OAuth ti fagilé, kọ́kọ́rọ́ kò tọ̀
inactive_connection àlàyé A ti mú ìsopọ̀ kúrò ní ṣíṣiṣẹ́ nínú àwọn ààtò
model_lockout ìkìlọ̀ Módẹ́lì kan pàtó wà ní quarantine
quota_monitor_warning ìkìlọ̀ Ìlò quota ti dé 80%+

Àwọn Irú Ìgbésẹ̀ Tí A Ṣe Àgbéjáde

Ìgbésẹ̀ Ewu Àpèjúwe
clear_provider_breaker àárín Tún circuit breaker ṣètò sí pípa
clear_connection_cooldown kékeré Yọ cooldown kúrò lórí ìsopọ̀ kan
clear_stale_connection_error kékeré Pa àmì àṣìṣe tí ó ti pẹ́ rẹ́
clear_model_lockout kékeré Tún módẹ́lì tó wà ní quarantine ṣiṣẹ́
reactivate_connection àárín Tún ìsopọ̀ tí a ti mú kúrò ní ṣíṣiṣẹ́ ṣiṣẹ́
deactivate_connection gíga Mú ìsopọ̀ tó ní ìṣòro kúrò ní ṣíṣiṣẹ́

API

Kò sí REST endpoint. Àwọn ìṣòro autopilot wà nípasẹ̀ irinṣẹ́ MCP observability_snapshot tàbí dashboard. Autopilot ń ṣiṣẹ́ ní inú ètò; a ń ṣètò ìhùwàsí rẹ̀ nípasẹ̀ DB àwọn ààtò (ọ̀kan-ṣoṣo fún ìsopọ̀ kọ̀ọ̀kan nínú field autopilotMode), kì í ṣe àwọn environment variable — lílo grep -rn láti wá autopilot-mode env var kò ní rí ohunkóhun.

Ìpo Autopilot

Autopilot ń ṣiṣẹ́ ní ìpo ọwọ́ gẹ́gẹ́ bí àìpé — ó ń ṣàwárí àwọn ìṣòro, ó sì ń ṣe àgbéjáde àwọn ìgbésẹ̀ tí a dábàá, ṣùgbọ́n kò lo wọ́n ní aládàáṣiṣẹ́. A lè lo àwọn ìgbésẹ̀ náà nípasẹ̀ dashboard.


Ìṣàkóso Aládàáṣiṣẹ́ fún Ìlera Combo

comboHealthAutopilot.ts jẹ́ ẹ̀dà tó jẹ mọ́ combo ní pàtó ti autopilot olùpèsè. Ó:

  • Ń ṣàwárí àwọn combo tí kò ní ìlera
  • Ń dábàá àtúntò àwọn target
  • Ń dábàá pípa àwọn target tí ó ti bàjẹ́
  • Ń yọ àwọn target tí ó ti kú kúrò ní aládàáṣiṣẹ́ lẹ́yìn ìkùnà N

Àwọn Àpẹẹrẹ Ìṣòro Combo

Combo "always-on" (ọgbọ́n priority)
├─ Target 1: openai/gpt-5 (ní ìlera)
├─ Target 2: anthropic/claude-opus-4-6 (⚠️ model lockout títí di 14:00)
└─ Target 3: kiro/claude-sonnet-4-5 (ní ìlera)

Ìgbésẹ̀ tí a dábàá: Tún wọn tò — gbé kiro sókè ju anthropic lọ títí lockout yóò fi parí

Àwọn Abojútó Quota

observability.ts ń ṣàfihàn àwọn abojútó quota fún session kọ̀ọ̀kan fún àwọn olùpèsè subscription (Claude Code, Codex, GitHub Copilot):

interface QuotaMonitorSnapshot {
  sessionId: string;
  provider: string;
  accountId: string;
  status: "starting" | "idle" | "healthy" | "warning" | "exhausted" | "error";
  lastQuotaPercent: number | null; // 0-100
  lastQuotaUsed: number | null;
  lastQuotaTotal: number | null;
  lastResetAt: string | null;
  nextPollAt: string | null;
  totalPolls: number;
  totalAlerts: number;
  consecutiveFailures: number;
}

Ìtumọ̀ Àwọn Status

Status Ìgbà wo Ìgbésẹ̀ UI
starting Poll àkọ́kọ́ ń lọ lọ́wọ́ Spinner
idle Kò sí ìgbòkègbodò láìpẹ́ A fi pamọ́ kúrò lórí dashboard
healthy Quota tó ṣẹ́kù > 50% Dọ́ọ̀tì aláwọ̀ ewé
warning Quota tó ṣẹ́kù < 50% Ìkìlọ̀ aláwọ̀ ọ̀wọ̀
exhausted Quota = 0% Ìdènà pupa, darí sí olùpèsè tó kàn
error Polling kùnà Dọ́ọ̀tì pupa, tún gbìyànjú láìpẹ́

API

Kò sí REST endpoint. Dátà abojútó quota wà nípasẹ̀ irinṣẹ́ MCP observability_snapshot tàbí dashboard.


Àwòrán Ìṣàkíyèsí

Ohun èlò MCP observability_snapshot ń dá àwòrán ẹ̀rọ tó pé padà fún àwọn aṣojú AI:

{
  "circuitBreakers": [
    {
      "name": "openai",
      "state": "closed",
      "failureCount": 0,
      "lastFailureTime": null,
      "retryAfterMs": null
    }
  ],
  "sessions": [
    {
      "sessionId": "sess-123",
      "createdAt": 1234567890,
      "lastActive": 1234567999,
      "requestCount": 42,
      "connectionId": "conn-456",
      "ageMs": 109
    }
  ],
  "quotaMonitors": {/* see above */},
  "uptime": 12345,
  "version": "3.8.16"
}

Àwọn aṣojú máa ń lo èyí láti ṣe àwọn ìpinnu ìdarí ọ̀nà — fún àpẹẹrẹ, “tí circuit openai bá ṣí, darí rẹ̀ sí anthropic lákọ̀ọ́kọ́”.


Àyẹ̀wò Ìlera Token

Àwọn olùpèsè OAuth (Claude Code, GitHub Copilot, Cursor) nílò ìmúdójúìwọ̀n token lẹ́ẹ̀kọ̀ọ̀kan. src/lib/tokenHealthCheck.ts ń ṣiṣẹ́ olùṣètò ìgbà ní abẹ́lẹ̀:

  • Ìyíká àyẹ̀wò: ní gbogbo ìṣẹ́jú-ààyá 60 (ìyíká àyẹ̀wò nínú TICK_MS = 60 * 1000src/lib/tokenHealthCheck.ts:30)
  • Àárín àkókò àyẹ̀wò ìlera fún àsopọ̀ kọ̀ọ̀kan: àìròtẹ́lẹ̀ jẹ́ ìṣẹ́jú 60 (DEFAULT_HEALTH_CHECK_INTERVAL_MIN = 60); ó ṣeé ṣètò nípasẹ̀ DB àwọn ààtò
  • Ìmúdójúìwọ̀n ṣáájú lórí 401: interceptor àsopọ̀ kọ̀ọ̀kan ló ń bójú tó èyí

Ipò Ìlera Token

interface TokenHealth {
  connectionId: string;
  provider: string;
  status: "valid" | "expiring_soon" | "expired" | "refresh_failed";
  expiresAt: string;
  lastRefresh: string;
  nextRefresh: string;
  consecutiveFailures: number;
}

Ìṣètò

tokenHealthCheck.ts ló ń bójú tó ìṣètò àyẹ̀wò ìlera token ní inú.

Ìlera Token

Kò sí endpoint REST. Dátà ìlera token wà nípasẹ̀ dashboard tàbí ohun èlò MCP observability_snapshot.


Ìkìlọ̀

Àwọn Ìkànnì Tí a Kọ́ Sínú Rẹ̀

OmniRoute ṣe àtìlẹ́yìn fún ìkànnì ìkìlọ̀ 3:

Ìkànnì Ìṣètò Ohun tí a fi ń lò ó
Àsíá dashboard Ó máa ń ṣiṣẹ́ nígbà gbogbo Àwọn ìfitónilétí inú ètò
Webhook Ṣètò URL Slack, Discord, PagerDuty
Àkọsílẹ̀ Àìròtẹ́lẹ̀ Fún àkójọpọ̀ àkọsílẹ̀ láti ètò ìta

Ìṣètò Webhook

Àkíyèsí: Ojú-ìwé Settings lórí dashboard ló ń bójú tó ìṣètò ìkìlọ̀ webhook. Wo UI Settings fún URL webhook, àsẹ̀ àwọn ìṣẹ̀lẹ̀, àti àṣàyàn àkóónú payload.

Àwọn Irú Ìkìlọ̀

Ìkìlọ̀ Ìgbà wo Bí ó ṣe le tó ní àìròtẹ́lẹ̀
provider_circuit_open Nígbà tí circuit bá ṣí tó le gan
provider_circuit_half_open Nígbà tí circuit bá ń dán ìmúpadàbọ̀ wò ìwífún
quota_warning Nígbà tí quota bá dé 80%+ ìkìlọ̀
quota_exhausted Nígbà tí quota bá dé 100% tó le gan
token_refresh_failed Ìkùnà ìmúdójúìwọ̀n tẹ̀lé ara wọn ní ìgbà 3+ ìkìlọ̀
token_expired Nígbà tí token bá kọjá àkókò ìparí tó le gan
combo_target_unhealthy Nígbà tí àfojúsùn combo bá wà ní ìsinmi fún 1h+ ìkìlọ̀
db_integrity_warning Ìrúfin FK > 0 ìkìlọ̀
heap_pressure Lílo heap > 80% ààlà ìkìlọ̀

Àwọn Ìwọ̀n Ìṣiṣẹ́

Àwọn Ìwọ̀n Tí A Ń Tọ́pa

Ìwọ̀n Irú Orísun
request_count oníkà services/usage.ts
request_latency_ms histogram services/usage.ts
tokens_consumed oníkà services/usage.ts
cost_usd oníkà services/usage.ts
provider_errors oníkà services/errorClassifier.ts
circuit_state_changes oníkà services/resilience.ts
cache_hits oníkà services/signatureCache.ts
compression_savings histogram services/compression/stats.ts
quota_used gẹ́ẹ̀jì services/quotaMonitor.ts
memory_used_mb gẹ́ẹ̀jì observability.ts

Àwọn Ìdá-ìdín-nínú-ọgọ́rùn-ún Àkókò Ìdádúró (p50/p95/p99)

Kò sí ojú-ọ̀nà REST. Dátà ìdá-ìdín-nínú-ọgọ́rùn-ún àkókò ìdádúró wà ní ojú-ìwé dasibodu /dashboard/health. A ti gbero ìkójáde Prometheus/OpenTelemetry fún v3.9.

Ìkójáde Prometheus / OpenTelemetry (Ìpele 2)

A ti gbero rẹ̀ fún v3.9: ìkójáde abinibi sí Prometheus, OpenTelemetry, Datadog.

Ní báyìí, ṣàkójọ dátà láti /api/monitoring/health pẹ̀lú ètò àbójútó èyíkéyìí tó dá lórí HTTP (Prometheus blackbox exporter, Datadog HTTP check, àti bẹ́ẹ̀ bẹ́ẹ̀ lọ).


Àwọn Àpẹẹrẹ Ìṣètò Ìkìlọ̀

Slack

Àkíyèsí: A ń ṣètò ìkìlọ̀ webhook nípasẹ̀ ojú-ìwé Àwọn Ààtò dasibodu — kò sí àwọn env var webhook pàtó (grep -rn yóò dá àbájáde òfo padà). Wo ojú-àmúlò Àwọn Ààtò fún URL webhook, àsẹ̀ àwọn ìṣẹ̀lẹ̀, àti àtúnṣe payload.

Discord

Ìkìlọ̀ webhook ń lo ìṣàn ojú-àmúlò Àwọn Ààtò kan náà bí Slack. Discord gba ìrísí payload JSON kan náà.

PagerDuty

Ìkìlọ̀ webhook ń lo ìṣàn ojú-àmúlò Àwọn Ààtò kan náà. A ń ṣètò àwọn kọ́kọ́rọ́ ìdarí PagerDuty Events API v2 nínú ojú-àmúlò Àwọn Ààtò.

Webhook Àkànṣe (JSON)

Ojú-ọ̀nà HTTP èyíkéyìí tó gba POST pẹ̀lú body JSON yóò ṣiṣẹ́. Ṣètò URL náà nínú ojú-àmúlò Àwọn Ààtò.


Ìṣètò Dasibodu

Ṣe Dasibodu Ìlera Ní Àkànṣe

Ṣẹ̀dá ~/.omniroute/dashboard.json kan:

{
  "health": {
    "sections": ["server_status", "database", "providers", "quota_monitors", "recent_errors"],
    "refresh_interval_ms": 5000
  }
}

Lẹ Olùpèsè Kan Mọ́ Òkè

{
  "health": {
    "pinned_providers": ["openai", "anthropic"]
  }
}

Yíyanjú Ìṣòro

"Olùpèsè sọ pé ó ní ìlera ṣùgbọ́n àwọn ìbéèrè ń kùnà"

  1. Ṣàyẹ̀wò àwọn ìṣòro autopilot — ó ṣeé ṣe kí a ti ti mọ́dẹ́lì kan mọ́ta
  2. Wo àwọn àṣìṣe àìpẹ́ fún ẹ̀ka àṣìṣe pàtó náà
  3. Gbìyànjú ìdánwò àsopọ̀ nínú káàdì olùpèsè
  4. Ṣàyẹ̀wò bóyá olùpèsè náà ní ìdíwọ̀n oṣuwọn ní upstream (kò ṣeé rí ní agbègbè)

"Quota sọ pé ó ní ìlera ṣùgbọ́n mo rí àwọn 429"

  • 429 túmọ̀ sí pé olùpèsè sọ pé o ti lo quota rẹ
  • Títọ́pa quota OmniRoute lè jẹ́ àtijọ́ — òtítọ́ olùpèsè wà ní upstream
  • Dátà quota ń sọ ara rẹ̀ dọ̀tun nípasẹ̀ olùṣọ́ quota inú ètò

"Combo ń kùnà ṣùgbọ́n gbogbo àwọn ibi-àfojúsùn dàbí ẹni pé wọ́n ní ìlera"

  • Ṣàyẹ̀wò dasibodu ìlera combo fún àwọn ìṣòro ìtòlẹ́sẹẹsẹ ibi-àfojúsùn
  • Wo àwọn ìṣẹ̀lẹ̀ fallback — ó ṣeé ṣe kí combo náà máa parí gbogbo àṣàyàn rẹ̀ kíákíá jù
  • Jẹ́rìí pé ọgbọ́n ìlànà náà bá bí o ṣe fẹ́ lò ó mu (priority sí round-robin sí auto)

"Àyẹ̀wò ìlera ibi ìpamọ́ dátà ń kùnà"

"Ìfúnpọ̀ heap ìrántí ti dé ipò eléwu"

# Ṣàyẹ̀wò heap lọ́wọ́lọ́wọ́
node -e "console.log(process.memoryUsage())"

# Mú GC ṣiṣẹ́ lọ́wọ́ (tí --expose-gc bá wà)
node --expose-gc -e "global.gc(); console.log(process.memoryUsage())"

# Dín àwọn ìbéèrè tó ń ṣiṣẹ́ lẹ́ẹ̀kan náà kù (ṣètò rẹ̀ nípasẹ̀ ojú-ìwé Àwọn Ààtò dasibodu, kì í ṣe env var)
# Kò sí env var `MAX_CONCURRENT_REQUESTS` — ṣètò rẹ̀ ní Àwọn Ààtò → Ìṣiṣẹ́-lẹ́ẹ̀kan-náà.

Tún Wo