{"id":20080943,"url":"https://github.com/nileshsimaria/jtimon","last_synced_at":"2025-06-28T07:36:05.139Z","repository":{"id":21702024,"uuid":"93813517","full_name":"nileshsimaria/jtimon","owner":"nileshsimaria","description":"Junos Telemetry Interface client","archived":false,"fork":false,"pushed_at":"2025-06-18T04:43:48.000Z","size":14827,"stargazers_count":82,"open_issues_count":28,"forks_count":29,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-06-18T06:59:45.120Z","etag":null,"topics":["gnmi-client","go","grpc","jtimon","junos","telemetry-collection"],"latest_commit_sha":null,"homepage":"","language":"Go","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/nileshsimaria.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,"publiccode":null,"codemeta":null}},"created_at":"2017-06-09T03:07:14.000Z","updated_at":"2025-06-18T04:43:57.000Z","dependencies_parsed_at":"2024-06-18T23:30:41.673Z","dependency_job_id":"bafab105-23c9-49e5-b9bc-338491464efa","html_url":"https://github.com/nileshsimaria/jtimon","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/nileshsimaria/jtimon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nileshsimaria%2Fjtimon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nileshsimaria%2Fjtimon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nileshsimaria%2Fjtimon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nileshsimaria%2Fjtimon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nileshsimaria","download_url":"https://codeload.github.com/nileshsimaria/jtimon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nileshsimaria%2Fjtimon/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262393590,"owners_count":23304143,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["gnmi-client","go","grpc","jtimon","junos","telemetry-collection"],"created_at":"2024-11-13T15:32:49.917Z","updated_at":"2025-06-28T07:36:05.115Z","avatar_url":"https://github.com/nileshsimaria.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/nileshsimaria/jtimon.svg?branch=master)](https://travis-ci.org/nileshsimaria/jtimon)\n\n# jtimon\n\nJunos Telemetry Interface client\n\n## Setup\n\n```sh\n$ git clone https://github.com/nileshsimaria/jtimon.git\n$ cd jtimon\n$ make linux or make darwin\n$ ./jtimon-linux-amd64 --help or jtimon-darwin-amd64 --help\n```\n\nPlease note that if you use make to build source, it will produce binary with GOOS and GOARCH names e.g. jtimon-darwin-amd64, jtimon-linux-amd64 etc. Building the source using make is recommended as it will insert git-revision, build-time info in the binary.\n\nTo understand what targets are available in make, run the make help command as follows:\n\n```sh\n$ make help\n```\n\n### Note\n\nIf you are cloning the source and building it, please make sure you have environment variable GOPATH is set correctly.\nhttps://golang.org/doc/code.html#GOPATH\n\n## Docker container\n\nAlternatively to building jtimon native, one can build a jtimon Docker container and run it dockerized while passing the local directory to the container to access the json file.\n\nTo build the container:\n\n```sh\nmake docker\n```\n\nCheck the resulting image:\n\n```sh\n$ docker images jtimon\nREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE\njtimon              latest              f1a794609339        7 minutes ago       24.5MB\n```\n\nRun it:\n\n```sh\ndocker run -ti --rm -v ${PWD}:/u:ro jtimon --help\n```\n\nOr simply by calling ./jtimon, which is a symlink to launch-docker-container.sh, capable of launching the container by name with the current directory mounted into /u:\n\n```sh\n$ ./jtimon\nEnter config file name: bla.json\n2018/03/02 13:53:44 File error: open bla.json: no such file or directory\n```\n\n## CLI Options\n\n```\n$ ./jtimon-linux-amd64 --help\nUsage of ./jtimon-linux-amd64:\n      --compression string         Enable HTTP/2 compression (gzip)\n      --config strings             Config file name(s)\n      --config-file-list string    List of Config files\n      --consume-test-data          Consume test data\n      --explore-config             Explore full config of JTIMON and exit\n      --generate-test-data         Generate test data\n      --json                       Convert telemetry packet into JSON\n      --log-mux-stdout             All logs to stdout\n      --max-run int                Max run time in seconds\n      --no-per-packet-goroutines   Spawn per packet go routines\n      --pprof                      Profile JTIMON\n      --pprof-port int32           Profile port (default 6060)\n      --prefix-check               Report missing __prefix__ in telemetry packet\n      --print                      Print Telemetry data\n      --prometheus                 Stats for prometheus monitoring system\n      --prometheus-host string     IP to bind Prometheus service to (default \"127.0.0.1\")\n      --prometheus-port int32      Prometheus port (default 8090)\n      --stats-handler              Use GRPC statshandler\n      --version                    Print version and build-time of the binary and exit\npflag: help requested\n```\n\n## Config\n\nTo explore what can go in config, please use --explore-config option.\n\nExcept connection details like host, port, etc no other part of the config is mandatory e.g. do not use influx in your config if you dont want to insert data into it.\n\n```\n$ ./jtimon-linux-amd64 --explore-config                                                                                                                                   [8/1981]\n2021/10/02 17:15:22 Version: v2.3.0-7bfd8fdf2fcae1d55079e3d9eceb761be0842eae-master BuildTime 2021-10-02T19:51:16-0400\n2021/10/02 17:15:22\n{\n    \"port\": 0,\n    \"host\": \"\",\n    \"user\": \"\",\n    \"password\": \"\",\n    \"cid\": \"\",\n    \"meta\": false,\n    \"eos\": false,\n    \"grpc\": {\n        \"ws\": 0\n    },\n    \"tls\": {\n        \"clientcrt\": \"\",\n        \"clientkey\": \"\",\n        \"ca\": \"\",\n        \"servername\": \"\"\n    },\n    \"influx\": {\n        \"server\": \"\",\n        \"port\": 0,\n        \"dbname\": \"\",\n        \"user\": \"\",\n        \"password\": \"\",\n        \"recreate\": false,\n        \"measurement\": \"\",\n        \"batchsize\": 0,\n        \"batchfrequency\": 0,\n        \"http-timeout\": 0,\n        \"retention-policy\": \"\",\n        \"accumulator-frequency\": 0,\n        \"write-per-measurement\": false\n    },\n    \"kafka\": null,\n    \"paths\": [\n        {\n            \"path\": \"\",\n            \"freq\": 0,\n            \"mode\": \"\"\n        }\n    ],\n    \"log\": {\n        \"file\": \"\",\n        \"periodic-stats\": 0,\n        \"verbose\": false\n    },\n    \"vendor\": {\n        \"name\": \"\",\n        \"remove-namespace\": false,\n        \"schema\": null,\n        \"gnmi\": null\n    },\n    \"alias\": \"\",\n    \"password-decoder\": \"\",\n    \"enable-uint\": false\n}    \n```\n\nI am explaining some config options which are not self-explanatory.\n\n\u003cpre\u003e\nmeta : send username and password over gRPC meta instead of invoking LoginCheck() RPC for authentication. \nPlease use SSL/TLS for security. For more details on how to use SSL/TLS, please refer wiki\nhttps://github.com/nileshsimaria/jtimon/wiki/SSL\n\u003c/pre\u003e\n\n\u003cpre\u003e\ncid : client id. Junos expects unique client ids if multiple clients are subscribing to telemetry streams.\n\u003c/pre\u003e\n\n\u003cpre\u003e\neos : end of sync. Tell Junos to send end of sync for on-change subscriptions.\n\u003c/pre\u003e\n\n\u003cpre\u003e\ngrpc/ws : window size of grpc for slower clients\n\u003c/pre\u003e\n\n## Kafka Publish\n\nTo publish gRPC/Openconfig JTI data to Kafka, use the following json config.\n\n```\n$ cat kafka-test-1.json\n{\n    \"host\": \"2.2.2.2\",\n    \"port\": 32767,\n    \"user\": \"username\",\n    \"password\": \"password\",\n    \"cid\": \"cid123\",\n    \"kafka\": {\n        \"brokers\": [\"1.1.1.1:9094\"],\n        \"topic\": \"test\",\n        \"client-id\": \"testjtimonmx86\"\n    },\n\n    \"paths\": [\n        {\n            \"path\": \"/interfaces\",\n            \"freq\": 10000\n        }\n    ]\n}\n```\n\nBelow are all possible Kafka config options.\n\n```\ntype KafkaConfig struct {\n\tVersion            string   `json:\"version\"`\n\tBrokers            []string `json:\"brokers\"`\n\tClientID           string   `json:\"client-id\"`\n\tTopic              string   `json:\"topic\"`\n\tCompressionCodec   int      `json:\"compression-codec\"`\n\tRequiredAcks       int      `json:\"required-acks\"`\n\tMaxRetry           int      `json:\"max-retry\"`\n\tMaxMessageBytes    int      `json:\"max-message-bytes\"`\n\tSASLUser           string   `json:\"sasl-username\"`\n\tSASLPass           string   `json:\"sasl-password\"`\n\tTLSCA              string   `json:\"tls-ca\"`\n\tTLSCert            string   `json:\"tls-cert\"`\n\tTLSKey             string   `json:\"tls-key\"`\n\tInsecureSkipVerify bool     `json:\"insecure-skip-verify\"`\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnileshsimaria%2Fjtimon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnileshsimaria%2Fjtimon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnileshsimaria%2Fjtimon/lists"}