Mizu - API traffic viewer for Kubernetes enabling you to view all API communication between microservices

Overview

Mizu: The API Traffic Viewer for Kubernetes

The API Traffic Viewer for Kubernetes

A simple-yet-powerful API traffic viewer for Kubernetes enabling you to view all API communication between microservices to help your debug and troubleshoot regressions.

Think TCPDump and Wireshark re-invented for Kubernetes.

Simple UI

Features

  • Simple and powerful CLI
  • Monitoring network traffic in real-time. Supported protocols:
  • Works with Kubernetes APIs. No installation or code instrumentation
  • Rich filtering

Requirements

A Kubernetes server version of 1.16.0 or higher is required.

Download

Download Mizu for your platform and operating system

Latest Stable Release

  • for MacOS - Intel
curl -Lo mizu \
https://github.com/up9inc/mizu/releases/latest/download/mizu_darwin_amd64 \
&& chmod 755 mizu
  • for Linux - Intel 64bit
curl -Lo mizu \
https://github.com/up9inc/mizu/releases/latest/download/mizu_linux_amd64 \
&& chmod 755 mizu

SHA256 checksums are available on the Releases page

Development (unstable) Build

Pick one from the Releases page

How to Run

  1. Find pods you'd like to tap to in your Kubernetes cluster
  2. Run mizu tap or mizu tap PODNAME
  3. Open browser on http://localhost:8899/mizu or as instructed in the CLI
  4. Watch the API traffic flowing
  5. Type ^C to stop

Examples

Run mizu help for usage options

To tap all pods in current namespace -

 $ kubectl get pods 
 NAME                            READY   STATUS    RESTARTS   AGE
 carts-66c77f5fbb-fq65r          2/2     Running   0          20m
 catalogue-5f4cb7cf5-7zrmn       2/2     Running   0          20m
 front-end-649fc5fd6-kqbtn       2/2     Running   0          20m
 ..

 $ mizu tap
 +carts-66c77f5fbb-fq65r
 +catalogue-5f4cb7cf5-7zrmn
 +front-end-649fc5fd6-kqbtn
 Web interface is now available at http://localhost:8899
 ^C

To tap specific pod

 $ kubectl get pods 
 NAME                            READY   STATUS    RESTARTS   AGE
 front-end-649fc5fd6-kqbtn       2/2     Running   0          7m
 ..

 $ mizu tap front-end-649fc5fd6-kqbtn
 +front-end-649fc5fd6-kqbtn
 Web interface is now available at http://localhost:8899
 ^C

To tap multiple pods using regex

 $ kubectl get pods 
 NAME                            READY   STATUS    RESTARTS   AGE
 carts-66c77f5fbb-fq65r          2/2     Running   0          20m
 catalogue-5f4cb7cf5-7zrmn       2/2     Running   0          20m
 front-end-649fc5fd6-kqbtn       2/2     Running   0          20m
 ..

 $ mizu tap "^ca.*"
 +carts-66c77f5fbb-fq65r
 +catalogue-5f4cb7cf5-7zrmn
 Web interface is now available at http://localhost:8899
 ^C

Configuration

Mizu can optionally work with a config file that can be provided as a CLI argument (using --set config-path=<PATH>) or if not provided, will be stored at ${HOME}/.mizu/config.yaml In case of partial configuration defined, all other fields will be used with defaults
You can always override the defaults or config file with CLI flags

To get the default config params run mizu config
To generate a new config file with default values use mizu config -r

Advanced Usage

Kubeconfig

It is possible to change the kubeconfig path using KUBECONFIG environment variable or the command like flag with --set kube-config-path=<PATH>.
If both are not set - Mizu assumes that configuration is at ${HOME}/.kube/config

Namespace-Restricted Mode

Some users have permission to only manage resources in one particular namespace assigned to them By default mizu tap creates a new namespace mizu for all of its Kubernetes resources. In order to instead install Mizu in an existing namespace, set the mizu-resources-namespace config option

