>  1. APISIX writes the status data into etcd periodically;
>   2. Introduce another control plane component, let APISIX transmits
   status data to it and the control plane component will write them to
etcd.

I will vote for the first one, which is much simpler. And we can limit the
data under /apisix/data_panel, to make it less dangerous.

We can write:
1. id
2. version
3. start_time
4. update_time
periodically.

Chao Zhang <[email protected]> 于2020年11月20日周五 下午2:41写道:

> Hi, there
>
> Currently some of our users often confuses their APISIX version, their etcd
> version and etcd,
> which is adverse for solving issues and debugging.
>
> So I think a status API is required to tell users the basic instance
> information, just like “who am I”, which is useful when diagnosing
> problems.
>
> The status page could be formatted as a JSON string so the output can be
> piped with json parsers like jq, fx,
> for now, basic fields should be put inside the status is:
>
> 1) APISIX version, version string of the APISIX instance itself, e.g.
> “2.0”;
> 2) etcd version, etcd cluster version,
> e.g. {"etcdserver":"3.5.0-pre","etcdcluster":"3.5.0”};
> 3) id, id of the current APISIX instance;
> 4) uptime, elapsed time (in seconds) since APISIX started;
> 5) IP addresses, the IP addresses of current Pods/VM/Physical machine;
> 6) state, the current instance state, can be “online”, “shutting down”,
> “offline”, which can be used to cooperate with the layer 4 Load balancer
> (e.g. LVS + Keepalived), we can provide admin APIs to set the state
> subsequently;
>
> {
>     "id": "ddea4053-4ffd-4f09-b176-b8c5e919916b",
>     "hostname": "localhost.local",
>     "version": "2.0",
>     "state": "online",
>     "etcd_version": {
>         "etcdserver": "3.5.0-pre",
>         "etcdcluster":"3.5.0”
>     },
>     "uptime": 3600,
>     "ip": ["10.0.2.15", "192.168.1.2"]
> }
>
> Other fields can be appended in the future, the APISIX should add an API
> (like /status) to output these data.
>
> So far what we discussed is limited in a single APISIX instance, when we
> want to insight the whole APISIX cluster, we need to collect each status
> data of APISIX instance, show them in APISIX Dashboard.
>
> The most tricky problem here is how does an APISIX instance upload its
> status data, there are two options we may consider:
>
>    1. APISIX writes the status data into etcd periodically;
>    2. Introduce another control plane component, let APISIX transmits
>    status data to it and the control plane component will write them to
> etcd.
>
> The APISX Dashboard backend should also expose an API to output these
> status data so the frontend can render and show these data.
>
> So in a nut shell, we have these stuffs to solve for implementing this
> feature:
>
>    - APISIX internally uploads these data (either to etcd or another
>    control plane component, we need further discuss)
>    - Implement an admin API in APISIX.
>    - Implement an admin API in Dashboard backend.
>    - Implement the Dashboard frontend web page.
>
> Let’s discuss it and realize it together!
>
> References:
>
>    - https://www.envoyproxy.io/docs/envoy/latest/operations/admin
>    - https://doc.traefik.io/traefik/operations/dashboard/
>    - https://docs.konghq.com/2.0.x/admin-api/#information-routes
>

Reply via email to