PageSourceSearch

https://ethpandaops.io/assets/js/4bc53c0c.ff8cff8a.js

js ethpandaops.io collected 2026-10-03 21:46:02 UTC 12,936 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkpublic_docs=globalThis.webpackChunkpublic_docs||[]).push([[3868],{19818(n,e,i){i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"guides/data-analysts/xatu-stack/components","title":"System Architecture","description":"Xatu consists of multiple components that work together to provide comprehensive Ethereum network monitoring. Each component serves a specific purpose and can be deployed independently or as part of the complete system.","source":"@site/docs/guides/data-analysts/xatu-stack/components.md","sourceDirName":"guides/data-analysts/xatu-stack","slug":"/guides/data-analysts/xatu-stack/components","permalink":"/docs/guides/data-analysts/xatu-stack/components","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"docs","previous":{"title":"Intro","permalink":"/docs/guides/data-analysts/xatu-stack/intro"},"next":{"title":"Intro","permalink":"/docs/guides/data-analysts/xatu-stack/clickhouse/intro"}}');var s=i(74848),r=i(28453);const o={sidebar_position:2},l="System Architecture",a={},c=[{value:"Architecture Overview",id:"architecture-overview",level:2},{value:"Component Descriptions",id:"component-descriptions",level:2},{value:"Xatu Server",id:"xatu-server",level:3},{value:"Xatu Sentry",id:"xatu-sentry",level:3},{value:"Xatu Discovery",id:"xatu-discovery",level:3},{value:"Xatu Mimicry",id:"xatu-mimicry",level:3},{value:"Xatu Cannon",id:"xatu-cannon",level:3},{value:"Deployment Scenarios",id:"deployment-scenarios",level:2},{value:"Minimal Deployment",id:"minimal-deployment",level:3},{value:"Network Research",id:"network-research",level:3},{value:"Transaction Monitoring",id:"transaction-monitoring",level:3},{value:"Client Diversity Tracking",id:"client-diversity-tracking",level:3},{value:"Further Information",id:"further-information",level:2}];function d(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"system-architecture",children:"System Architecture"})}),"\n",(0,s.jsx)(e.p,{children:"Xatu consists of multiple components that work together to provide comprehensive Ethereum network monitoring. Each component serves a specific purpose and can be deployed independently or as part of the complete system."}),"\n",(0,s.jsx)(e.h2,{id:"architecture-overview",children:"Architecture Overview"}),"\n",(0,s.jsx)(e.p,{children:"The components interact as shown in this simplified diagram:"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{children:"             \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n             \u2502 CONSENSUS \u2502\n             \u2502P2P NETWORK\u2502\n             \u2514\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2518\n                   \u2502\n      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n      \u2502                          \u2502\n\u250c\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2510              \u250c\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2510       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 CONSENSUS \u2502              \u2502 ARMIARMA  \u2502       \u2502 EXECUTION \u2502\n\u2502   CLIENT  \u25c4\u2500\u2500\u2500\u2500\u2500\u2510        \u2502           \u2502       \u2502P2P NETWORK\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2518     \u2502        \u2514\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2518       \u2514\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2518\n      \u2502           \u2502              \u2502             \u250c\u2500\u2500\u2500\u2500\u2500\u2518\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n      \u2502           \u2502              \u2502             \u2502             \u2502\n  \u250c\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2510\n  \u2502  XATU  \u2502 \u2502   XATU   \u2502  \u2502   XATU    \u2502 \u2502   XATU    \u2502 \u2502   XATU    \u2502\n  \u2502 SENTRY \u2502 \u2502  CANNON  \u2502  \u2502   SAGE    \u2502 \u2502  MIMICRY  \u2502 \u2502 DISCOVERY \u2502\n  \u2514\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518\n      \u2502            \u2502             \u2502             \u2502             \u2502\n      \u2502            \u2502             \u2502             \u2502             \u2502\n      \u2502       \u250c\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2510       \u2502             \u2502             \u2502\n      \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba          \u25c4\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n              \u2502   XATU   \u2502\n              \u2502  SERVER  \u2502    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n              \u2502          \u25c4\u2500\u2500\u2500\u2500\u25ba PERSISTENCE \u2502\n              \u2502          \u2502    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n              \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2518\n                    \u2502\n                    \u2502\n                    \u25bc\n              DATA PIPELINE\n"})}),"\n",(0,s.jsx)(e.h2,{id:"component-descriptions",children:"Component Descriptions"}),"\n",(0,s.jsx)(e.h3,{id:"xatu-server",children:"Xatu Server"}
1),"\n",(0,s.jsx)(e.p,{children:"The centralized server that collects events from various clients and outputs them to various sinks:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Role"}),": Central hub for data collection and processing"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Features"}),":","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Data normalization and transformation"}),"\n",(0,s.jsx)(e.li,{children:"Filtering capabilities"}),"\n",(0,s.jsx)(e.li,{children:"Management of persistence and data pipelines"}),"\n",(0,s.jsx)(e.li,{children:"Support for multiple output destinations"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Cases"}),": Core component for any Xatu deployment, essential for aggregation"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"xatu-sentry",children:"Xatu Sentry"}),"\n",(0,s.jsx)(e.p,{children:"A client that collects data from Ethereum consensus clients via the Beacon API:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Role"}),": Consensus layer monitoring"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Features"}),":","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Connects to existing consensus clients via HTTP"}),"\n",(0,s.jsx)(e.li,{children:"Subscribes to beacon chain events (attestations, blocks, etc.)"}),"\n",(0,s.jsx)(e.li,{children:"Collects validator activities"}),"\n",(0,s.jsx)(e.li,{children:"Real-time metrics gathering"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Cases"}),": Monitoring validator operations, consensus layer analysis"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"xatu-discovery",children:"Xatu Discovery"}),"\n",(0,s.jsx)(e.p,{children:"A client that uses network discovery protocols to map the Ethereum network:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Role"}),": Network topology mapping"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Features"}),":","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Implements Discovery Protocol v5 and v4"}),"\n",(0,s.jsx)(e.li,{children:"Attempts connections to execution layer nodes"}),"\n",(0,s.jsx)(e.li,{children:"Collects node metadata (client type, version, etc.)"}),"\n",(0,s.jsx)(e.li,{children:"Geographic distribution information"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Cases"}),": Network health monitoring, client diversity analysis"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"xatu-mimicry",children:"Xatu Mimicry"}),"\n",(0,s.jsx)(e.p,{children:"A client that collects data from the execution layer P2P network:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Role"}),": Execution layer monitoring"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Features"}),":","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Acts as an execution layer node"}),"\n",(0,s.jsx)(e.li,{children:"Monitors transaction propagation"}),"\n",(0,s.jsx)(e.li,{children:"Captures network behavior"}),"\n",(0,s.jsx)(e.li,{children:"Collects execution layer metrics"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Cases"}),": Transaction analysis, network performance evaluation"]}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"xatu-cannon",children:"Xatu Cannon"}),"\n",(0,s.jsx)(e.p,{children:"A client that collects canonical finalized data from consensus clients:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Role"}),": Historical data collection"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Features"}),":","\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Focuses on finalized block data"}),"\n",(0,s.jsx)(e.li,{children:"Collects historical chain data"}),"\n",(0,s.jsx)(e.li,{children:"Gathers canonical state information"}),"\n",(0,s.jsx)(e.li,{children:"Provides data consistency checks"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:[(0,s.jsx)(e.strong,{children:"Use Cases"}),": Long-term analysis, historical data archiving"]}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"deployment-scenarios",children:"Deployment Scenarios"}),"\n",(0,s.jsx)(e.p,{children:"Xatu components can be deployed in various configurations depending on monitoring needs:"}),"\n",(0,s.jsx)(e.h3,{id:"minimal-deployment",children:"Minimal Deployment"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Xatu Server + Xatu Sentry"}),"\n",(0,s.jsx)(e.li,{children:"Suitable for basic validator monitoring"}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"network-research",children:"Network Research"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"All components"}),"\n",(0,s.jsx)(e.li,{children:"Provides comprehensive network visibility"}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"transaction-monitoring",children:"Transaction Monitoring"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Xatu Server + Xatu Mimicry"}),"\n",(0,s.jsx)(e.li,{children:"Focuses on transaction propagation and mempool analysis"}),"\n"]}),"\n",(0,s.jsx)(e.h3,{id:"client-diversity-tracking",children:"Client Diversity Tracking"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:"Xatu Server + Xatu Discovery"}),"\n",(0,s.jsx)(e.li,{children:"Tracks client implementations across the network"}),"\n"]}),"\n",(0,s.jsx)(e.h2,{id:"further-information",children:"Further Information"}),"\n",(0,s.jsxs)(e.p,{children:["For more detailed information on each component, check the ",(0,s.jsx)(e.a,{href:"https://github.com/ethpandaops/xatu",children:"Xatu GitHub repository"}),"."]})]})}function h(n={}){const{wrapper:e}={...(0,r.R)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(d,{...n})}):d(n)}},28453(n,e,i){i.d(e,{R:()=>o,x:()=>l});var t=i(96540);const s={},r=t.createContext(s);function o(n){const e=t.useContext(r);return t.useMemo(function(){return"function"==typeof n?n(e):{...e,...n}},[e,n])}function l(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:o(n.components),t.createElement(r.Provider,{value:e},n.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.