If mizu-resources-namespace is set to a value other than the default mizu, Mizu will operate in a Namespace-Restricted mode. It will only tap pods in mizu-resources-namespace. This way Mizu only requires permissions to the namespace set by mizu-resources-namespace. The user must set the tapped namespace to the same namespace by using the --namespace flag or by setting tap.namespaces in the config file

Setting mizu-resources-namespace=mizu resets Mizu to its default behavior

For detailed list of k8s permissions see PERMISSIONS document

User agent filtering

User-agent filtering (like health checks) - can be configured using command-line options:

$ mizu tap "^ca.*" --set tap.ignored-user-agents=kube-probe --set tap.ignored-user-agents=prometheus
+carts-66c77f5fbb-fq65r
+catalogue-5f4cb7cf5-7zrmn
Web interface is now available at http://localhost:8899
^C

Any request that contains User-Agent header with one of the specified values (kube-probe or prometheus) will not be captured

Traffic validation rules

This feature allows you to define set of simple rules, and test the traffic against them. Such validation may test response for specific JSON fields, headers, etc.

Please see TRAFFIC RULES page for more details and syntax.

OpenAPI Specification (OAS) Contract Monitoring

An OAS/Swagger file can contain schemas under parameters and responses fields. With --contract catalogue.yaml CLI option, you can pass your API description to Mizu and the traffic will automatically be validated against the contracts.

Please see CONTRACT MONITORING page for more details and syntax.

Configure proxy host

By default, mizu will be accessible via local host: 'http://localhost:8899/mizu/', it is possible to change the host, for instance, to '0.0.0.0' which can grant access via machine IP address. This setting can be changed via command line flag --set tap.proxy-host=<value> or via config file: tap proxy-host: 0.0.0.0 and when changed it will support accessing by IP

Run in daemon mode

Mizu can be run detached from the cli using the daemon flag: mizu tap --daemon. This type of mizu instance will run indefinitely in the cluster.

For more information please refer to DAEMON MODE

