{"id":13452080,"url":"https://github.com/nmnellis/vistio","last_synced_at":"2026-01-25T23:59:14.315Z","repository":{"id":110248888,"uuid":"136856823","full_name":"nmnellis/vistio","owner":"nmnellis","description":"Visualize your Istio mesh using Netflix's Vizceral","archived":false,"fork":false,"pushed_at":"2018-10-20T00:26:00.000Z","size":12684,"stargazers_count":373,"open_issues_count":5,"forks_count":33,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-03-23T19:40:30.642Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nmnellis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-06-11T00:51:32.000Z","updated_at":"2024-03-09T16:11:55.000Z","dependencies_parsed_at":"2023-05-25T11:31:35.506Z","dependency_job_id":null,"html_url":"https://github.com/nmnellis/vistio","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/nmnellis/vistio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmnellis%2Fvistio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmnellis%2Fvistio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmnellis%2Fvistio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmnellis%2Fvistio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nmnellis","download_url":"https://codeload.github.com/nmnellis/vistio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmnellis%2Fvistio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28761857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T23:06:19.311Z","status":"ssl_error","status_checked_at":"2026-01-25T23:03:50.555Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T07:01:12.189Z","updated_at":"2026-01-25T23:59:14.294Z","avatar_url":"https://github.com/nmnellis.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Observability \u0026 Monitoring","Dashboard"],"sub_categories":[],"readme":"# Vistio [![CircleCI Build Status](https://circleci.com/gh/nmnellis/vistio.svg?style=shield)](https://circleci.com/gh/nmnellis/vistio) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com) [![MIT Licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/nmnellis/vistio/blob/master/LICENSE)\r\n\r\n  * [Features](#features)\r\n  * [Architecture](#architecture)\r\n  * [Docker images](#docker-images)\r\n  * [Deploy Vistio](#deploy-vistio)\r\n    + [Deploy Vistio with Istio Ingress Gateway (kubectl)](#deploy-vistio-with-istio-ingress-gateway-kubectl)\r\n    + [Deploy Vistio with Istio Ingress Gateway (helm)](#deploy-vistio-with-istio-ingress-gateway-helm)\r\n    + [Deploy Vistio Without Istio Ingress (kubectl)](#deploy-vistio-without-istio-ingress-kubectl)\r\n    + [Deploy Vistio Without Istio Ingress (Helm)](#deploy-vistio-without-istio-ingress-helm)\r\n  * [Configuration](#configuration)\r\n  * [docker-compose Example](#docker-compose-example)\r\n  * [Troubleshooting](#troubleshooting)\r\n  * [Releases](#releases)\r\n  * [Contributing](#contributing)\r\n  * [LICENSE](#license)\r\n\r\n\u003csmall\u003e\u003ci\u003e\u003ca href='http://ecotrust-canada.github.io/markdown-toc/'\u003eTable of contents generated with markdown-toc\u003c/a\u003e\u003c/i\u003e\u003c/small\u003e\r\n\r\n* Forked from - https://github.com/nghialv/promviz and https://github.com/mjhd-devlion/promviz-front \r\n\r\nVistio is an application that helps you visualize the traffic of your cluster from Prometheus data.\r\n\r\nIt has 2 components:\r\n\r\n- Vistio-API: retrieves data from Prometheus servers, aggregates them and provides an API to get the graph data.\r\n\r\n- Vistio-Web: Forked from [Promviz-front](https://github.com/mjhd-devlion/promviz-front): based on Netflix's [vizceral](https://github.com/Netflix/vizceral) to render traffic graph.\r\n\r\n## Updated for Istio 1.0\r\nThe helm charts have been updated to work with Istio 1.0\r\n\r\n## Features:\r\n- Generates and renders traffic graph in realtime\r\n- Able to replay from any time in the past\r\n- Able to generate notices on node and connection from prom query\r\n- Provides a sidecar application for k8s that watches config changes and reload Vistio server in runtime\r\n- Fits with [Istio](https://istio.io)'s metrics\r\n\r\n\r\n![](https://github.com/nmnellis/vistio/blob/master/documentation/sample.png)\r\n\r\n## Architecture\r\n\r\n![](https://github.com/nmnellis/vistio/blob/master/documentation/architecture.png)\r\n\r\n## Docker images\r\n\r\nDocker images of both `vistio-api` and `vistio-web` are available on Docker Hub.\r\n\r\n- [nmnellis/vistio-api](https://hub.docker.com/r/nmnellis/vistio-api)\r\n- [nmnellis/vistio-web](https://hub.docker.com/r/nmnellis/vistio-web)\r\n\r\n## Deploy Vistio\r\n\r\n### Deploy Vistio with Istio Ingress Gateway (kubectl)\r\n\r\n* prometheusUrl - the default prometheus url is assumed to be \u003chttp://prometheus.istio-system:9090\u003e 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.\r\n\r\n1. Deploy Istio\r\n```sh\r\nkubectl apply -f vistio-with-ingress.yaml -n default\r\n```\r\n\r\n2. Expose vistio-web\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 \u0026\r\n```\r\n\r\n3. Open Vistio \u003clocalhost:8080\u003e\r\n\r\n4. Expose vistio-api\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 \u0026\r\n```\r\n\r\n5. Test endpoint \u003clocalhost:9091/graph\u003e\r\n\r\n6. Add traffic to the mesh by following bookinfo demo here [Istio Bookinfo Demo](https://istio.io/docs/guides/bookinfo/) and to get the `GATEWAY_URL` and calling\r\n```sh\r\ncurl -o /dev/null -s -w \"%{http_code}\\n\" http://${GATEWAY_URL}/productpage\r\n```\r\n\r\n### Deploy Vistio with Istio Ingress Gateway (helm)\r\n\r\n* prometheusUrl - the default prometheus url is assumed to be \u003chttp://prometheus.istio-system:9090\u003e 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.\r\n\r\n1. Deploy Vistio\r\n\r\n```sh\r\nhelm install helm/vistio -f helm/vistio/values-with-ingress.yaml --name vistio --namespace default\r\n```\r\n\r\n2. Expose vistio-web\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 \u0026\r\n```\r\n\r\n3. Open Vistio \u003clocalhost:8080\u003e\r\n\r\n4. Expose vistio-api\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 \u0026\r\n```\r\n\r\n5. Test endpoint \u003clocalhost:9091/graph\u003e\r\n\r\n6. Add traffic to the mesh by following bookinfo demo here [Istio Bookinfo Demo](https://istio.io/docs/guides/bookinfo/) and to get the `GATEWAY_URL` and calling\r\n```sh\r\ncurl -o /dev/null -s -w \"%{http_code}\\n\" http://${GATEWAY_URL}/productpage\r\n```\r\n\r\n\r\n### Deploy Vistio Without Istio Ingress (kubectl)\r\n\r\n* prometheusUrl - the default prometheus url is assumed to be \u003chttp://prometheus.istio-system:9090\u003e 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.\r\n\r\n1. Deploy Istio\r\n```sh\r\nkubectl apply -f vistio-mesh-only.yaml -n default\r\n```\r\n\r\n2. Expose vistio-web\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 \u0026\r\n```\r\n\r\n3. Open Vistio \u003clocalhost:8080\u003e\r\n\r\n4. Expose vistio-api\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 \u0026\r\n```\r\n\r\n5. Test endpoint \u003clocalhost:9091/graph\u003e\r\n\r\n6. Add traffic to the mesh by following bookinfo demo here [Istio Bookinfo Demo](https://istio.io/docs/guides/bookinfo/) and to get the `GATEWAY_URL` and calling\r\n```sh\r\ncurl -o /dev/null -s -w \"%{http_code}\\n\" http://${GATEWAY_URL}/productpage\r\n```\r\n\r\n### Deploy Vistio Without Istio Ingress (Helm)\r\n\r\n* prometheusUrl - the default prometheus url is assumed to be \u003chttp://prometheus.istio-system:9090\u003e 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.\r\n\r\n1. Deploy Vistio\r\n\r\n```sh\r\nhelm install helm/vistio -f helm/vistio/values-mesh-only.yaml --name vistio --namespace default\r\n```\r\n\r\n2. Expose vistio-web\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 \u0026\r\n```\r\n\r\n3. Open Vistio \u003clocalhost:8080\u003e\r\n\r\n4. Expose vistio-api\r\n```sh\r\nkubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -o jsonpath='{.items[0].metadata.name}') 9091:9091 \u0026\r\n```\r\n\r\n5. Test endpoint \u003clocalhost:9091/graph\u003e\r\n\r\n6. Add traffic to the mesh by following bookinfo demo here [Istio Bookinfo Demo](https://istio.io/docs/guides/bookinfo/) and to get the `GATEWAY_URL` and calling\r\n```sh\r\ncurl -o /dev/null -s -w \"%{http_code}\\n\" http://${GATEWAY_URL}/productpage\r\n```\r\n\r\n## Configuration\r\n\r\nSee [configuration.md](https://github.com/nmnellis/vistio/blob/master/documentation/configuration.md) in documentation directory.\r\n\r\n## docker-compose Example\r\n\r\nAn Istio example is in the `/example/docker` directory\r\n\r\nYou can try it by going to that directory and run\r\n\r\n```\r\ndocker-compose up --build\r\n```\r\n\r\nThen checkout each service at:\r\n- promviz-front: [http://localhost:8080/graph](http://localhost:8080/)\r\n- vistio: [http://localhost:9091/graph](http://localhost:9091/graph)\r\n- prometheus: [http://localhost:9090/graph](http://localhost:9090/graph)\r\n- mock-metric: [http://localhost:30001/metrics](http://localhost:30001/metrics)\r\n\r\n## Troubleshooting\r\n\r\n1. 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)`\r\n![](https://github.com/nmnellis/vistio/blob/master/documentation/blank-screen.png)\r\n\r\n\r\n2. 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.\r\n\r\n* Example global level target - in this example I rename all target values to istio-mesh\r\n```yaml\r\n    globalLevel:\r\n      ...\r\n        target:\r\n          replacement: istio-mesh\r\n```\r\n\r\n* Example clusterLevel configuration - the cluster name `istio-mesh` matches the target value at the global level\r\n```yaml\r\n    clusterLevel:\r\n    - cluster: istio-mesh\r\n```\r\n\r\n## Releases\r\n\r\nhttps://github.com/nmnellis/vistio/releases\r\n\r\n* v0.1.0 - Initial Release\r\n\r\n## Contributing\r\n\r\nPlease feel free to create an issue or pull request.\r\n\r\n## LICENSE\r\n\r\nVistio is released under the MIT license. See LICENSE file for details.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnmnellis%2Fvistio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnmnellis%2Fvistio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnmnellis%2Fvistio/lists"}