Vistio
- Features
- Architecture
- Docker images
- Deploy Vistio
- Configuration
- docker-compose Example
- Troubleshooting
- Releases
- Contributing
- LICENSE
Table of contents generated with markdown-toc
Vistio is an application that helps you visualize the traffic of your cluster from Prometheus data.
It has 2 components:
-
Vistio-API: retrieves data from Prometheus servers, aggregates them and provides an API to get the graph data.
-
Vistio-Web: Forked from Promviz-front: based on Netflix's vizceral to render traffic graph.
Updated for Istio 1.0
The helm charts have been updated to work with Istio 1.0
Features:
- Generates and renders traffic graph in realtime
- Able to replay from any time in the past
- Able to generate notices on node and connection from prom query
- Provides a sidecar application for k8s that watches config changes and reload Vistio server in runtime
- Fits with Istio's metrics
Architecture
Docker images
Docker images of both vistio-api
and vistio-web
are available on Docker Hub.
Deploy Vistio
Deploy Vistio with Istio Ingress Gateway (kubectl)
- prometheusUrl - the default prometheus url is assumed to be http://prometheus.istio-system:9090 based on the Istio deployment. If your Prometheus server is in a different namespace or has a different service name, you will need to edit the yaml files.
- Deploy Istio
kubectl apply -f vistio-with-ingress.yaml -n default
- Expose vistio-web
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 &
-
Open Vistio localhost:8080
-
Expose vistio-api
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 &
-
Test endpoint localhost:9091/graph
-
Add traffic to the mesh by following bookinfo demo here Istio Bookinfo Demo and to get the
GATEWAY_URL
and calling
curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
Deploy Vistio with Istio Ingress Gateway (helm)
- prometheusUrl - the default prometheus url is assumed to be http://prometheus.istio-system:9090 based on the Istio deployment. If your Prometheus server is in a different namespace or has a different service name, you will need to edit the yaml files.
- Deploy Vistio
helm install helm/vistio -f helm/vistio/values-with-ingress.yaml --name vistio --namespace default
- Expose vistio-web
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 &
-
Open Vistio localhost:8080
-
Expose vistio-api
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 &
-
Test endpoint localhost:9091/graph
-
Add traffic to the mesh by following bookinfo demo here Istio Bookinfo Demo and to get the
GATEWAY_URL
and calling
curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
Deploy Vistio Without Istio Ingress (kubectl)
- prometheusUrl - the default prometheus url is assumed to be http://prometheus.istio-system:9090 based on the Istio deployment. If your Prometheus server is in a different namespace or has a different service name, you will need to edit the yaml files.
- Deploy Istio
kubectl apply -f vistio-mesh-only.yaml -n default
- Expose vistio-web
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 &
-
Open Vistio localhost:8080
-
Expose vistio-api
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 &
-
Test endpoint localhost:9091/graph
-
Add traffic to the mesh by following bookinfo demo here Istio Bookinfo Demo and to get the
GATEWAY_URL
and calling
curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
Deploy Vistio Without Istio Ingress (Helm)
- prometheusUrl - the default prometheus url is assumed to be http://prometheus.istio-system:9090 based on the Istio deployment. If your Prometheus server is in a different namespace or has a different service name, you will need to edit the yaml files.
- Deploy Vistio
helm install helm/vistio -f helm/vistio/values-mesh-only.yaml --name vistio --namespace default
- Expose vistio-web
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 &
-
Open Vistio localhost:8080
-
Expose vistio-api
kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 &
-
Test endpoint localhost:9091/graph
-
Add traffic to the mesh by following bookinfo demo here Istio Bookinfo Demo and to get the
GATEWAY_URL
and calling
curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
Configuration
See configuration.md in documentation directory.
docker-compose Example
An Istio example is in the /example/docker
directory
You can try it by going to that directory and run
docker-compose up --build
Then checkout each service at:
- promviz-front: http://localhost:8080/graph
- vistio: http://localhost:9091/graph
- prometheus: http://localhost:9090/graph
- mock-metric: http://localhost:30001/metrics
Troubleshooting
-
Blank Vistio home page - this typically means that the Prometheus query at the
global
level is not returning any data or the data is not matching the labels in the source or target configuration. Grab the globalLevel query and test it against Prometheus directly to verify the data is correct. Example global level querysum(rate(istio_request_count[1m])) by (response_code)
-
Cannot
Zoom
into clusters - If you are having trouble connecting your clusters to the global view, make sure thetarget
values in the global configuration matches the cluster level name.
- Example global level target - in this example I rename all target values to istio-mesh
globalLevel:
...
target:
replacement: istio-mesh
- Example clusterLevel configuration - the cluster name
istio-mesh
matches the target value at the global level
clusterLevel:
- cluster: istio-mesh
Releases
https://github.com/nmnellis/vistio/releases
- v0.1.0 - Initial Release
Contributing
Please feel free to create an issue or pull request.
LICENSE
Vistio is released under the MIT license. See LICENSE file for details.