Issues
  •  Error while proxying request: context canceled

    Error while proxying request: context canceled

    when use " mizu tap ".*"" meet thefollowing error E1021 21:34:46.539954 3777907 proxy_server.go:147] Error while proxying request: context canceled

    logs from mizu-tapper-daemon-set pod: panic: Error connecting to socket server at ws://mizu-api-server.mizu.svc.cluster.local/wsTapper dial tcp: lookup mizu-api-server.mizu.svc.cluster.local: Try again

    bug stale triage/accepted CLI kubernetes 
    opened by jinxin-fu 35
  • Start the tapper after the API server is ready and watch, stream events to web UI through WebSocket

    Start the tapper after the API server is ready and watch, stream events to web UI through WebSocket

    NOTE: Toast messages are removed from this PR upon request. See the comments after https://github.com/up9inc/mizu/pull/304#issuecomment-927650086


    This PR;

    • Starts the tapper after the API server is ready.
    • Prints an error in the CLI if the API server couldn't be deployed because of insufficient resources:
    Tapping pods in namespaces "sock-shop"
    +carts-5db79fbddf-qw28s
    +carts-db-6c6c68b747-psx54
    +catalogue-5f4cb4f68b-9g9ks
    +catalogue-db-96f6f6b4c-2vm7k
    +front-end-5c89db9f57-5q6ss
    +orders-8458b7f5db-bfff9
    +orders-db-659949975f-dj765
    +payment-f58b8c445-6bxkl
    +queue-master-84bbb789b7-v6wnq
    +rabbitmq-5bcbb547d7-4cbrs
    +session-db-7cf97f8d4f-z7jn6
    +shipping-548f696b44-mvx6s
    +user-756b89d69c-tt7hc
    +user-db-6df7444fc-72vrg
    Cannot deploy the API server. Reason: "0/1 nodes are available: 1 Insufficient cpu."
    Error creating resources: Post "https://192.168.99.103:8443/api/v1/namespaces/mizu/services": context canceled
    
    Removing mizu resources
    
    • Prints a similar message for the tapper in case of the same insufficient resources condition:
    ...
    +user-756b89d69c-tt7hc
    +user-db-6df7444fc-72vrg
    Mizu is available at http://localhost:8899/mizu
    Cannot deploy the tapper. Reason: "0/1 nodes are available: 1 Insufficient cpu."
    
    Removing mizu resources
    
    • Removes the 25 seconds hard-coded timeout of API server deployment. (the timeout of Mizu Agent image pull and deployment as the API server)

    • Prints an error in the CLI if an incorrect agent image is supplied:

    ...
    +user-756b89d69c-nsghq
    +user-db-6df7444fc-wddmp
    Cannot deploy the API server. (ErrImagePull) Reason: "rpc error: code = Unknown desc = Error response from daemon: pull access denied for mertyildiran/mizuagent-123, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"
    
    Removing mizu resources
    
    • Prints an error in the CLI if there is a network error while pulling the image:
    ...
    +user-756b89d69c-nsghq
    +user-db-6df7444fc-wddmp
    Cannot deploy the API server. (ErrImagePull) Reason: "rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io: Temporary failure in name resolution"
    
    Removing mizu resources
    
    • Rest of the events that come from the tapper watch, are displayed as toast messages in the web UI:

    Screenshot from 2021-09-25 22-10-05

    Screenshot from 2021-09-25 22-10-09

    Screenshot from 2021-09-25 22-18-15

    Screenshot from 2021-09-25 22-18-18

    Screenshot from 2021-09-25 23-24-51

    enhancement 
    opened by mertyildiran 18
  • Mizu API server was not ready in time

    Mizu API server was not ready in time

    [[email protected] mizu]# ./mizu tap Mizu will store up to 200MB of traffic, old traffic will be cleared once the limit is reached. Tapping pods in namespaces "default" +kali-roll-df47956b5-5mdtp +my-cert-manager-cainjector-5955cd77f8-j5g5x +my-cert-manager-ff65454bf-q547x +my-cert-manager-webhook-5ff8499f89-jmrrj +vault-7594bfbc57-vc4fx Waiting for Mizu Agent to start... Mizu API server was not ready in time

    Removing mizu resources

    question stale triage/unresolved agent/api-server registry 
    opened by andyoulovexy 14
  • Service Unavailable

    Service Unavailable

    Hi, after installing mizu binary I run: mizu tap ".*" -A

    I can see the list of pods being tapped in the terminal. I get: Mizu is available at http://localhost:8899/mizu

    However when I try to open that I get: `{ "kind": "Status", "apiVersion": "v1", "metadata": {

    }, "status": "Failure", "message": "error trying to reach service: dial tcp 10.2.19.212:8899: i/o timeout", "reason": "ServiceUnavailable", "code": 503 } ` kubectl is correctly working on my box. I can also see the temporary mizu-collector pod running in the cluster.

    Is it a port forward issue?

    stale triage/unresolved CLI 
    opened by fabfianda 14
  • No analysis button appears in the UI.

    No analysis button appears in the UI.

    Describe the bug

    As described on Analysis in Mizu an Analysis button should appear in the upper right corner of the UI/Mizu webpage. It never does so though. And yes I've waited for several minutes and tried in Edge, Google Chrome and Firefox. To no avail.

    To Reproduce Steps to reproduce the behavior:

    1. Run mizu tap -A --analysis or mizu tap --namespaces NAME_OF_THE_NAMESPACE --analysis
    2. Let mizu do its magic and sniff API traffic
    3. wait and see that the Analysis button do NOT appear

    Expected behavior That the Analysis button appears in the upper right corner.

    Logs Uploaded to this issue.

    Screenshots image

    Desktop (please complete the following information):

    • OS: Windows 10
    • Web Browser: Edge. Chrome and Firefox
    documentation 
    opened by LarsBingBong 11
  • Add the ability to set the insertion filter into CLI

    Add the ability to set the insertion filter into CLI

    Adds tap.insertion-filter field to the configuration of the CLI which allows you to set the insertion filter of Basenine.

    The value can be a string which is the filters itself:

    $ ./cli/bin/mizu__ tap -n sock-shop --set tap.insertion-filter=http
    

    or a path to a BFL file:

    $ ./cli/bin/mizu__ tap -n sock-shop --set tap.insertion-filter=/tmp/example.bfl
    

    example.bfl can be any filter. For example;

    Only inserts HTTP or AMQP traffic:

    http or amqp
    

    Only inserts when it's HTTP and the response status is 202:

    http and response.status == 202
    

    Replaces the value of request.path field with [REDACTED] string before the insertion:

    redact("request.path")
    
    enhancement agent/api-server CLI basenine 
    opened by mertyildiran 9
  • Running mizu fails silently with no logs

    Running mizu fails silently with no logs

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Steps to reproduce the behavior:

    1. Run mizu tap or any variant of it which does NOT include mizu-resources-namespace and --namespaces
    2. See mizu terminate instantly with no logs or error output
    3. Run mizu tap --set mizu-resources-namespace=my-ns --namespaces=my-ns
    4. Mizu executes as expected
    5. Run mizu tap --set mizu-resources-namespace=mizu --namespaces=mizu
    6. See mizu terminate instantly with no logs or error output

    I'm admin on this cluster, and have even gone so far as to create the mizu namespace ahead of time after it failed originally.

    Expected behavior

    mizu tap command works without mizu-resources-namespace and --namespaces command

    Logs

    WARNING: No zip logs generated, only CLI logs.

    Screenshots

    n/a

    Desktop (please complete the following information):

    • OS: Darwin Kernel Version 20.6.0: Mon Aug 30 06:12:21 PDT 2021; root:xnu-7195.141.6~3/RELEASE_X86_64
    • Web Browser: n/a

    Additional context Add any other context about the problem here.

    We do have an OPA policy which enforces a naming scheme on our namespaces unless a certain label is added. As such, I tried adding the mizu namespace manually with the partner: core label.

    Additionally, the mac install instructions don't add mizu to your path, so I manually copied it to /usr/local/bin/mizu though the issue was happening even when executing in my home directory with ./mizu instead of just mizu

    ➜  ~ rm -rf .mizu
    
    ➜  ~ mizu tap --set mizu-resources-namespace=mizu --namespaces=mizu --set dump-logs=true
    Mizu will store up to 200MB of traffic, old traffic will be cleared once the limit is reached.
    Tapping pods in namespaces "mizu"
    +bash
    Waiting for Mizu Agent to start...
    
    ➜  ~ cat .mizu/mizu_cli.log
    [2022-01-27T02:46:07.633+0000] DEBUG ▶ Checking for newer version... ▶ [57108 versionCheck.go:47 CheckNewerVersion]
    [2022-01-27T02:46:07.633+0000] DEBUG ▶ Init config finished
     Final config: {
            "Tap": {
                    "UploadIntervalSec": 10,
                    "PodRegexStr": ".*",
                    "GuiPort": 8899,
                    "ProxyHost": "127.0.0.1",
                    "Namespaces": [
                            "mizu"
                    ],
                    "Analysis": false,
                    "AllNamespaces": false,
                    "PlainTextFilterRegexes": null,
                    "IgnoredUserAgents": null,
                    "DisableRedaction": false,
                    "HumanMaxEntriesDBSize": "200MB",
                    "DryRun": false,
                    "Workspace": "",
                    "EnforcePolicyFile": "",
                    "ContractFile": "",
                    "AskUploadConfirmation": true,
                    "ApiServerResources": {
                            "CpuLimit": "750m",
                            "MemoryLimit": "1Gi",
                            "CpuRequests": "50m",
                            "MemoryRequests": "50Mi"
                    },
                    "TapperResources": {
                            "CpuLimit": "750m",
                            "MemoryLimit": "1Gi",
                            "CpuRequests": "50m",
                            "MemoryRequests": "50Mi"
                    },
                    "ServiceMesh": false
            },
            "Version": {
                    "DebugInfo": false
            },
            "View": {
                    "GuiPort": 8899,
                    "Url": ""
            },
            "Logs": {
                    "FileStr": ""
            },
            "Auth": {
                    "EnvName": "up9.app",
                    "Token": ""
            },
            "Config": {
                    "Regenerate": false
            },
            "AgentImage": "gcr.io/up9-docker-hub/mizu/main:0.22.0",
            "ImagePullPolicyStr": "Always",
            "MizuResourcesNamespace": "mizu",
            "Telemetry": true,
            "DumpLogs": true,
            "KubeConfigPathStr": "",
            "ConfigFilePath": "/Users/peter.dolkens/.mizu/config.yaml",
            "HeadlessMode": false,
            "LogLevelStr": "INFO",
            "ServiceMap": false,
            "OAS": false
    }
     ▶ [57108 config.go:57 InitConfig]
    [2022-01-27T02:46:07.633+0000] INFO  ▶ Mizu will store up to 200MB of traffic, old traffic will be cleared once the limit is reached. ▶ [57108 tap.go:82 func8]
    [2022-01-27T02:46:07.633+0000] DEBUG ▶ Using kube config /Users/peter.dolkens/.kube/config ▶ [57108 provider.go:1055 loadKubernetesConfiguration]
    [2022-01-27T02:46:08.017+0000] DEBUG ▶ successfully reported telemetry for cmd tap ▶ [57108 telemetry.go:36 ReportRun]
    [2022-01-27T02:46:08.175+0000] INFO  ▶ Tapping pods in namespaces "mizu" ▶ [57108 tapRunner.go:116 RunMizuTap]
    [2022-01-27T02:46:08.310+0000] INFO  ▶ +bash ▶ [57108 tapRunner.go:179 printTappedPodsPreview]
    [2022-01-27T02:46:08.310+0000] DEBUG ▶ Finished version validation, github version 0.22.0, current version 0.22.0, took 676.551796ms ▶ [57108 versionCheck.go:95 CheckNewerVersion]
    [2022-01-27T02:46:08.310+0000] INFO  ▶ Waiting for Mizu Agent to start... ▶ [57108 tapRunner.go:126 RunMizuTap]
    
    ➜  ~ ls .mizu
    total 8
    -rw-r--r--  1 peter.dolkens  staff  2466 Jan 27 02:46 mizu_cli.log
    
    ➜  ~ mizu tap datasync
    Mizu will store up to 200MB of traffic, old traffic will be cleared once the limit is reached.
    Tapping pods in namespaces "my-namespace"
    +datasync-deploy-7d94dc6446-d9h5k
    Waiting for Mizu Agent to start...
    
    ➜  ~ mizu tap --set mizu-resources-namespace=my-namespace --namespaces=my-namespace datasync
    Mizu will store up to 200MB of traffic, old traffic will be cleared once the limit is reached.
    Tapping pods in namespaces "my-namespace"
    +datasync-deploy-5c65c9868c-c44pb
    Waiting for Mizu Agent to start...
    Mizu is available at http://localhost:8899
    
    ➜  ~ k get ns mizu -o yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{"name":"mizu"},"labels":{"partner":"core"},"name":"mizu"}}
        name: mizu
      creationTimestamp: "2022-01-27T02:04:06Z"
      labels:
        kubernetes.io/metadata.name: mizu
        partner: core
      name: mizu
      resourceVersion: "175991464"
      uid: 078c01bb-9ef6-4f63-98aa-caefed0d2401
    spec:
      finalizers:
      - kubernetes
    status:
      phase: Active
    
    stale needs-triage CLI 
    opened by peter-dolkens 9
  • Mizu API server was not ready in time

    Mizu API server was not ready in time

    Describe the bug Mizu API server was not ready in time.

    To Reproduce Steps to reproduce the behavior:

    1. Run mizu tap kieserver-proxy-7b6c685f44-4hdpv -n rule-ns

    Expected behavior Can work normally.

    Screenshots image

    Desktop (please complete the following information):

    triage/accepted agent/api-server agent/tapper CLI deployment registry 
    opened by 5idu 9
  • error: error in k8s watch

    error: error in k8s watch

    Hi, i've start mizu on my machine but i've that error :

    Waiting for Mizu Agent to start...
    Watching API server events loop, error: error in k8s watch: the server could not find the requested resource (get events.events.k8s.io)
    Mizu is available at http://localhost:8899
    Watching tapper events loop, error: error in k8s watch: the server could not find the requested resource (get events.events.k8s.io)
    

    do you know how can i fix?

    triage/unresolved CLI kubernetes 
    opened by fferraro87 9
  • Fetch N number of records in M milliseconds timeout before streaming the records

    Fetch N number of records in M milliseconds timeout before streaming the records

    With this PR, the socket data streamer does a basenine.Fetch call with 50 limit and 3000 milliseconds timeout that's ordered by the front-end. The front-end orders this fetch to the WebSocket connection only in case of first ever WebSocket connection establish upon page load or querying. In the subsequent connections, front-end does not order this fetch.

    agent/api-server web-ui 
    opened by mertyildiran 8
  • Attributing communication to wrong src

    Attributing communication to wrong src

    Describe the bug

    I believe mizu might be labeling traffic from erroneous source, for example in my tap of kube-system overwhelming amounts of traffic say:

    src.name == "kube-prometheus-stack-prometheus-node-exporter.monitoring" (for the record dest is unresolved)

    the src ip being ip of the node itself (and not a pod ip), destination ip being just some pod, which is not the node exporter in monitoring ns, it was a kibana pod in a different ns. I assumed this is a healthcheck from kubelet, to kibana pod. why does it keep saying src is node exporter for many like these? I'm specifically running my tap on kube-system, even if the source truly is node-exporter i have 2 questions:

    • why is it picking those up? Im not tapping monitoring ns where they (node-exporter) are residing
    • why are they all being attributed to node exporter? I'm not seeing any non-node exporter health checks, arent they being done constantly by kubelet? (meaning isn't it attributing at least some of these checks to some service in monitoring wrongfully?) even if these are accurate id expect to see heath checks from other sources.

    To Reproduce Steps to reproduce the behavior:

    I ran mizu tap for a given ns, in my case, kube-system this was after installing kube-prometheus-stack, which provides node exporter but i think this is a red herring.

    Expected behavior src would be attributed to proper source, matching the ip.

    Logs Upload logs:

    let me know if you want the logs but it appears mizu is working fine from this perspective and probably wont report anything out of the ordinary, i dont think logs will show what im talking about

    Screenshots heres an example screen shot

    image

    Desktop (please complete the following information):

    • OS: windows 10 (k8s running on linux)
    • Web Browser: edge

    Additional context

    apologies if im completely misreading my results of course.

    question stale needs-triage 
    opened by perezjasonr 8
  • Add `ABI0` support to Go `crypto/tls` eBPF tracer

    Add `ABI0` support to Go `crypto/tls` eBPF tracer

    Adds vmlinux.h for x86 and ARM64 which is generated by the command below in the machines with the corresponding architecture:

    bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux_amd64.h
    bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux_arm64.h
    

    that contains the declaration of struct task_struct. The struct is needed to get the Goroutine ID from thread-local storage. It's described in the ABI0 specs.

    Go ABI0 (<=1.16) specification https://go.dev/doc/asm

    The heap-like area for struct task_struct requires ring buffer. It means that; the PR increases the minimum supported Linux kernel version from 4.10 to 5.8.

    Check List

    • [x] OpenSSL works on x86_64
    • [x] OpenSSL works on ARM64
    • [x] Go ABI0 works on x86_64
    • [x] Go ABI0 works on ARM64
    • [x] Go ABIInternal works on x86_64
    • [x] Go ABIInternal works on ARM64

    Build Strategies

    • [x] BUILDARCH=amd64 TARGETARCH=amd64
    • [x] BUILDARCH=arm64v8 TARGETARCH=arm64v8
    • [x] BUILDARCH=amd64 TARGETARCH=arm64v8
    • [x] BUILDARCH=arm64v8 TARGETARCH=amd64

    Test Reference

    https://github.com/up9inc/sock-shop-mizu-demo/pull/23

    Screenshot from 2022-06-30 21-34-21

    Screenshot from 2022-07-01 00-26-59

    agent/tapper eBPF 
    opened by mertyildiran 1
  • Namespace restricted mode should be default

    Namespace restricted mode should be default

    Mizu by default currently installs into its own namespace, but can be made to run in namespace-restricted mode. This should be flipped, with namespace-restricted being the default.

    • Some cluster users may not have permissions to create namespaces in the cluster
    • In EKS, at Mizu termination, the mizu namespace fails to be deleted and has to be manually deleted

    For these reasons, the namespace-restricted mode should be made default.

    opened by arajakum 1
  • mizu : Command not found after installation

    mizu : Command not found after installation

    I have installed mizu on my Linux Ubuntu instance (EC2 instance) with

    curl -Lo mizu https://github.com/up9inc/mizu/releases/latest/download/mizu_darwin_amd64 && chmod 755 mizu

    but when I run _mizu version_ I get error "Command not found".

    I have done the same installation on my Windows PC (Win 11) and I get similar error "Command not found".

    What am I missing ?

    opened by Ed87 7
  • Can't get traffic from @grpc/grpc-js client

    Can't get traffic from @grpc/grpc-js client

    Describe the bug

    Don't get traffic from @grpc/grpc-js client.

    Can get traffic from grpc-go client.

    "@grpc/grpc-js": "^1.6.7"
    
    _.once(() => {
      const addr: string = config.get('zeus.grpcAddr')
      const ch = new grpc.Channel(addr, grpc.credentials.createInsecure(), {})
    
      const clients = [
      ]
    
      _.forEach(clients, c => provideGRPCClient(ch, c))
    })()
    
    interface GrpcClient {
      new (address: string, credentials: grpc.ChannelCredentials, options?: object): any
    }
    
    function provideGRPCClient(ch: grpc.Channel, clientClass: GrpcClient): void {
      Container.set({
        type: clientClass,
        global: true,
        factory: () => {
          return new clientClass('', grpc.credentials.createInsecure(), {
            // Channel to use instead of constructing a new one. If set, the address, credentials,
            //  channel arguments options, and channelFactoryOverride option will all be ignored.
            channelOverride: ch,
          })
        },
      })
    }
    

    Logs mizu_logs.zip

    Screenshots If applicable, add screenshots to help explain your problem.

    Desktop (please complete the following information):

    • OS: [e.g. macOS]

    Additional context

    agent/tapper 
    opened by qiuyuzhou 7
