* 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.
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 tokensrc/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/healthwà nípasẹ̀ irinṣẹ́ MCPobservability_snapshottà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
oknígbà tí ìpele ìyípo-ayé server bá ti múra - 503 +
starting/stoppingní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/health → credentialHealth 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=0nígbà tístaleDbNonOkCount>0— SQLite ṣì nítest_statuslílẹ̀mọ́ (fún àpẹẹrẹexpiredtàbícredits_exhausted) tí snapshot probe-cache tuntun kò kà sístatus=error. - Òṣùwọ̀n
failed>0ní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_snapshottà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í ó:
- Ń ṣàwárí àwọn ìṣòro olùpèsè (circuit tí ó ṣí, àwọn cooldown, àwọn lockout, àwọn ìkìlọ̀ quota)
- Ń ṣe àgbéjáde àwọn ìgbésẹ̀ tí a dábàá láti yanjú wọn
- Lè ṣ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_snapshottà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ú fieldautopilotMode), kì í ṣe àwọn environment variable — lílogrep -rnlá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_snapshottà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 * 1000nísrc/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 -rnyóò 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à"
- Ṣàyẹ̀wò àwọn ìṣòro autopilot — ó ṣeé ṣe kí a ti ti mọ́dẹ́lì kan mọ́ta
- Wo àwọn àṣìṣe àìpẹ́ fún ẹ̀ka àṣìṣe pàtó náà
- Gbìyànjú ìdánwò àsopọ̀ nínú káàdì olùpèsè
- Ṣà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à"
- Ṣiṣe
sqlite3 ~/.omniroute/storage.sqlite "PRAGMA integrity_check;" - Tí ó bá jẹ́ "ok" — ìkìlọ̀ èké ni, àyẹ̀wò ìlera náà le jù
- Tí ó bá jẹ́ ohun mìíràn — dá OmniRoute dúró kí o sì tẹ̀lé ìtọ́sọ́nà ìmúpadàbọ̀sípò lẹ́yìn àjálù
"Ì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
- USAGE_QUOTA_GUIDE.md — ìtọ́pasẹ̀ lílò àti iye owó
- DATABASE_GUIDE.md — àwòrán ètò DB + ìlera
- PROXY_GUIDE.md — ìlera proxy (cache ọ̀tọ̀)
- ARCHITECTURE.md — faaji ètò
- RESILIENCE_GUIDE.md — àwọn àlàyé circuit breaker
- Orísun:
src/lib/monitoring/(fáìlì 4, LOC 2121)