-
Notifications
You must be signed in to change notification settings - Fork 159
Debugging Path Costs
When trying to figure out why specific paths are selected, here are places to start investigating.
ziti edge list services
$ ziti edge list services
╭────────────────────────┬──────┬────────────┬─────────────────────┬────────────╮
│ ID │ NAME │ ENCRYPTION │ TERMINATOR STRATEGY │ ATTRIBUTES │
│ │ │ REQUIRED │ │ │
├────────────────────────┼──────┼────────────┼─────────────────────┼────────────┤
│ 6S0bCGWb6yrAutXwSQaLiv │ test │ true │ smartrouting │ goodbye │
│ │ │ │ │ hello │
│ 6dmu7CFXJZtpUKD9VeSWqM │ echo │ true │ smartrouting │ echo │
╰────────────────────────┴──────┴────────────┴─────────────────────┴────────────╯
results: 1-2 of 2
Main thing to look at here is the terminator strategy. Note that all strategies pick from the terminators at the highest precedence level.
- smartingrouting - always use lowest cost path
- random - randomly pick from available terminators
- weighted - random but weighted by cost. So if the first terminator has cost 10 and the second has cost 20, the first will get selected about twice as often as the second
ziti fabric list terminators
$ ziti fabric ls terminators
╭────────────────────────┬─────────┬───────────────┬─────────┬────────────────────────┬──────────┬──────┬────────────┬──────────────┬────────────╮
│ ID │ SERVICE │ ROUTER │ BINDING │ ADDRESS │ INSTANCE │ COST │ PRECEDENCE │ DYNAMIC COST │ HOST ID │
├────────────────────────┼─────────┼───────────────┼─────────┼────────────────────────┼──────────┼──────┼────────────┼──────────────┼────────────┤
│ 7IiI5Q8BMHlWEHONjgoJFA │ echo │ edge-router-1 │ edge │ 7IiI5Q8BMHlWEHONjgoJFA │ │ 0 │ default │ 0 │ Qk7EP3nHDW │
│ bvUb1oa0ivl05TboGa9oZ │ echo │ edge-router-2 │ edge │ bvUb1oa0ivl05TboGa9oZ │ │ 0 │ default │ 0 │ Qk7EP3nHDW │
╰────────────────────────┴─────────┴───────────────┴─────────┴────────────────────────┴──────────┴──────┴────────────┴──────────────┴────────────╯
results: 1-2 of 2
- binding - what is hosting the services
- tunnel - edge router/tunneler
- edge - edge sdk application, might be tunneler or something else
- transport - direct edge router
- cost - static cost, controlled by sdk
- precedence - one of required, default or failed
- dynamic cost - goes up as more circuits use a terminator or when there are dial failures to a terminator
ziti fabric list links
$ ziti fabric list links
╭────────────────────────┬───────────────┬───────────────┬─────────────┬─────────────┬─────────────┬───────────┬────────┬───────────╮
│ ID │ DIALER │ ACCEPTOR │ STATIC COST │ SRC LATENCY │ DST LATENCY │ STATE │ STATUS │ FULL COST │
├────────────────────────┼───────────────┼───────────────┼─────────────┼─────────────┼─────────────┼───────────┼────────┼───────────┤
│ 1WcuQnm1eZxOouTOBWA829 │ edge-router-2 │ edge-router-1 │ 1 │ 1.9ms │ 2.7ms │ Connected │ up │ 4 │
╰────────────────────────┴───────────────┴───────────────┴─────────────┴─────────────┴─────────────┴───────────┴────────┴───────────╯
results: 1-1 of 1
Links are the router to router connections that make up the mesh.
- full cost - calculated as cost + src latency + dst latency
ziti edge list edge-routers
or ziti fabric list routers
$ ziti edge ls ers
╭────────────┬───────────────┬────────┬───────────────┬──────┬────────────────╮
│ ID │ NAME │ ONLINE │ ALLOW TRANSIT │ COST │ ATTRIBUTES │
├────────────┼───────────────┼────────┼───────────────┼──────┼────────────────┤
│ 38esMCa98K │ edge-router-3 │ false │ true │ 0 │ │
│ 5uUxuQ3u6Q │ edge-router-2 │ true │ true │ 0 │ demo │
│ │ │ │ │ │ demo-host │
│ LvEVacBGn │ edge-router-4 │ false │ true │ 0 │ │
│ tNlYWQ3upQ │ edge-router-1 │ true │ true │ 0 │ demo │
│ │ │ │ │ │ demo-intercept │
╰────────────┴───────────────┴────────┴───────────────┴──────┴────────────────╯
results: 1-4 of 4
Each router also has an associated cost.
When ziti is picking a path, it calculates the full path cost which is the cost of the routers, links and terminators in the path.
You can also see the current circuits.
$ ziti fabric list circuits
╭───────────┬───────────────────────────┬─────────┬───────────────────────┬─────────────────╮
│ ID │ CLIENT │ SERVICE │ TERMINATOR │ PATH │
├───────────┼───────────────────────────┼─────────┼───────────────────────┼─────────────────┤
│ g1zozLMor │ clnx961v800jeejgd9q8lbry5 │ echo │ bvUb1oa0ivl05TboGa9oZ │ r/edge-router-2 │
╰───────────┴───────────────────────────┴─────────┴───────────────────────┴─────────────────╯
results: 1-1 of 1
Hopefully this will give you some insight into why your paths are the way they are. If you look at it and it still doesn't make sense, and you're ok sharing some information, please share your services/routers/terminators, links and a questionable circuit in discourse and we can take a look. Hopefully we can either explain it or it will point towards a bug.