[{"data":1,"prerenderedAt":646},["ShallowReactive",2],{"docs-pages-en":3,"doc-en-ingest-gateway":154},[4,11,16,21,26,31,37,48,56,65,73,80,88,92,101,105,113,118,123,128,134,139,144,149],{"path":5,"title":6,"description":7,"order":8,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Finstallation","Installation","Install CloseYourIt on your own server with one command.",1,"start",null,{"path":12,"title":13,"description":14,"order":15,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fsettings","Settings","Every setting in the .env file, what it does and which ones you must never change.",2,{"path":17,"title":18,"description":19,"order":20,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fdatabase","Database","What the database is, what is inside, how long data stays and how much room it takes.",3,{"path":22,"title":23,"description":24,"order":25,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fupdates-and-backups","Updates and backups","Update to a new version, back up and restore the database, check the install.",4,{"path":27,"title":28,"description":29,"order":30,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Ftroubleshooting","Troubleshooting","What to check when the install, the certificate, email or incoming data do not work.",5,{"path":32,"title":33,"description":34,"order":35,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fconnect-your-apps","Connect your apps","Every tool that sends data to CloseYourIt, and what each one collects.",6,"connect",{"path":38,"title":39,"description":40,"order":41,"group":10,"parent":42,"package":43,"note":44,"collects":45,"status":10},"\u002Fdocs\u002Fsdk-ruby","Ruby \u002F Rails","The closeyourit-ruby gem sends errors, logs, slow queries and job metrics from a Rails app.",7,"connect-your-apps","closeyourit-ruby","Errors, logs, slow queries and methods, background jobs.",{"errors":46,"logs":46,"performance":46,"visits":47,"servers":47},"full","none",{"path":49,"title":50,"description":51,"order":52,"group":10,"parent":42,"package":53,"note":54,"collects":55,"status":10},"\u002Fdocs\u002Fsdk-javascript","JavaScript","The @bussolabs\u002Fcloseyourit-js package works in the browser and on Node 20.16 or newer.",8,"@bussolabs\u002Fcloseyourit-js","Browser and Node, framework adapters and database queries from 0.13.0.",{"errors":46,"logs":46,"performance":46,"visits":46,"servers":47},{"path":57,"title":58,"description":59,"order":60,"group":10,"parent":42,"package":61,"note":62,"collects":63,"status":10},"\u002Fdocs\u002Fsdk-dart","Dart \u002F Flutter","The closeyourit package captures the errors of Flutter apps, even when the phone is offline.",9,"closeyourit","Public errors, logs and metrics from 0.9.3.",{"errors":46,"logs":64,"performance":64,"visits":47,"servers":47},"partial",{"path":66,"title":67,"description":68,"order":69,"group":10,"parent":42,"package":61,"note":70,"collects":71,"status":72},"\u002Fdocs\u002Fsdk-python","Python","The closeyourit package sends errors, logs and metrics from server-side Python applications.",10,"Server side. SQLAlchemy; Django query monitoring and FastAPI\u002FStarlette from 0.4.0.",{"errors":46,"logs":46,"performance":64,"visits":47,"servers":47},"pre_alpha",{"path":74,"title":75,"description":76,"order":77,"group":10,"parent":42,"package":75,"note":78,"collects":79,"status":10},"\u002Fdocs\u002Fsdk-sentry","Sentry SDK","Send errors with a compatible Sentry SDK; sessions and crashes have separate profiles.",11,"Compatible errors; sessions and crashes require a verified profile.",{"errors":46,"logs":47,"performance":47,"visits":47,"servers":47},{"path":81,"title":82,"description":83,"order":84,"group":10,"parent":42,"package":85,"note":86,"collects":87,"status":10},"\u002Fdocs\u002Fagent-server","Server agent","A small program on the server that sends the state of the machine every 60 seconds.",12,"closeyourit-agent","CPU, memory, disks, network, containers and services.",{"errors":47,"logs":64,"performance":47,"visits":47,"servers":46},{"path":89,"title":90,"description":91,"order":84,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnuxt","Vue and Nuxt","Connect Nuxt browser errors and Nitro server errors without exposing a server token.",{"path":93,"title":94,"description":95,"order":96,"group":10,"parent":42,"package":97,"note":98,"collects":99,"status":100},"\u002Fdocs\u002Fagent-kubernetes","Kubernetes","A read-only observer of the cluster: one copy per cluster.",13,"closeyourit-kube","Machines, apps and error events of the cluster.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":46},"coming",{"path":102,"title":103,"description":104,"order":96,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fopentelemetry","OpenTelemetry","Send server traces, metrics and logs through the optional OTLP receiver.",{"path":106,"title":107,"description":108,"order":109,"group":10,"parent":42,"package":110,"note":111,"collects":112,"status":10},"\u002Fdocs\u002Fcli","cyi CLI","The closeyourit command, cyi for short: manage projects, errors and tickets from the terminal.",14,"@bussolabs\u002Fcloseyourit-cli","It collects no data: it drives CloseYourIt from the terminal.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":47},{"path":114,"title":115,"description":116,"order":117,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fhttp-api","HTTP API","Send errors, logs, metrics and page views with plain HTTP requests, without an SDK.",15,{"path":119,"title":120,"description":121,"order":122,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fgithub-app","GitHub","Connect GitHub repositories to tickets and releases with your own GitHub App.",16,{"path":124,"title":125,"description":126,"order":127,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fingest-gateway","Ingest gateway","Keep incoming errors, logs and metrics safe when the app is slow or restarting.",17,{"path":129,"title":130,"description":131,"order":132,"group":133,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fai","AI","Turn on assistant, analysis, dictation and smart search with a CloseYourIt AI key or your own provider.",18,"automation",{"path":135,"title":136,"description":137,"order":138,"group":133,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fautomator","Automator","Let tickets be worked automatically on your own Linux machine, with Claude Code, Codex or both.",19,{"path":140,"title":141,"description":142,"order":143,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fstack-coverage","Frameworks and stack coverage","Choose a published SDK or understand the limits of a locally tested integration.",20,{"path":145,"title":146,"description":147,"order":148,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fmonitoring","Traces, measurements and sessions","Explore the new signals, compare releases and recover original error locations.",21,{"path":150,"title":151,"description":152,"order":153,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnode-database","Node databases","Monitor slow and repeated queries with pg, mysql2, Drizzle and Prisma PostgreSQL.",22,{"id":155,"title":125,"body":156,"collects":10,"description":126,"extension":640,"group":36,"meta":641,"navigation":642,"note":10,"order":127,"package":10,"parent":10,"path":124,"seo":643,"status":10,"stem":644,"__hash__":645},"docs_en\u002Fdocs\u002Fingest-gateway.md",{"type":157,"value":158,"toc":625},"minimark",[159,172,177,182,193,216,219,223,229,276,280,355,359,368,371,375,378,451,454,458,472,476,481,489,535,538,541,545,567,571,582,586,600,607,610,614,621],[160,161,162,163,167,168,171],"p",{},"Your applications send errors, logs and metrics to CloseYourIt. There are two ways for that data to arrive: ",[164,165,166],"strong",{},"direct",", which is what you get after the install, and ",[164,169,170],{},"through the gateway",", which you turn on with one command.",[173,174,176],"h2",{"id":175},"the-two-paths","The two paths",[178,179,181],"h3",{"id":180},"direct-default","Direct (default)",[183,184,190],"pre",{"className":185,"code":187,"language":188,"meta":189},[186],"language-text","your application  →  Caddy  →  app  →  worker  →  database\n","text","",[191,192,187],"code",{"__ignoreMap":189},[194,195,196,204,207,213],"ol",{},[197,198,199,200,203],"li",{},"Your application sends a request to ",[191,201,202],{},"https:\u002F\u002F\u003Cyour-domain>\u002Fapi\u002F…",".",[197,205,206],{},"Caddy, the web server, hands it to the app.",[197,208,209,210,203],{},"The app checks the token and answers ",[191,211,212],{},"202",[197,214,215],{},"The worker saves the data a moment later.",[160,217,218],{},"If the app is restarting or too busy at step 2, the request fails. The data is lost unless the sender tries again.",[178,220,222],{"id":221},"through-the-gateway","Through the gateway",[183,224,227],{"className":225,"code":226,"language":188,"meta":189},[186],"your application  →  Caddy  →  gateway  →  app  →  worker  →  database\n                                  ↓ app not answering\n                                queue  →  app, later\n",[191,228,226],{"__ignoreMap":189},[194,230,231,234,245,248,259,273],{},[197,232,233],{},"Your application sends the same request to the same address.",[197,235,236,237,240,241,244],{},"Caddy hands incoming data to the gateway. Everything else under ",[191,238,239],{},"\u002Fapi\u002F"," — reading data back, the ",[242,243,136],"a",{"href":135}," — still goes straight to the app.",[197,246,247],{},"The gateway forwards the request to the app and waits a few seconds.",[197,249,250,251,254,255,258],{},"If the app answers, even with an error such as ",[191,252,253],{},"401"," or ",[191,256,257],{},"422",", your application gets that answer. Nothing is queued.",[197,260,261,262,265,266,269,270,272],{},"If the app does not answer, is overloaded (",[191,263,264],{},"429",") or fails (",[191,267,268],{},"5xx","), the gateway stores the request, encrypted, in a queue (NATS JetStream) and answers ",[191,271,212],{}," at once.",[197,274,275],{},"The gateway keeps trying to deliver what is in the queue until the app takes it.",[178,277,279],{"id":278},"side-by-side","Side by side",[281,282,283,297],"table",{},[284,285,286],"thead",{},[287,288,289,292,295],"tr",{},[290,291],"th",{},[290,293,294],{},"Direct",[290,296,222],{},[298,299,300,312,329,342],"tbody",{},[287,301,302,306,309],{},[303,304,305],"td",{},"App restarting or overloaded",[303,307,308],{},"the request fails",[303,310,311],{},"the request waits in the queue",[287,313,314,317,319],{},[303,315,316],{},"Extra services",[303,318,47],{},[303,320,321,322,325,326],{},"two: ",[191,323,324],{},"gateway"," and ",[191,327,328],{},"nats",[287,330,331,334,336],{},[303,332,333],{},"Extra disk",[303,335,47],{},[303,337,338,339],{},"up to ",[164,340,341],{},"6 GB",[287,343,344,347,352],{},[303,345,346],{},"Address and tokens in your applications",[303,348,349],{},[191,350,351],{},"https:\u002F\u002F\u003Cyour-domain>",[303,353,354],{},"the same",[173,356,358],{"id":357},"when-you-need-it","When you need it",[360,361,362,365],"ul",{},[197,363,364],{},"Many applications send data, or one sends a lot.",[197,366,367],{},"You update often and do not want to lose data during restarts.",[160,369,370],{},"For a small team with a few projects you can do without it.",[173,372,374],{"id":373},"move-from-direct-to-the-gateway","Move from direct to the gateway",[160,376,377],{},"Nothing changes in your applications: same address, same tokens. No data is moved, and you can go back at any time.",[194,379,380,387,411,445],{},[197,381,382,383,386],{},"Check there is room: ",[191,384,385],{},"df -h \u002Fopt\u002Fcloseyourit"," should show at least 6 GB free.",[197,388,389,390],{},"Turn it on:",[183,391,395],{"className":392,"code":393,"language":394,"meta":189,"style":189},"language-bash shiki shiki-themes github-light github-dark","closeyourit enable ingest\n","bash",[191,396,397],{"__ignoreMap":189},[398,399,401,404,408],"span",{"class":400,"line":8},"line",[398,402,61],{"class":403},"sScJk",[398,405,407],{"class":406},"sZZnC"," enable",[398,409,410],{"class":406}," ingest\n",[197,412,413,414,325,416,418,419,422,423,422,426,325,429,432,433],{},"Check that ",[191,415,324],{},[191,417,328],{}," are running next to ",[191,420,421],{},"app",", ",[191,424,425],{},"worker",[191,427,428],{},"postgres",[191,430,431],{},"caddy",":",[183,434,436],{"className":392,"code":435,"language":394,"meta":189,"style":189},"closeyourit status\n",[191,437,438],{"__ignoreMap":189},[398,439,440,442],{"class":400,"line":8},[398,441,61],{"class":403},[398,443,444],{"class":406}," status\n",[197,446,447,448,450],{},"Send one request by hand (see the ",[242,449,115],{"href":114},") and check it shows up in CloseYourIt.",[160,452,453],{},"The switch takes a few seconds. A request that arrives in that moment may fail. Caddy moves to the gateway only once the gateway has stayed up: if it does not, the command says so, turns it off again and data keeps going straight to the app.",[173,455,457],{"id":456},"how-to-tell-a-request-was-queued","How to tell a request was queued",[160,459,460,461,463,464,467,468,471],{},"When the gateway keeps a request instead of delivering it at once, it answers ",[191,462,212],{}," with the header ",[191,465,466],{},"X-CloseYourIt-Queued: true"," (the Sentry-compatible addresses answer ",[191,469,470],{},"200",", as those SDKs expect). That answer means \"safe in the queue\", not \"saved in CloseYourIt yet\".",[173,473,475],{"id":474},"what-the-gateway-accepts","What the gateway accepts",[160,477,478,479,203],{},"Only the addresses that receive data: events, metrics, logs, page views, replays, releases, cron check-ins, server samples and the two Sentry-compatible addresses. See the ",[242,480,115],{"href":114},[160,482,483,484,240,486,488],{},"Everything else under ",[191,485,239],{},[242,487,136],{"href":135}," picking up work — keeps going straight to the app, gateway on or off.",[281,490,491,501],{},[284,492,493],{},[287,494,495,498],{},[290,496,497],{},"Limit",[290,499,500],{},"Value",[298,502,503,511,519,527],{},[287,504,505,508],{},[303,506,507],{},"Size of one request",[303,509,510],{},"5 MB",[287,512,513,516],{},[303,514,515],{},"Requests per minute from one IP address",[303,517,518],{},"600",[287,520,521,524],{},[303,522,523],{},"Queue",[303,525,526],{},"4 GB",[287,528,529,532],{},[303,530,531],{},"Requests that could not be delivered",[303,533,534],{},"1 GB, kept apart",[160,536,537],{},"When the queue is full, new requests are refused rather than dropping the ones already waiting.",[160,539,540],{},"A request that keeps failing is retried with growing pauses. After 20 attempts it is moved to the \"could not be delivered\" store and no longer retried.",[173,542,544],{"id":543},"reading-data-or-the-automator-stopped-working","Reading data or the Automator stopped working",[160,546,547,548,551,552,554,555,558,559,562,563,566],{},"Early installs sent ",[164,549,550],{},"all"," of ",[191,553,239],{}," to the gateway, which refuses what it does not know: reading data back answers ",[191,556,557],{},"405"," and the Automator gets ",[191,560,561],{},"404",". Run ",[191,564,565],{},"closeyourit update",": it also brings the web server file of the new version.",[173,568,570],{"id":569},"the-encryption-key","The encryption key",[160,572,573,574,577,578,581],{},"Requests in the queue are encrypted with the key in ",[191,575,576],{},"\u002Fopt\u002Fcloseyourit\u002Fingest\u002Fenvelope_key",". The queue password is in ",[191,579,580],{},"\u002Fopt\u002Fcloseyourit\u002Fingest\u002Fnats_password",". Both are generated at install time. If you replace the key while requests are waiting, those requests can no longer be read.",[173,583,585],{"id":584},"move-back-to-direct","Move back to direct",[183,587,589],{"className":392,"code":588,"language":394,"meta":189,"style":189},"closeyourit disable ingest\n",[191,590,591],{"__ignoreMap":189},[398,592,593,595,598],{"class":400,"line":8},[398,594,61],{"class":403},[398,596,597],{"class":406}," disable",[398,599,410],{"class":406},[160,601,602,603,606],{},"Requests go back to the direct path at once. The gateway then gets ",[164,604,605],{},"30 seconds"," to deliver what is still waiting, and stops. Anything not delivered by then stays in the queue on disk and is delivered the next time you turn the gateway on.",[160,608,609],{},"Do it while the app is healthy, so the queue is already empty.",[173,611,613],{"id":612},"opentelemetry-is-configured-separately","OpenTelemetry is configured separately",[160,615,616,617,620],{},"The optional ",[242,618,619],{"href":102},"OTLP receiver"," has separate listeners, authentication and request limits. Enabling this native ingest gateway does not expose or activate those listeners automatically.",[622,623,624],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":189,"searchDepth":15,"depth":15,"links":626},[627,632,633,634,635,636,637,638,639],{"id":175,"depth":15,"text":176,"children":628},[629,630,631],{"id":180,"depth":20,"text":181},{"id":221,"depth":20,"text":222},{"id":278,"depth":20,"text":279},{"id":357,"depth":15,"text":358},{"id":373,"depth":15,"text":374},{"id":456,"depth":15,"text":457},{"id":474,"depth":15,"text":475},{"id":543,"depth":15,"text":544},{"id":569,"depth":15,"text":570},{"id":584,"depth":15,"text":585},{"id":612,"depth":15,"text":613},"md",{},true,{"title":125,"description":126},"docs\u002Fingest-gateway","QMqdojHnvmRtj62zB9bZmK5mRrF3tFm23pl_vPS_KQc",1791302513339]