Giter Club home page Giter Club logo

vistio's Introduction

Vistio CircleCI Build Status PRs Welcome MIT Licensed

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.
  1. Deploy Istio
kubectl apply -f vistio-with-ingress.yaml -n default
  1. 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 &
  1. Open Vistio localhost:8080

  2. 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 &
  1. Test endpoint localhost:9091/graph

  2. 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.
  1. Deploy Vistio
helm install helm/vistio -f helm/vistio/values-with-ingress.yaml --name vistio --namespace default
  1. 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 &
  1. Open Vistio localhost:8080

  2. 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 &
  1. Test endpoint localhost:9091/graph

  2. 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.
  1. Deploy Istio
kubectl apply -f vistio-mesh-only.yaml -n default
  1. 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 &
  1. Open Vistio localhost:8080

  2. 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 &
  1. Test endpoint localhost:9091/graph

  2. 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.
  1. Deploy Vistio
helm install helm/vistio -f helm/vistio/values-mesh-only.yaml --name vistio --namespace default
  1. 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 &
  1. Open Vistio localhost:8080

  2. 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 &
  1. Test endpoint localhost:9091/graph

  2. 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:

Troubleshooting

  1. 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 query sum(rate(istio_request_count[1m])) by (response_code)

  2. Cannot Zoom into clusters - If you are having trouble connecting your clusters to the global view, make sure the target 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.

vistio's People

Contributors

nmnellis avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.