Releases(35.0-dev17)
💨A well crafted go packages that help you build robust, reliable, maintainable microservices.

Hippo A Microservices Toolkit. Hippo is a collection of well crafted go packages that help you build robust, reliable, maintainable microservices. It

Ahmed 140 Feb 8, 2022
A generic oplog/replication system for microservices

REST Operation Log OpLog is used as a real-time data synchronization layer between a producer and consumers. Basically, it's a generic database replic

Dailymotion 112 Jun 5, 2022
Go gRPC Kafka CQRS microservices with tracing

Golang CQRS Kafka gRPC Postgresql MongoDB Redis microservices example ?? ??‍?? Full list what has been used: Kafka as messages broker gRPC Go implemen

Alexander 83 Jun 19, 2022
Example Golang Event-Driven with kafka Microservices Choreography

Microservices Choreography A demonstration for event sourcing using Go and Kafka example Microservices Choreography. To run this project: Install Go I

Muhammad Nasrul 0 Dec 2, 2021
Study project that uses Apache Kafka as syncing mechanism between two databases, with producers and consumers written in Go.

Kafka DB Sync Study project that uses Apache Kafka as syncing mechanisms between a monolith DB and a microservice. The main purpose of this project is

Diego Hordi 0 Dec 5, 2021
Queue with NATS Jetstream to remove all the erlangs from cloud

