[{"data":1,"prerenderedAt":1964},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-events-dashboard":981},[4,27,63,138,300,324,906,915,963,977],{"title":5,"path":6,"stem":7,"children":8,"order":10,"icon":11},"Overview","\u002Fdocs\u002Foverview","docs\u002F1.overview\u002Findex",[9,12,18,24],{"title":5,"path":6,"stem":7,"order":10,"icon":11},1,"i-lucide-info",{"title":13,"path":14,"stem":15,"order":16,"icon":17},"Getting Started","\u002Fdocs\u002Foverview\u002Fgetting-started","docs\u002F1.overview\u002F2.getting-started",2,"i-lucide-rocket",{"title":19,"path":20,"stem":21,"order":22,"icon":23},"Contributing","\u002Fdocs\u002Foverview\u002Fcontributing","docs\u002F1.overview\u002F3.contributing",3,"i-lucide-heart",{"title":5,"path":25,"stem":26,"order":10},"\u002Fdocs\u002Foverview\u002F_dir","docs\u002F1.overview\u002F_dir",{"title":28,"path":29,"stem":30,"children":31,"page":62},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[32,37,42,47,53,59],{"title":33,"path":34,"stem":35,"order":10,"icon":36},"Events","\u002Fdocs\u002Fconcepts\u002Fevents","docs\u002F2.concepts\u002F1.events","i-lucide-zap",{"title":38,"path":39,"stem":40,"order":16,"icon":41},"Transports","\u002Fdocs\u002Fconcepts\u002Ftransports","docs\u002F2.concepts\u002F2.transports","i-lucide-network",{"title":43,"path":44,"stem":45,"order":22,"icon":46},"Module System","\u002Fdocs\u002Fconcepts\u002Fmodules","docs\u002F2.concepts\u002F3.modules","i-lucide-puzzle",{"title":48,"path":49,"stem":50,"order":51,"icon":52},"Flows","\u002Fdocs\u002Fconcepts\u002Fflows","docs\u002F2.concepts\u002F4.flows",4,"i-lucide-workflow",{"title":54,"path":55,"stem":56,"order":57,"icon":58},"Scheduler","\u002Fdocs\u002Fconcepts\u002Fscheduler","docs\u002F2.concepts\u002F5.scheduler",5,"i-lucide-clock",{"title":28,"path":60,"stem":61,"order":16},"\u002Fdocs\u002Fconcepts\u002F_dir","docs\u002F2.concepts\u002F_dir",false,{"title":64,"path":65,"stem":66,"children":67,"page":62},"Guides","\u002Fdocs\u002Fguides","docs\u002F3.guides",[68,73,77,81,86,90,94,98,102,107,113,119,125,131,135],{"title":69,"path":70,"stem":71,"order":10,"icon":72},"Creating a Go App","\u002Fdocs\u002Fguides\u002Fcreating-go-app","docs\u002F3.guides\u002F1.creating-go-app","i-lucide-terminal",{"title":74,"path":75,"stem":76},"E2E tests & demo videos","\u002Fdocs\u002Fguides\u002Fe2e-and-demo-videos","docs\u002F3.guides\u002F10.e2e-and-demo-videos",{"title":78,"path":79,"stem":80,"icon":17},"Deploying to production","\u002Fdocs\u002Fguides\u002Fdeploying-to-production","docs\u002F3.guides\u002F11.deploying-to-production",{"title":82,"path":83,"stem":84,"icon":85},"Events & services dashboard","\u002Fdocs\u002Fguides\u002Fevents-dashboard","docs\u002F3.guides\u002F12.events-dashboard","i-lucide-radio-tower",{"title":87,"path":88,"stem":89,"icon":41},"Multi-server Swarm","\u002Fdocs\u002Fguides\u002Fmulti-server-swarm","docs\u002F3.guides\u002F13.multi-server-swarm",{"title":91,"path":92,"stem":93,"order":16,"icon":46},"Creating a Go Module","\u002Fdocs\u002Fguides\u002Fcreating-go-module","docs\u002F3.guides\u002F2.creating-go-module",{"title":95,"path":96,"stem":97,"order":22,"icon":36},"Adding Events","\u002Fdocs\u002Fguides\u002Fadding-events-to-go-module","docs\u002F3.guides\u002F3.adding-events-to-go-module",{"title":99,"path":100,"stem":101,"order":51,"icon":52},"FlowDSL to Service","\u002Fdocs\u002Fguides\u002Fflowdsl-to-redelay","docs\u002F3.guides\u002F4.flowdsl-to-redelay",{"title":103,"path":104,"stem":105,"order":57,"icon":106},"Choosing a Transport","\u002Fdocs\u002Fguides\u002Fchoosing-a-transport","docs\u002F3.guides\u002F5.choosing-a-transport","i-lucide-git-branch",{"title":108,"path":109,"stem":110,"order":111,"icon":112},"Module Browser (\u002Fmodules)","\u002Fdocs\u002Fguides\u002Fmodules-browser","docs\u002F3.guides\u002F6.modules-browser",6,"i-lucide-layout-dashboard",{"title":114,"path":115,"stem":116,"order":117,"icon":118},"Running Flows","\u002Fdocs\u002Fguides\u002Frunning-flows","docs\u002F3.guides\u002F7.running-flows",7,"i-lucide-play-circle",{"title":120,"path":121,"stem":122,"order":123,"icon":124},"Trace + Live Observability","\u002Fdocs\u002Fguides\u002Fobservability","docs\u002F3.guides\u002F8.observability",8,"i-lucide-activity",{"title":126,"path":127,"stem":128,"order":129,"icon":130},"Project AI Assistant","\u002Fdocs\u002Fguides\u002Fai-assistant","docs\u002F3.guides\u002F9.ai-assistant",9,"i-lucide-sparkles",{"title":132,"path":133,"stem":134},"Debug taps — trace live data through any node","\u002Fdocs\u002Fguides\u002Fdebug-taps","docs\u002F3.guides\u002F9.debug-taps",{"title":64,"path":136,"stem":137,"order":22},"\u002Fdocs\u002Fguides\u002F_dir","docs\u002F3.guides\u002F_dir",{"title":139,"path":140,"stem":141,"children":142,"page":62},"Reference","\u002Fdocs\u002Freference","docs\u002F4.reference",[143,148,152,157,162,167,172,177,181,186,191,196,202,208,214,219,224,228,234,239,245,251,256,262,268,272,276,282,287,293,297],{"title":144,"path":145,"stem":146,"order":10,"icon":147},"Go Framework","\u002Fdocs\u002Freference\u002Fgo-framework","docs\u002F4.reference\u002F01.go-framework","i-simple-icons-go",{"title":149,"path":150,"stem":151,"order":16,"icon":46},"Built-in Modules","\u002Fdocs\u002Freference\u002Fgo-modules","docs\u002F4.reference\u002F02.go-modules",{"title":153,"path":154,"stem":155,"order":22,"icon":156},"Domain Addon Modules","\u002Fdocs\u002Freference\u002Fgo-modules-addons","docs\u002F4.reference\u002F03.go-modules-addons","i-lucide-blocks",{"title":158,"path":159,"stem":160,"order":51,"icon":161},"Go Events","\u002Fdocs\u002Freference\u002Fgo-events","docs\u002F4.reference\u002F04.go-events","i-lucide-radio",{"title":163,"path":164,"stem":165,"order":57,"icon":166},"Email Module","\u002Fdocs\u002Freference\u002Fgo-module-email","docs\u002F4.reference\u002F05.go-module-email","i-lucide-mail",{"title":168,"path":169,"stem":170,"order":111,"icon":171},"Go Core & IR","\u002Fdocs\u002Freference\u002Fgo-core","docs\u002F4.reference\u002F06.go-core","i-lucide-cpu",{"title":173,"path":174,"stem":175,"order":117,"icon":176},"Module Definition Files","\u002Fdocs\u002Freference\u002Fgo-module-files","docs\u002F4.reference\u002F07.go-module-files","i-lucide-file-code",{"title":178,"path":179,"stem":180,"order":123,"icon":72},"CLI Reference","\u002Fdocs\u002Freference\u002Fgo-cli","docs\u002F4.reference\u002F08.go-cli",{"title":182,"path":183,"stem":184,"order":129,"icon":185},"Go Formats","\u002Fdocs\u002Freference\u002Fgo-formats","docs\u002F4.reference\u002F09.go-formats","i-lucide-file-json",{"title":187,"path":188,"stem":189,"order":190,"icon":161},"AsyncAPI Module","\u002Fdocs\u002Freference\u002Fgo-asyncapi","docs\u002F4.reference\u002F10.go-asyncapi",10,{"title":192,"path":193,"stem":194,"order":195,"icon":52},"Go FlowDSL","\u002Fdocs\u002Freference\u002Fgo-flowdsl","docs\u002F4.reference\u002F11.go-flowdsl",11,{"title":197,"path":198,"stem":199,"order":200,"icon":201},"FlowDSL Examples","\u002Fdocs\u002Freference\u002Fflowdsl-examples","docs\u002F4.reference\u002F12.flowdsl-examples",12,"i-lucide-file-code-2",{"title":203,"path":204,"stem":205,"order":206,"icon":207},"FlowDSL Sync","\u002Fdocs\u002Freference\u002Fflowdsl-sync","docs\u002F4.reference\u002F13.flowdsl-sync",13,"i-lucide-refresh-cw",{"title":209,"path":210,"stem":211,"order":212,"icon":213},"Node.js Framework","\u002Fdocs\u002Freference\u002Fjs-framework","docs\u002F4.reference\u002F14.js-framework",14,"i-simple-icons-nodedotjs",{"title":215,"path":216,"stem":217,"order":212,"icon":218},"Python Framework","\u002Fdocs\u002Freference\u002Fpy-framework","docs\u002F4.reference\u002F14.py-framework","i-simple-icons-python",{"title":220,"path":221,"stem":222,"order":223,"icon":213},"Node.js Events","\u002Fdocs\u002Freference\u002Fjs-events","docs\u002F4.reference\u002F15.js-events",15,{"title":225,"path":226,"stem":227,"order":223,"icon":218},"Python Events","\u002Fdocs\u002Freference\u002Fpy-events","docs\u002F4.reference\u002F15.py-events",{"title":229,"path":230,"stem":231,"order":232,"icon":233},"go-ai — LLM Providers, Guard, Ledger","\u002Fdocs\u002Freference\u002Fgo-ai","docs\u002F4.reference\u002F16.go-ai",16,"i-lucide-brain-circuit",{"title":235,"path":236,"stem":237,"order":238,"icon":41},"Infrastructure Modules","\u002Fdocs\u002Freference\u002Fgeneric-infra-modules","docs\u002F4.reference\u002F17.generic-infra-modules",17,{"title":240,"path":241,"stem":242,"order":243,"icon":244},"Flow Templates","\u002Fdocs\u002Freference\u002Fflow-templates","docs\u002F4.reference\u002F18.flow-templates",18,"i-lucide-library-big",{"title":246,"path":247,"stem":248,"order":249,"icon":250},"Assistant (chat + handoff)","\u002Fdocs\u002Freference\u002Fassistant","docs\u002F4.reference\u002F19.assistant",19,"i-lucide-messages-square",{"title":252,"path":253,"stem":254,"order":255,"icon":41},"Coordination","\u002Fdocs\u002Freference\u002Fcoordination","docs\u002F4.reference\u002F20.coordination",20,{"title":257,"path":258,"stem":259,"order":260,"icon":261},"Search (vector)","\u002Fdocs\u002Freference\u002Fsearch","docs\u002F4.reference\u002F21.search",21,"i-lucide-search",{"title":263,"path":264,"stem":265,"order":266,"icon":267},"Profiles","\u002Fdocs\u002Freference\u002Fprofiles","docs\u002F4.reference\u002F22.profiles",22,"i-lucide-bookmark",{"title":269,"path":270,"stem":271},"Flow-driven HTTP endpoints","\u002Fdocs\u002Freference\u002Fflow-driven-endpoints","docs\u002F4.reference\u002F23.flow-driven-endpoints",{"title":273,"path":274,"stem":275},"Deployments","\u002Fdocs\u002Freference\u002Fdeployments","docs\u002F4.reference\u002F24.deployments",{"title":277,"path":278,"stem":279,"order":280,"icon":281},"i18n (translations)","\u002Fdocs\u002Freference\u002Fi18n","docs\u002F4.reference\u002F25.i18n",25,"i-lucide-languages",{"title":283,"path":284,"stem":285,"order":286,"icon":161},"WebSockets","\u002Fdocs\u002Freference\u002Fwebsockets","docs\u002F4.reference\u002F26.websockets",26,{"title":288,"path":289,"stem":290,"order":291,"icon":292},"Localized content","\u002Fdocs\u002Freference\u002Flocalized-content","docs\u002F4.reference\u002F27.localized-content",27,"i-lucide-file-text",{"title":294,"path":295,"stem":296},"Instagram","\u002Fdocs\u002Freference\u002Finstagram","docs\u002F4.reference\u002F28.instagram",{"title":139,"path":298,"stem":299,"order":51},"\u002Fdocs\u002Freference\u002F_dir","docs\u002F4.reference\u002F_dir",{"title":301,"path":302,"stem":303,"children":304,"page":62},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F5.integrations",[305,309,313,317,321],{"title":306,"path":307,"stem":308,"order":10,"icon":52},"FlowDSL","\u002Fdocs\u002Fintegrations\u002Fflowdsl","docs\u002F5.integrations\u002F1.flowdsl",{"title":310,"path":311,"stem":312,"order":16,"icon":292},"OpenAPI","\u002Fdocs\u002Fintegrations\u002Fopenapi","docs\u002F5.integrations\u002F2.openapi",{"title":314,"path":315,"stem":316,"order":22,"icon":161},"AsyncAPI","\u002Fdocs\u002Fintegrations\u002Fasyncapi","docs\u002F5.integrations\u002F3.asyncapi",{"title":318,"path":319,"stem":320},"MCP Integration","\u002Fdocs\u002Fintegrations\u002Fmcp","docs\u002F5.integrations\u002F4.mcp",{"title":301,"path":322,"stem":323,"order":57},"\u002Fdocs\u002Fintegrations\u002F_dir","docs\u002F5.integrations\u002F_dir",{"title":325,"path":326,"stem":327,"children":328},"FlowDSL Node Catalog","\u002Fdocs\u002Fnodes","docs\u002F5.nodes\u002Findex",[329,330,334,338,342,346,350,354,358,362,366,370,374,378,382,386,390,394,398,402,406,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754,758,762,766,770,774,778,782,786,790,794,798,802,806,810,814,818,822,826,830,834,838,842,846,850,854,858,862,866,870,874,878,882,886,890,894,898,902],{"title":325,"path":326,"stem":327},{"title":331,"path":332,"stem":333,"order":57},"Node Catalog","\u002Fdocs\u002Fnodes\u002F_dir","docs\u002F5.nodes\u002F_dir",{"title":335,"path":336,"stem":337},"Record Alert","\u002Fdocs\u002Fnodes\u002Falerts_record","docs\u002F5.nodes\u002Falerts_record",{"title":339,"path":340,"stem":341},"Log to API Log","\u002Fdocs\u002Fnodes\u002Fapilog_record","docs\u002F5.nodes\u002Fapilog_record",{"title":343,"path":344,"stem":345},"ClickHouse Exec","\u002Fdocs\u002Fnodes\u002Fclickhouse_exec","docs\u002F5.nodes\u002Fclickhouse_exec",{"title":347,"path":348,"stem":349},"ClickHouse Insert","\u002Fdocs\u002Fnodes\u002Fclickhouse_insert","docs\u002F5.nodes\u002Fclickhouse_insert",{"title":351,"path":352,"stem":353},"ClickHouse Query","\u002Fdocs\u002Fnodes\u002Fclickhouse_query","docs\u002F5.nodes\u002Fclickhouse_query",{"title":355,"path":356,"stem":357},"Array Op","\u002Fdocs\u002Fnodes\u002Fcore_array-ops","docs\u002F5.nodes\u002Fcore_array-ops",{"title":359,"path":360,"stem":361},"Assert","\u002Fdocs\u002Fnodes\u002Fcore_assert","docs\u002F5.nodes\u002Fcore_assert",{"title":363,"path":364,"stem":365},"Audit Emit","\u002Fdocs\u002Fnodes\u002Fcore_audit-emit","docs\u002F5.nodes\u002Fcore_audit-emit",{"title":367,"path":368,"stem":369},"Catch","\u002Fdocs\u002Fnodes\u002Fcore_catch","docs\u002F5.nodes\u002Fcore_catch",{"title":371,"path":372,"stem":373},"DateTime","\u002Fdocs\u002Fnodes\u002Fcore_datetime","docs\u002F5.nodes\u002Fcore_datetime",{"title":375,"path":376,"stem":377},"Dead Letter","\u002Fdocs\u002Fnodes\u002Fcore_dead-letter","docs\u002F5.nodes\u002Fcore_dead-letter",{"title":379,"path":380,"stem":381},"Delay","\u002Fdocs\u002Fnodes\u002Fcore_delay","docs\u002F5.nodes\u002Fcore_delay",{"title":383,"path":384,"stem":385},"ForEach","\u002Fdocs\u002Fnodes\u002Fcore_foreach","docs\u002F5.nodes\u002Fcore_foreach",{"title":387,"path":388,"stem":389},"Idempotency Key","\u002Fdocs\u002Fnodes\u002Fcore_idempotency-key","docs\u002F5.nodes\u002Fcore_idempotency-key",{"title":391,"path":392,"stem":393},"If","\u002Fdocs\u002Fnodes\u002Fcore_if","docs\u002F5.nodes\u002Fcore_if",{"title":395,"path":396,"stem":397},"Inspect","\u002Fdocs\u002Fnodes\u002Fcore_inspect","docs\u002F5.nodes\u002Fcore_inspect",{"title":399,"path":400,"stem":401},"JSON Merge","\u002Fdocs\u002Fnodes\u002Fcore_json-merge","docs\u002F5.nodes\u002Fcore_json-merge",{"title":403,"path":404,"stem":405},"JSON Schema Validate","\u002Fdocs\u002Fnodes\u002Fcore_json-schema-validate","docs\u002F5.nodes\u002Fcore_json-schema-validate",{"title":407,"path":408,"stem":409},"JSONPath Extract","\u002Fdocs\u002Fnodes\u002Fcore_jsonpath-extract","docs\u002F5.nodes\u002Fcore_jsonpath-extract",{"title":411,"path":412,"stem":413},"Log","\u002Fdocs\u002Fnodes\u002Fcore_log","docs\u002F5.nodes\u002Fcore_log",{"title":415,"path":416,"stem":417},"Math","\u002Fdocs\u002Fnodes\u002Fcore_math","docs\u002F5.nodes\u002Fcore_math",{"title":419,"path":420,"stem":421},"Merge","\u002Fdocs\u002Fnodes\u002Fcore_merge","docs\u002F5.nodes\u002Fcore_merge",{"title":423,"path":424,"stem":425},"Metric Counter","\u002Fdocs\u002Fnodes\u002Fcore_metric-counter","docs\u002F5.nodes\u002Fcore_metric-counter",{"title":427,"path":428,"stem":429},"Metric Gauge","\u002Fdocs\u002Fnodes\u002Fcore_metric-gauge","docs\u002F5.nodes\u002Fcore_metric-gauge",{"title":431,"path":432,"stem":433},"Mock","\u002Fdocs\u002Fnodes\u002Fcore_mock","docs\u002F5.nodes\u002Fcore_mock",{"title":435,"path":436,"stem":437},"No-op","\u002Fdocs\u002Fnodes\u002Fcore_noop","docs\u002F5.nodes\u002Fcore_noop",{"title":439,"path":440,"stem":441},"Object Omit","\u002Fdocs\u002Fnodes\u002Fcore_object-omit","docs\u002F5.nodes\u002Fcore_object-omit",{"title":443,"path":444,"stem":445},"Object Pick","\u002Fdocs\u002Fnodes\u002Fcore_object-pick","docs\u002F5.nodes\u002Fcore_object-pick",{"title":447,"path":448,"stem":449},"Parallel Fan-Out","\u002Fdocs\u002Fnodes\u002Fcore_parallel","docs\u002F5.nodes\u002Fcore_parallel",{"title":451,"path":452,"stem":453},"Raise","\u002Fdocs\u002Fnodes\u002Fcore_raise","docs\u002F5.nodes\u002Fcore_raise",{"title":455,"path":456,"stem":457},"Rate Limit Check","\u002Fdocs\u002Fnodes\u002Fcore_rate-limit-check","docs\u002F5.nodes\u002Fcore_rate-limit-check",{"title":459,"path":460,"stem":461},"Regex Extract","\u002Fdocs\u002Fnodes\u002Fcore_regex-extract","docs\u002F5.nodes\u002Fcore_regex-extract",{"title":463,"path":464,"stem":465},"Require Fields","\u002Fdocs\u002Fnodes\u002Fcore_require-fields","docs\u002F5.nodes\u002Fcore_require-fields",{"title":467,"path":468,"stem":469},"Rethrow","\u002Fdocs\u002Fnodes\u002Fcore_rethrow","docs\u002F5.nodes\u002Fcore_rethrow",{"title":471,"path":472,"stem":473},"Return","\u002Fdocs\u002Fnodes\u002Fcore_return","docs\u002F5.nodes\u002Fcore_return",{"title":475,"path":476,"stem":477},"HMAC Signature Verify","\u002Fdocs\u002Fnodes\u002Fcore_signature-verify","docs\u002F5.nodes\u002Fcore_signature-verify",{"title":479,"path":480,"stem":481},"String Op","\u002Fdocs\u002Fnodes\u002Fcore_string-ops","docs\u002F5.nodes\u002Fcore_string-ops",{"title":483,"path":484,"stem":485},"Subflow Invoke","\u002Fdocs\u002Fnodes\u002Fcore_subflow-invoke","docs\u002F5.nodes\u002Fcore_subflow-invoke",{"title":487,"path":488,"stem":489},"Switch","\u002Fdocs\u002Fnodes\u002Fcore_switch","docs\u002F5.nodes\u002Fcore_switch",{"title":491,"path":492,"stem":493},"Template Render","\u002Fdocs\u002Fnodes\u002Fcore_template-render","docs\u002F5.nodes\u002Fcore_template-render",{"title":495,"path":496,"stem":497},"Throttle","\u002Fdocs\u002Fnodes\u002Fcore_throttle","docs\u002F5.nodes\u002Fcore_throttle",{"title":499,"path":500,"stem":501},"Timeout","\u002Fdocs\u002Fnodes\u002Fcore_timeout","docs\u002F5.nodes\u002Fcore_timeout",{"title":503,"path":504,"stem":505},"Type Cast","\u002Fdocs\u002Fnodes\u002Fcore_type-cast","docs\u002F5.nodes\u002Fcore_type-cast",{"title":507,"path":508,"stem":509},"Webhook Respond","\u002Fdocs\u002Fnodes\u002Fcore_webhook-respond","docs\u002F5.nodes\u002Fcore_webhook-respond",{"title":511,"path":512,"stem":513},"File Delete","\u002Fdocs\u002Fnodes\u002Ffilesys_delete","docs\u002F5.nodes\u002Ffilesys_delete",{"title":515,"path":516,"stem":517},"Directory List","\u002Fdocs\u002Fnodes\u002Ffilesys_list","docs\u002F5.nodes\u002Ffilesys_list",{"title":519,"path":520,"stem":521},"File Read","\u002Fdocs\u002Fnodes\u002Ffilesys_read","docs\u002F5.nodes\u002Ffilesys_read",{"title":523,"path":524,"stem":525},"File Stat","\u002Fdocs\u002Fnodes\u002Ffilesys_stat","docs\u002F5.nodes\u002Ffilesys_stat",{"title":527,"path":528,"stem":529},"File Write","\u002Fdocs\u002Fnodes\u002Ffilesys_write","docs\u002F5.nodes\u002Ffilesys_write",{"title":531,"path":532,"stem":533},"FTP Delete","\u002Fdocs\u002Fnodes\u002Fftp_delete","docs\u002F5.nodes\u002Fftp_delete",{"title":535,"path":536,"stem":537},"FTP Download","\u002Fdocs\u002Fnodes\u002Fftp_download","docs\u002F5.nodes\u002Fftp_download",{"title":539,"path":540,"stem":541},"FTP List","\u002Fdocs\u002Fnodes\u002Fftp_list","docs\u002F5.nodes\u002Fftp_list",{"title":543,"path":544,"stem":545},"FTP Upload","\u002Fdocs\u002Fnodes\u002Fftp_upload","docs\u002F5.nodes\u002Fftp_upload",{"title":547,"path":548,"stem":549},"HTTP DELETE","\u002Fdocs\u002Fnodes\u002Fhttp_delete","docs\u002F5.nodes\u002Fhttp_delete",{"title":551,"path":552,"stem":553},"HTTP GET","\u002Fdocs\u002Fnodes\u002Fhttp_get","docs\u002F5.nodes\u002Fhttp_get",{"title":555,"path":556,"stem":557},"HTTP POST","\u002Fdocs\u002Fnodes\u002Fhttp_post","docs\u002F5.nodes\u002Fhttp_post",{"title":559,"path":560,"stem":561},"HTTP PUT","\u002Fdocs\u002Fnodes\u002Fhttp_put","docs\u002F5.nodes\u002Fhttp_put",{"title":563,"path":564,"stem":565},"HTTP Request","\u002Fdocs\u002Fnodes\u002Fhttp_request","docs\u002F5.nodes\u002Fhttp_request",{"title":567,"path":568,"stem":569},"Fill Translations","\u002Fdocs\u002Fnodes\u002Fi18n_fill-translations","docs\u002F5.nodes\u002Fi18n_fill-translations",{"title":571,"path":572,"stem":573},"Resolve Locale","\u002Fdocs\u002Fnodes\u002Fi18n_resolve-locale","docs\u002F5.nodes\u002Fi18n_resolve-locale",{"title":575,"path":576,"stem":577},"Translate","\u002Fdocs\u002Fnodes\u002Fi18n_translate","docs\u002F5.nodes\u002Fi18n_translate",{"title":579,"path":580,"stem":581},"Mongo AGGREGATE","\u002Fdocs\u002Fnodes\u002Fmongoops_aggregate","docs\u002F5.nodes\u002Fmongoops_aggregate",{"title":583,"path":584,"stem":585},"Mongo DELETE","\u002Fdocs\u002Fnodes\u002Fmongoops_delete","docs\u002F5.nodes\u002Fmongoops_delete",{"title":587,"path":588,"stem":589},"Mongo FIND","\u002Fdocs\u002Fnodes\u002Fmongoops_find","docs\u002F5.nodes\u002Fmongoops_find",{"title":591,"path":592,"stem":593},"Mongo FIND ONE","\u002Fdocs\u002Fnodes\u002Fmongoops_find-one","docs\u002F5.nodes\u002Fmongoops_find-one",{"title":595,"path":596,"stem":597},"Mongo INSERT","\u002Fdocs\u002Fnodes\u002Fmongoops_insert","docs\u002F5.nodes\u002Fmongoops_insert",{"title":599,"path":600,"stem":601},"Mongo UPDATE","\u002Fdocs\u002Fnodes\u002Fmongoops_update","docs\u002F5.nodes\u002Fmongoops_update",{"title":603,"path":604,"stem":605},"Postgres COPY FROM","\u002Fdocs\u002Fnodes\u002Fpostgres_copy-from","docs\u002F5.nodes\u002Fpostgres_copy-from",{"title":607,"path":608,"stem":609},"Postgres Exec","\u002Fdocs\u002Fnodes\u002Fpostgres_exec","docs\u002F5.nodes\u002Fpostgres_exec",{"title":611,"path":612,"stem":613},"Postgres Query","\u002Fdocs\u002Fnodes\u002Fpostgres_query","docs\u002F5.nodes\u002Fpostgres_query",{"title":615,"path":616,"stem":617},"Postgres Transaction","\u002Fdocs\u002Fnodes\u002Fpostgres_transaction","docs\u002F5.nodes\u002Fpostgres_transaction",{"title":619,"path":620,"stem":621},"RabbitMQ Consume","\u002Fdocs\u002Fnodes\u002Frabbitmq_consume","docs\u002F5.nodes\u002Frabbitmq_consume",{"title":623,"path":624,"stem":625},"RabbitMQ Declare","\u002Fdocs\u002Fnodes\u002Frabbitmq_declare","docs\u002F5.nodes\u002Frabbitmq_declare",{"title":627,"path":628,"stem":629},"RabbitMQ Publish","\u002Fdocs\u002Fnodes\u002Frabbitmq_publish","docs\u002F5.nodes\u002Frabbitmq_publish",{"title":631,"path":632,"stem":633},"Auth Login","\u002Fdocs\u002Fnodes\u002Fredelay_auth-login","docs\u002F5.nodes\u002Fredelay_auth-login",{"title":635,"path":636,"stem":637},"Require Permission","\u002Fdocs\u002Fnodes\u002Fredelay_auth-require-permission","docs\u002F5.nodes\u002Fredelay_auth-require-permission",{"title":639,"path":640,"stem":641},"Validate Token","\u002Fdocs\u002Fnodes\u002Fredelay_auth-validate-token","docs\u002F5.nodes\u002Fredelay_auth-validate-token",{"title":643,"path":644,"stem":645},"Render Email Template","\u002Fdocs\u002Fnodes\u002Fredelay_email-render-template","docs\u002F5.nodes\u002Fredelay_email-render-template",{"title":647,"path":648,"stem":649},"Send Email","\u002Fdocs\u002Fnodes\u002Fredelay_email-send","docs\u002F5.nodes\u002Fredelay_email-send",{"title":651,"path":652,"stem":653},"Send Templated Email","\u002Fdocs\u002Fnodes\u002Fredelay_email-send-templated","docs\u002F5.nodes\u002Fredelay_email-send-templated",{"title":655,"path":656,"stem":657},"Event Source","\u002Fdocs\u002Fnodes\u002Fredelay_event-source","docs\u002F5.nodes\u002Fredelay_event-source",{"title":659,"path":660,"stem":661},"Create Group","\u002Fdocs\u002Fnodes\u002Fredelay_groups-create-group","docs\u002F5.nodes\u002Fredelay_groups-create-group",{"title":663,"path":664,"stem":665},"Delete Group","\u002Fdocs\u002Fnodes\u002Fredelay_groups-delete-group","docs\u002F5.nodes\u002Fredelay_groups-delete-group",{"title":667,"path":668,"stem":669},"Resolve Permissions","\u002Fdocs\u002Fnodes\u002Fredelay_groups-resolve-permissions","docs\u002F5.nodes\u002Fredelay_groups-resolve-permissions",{"title":671,"path":672,"stem":673},"Update Group","\u002Fdocs\u002Fnodes\u002Fredelay_groups-update-group","docs\u002F5.nodes\u002Fredelay_groups-update-group",{"title":675,"path":676,"stem":677},"HTTP Endpoint","\u002Fdocs\u002Fnodes\u002Fredelay_http-endpoint","docs\u002F5.nodes\u002Fredelay_http-endpoint",{"title":679,"path":680,"stem":681},"JSON Stream Source","\u002Fdocs\u002Fnodes\u002Fredelay_json-stream-source","docs\u002F5.nodes\u002Fredelay_json-stream-source",{"title":683,"path":684,"stem":685},"JSON → Event","\u002Fdocs\u002Fnodes\u002Fredelay_json-to-event","docs\u002F5.nodes\u002Fredelay_json-to-event",{"title":687,"path":688,"stem":689},"Kafka Produce","\u002Fdocs\u002Fnodes\u002Fredelay_kafka-produce","docs\u002F5.nodes\u002Fredelay_kafka-produce",{"title":691,"path":692,"stem":693},"Create Short Link","\u002Fdocs\u002Fnodes\u002Fredelay_links-create","docs\u002F5.nodes\u002Fredelay_links-create",{"title":695,"path":696,"stem":697},"Delete Short Link","\u002Fdocs\u002Fnodes\u002Fredelay_links-delete","docs\u002F5.nodes\u002Fredelay_links-delete",{"title":699,"path":700,"stem":701},"Resolve Short Link","\u002Fdocs\u002Fnodes\u002Fredelay_links-resolve","docs\u002F5.nodes\u002Fredelay_links-resolve",{"title":703,"path":704,"stem":705},"LLM Chat","\u002Fdocs\u002Fnodes\u002Fredelay_llm-chat","docs\u002F5.nodes\u002Fredelay_llm-chat",{"title":707,"path":708,"stem":709},"LLM Embed","\u002Fdocs\u002Fnodes\u002Fredelay_llm-embed","docs\u002F5.nodes\u002Fredelay_llm-embed",{"title":711,"path":712,"stem":713},"LLM Guard","\u002Fdocs\u002Fnodes\u002Fredelay_llm-guard","docs\u002F5.nodes\u002Fredelay_llm-guard",{"title":715,"path":716,"stem":717},"LLM Tool Router","\u002Fdocs\u002Fnodes\u002Fredelay_llm-tool-router","docs\u002F5.nodes\u002Fredelay_llm-tool-router",{"title":719,"path":720,"stem":721},"NATS Publish","\u002Fdocs\u002Fnodes\u002Fredelay_nats-publish","docs\u002F5.nodes\u002Fredelay_nats-publish",{"title":723,"path":724,"stem":725},"Mark Notification Read","\u002Fdocs\u002Fnodes\u002Fredelay_notifications-mark-read","docs\u002F5.nodes\u002Fredelay_notifications-mark-read",{"title":727,"path":728,"stem":729},"Send Notification","\u002Fdocs\u002Fnodes\u002Fredelay_notifications-send","docs\u002F5.nodes\u002Fredelay_notifications-send",{"title":731,"path":732,"stem":733},"Redis Stream XADD","\u002Fdocs\u002Fnodes\u002Fredelay_redis-stream-publish","docs\u002F5.nodes\u002Fredelay_redis-stream-publish",{"title":735,"path":736,"stem":737},"S3 Copy Object","\u002Fdocs\u002Fnodes\u002Fredelay_s3-copy-object","docs\u002F5.nodes\u002Fredelay_s3-copy-object",{"title":739,"path":740,"stem":741},"S3 Delete Many","\u002Fdocs\u002Fnodes\u002Fredelay_s3-delete-many","docs\u002F5.nodes\u002Fredelay_s3-delete-many",{"title":743,"path":744,"stem":745},"S3 Head Object","\u002Fdocs\u002Fnodes\u002Fredelay_s3-head-object","docs\u002F5.nodes\u002Fredelay_s3-head-object",{"title":747,"path":748,"stem":749},"S3 List Objects","\u002Fdocs\u002Fnodes\u002Fredelay_s3-list-objects","docs\u002F5.nodes\u002Fredelay_s3-list-objects",{"title":751,"path":752,"stem":753},"Create Schedule","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-create-schedule","docs\u002F5.nodes\u002Fredelay_scheduler-create-schedule",{"title":755,"path":756,"stem":757},"Cron Trigger","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-cron-trigger","docs\u002F5.nodes\u002Fredelay_scheduler-cron-trigger",{"title":759,"path":760,"stem":761},"Delete Schedule","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-delete-schedule","docs\u002F5.nodes\u002Fredelay_scheduler-delete-schedule",{"title":763,"path":764,"stem":765},"Interval Trigger","\u002Fdocs\u002Fnodes\u002Fredelay_scheduler-interval-trigger","docs\u002F5.nodes\u002Fredelay_scheduler-interval-trigger",{"title":767,"path":768,"stem":769},"Search Query","\u002Fdocs\u002Fnodes\u002Fredelay_search-query","docs\u002F5.nodes\u002Fredelay_search-query",{"title":771,"path":772,"stem":773},"Search Upsert","\u002Fdocs\u002Fnodes\u002Fredelay_search-upsert","docs\u002F5.nodes\u002Fredelay_search-upsert",{"title":775,"path":776,"stem":777},"Delete Setting","\u002Fdocs\u002Fnodes\u002Fredelay_settings-delete","docs\u002F5.nodes\u002Fredelay_settings-delete",{"title":779,"path":780,"stem":781},"Get Setting","\u002Fdocs\u002Fnodes\u002Fredelay_settings-get","docs\u002F5.nodes\u002Fredelay_settings-get",{"title":783,"path":784,"stem":785},"Set Setting","\u002Fdocs\u002Fnodes\u002Fredelay_settings-set","docs\u002F5.nodes\u002Fredelay_settings-set",{"title":787,"path":788,"stem":789},"Delete File","\u002Fdocs\u002Fnodes\u002Fredelay_storage-delete","docs\u002F5.nodes\u002Fredelay_storage-delete",{"title":791,"path":792,"stem":793},"Download File","\u002Fdocs\u002Fnodes\u002Fredelay_storage-download","docs\u002F5.nodes\u002Fredelay_storage-download",{"title":795,"path":796,"stem":797},"Generate Presigned URL","\u002Fdocs\u002Fnodes\u002Fredelay_storage-presign-url","docs\u002F5.nodes\u002Fredelay_storage-presign-url",{"title":799,"path":800,"stem":801},"Upload File","\u002Fdocs\u002Fnodes\u002Fredelay_storage-upload","docs\u002F5.nodes\u002Fredelay_storage-upload",{"title":803,"path":804,"stem":805},"Subworkflow","\u002Fdocs\u002Fnodes\u002Fredelay_subworkflow","docs\u002F5.nodes\u002Fredelay_subworkflow",{"title":807,"path":808,"stem":809},"Activate User","\u002Fdocs\u002Fnodes\u002Fredelay_users-activate","docs\u002F5.nodes\u002Fredelay_users-activate",{"title":811,"path":812,"stem":813},"Create Pending User","\u002Fdocs\u002Fnodes\u002Fredelay_users-create-pending","docs\u002F5.nodes\u002Fredelay_users-create-pending",{"title":815,"path":816,"stem":817},"Create User","\u002Fdocs\u002Fnodes\u002Fredelay_users-create-user","docs\u002F5.nodes\u002Fredelay_users-create-user",{"title":819,"path":820,"stem":821},"Delete User","\u002Fdocs\u002Fnodes\u002Fredelay_users-delete-user","docs\u002F5.nodes\u002Fredelay_users-delete-user",{"title":823,"path":824,"stem":825},"Find User By Email","\u002Fdocs\u002Fnodes\u002Fredelay_users-find-by-email","docs\u002F5.nodes\u002Fredelay_users-find-by-email",{"title":827,"path":828,"stem":829},"Get User","\u002Fdocs\u002Fnodes\u002Fredelay_users-get-user","docs\u002F5.nodes\u002Fredelay_users-get-user",{"title":831,"path":832,"stem":833},"List Users","\u002Fdocs\u002Fnodes\u002Fredelay_users-list-users","docs\u002F5.nodes\u002Fredelay_users-list-users",{"title":835,"path":836,"stem":837},"Update User","\u002Fdocs\u002Fnodes\u002Fredelay_users-update-user","docs\u002F5.nodes\u002Fredelay_users-update-user",{"title":839,"path":840,"stem":841},"Request Email Verification (legacy)","\u002Fdocs\u002Fnodes\u002Fredelay_verification-request","docs\u002F5.nodes\u002Fredelay_verification-request",{"title":843,"path":844,"stem":845},"Request Email Verification","\u002Fdocs\u002Fnodes\u002Fredelay_verification-request-email","docs\u002F5.nodes\u002Fredelay_verification-request-email",{"title":847,"path":848,"stem":849},"Request SMS Verification","\u002Fdocs\u002Fnodes\u002Fredelay_verification-request-sms","docs\u002F5.nodes\u002Fredelay_verification-request-sms",{"title":851,"path":852,"stem":853},"Verify Token","\u002Fdocs\u002Fnodes\u002Fredelay_verification-verify","docs\u002F5.nodes\u002Fredelay_verification-verify",{"title":855,"path":856,"stem":857},"Redis DEL","\u002Fdocs\u002Fnodes\u002Fredisops_del","docs\u002F5.nodes\u002Fredisops_del",{"title":859,"path":860,"stem":861},"Redis EXPIRE","\u002Fdocs\u002Fnodes\u002Fredisops_expire","docs\u002F5.nodes\u002Fredisops_expire",{"title":863,"path":864,"stem":865},"Redis GET","\u002Fdocs\u002Fnodes\u002Fredisops_get","docs\u002F5.nodes\u002Fredisops_get",{"title":867,"path":868,"stem":869},"Redis HGET","\u002Fdocs\u002Fnodes\u002Fredisops_hget","docs\u002F5.nodes\u002Fredisops_hget",{"title":871,"path":872,"stem":873},"Redis HSET","\u002Fdocs\u002Fnodes\u002Fredisops_hset","docs\u002F5.nodes\u002Fredisops_hset",{"title":875,"path":876,"stem":877},"Redis INCR","\u002Fdocs\u002Fnodes\u002Fredisops_incr","docs\u002F5.nodes\u002Fredisops_incr",{"title":879,"path":880,"stem":881},"Redis LPOP","\u002Fdocs\u002Fnodes\u002Fredisops_lpop","docs\u002F5.nodes\u002Fredisops_lpop",{"title":883,"path":884,"stem":885},"Redis LPUSH","\u002Fdocs\u002Fnodes\u002Fredisops_lpush","docs\u002F5.nodes\u002Fredisops_lpush",{"title":887,"path":888,"stem":889},"Redis PUBLISH","\u002Fdocs\u002Fnodes\u002Fredisops_publish","docs\u002F5.nodes\u002Fredisops_publish",{"title":891,"path":892,"stem":893},"Redis SET","\u002Fdocs\u002Fnodes\u002Fredisops_set","docs\u002F5.nodes\u002Fredisops_set",{"title":895,"path":896,"stem":897},"SFTP Download","\u002Fdocs\u002Fnodes\u002Fsftp_download","docs\u002F5.nodes\u002Fsftp_download",{"title":899,"path":900,"stem":901},"SFTP Upload","\u002Fdocs\u002Fnodes\u002Fsftp_upload","docs\u002F5.nodes\u002Fsftp_upload",{"title":903,"path":904,"stem":905},"Send SMS","\u002Fdocs\u002Fnodes\u002Fsms_send","docs\u002F5.nodes\u002Fsms_send",{"title":907,"path":908,"stem":909,"children":910,"page":62},"Rfcs","\u002Fdocs\u002Frfcs","docs\u002F6.rfcs",[911],{"title":912,"path":913,"stem":914},"RFC 0001 — Worker Assignment for Flow Deployments","\u002Fdocs\u002Frfcs\u002F0001-worker-assignment","docs\u002F6.rfcs\u002F0001-worker-assignment",{"title":916,"path":917,"stem":918,"children":919,"page":62},"Admin","\u002Fdocs\u002Fadmin","docs\u002F7.admin",[920,925,930,935,940,945,950,954,959],{"title":5,"path":921,"stem":922,"order":923,"icon":924},"\u002Fdocs\u002Fadmin\u002Foverview","docs\u002F7.admin\u002F00.overview",0,"i-lucide-compass",{"title":926,"path":927,"stem":928,"order":10,"icon":929},"Getting started","\u002Fdocs\u002Fadmin\u002Fgetting-started","docs\u002F7.admin\u002F01.getting-started","i-lucide-play",{"title":931,"path":932,"stem":933,"order":16,"icon":934},"Layered architecture","\u002Fdocs\u002Fadmin\u002Flayered-architecture","docs\u002F7.admin\u002F02.layered-architecture","i-lucide-layers",{"title":936,"path":937,"stem":938,"order":22,"icon":939},"Building a custom admin project","\u002Fdocs\u002Fadmin\u002Fbuilding-a-custom-admin-project","docs\u002F7.admin\u002F03.building-a-custom-admin-project","i-lucide-folder-plus",{"title":941,"path":942,"stem":943,"order":51,"icon":944},"Building admin modules","\u002Fdocs\u002Fadmin\u002Fbuilding-admin-modules","docs\u002F7.admin\u002F04.building-admin-modules","i-lucide-package-plus",{"title":946,"path":947,"stem":948,"order":57,"icon":949},"Base module reference","\u002Fdocs\u002Fadmin\u002Freference-base-modules","docs\u002F7.admin\u002F05.reference-base-modules","i-lucide-boxes",{"title":951,"path":952,"stem":953,"order":111,"icon":17},"Deployment","\u002Fdocs\u002Fadmin\u002Fdeployment","docs\u002F7.admin\u002F06.deployment",{"title":955,"path":956,"stem":957,"order":117,"icon":958},"Consuming the base layer (versioned)","\u002Fdocs\u002Fadmin\u002Fconsuming-the-base-layer","docs\u002F7.admin\u002F07.consuming-the-base-layer","i-lucide-package",{"title":960,"path":961,"stem":962,"order":117},"Admin UI","\u002Fdocs\u002Fadmin\u002F_dir","docs\u002F7.admin\u002F_dir",{"title":964,"path":965,"stem":966,"children":967,"page":62},"Services","\u002Fdocs\u002Fservices","docs\u002F8.services",[968,973],{"title":969,"path":970,"stem":971,"order":10,"icon":972},"Custom development & support services","\u002Fdocs\u002Fservices\u002Fcustom-development","docs\u002F8.services\u002F1.custom-development","i-lucide-briefcase",{"title":964,"path":974,"stem":975,"icon":972,"order":976},"\u002Fdocs\u002Fservices\u002F_dir","docs\u002F8.services\u002F_dir",80,{"title":978,"path":979,"stem":980,"order":923},"Dir","\u002Fdocs\u002F_dir","docs\u002F_dir",{"id":982,"title":82,"body":983,"description":1957,"extension":1958,"links":1959,"meta":1960,"navigation":1961,"path":83,"seo":1962,"stem":84,"__hash__":1963},"docs\u002Fdocs\u002F3.guides\u002F12.events-dashboard.md",{"type":984,"value":985,"toc":1944},"minimark",[986,990,994,1017,1024,1077,1082,1186,1198,1202,1280,1291,1295,1374,1408,1412,1415,1471,1506,1511,1592,1625,1629,1632,1720,1723,1739,1742,1745,1824,1845,1849,1882,1886,1919,1923,1940],[987,988,82],"h1",{"id":989},"events-services-dashboard",[991,992,993],"p",{},"An admin page that answers three questions at a glance:",[995,996,997,1005,1011],"ol",{},[998,999,1000,1004],"li",{},[1001,1002,1003],"strong",{},"Is every topic carrying what it normally carries?"," Messages per second per\ntopic, now vs the same hour yesterday and a week ago.",[998,1006,1007,1010],{},[1001,1008,1009],{},"Is every consumer keeping up?"," Lag per consumer group and whether it grows.",[998,1012,1013,1016],{},[1001,1014,1015],{},"Are the services healthy?"," CPU, memory, restarts and network per swarm service,\nnext to per-action event counts and handler failures.",[991,1018,1019,1020,1023],{},"Everything comes from Prometheus. The page sends no PromQL: the backend owns a fixed\ncatalogue of queries and the browser asks for series ",[1001,1021,1022],{},"by name",".",[1025,1026,1027,1030,1031,1035,1036,1039,1040,1035,1043,1046,1047,1052,1053,1056,1057,1060,1061,1064,1065,1068,1069,1073,1074,1023],"note",{},[1001,1028,1029],{},"Reference implementation"," — nameniac (",[1032,1033,1034],"code",{},"nameniac\u002Fgoapi"," →\n",[1032,1037,1038],{},"modules\u002Fsystemhealth\u002Fevents.go",", admin ",[1032,1041,1042],{},"nameniac\u002Fadmin-v2",[1032,1044,1045],{},"modules\u002Fsystem-events\u002F","). It is project code today, written to be lifted out: all\nproject specifics are four env vars (see ",[1048,1049,1051],"a",{"href":1050},"#scoping","Scoping","). The ",[1001,1054,1055],{},"health"," half has\nsince moved to ",[1032,1058,1059],{},"go-modules\u002Fsystemhealth"," (v0.60.0) and js-admin ",[1032,1062,1063],{},"system-health"," (v0.7.13)\nand the ",[1001,1066,1067],{},"events"," half followed in v0.62.0 \u002F v0.7.15 — see\n",[1048,1070,1072],{"href":1071},"\u002Fdocs\u002Freference\u002Fgo-modules-addons#systemhealth","systemhealth",". The env names below\nare now ",[1032,1075,1076],{},"SYSTEMHEALTH_EVENTS_*",[1078,1079,1081],"h2",{"id":1080},"data-sources","Data sources",[1083,1084,1085,1101],"table",{},[1086,1087,1088],"thead",{},[1089,1090,1091,1095,1098],"tr",{},[1092,1093,1094],"th",{},"Source",[1092,1096,1097],{},"Gives you",[1092,1099,1100],{},"Needed for",[1102,1103,1104,1118,1139,1159,1172],"tbody",{},[1089,1105,1106,1110,1115],{},[1107,1108,1109],"td",{},"Kafka broker JMX exporter",[1107,1111,1112],{},[1032,1113,1114],{},"kafka_server_brokertopicmetrics_messagesinpersec{topic}",[1107,1116,1117],{},"topic rates, silent\u002Fspike\u002Fmisrouted detection",[1089,1119,1120,1126,1136],{},[1107,1121,1122],{},[1048,1123,1125],{"href":1124},"\u002Fdocs\u002Freference\u002Fgo-events#metrics","go-events ≥ v0.4.3 metrics",[1107,1127,1128,1131,1132,1135],{},[1032,1129,1130],{},"events_published_total",", ",[1032,1133,1134],{},"events_consumed_total",", handler duration",[1107,1137,1138],{},"per-action charts, handler failures, p95",[1089,1140,1141,1148,1156],{},[1107,1142,1143,1144,1147],{},"kafka-exporter (",[1032,1145,1146],{},"danielqsj\u002Fkafka-exporter",")",[1107,1149,1150,1131,1153],{},[1032,1151,1152],{},"kafka_consumergroup_lag",[1032,1154,1155],{},"kafka_consumergroup_members",[1107,1157,1158],{},"consumer lag",[1089,1160,1161,1164,1169],{},[1107,1162,1163],{},"cAdvisor",[1107,1165,1166],{},[1032,1167,1168],{},"container_*{container_label_com_docker_swarm_service_name}",[1107,1170,1171],{},"CPU, memory, restarts, network per service",[1089,1173,1174,1177,1183],{},[1107,1175,1176],{},"Your own module metrics",[1107,1178,1179,1180],{},"e.g. ",[1032,1181,1182],{},"catcher_attempts_total{registrar,outcome}",[1107,1184,1185],{},"domain-specific charts",[991,1187,1188,1189,1192,1193,1197],{},"Each source is optional: the overview endpoint reports a missing one in a ",[1032,1190,1191],{},"missing","\nlist (\"kafka-exporter (consumer lag)\", \"go-events ≥ v0.4.3 metrics\") and the page\nshows it as ",[1194,1195,1196],"em",{},"Not available yet"," instead of an empty chart.",[1078,1199,1201],{"id":1200},"_1-emit-event-metrics-from-every-service","1. Emit event metrics from every service",[1203,1204,1205,1226,1256,1269],"ul",{},[998,1206,1207,1213,1214,1217,1218,1221,1222,1225],{},[1001,1208,1209,1210],{},"Services on ",[1032,1211,1212],{},"go-events\u002Fmodule"," — nothing to do since v0.4.3 (on by default,\n",[1032,1215,1216],{},"EVENTS_METRICS=false"," disables). Make sure ",[1032,1219,1220],{},"\u002Fmetrics"," is served\n(",[1032,1223,1224],{},"go-modules\u002Fmetrics",").",[998,1227,1228,1231,1232,1234,1235],{},[1001,1229,1230],{},"Standalone workers"," — wire the observer yourself and give the worker a\n",[1032,1233,1220],{}," listener (a worker with no HTTP server is otherwise invisible):",[1236,1237,1242],"pre",{"className":1238,"code":1239,"language":1240,"meta":1241,"style":1241},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bus := eventbus.New(tr, eventbus.WithName(\"default\"), eventbus.WithObserver(prom.Default()))\ngo http.ListenAndServe(\":8080\", promhttp.Handler())\n","go","",[1032,1243,1244,1251],{"__ignoreMap":1241},[1245,1246,1248],"span",{"class":1247,"line":10},"line",[1245,1249,1250],{},"bus := eventbus.New(tr, eventbus.WithName(\"default\"), eventbus.WithObserver(prom.Default()))\n",[1245,1252,1253],{"class":1247,"line":16},[1245,1254,1255],{},"go http.ListenAndServe(\":8080\", promhttp.Handler())\n",[998,1257,1258,1264,1265,1268],{},[1001,1259,1260,1261],{},"Consumers that bypass ",[1032,1262,1263],{},"bus.Register"," (their own sarama loop, batch readers) —\ncall ",[1032,1266,1267],{},"obs.Consumed(...)"," after each message. Otherwise the topic fills up and the\ndashboard shows no consumer activity for it.",[998,1270,1271,1272,1275,1276,1279],{},"Return ",[1032,1273,1274],{},"eventbus.ErrSkipped"," for deliberately dropped messages so they count as\n",[1032,1277,1278],{},"skipped",", not as failures.",[991,1281,1282,1283,1286,1287,1290],{},"Then add a scrape job per service. Swarm services with several replicas need\n",[1032,1284,1285],{},"dns_sd_configs"," on ",[1032,1288,1289],{},"tasks.\u003Cservice>"," so each replica is scraped on its own.",[1078,1292,1294],{"id":1293},"_2-run-kafka-exporter","2. Run kafka-exporter",[1236,1296,1300],{"className":1297,"code":1298,"language":1299,"meta":1241,"style":1241},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kafka-exporter:\n  image: danielqsj\u002Fkafka-exporter:v1.9.0\n  command:\n    - --kafka.server=kafka-1:9092\n    - --group.filter=^(nameniac|gymmer).*   # only your groups — see below\n    - --no-offset.show-all                  # boolean flags are --no-x, never --x=false\n    - --concurrent.enable\n    - --topic.workers=20\n","yaml",[1032,1301,1302,1312,1324,1331,1339,1350,1360,1367],{"__ignoreMap":1241},[1245,1303,1304,1308],{"class":1247,"line":10},[1245,1305,1307],{"class":1306},"swJcz","kafka-exporter",[1245,1309,1311],{"class":1310},"sMK4o",":\n",[1245,1313,1314,1317,1320],{"class":1247,"line":16},[1245,1315,1316],{"class":1306},"  image",[1245,1318,1319],{"class":1310},":",[1245,1321,1323],{"class":1322},"sfazB"," danielqsj\u002Fkafka-exporter:v1.9.0\n",[1245,1325,1326,1329],{"class":1247,"line":22},[1245,1327,1328],{"class":1306},"  command",[1245,1330,1311],{"class":1310},[1245,1332,1333,1336],{"class":1247,"line":51},[1245,1334,1335],{"class":1310},"    -",[1245,1337,1338],{"class":1322}," --kafka.server=kafka-1:9092\n",[1245,1340,1341,1343,1346],{"class":1247,"line":57},[1245,1342,1335],{"class":1310},[1245,1344,1345],{"class":1322}," --group.filter=^(nameniac|gymmer).*",[1245,1347,1349],{"class":1348},"sHwdD","   # only your groups — see below\n",[1245,1351,1352,1354,1357],{"class":1247,"line":111},[1245,1353,1335],{"class":1310},[1245,1355,1356],{"class":1322}," --no-offset.show-all",[1245,1358,1359],{"class":1348},"                  # boolean flags are --no-x, never --x=false\n",[1245,1361,1362,1364],{"class":1247,"line":117},[1245,1363,1335],{"class":1310},[1245,1365,1366],{"class":1322}," --concurrent.enable\n",[1245,1368,1369,1371],{"class":1247,"line":123},[1245,1370,1335],{"class":1310},[1245,1372,1373],{"class":1322}," --topic.workers=20\n",[1375,1376,1377,1398],"warning",{},[991,1378,1379,1380,1383,1384,1387,1388,1391,1392,1383,1395,1023],{},"On a broker with thousands of partitions and hundreds of dead groups a single scrape\ntakes ~50 s. Without ",[1032,1381,1382],{},"--group.filter"," and ",[1032,1385,1386],{},"--concurrent.enable"," it exceeds any scrape\ntimeout and the job reads as ",[1194,1389,1390],{},"down",". Give it its own job with\n",[1032,1393,1394],{},"scrape_interval: 60s",[1032,1396,1397],{},"scrape_timeout: 55s",[991,1399,1400,1401,1404,1405,1023],{},"kafka-exporter is built on kingpin: ",[1032,1402,1403],{},"--offset.show-all=false"," is a parse error and the\ncontainer crash-loops. Use ",[1032,1406,1407],{},"--no-offset.show-all",[1078,1409,1411],{"id":1410},"_3-the-backend-a-fixed-query-catalogue","3. The backend — a fixed query catalogue",[991,1413,1414],{},"Two endpoints, both admin-only:",[1083,1416,1417,1430],{},[1086,1418,1419],{},[1089,1420,1421,1424,1427],{},[1092,1422,1423],{},"Method",[1092,1425,1426],{},"Path",[1092,1428,1429],{},"Returns",[1102,1431,1432,1459],{},[1089,1433,1434,1437,1442],{},[1107,1435,1436],{},"GET",[1107,1438,1439],{},[1032,1440,1441],{},"\u002Fadmin\u002Fsystem\u002Fevents",[1107,1443,1444,1447,1448,1131,1451,1131,1454,1131,1456],{},[1032,1445,1446],{},"topics"," (now \u002F day ago \u002F week ago + status), ",[1032,1449,1450],{},"lag",[1032,1452,1453],{},"anomalies",[1032,1455,1191],{},[1032,1457,1458],{},"errors",[1089,1460,1461,1463,1468],{},[1107,1462,1436],{},[1107,1464,1465],{},[1032,1466,1467],{},"\u002Fadmin\u002Fsystem\u002Fhealth\u002Fseries\u002F{name}?hours=24",[1107,1469,1470],{},"one chart: ~120 points per line, ≤ 7 days",[991,1472,1473,1474,1131,1477,1131,1480,1483,1484,1131,1487,1131,1490,1131,1493,1131,1496,1483,1499,1131,1502,1505],{},"Series names map to PromQL in Go — ",[1032,1475,1476],{},"event_topics",[1032,1478,1479],{},"event_actions",[1032,1481,1482],{},"event_consumed",",\n",[1032,1485,1486],{},"event_failures",[1032,1488,1489],{},"event_handle_p95",[1032,1491,1492],{},"consumer_lag",[1032,1494,1495],{},"service_cpu",[1032,1497,1498],{},"service_memory",[1032,1500,1501],{},"service_restarts",[1032,1503,1504],{},"service_network",", plus your module's own. Unknown names 404.\nNever accept PromQL from the browser.",[1507,1508,1510],"h3",{"id":1509},"promql-that-is-easy-to-get-wrong","PromQL that is easy to get wrong",[1236,1512,1516],{"className":1513,"code":1514,"language":1515,"meta":1241,"style":1241},"language-promql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Topic rate: rate() of the broker's cumulative counter …\nsum by (topic) (rate(kafka_server_brokertopicmetrics_messagesinpersec{topic=~`nameniac\\.events(\\..+)?`}[1h]))\n# … NOT the *_oneminuterate \u002F *_fiveminuterate gauges: they are decaying averages\n# and stay inflated long after a burst (40 msg\u002Fs on a topic idle for 15 minutes).\n\n# Same window a day \u002F a week ago, for comparison\nsum by (topic) (rate(kafka_server_brokertopicmetrics_messagesinpersec{…}[1h] offset 7d))\n\n# Lag only for groups that still have a member. A retired consumer's group keeps a\n# growing lag forever and drowns the chart.\nsum by (consumergroup) (kafka_consumergroup_lag{consumergroup=~`nameniac.*`})\n  and on (consumergroup) (sum by (consumergroup) (kafka_consumergroup_members{consumergroup=~`nameniac.*`}) > 0)\n\n# Restarts: containers started in the last hour (a crash loop is a staircase)\ncount by (container_label_com_docker_swarm_service_name) (container_start_time_seconds{…} > time() - 3600)\n","promql",[1032,1517,1518,1523,1528,1533,1538,1544,1549,1554,1558,1563,1568,1573,1578,1582,1587],{"__ignoreMap":1241},[1245,1519,1520],{"class":1247,"line":10},[1245,1521,1522],{},"# Topic rate: rate() of the broker's cumulative counter …\n",[1245,1524,1525],{"class":1247,"line":16},[1245,1526,1527],{},"sum by (topic) (rate(kafka_server_brokertopicmetrics_messagesinpersec{topic=~`nameniac\\.events(\\..+)?`}[1h]))\n",[1245,1529,1530],{"class":1247,"line":22},[1245,1531,1532],{},"# … NOT the *_oneminuterate \u002F *_fiveminuterate gauges: they are decaying averages\n",[1245,1534,1535],{"class":1247,"line":51},[1245,1536,1537],{},"# and stay inflated long after a burst (40 msg\u002Fs on a topic idle for 15 minutes).\n",[1245,1539,1540],{"class":1247,"line":57},[1245,1541,1543],{"emptyLinePlaceholder":1542},true,"\n",[1245,1545,1546],{"class":1247,"line":111},[1245,1547,1548],{},"# Same window a day \u002F a week ago, for comparison\n",[1245,1550,1551],{"class":1247,"line":117},[1245,1552,1553],{},"sum by (topic) (rate(kafka_server_brokertopicmetrics_messagesinpersec{…}[1h] offset 7d))\n",[1245,1555,1556],{"class":1247,"line":123},[1245,1557,1543],{"emptyLinePlaceholder":1542},[1245,1559,1560],{"class":1247,"line":129},[1245,1561,1562],{},"# Lag only for groups that still have a member. A retired consumer's group keeps a\n",[1245,1564,1565],{"class":1247,"line":190},[1245,1566,1567],{},"# growing lag forever and drowns the chart.\n",[1245,1569,1570],{"class":1247,"line":195},[1245,1571,1572],{},"sum by (consumergroup) (kafka_consumergroup_lag{consumergroup=~`nameniac.*`})\n",[1245,1574,1575],{"class":1247,"line":200},[1245,1576,1577],{},"  and on (consumergroup) (sum by (consumergroup) (kafka_consumergroup_members{consumergroup=~`nameniac.*`}) > 0)\n",[1245,1579,1580],{"class":1247,"line":206},[1245,1581,1543],{"emptyLinePlaceholder":1542},[1245,1583,1584],{"class":1247,"line":212},[1245,1585,1586],{},"# Restarts: containers started in the last hour (a crash loop is a staircase)\n",[1245,1588,1589],{"class":1247,"line":223},[1245,1590,1591],{},"count by (container_label_com_docker_swarm_service_name) (container_start_time_seconds{…} > time() - 3600)\n",[1203,1593,1594,1616,1619],{},[998,1595,1596,1599,1600,1603,1604,1607,1608,1611,1612,1615],{},[1001,1597,1598],{},"Put regexes in backtick raw strings."," ",[1032,1601,1602],{},"\"nameniac\\.events\""," in double quotes is a\nPromQL parse error (400); ",[1032,1605,1606],{},"`nameniac\\.events`"," is not. Build them with a\n",[1032,1609,1610],{},"raw()"," helper and ",[1032,1613,1614],{},"regexp.QuoteMeta"," the prefix.",[998,1617,1618],{},"Lag is briefly negative when the committed offset is read after the log end —\nclamp it to 0.",[998,1620,1621,1622,1624],{},"Run the overview's queries concurrently, each with its own timeout, and report\nper-query errors in ",[1032,1623,1458],{}," rather than failing the page.",[1507,1626,1628],{"id":1627},"anomaly-rules","Anomaly rules",[991,1630,1631],{},"Computed in Go from the overview's samples — deterministic, testable, no ML:",[1083,1633,1634,1647],{},[1086,1635,1636],{},[1089,1637,1638,1641,1644],{},[1092,1639,1640],{},"Kind",[1092,1642,1643],{},"Rule",[1092,1645,1646],{},"Severity",[1102,1648,1649,1662,1675,1692,1705],{},[1089,1650,1651,1656,1659],{},[1107,1652,1653],{},[1032,1654,1655],{},"silent",[1107,1657,1658],{},"reference ≥ 0.05 msg\u002Fs and now \u003C 30 % of it",[1107,1660,1661],{},"warn; crit below 5 %",[1089,1663,1664,1669,1672],{},[1107,1665,1666],{},[1032,1667,1668],{},"spike",[1107,1670,1671],{},"now > 1 msg\u002Fs and > 3 × the reference",[1107,1673,1674],{},"warn",[1089,1676,1677,1682,1689],{},[1107,1678,1679],{},[1032,1680,1681],{},"misrouted",[1107,1683,1684,1685,1688],{},"any traffic on the bare prefix topic (",[1032,1686,1687],{},"nameniac.events",") — a publisher could not resolve its topic",[1107,1690,1691],{},"crit",[1089,1693,1694,1699,1702],{},[1107,1695,1696],{},[1032,1697,1698],{},"lag_growing",[1107,1700,1701],{},"lag > 5 000 and growing > 1 000\u002Fh over 30 min",[1107,1703,1704],{},"warn; crit above 200 000",[1089,1706,1707,1712,1718],{},[1107,1708,1709],{},[1032,1710,1711],{},"failures",[1107,1713,1714,1717],{},[1032,1715,1716],{},"events_consumed_total{result=\"error\"}"," or a failed publish in the last hour",[1107,1719,1674],{},[991,1721,1722],{},"The reference is last week's same hour, falling back to yesterday when last week was\nquiet (weekly patterns beat daily ones for scheduled imports). Critical first.",[991,1724,1725,1726,1728,1729,1731,1732,1131,1735,1738],{},"The ",[1032,1727,1681],{}," rule pays for itself: a service still resolving topics from an old\nAsyncAPI document published to the bare ",[1032,1730,1687],{}," topic for days, where no\nconsumer listened. Mirror the rules as Prometheus alerts\n(",[1032,1733,1734],{},"nameniac_events_misrouted",[1032,1736,1737],{},"nameniac_consumer_lag_growing",") so they page even\nwhen nobody has the page open.",[1078,1740,1051],{"id":1741},"scoping",[991,1743,1744],{},"A shared Prometheus scrapes every project on the cluster. Scope the page to one:",[1083,1746,1747,1760],{},[1086,1748,1749],{},[1089,1750,1751,1754,1757],{},[1092,1752,1753],{},"Env",[1092,1755,1756],{},"Example",[1092,1758,1759],{},"Scopes",[1102,1761,1762,1780,1795,1809],{},[1089,1763,1764,1769,1773],{},[1107,1765,1766],{},[1032,1767,1768],{},"EVENTS_DASH_TOPIC_PREFIX",[1107,1770,1771],{},[1032,1772,1687],{},[1107,1774,1775,1776,1779],{},"topics, ",[1032,1777,1778],{},"events_*"," metrics",[1089,1781,1782,1787,1792],{},[1107,1783,1784],{},[1032,1785,1786],{},"EVENTS_DASH_SERVICE_PREFIX",[1107,1788,1789],{},[1032,1790,1791],{},"nameniac-",[1107,1793,1794],{},"cAdvisor service charts, container alerts",[1089,1796,1797,1802,1807],{},[1107,1798,1799],{},[1032,1800,1801],{},"EVENTS_DASH_GROUP_REGEX",[1107,1803,1804],{},[1032,1805,1806],{},"nameniac.*",[1107,1808,1158],{},[1089,1810,1811,1816,1821],{},[1107,1812,1813],{},[1032,1814,1815],{},"SYSTEMHEALTH_JOBS",[1107,1817,1818],{},[1032,1819,1820],{},"nameniac-.*|mongodb|clickhouse|kafka-broker|…",[1107,1822,1823],{},"\"Metrics targets up\", MongoDB, alerts",[991,1825,1826,1828,1829,1832,1833,1836,1837,1840,1841,1844],{},[1032,1827,1815],{}," lists your own jobs ",[1001,1830,1831],{},"plus the shared infrastructure you run on","\n(Kafka, Mongo, Redis, Traefik, node-exporter, cAdvisor). Alerts are kept when their\n",[1032,1834,1835],{},"job"," matches, when their container ",[1032,1838,1839],{},"name"," starts with the service prefix, or when\nthey carry neither (node-level alerts — every project runs on the nodes). Another\nproject's ",[1032,1842,1843],{},"public_site_down"," or a replica set it alone uses stays off your page.",[1078,1846,1848],{"id":1847},"_4-the-page","4. The page",[1203,1850,1851,1862,1865,1872,1879],{},[998,1852,1853,1854,1483,1856,1858,1859,1225],{},"Order: anomalies → topics table → consumer-lag cards → charts grouped ",[1194,1855,33],{},[1194,1857,964],{},", then your domain (e.g. ",[1194,1860,1861],{},"Drop-catch",[998,1863,1864],{},"Range control (6 h \u002F 24 h \u002F 7 days) in one row above the charts, kept in the URL.",[998,1866,1867,1868,1871],{},"Charts follow the dataviz rules: top 7 lines + \"Other\", colour assigned by\n",[1001,1869,1870],{},"series name"," (a hash into the fixed 8-slot palette) so a line keeps its colour\nwhen the set changes, crosshair tooltip, legend with the latest value, and a\ntable toggle on every chart (the light palette needs it for contrast).",[998,1873,1874,1875,1878],{},"Status is a badge with icon ",[1001,1876,1877],{},"and"," label, never colour alone.",[998,1880,1881],{},"Refresh the overview every 60 s; charts refresh on demand.",[1078,1883,1885],{"id":1884},"checklist-for-a-new-project","Checklist for a new project",[995,1887,1888,1894,1900,1903,1906,1912],{},[998,1889,1890,1891,1893],{},"Every service on go-events ≥ v0.4.3, ",[1032,1892,1220],{}," served, a scrape job per service.",[998,1895,1896,1897,1899],{},"kafka-exporter with ",[1032,1898,1382],{}," for your groups.",[998,1901,1902],{},"cAdvisor on every node (usually already there).",[998,1904,1905],{},"The four scoping env vars on the admin API.",[998,1907,1908,1909,1911],{},"Open the page: anything under ",[1194,1910,1196],{}," is a source still missing.",[998,1913,1914,1915,1383,1917,1023],{},"Add alert rules for ",[1032,1916,1681],{},[1032,1918,1698],{},[1078,1920,1922],{"id":1921},"further-reading","Further reading",[1203,1924,1925,1930,1936],{},[998,1926,1927],{},[1048,1928,1929],{"href":1124},"go-events — Metrics",[998,1931,1932,1935],{},[1048,1933,1934],{"href":121},"Observability"," — flow traces and live overlays",[998,1937,1938],{},[1048,1939,78],{"href":79},[1941,1942,1943],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":1241,"searchDepth":16,"depth":16,"links":1945},[1946,1947,1948,1949,1953,1954,1955,1956],{"id":1080,"depth":16,"text":1081},{"id":1200,"depth":16,"text":1201},{"id":1293,"depth":16,"text":1294},{"id":1410,"depth":16,"text":1411,"children":1950},[1951,1952],{"id":1509,"depth":22,"text":1510},{"id":1627,"depth":22,"text":1628},{"id":1741,"depth":16,"text":1051},{"id":1847,"depth":16,"text":1848},{"id":1884,"depth":16,"text":1885},{"id":1921,"depth":16,"text":1922},"Chart what your event buses carry and how your Go services behave — per-topic rates against yesterday and last week, consumer lag, handler failures, CPU\u002Fmemory\u002Frestarts per service — and flag anomalies, all from the Prometheus you already run.","md",null,{},{"icon":85},{"title":82,"description":1957},"fd5EIQJzIH_Viz5RH6xiNgZ2vbthm3QPR5FqI0_tYHY",1791986166649]