Components¶
The EnhancedEndpointTracker app is composed of several components that can be deployed as either
multiple processes running within the same container in mini
or all-in-one
mode or as
separate containers distributed over multiple nodes in full
or cluster
modes.
mongoDB¶
mongoDB3.6
is used for persistent storage of data. Inmini
mode this is a single mongo process with journaling disabled and wireTiger cache size limit to 1.5G memory. Incluster
mode, it runs as a distributed database utilizing mongos, configsvr in replica set, and multiple shards configured in replica sets. Sharding is enabled for a subset of collections, generally based on endpoint address.
redisDB¶
redisDB is in an memory key-store database. It is used as a fast IPC between components. There are two main messaging implementations in this app.
eptManager¶
eptManager
is a python process that is responsible for starting, stopping, and monitoringeptSubscriber
proceses along with tracking the status of all availableeptWorker
processes. It is also responsible queuing and distributing all work that is dispatched to worker processes. There is only a single instance ofeptManager
deployed within the app.
eptSubscriber¶
eptSubscriber
is a python process responsible for communication with the APIC. It collects the initial state from the APIC and stores into the db. It establishes and monitors a websocket to the APIC with subscriptions for all necessary MOs and ensures the db is in sync with the APIC.eptSubscriber
process also subscribes to all epm events and dispatches each event toeptManager
which will enqueue to an appropriateeptWorker
process to analyze the event. There is a singleeptSubscriber
process running for each configured fabric. This process is always a subprocess running in the same container aseptManager
.The following objects are collected and monitored by the subscriber process:
- datetimeFormat
- epmIpEp
- epmMacEp
- epmRsMacEpToIpEpAtt
- fabricAutoGEp
- fabricExplicitGEp
- fabricNode
- fabricProtPol
- fvAEPg
- fvBD
- fvCtx
- fvIpAttr
- fvRsBd
- fvSubnet
- fvSvcBD
- l3extExtEncapAllocator
- l3extInstP
- l3extOut
- l3extRsEctx
- mgmtInB
- mgmtRsMgmtBD
- pcAggrIf
- pcRsMbrIfs
- tunnelIf
- vnsEPpInfo
- vnsLIfCtx
- vnsRsEPpInfoToBD
- vnsRsLIfCtxToBD
- vpcRsVpcConf
eptWorker¶
There is a configurable number ofeptWorker
processes that can be executed. EacheptWorker
must have a unique id and will be deployed with a role of either a worker or watcher process.eptManager
requires at least one activeeptWorker
for all roles before it can start any fabric monitors. TheeptWorker
worker process performs the bulk of the computations for the app. It receives epm events and performs move/offsubnet/stale/rapid analysis and stores the results into the db. If an endpoint is flagged by one of the analyses, a message is sent toeptManager
to enqueue to aneptWorker
watcher process. The watcher will perform the configure notifications along with executing rechecks to prevent incorrect detection of transitory events.
The full source code for the Flask web-service implementation and all ept components is available on Github.