Saf in Persian means Queue. One of the problems, that we face on projects with queues is deploying RabbitMQ on the cloud which brings us many challenges for CPU load, etc. I want to see how NATS with Jetstream can work as the queue to replace RabbitMQ.

Parham Alvani 11 Jan 7, 2022
An opinionated package that helps you print user-friendly output messages from your Go command line applications.

github.com/eth-p/clout (Command Line Output) clout is a package that helps you print user-friendly output messages from your Go command line applicati

Ethan P. 4 Jan 15, 2022
GopherSay allow you to display a message said by a cute random Gopher.

GopherSay About Welcome in GopherSay! GopherSay is inspired by Cowsay program. GopherSay allow you to display a message said by a cute random Gopher.

Aurelie Vache 16 Mar 7, 2022
Kudruk helps you to create queue channels and manage them gracefully.

kudruk Channels are widely used as queues. kudruk (means queue in Turkish) helps you to easily create queue with channel and manage the data in the qu

Erhan Yakut 8 Feb 21, 2022
Chanman helps you to create queue channels and manage them gracefully.

chanman Channels are widely used as queues. chanman (Channel Manager) helps you to easily create queue with channel and manage the data in the queue.

Erhan Yakut 9 Oct 16, 2021
ntfy is a super simple pub-sub notification service. It allows you to send desktop notifications via scripts.

ntfy ntfy (pronounce: notify) is a super simple pub-sub notification service. It allows you to send desktop and (soon) phone notifications via scripts

Philipp C. Heckel 2.4k Jun 24, 2022
Bark is an iOS App which allows you to push customed notifications to your iPhone.

Bark is an iOS App which allows you to push customed notifications to your iPhone.

Feng 1.4k Jun 30, 2022
Give it an URI and it will open it how you want.

url_handler Give it an url and it will open it how you want. Browers are anoying so when I can, I open links with dedicated programs. I started out us

Nicolai Dagestad 0 Jan 8, 2022
go broker interface,you can use kafka,redis,pulsar etc.

broker go broker interface,you can use kafka,redis,pulsar etc. pulsar in docker run pulsar in docker docker run -dit \ --name pulsar-sever \ -p 6650:

go-god 11 May 25, 2022
🚀 Golang, Go Fiber, RabbitMQ, MongoDB, Docker, Kubernetes, GitHub Actions and Digital Ocean

Bookings Solução de cadastro de usuários e reservas. Tecnologias Utilizadas Golang MongoDB RabbitMQ Github Actions Docker Hub Docker Kubernetes Digita

Jailton Junior 7 Feb 18, 2022
KubeMQ is a Kubernetes native message queue broker

KubeMQ Community is the open-source version of KubeMQ, the Kubernetes native message broker. More about KubeMQ

Temur Yunusov 0 Nov 20, 2021
Golang API wrapper for MangaDex v5's MVP API.

mangodex Golang API wrapper for MangaDex v5's MVP API. Full documentation is found here. This API is still in Open Beta, so testing may not be complet

null 31 Mar 12, 2022
Go (golang) bindings for the 0mq (zmq, zeromq) C API

NOTE: These gozmq bindings are in maintenance mode. Only critical bugs will be fixed. Henceforth I would suggest using @pebbe's actively maintained bi

Alec Thomas 470 Jun 24, 2022
A non-dependent, online configuration, GO-developed, API gateway

GateKeeper GateKeeper 是一个 Go 编写的不依赖分布式数据库的 API 网关,使用它可以高效进行服务代理,支持在线化热更新服务配置 以及 纯文件方式服务配置,支持主动探测方式自动剔除故障节点以及手动方式关闭下游节点流量,还可以通过自定义中间件方式灵活拓展其他功能。 特性 内容

DiDi 394 Jun 18, 2022