{"id":42905629,"url":"https://github.com/egnyte/ax","last_synced_at":"2026-01-30T16:18:02.826Z","repository":{"id":57515922,"uuid":"100943613","full_name":"egnyte/ax","owner":"egnyte","description":"A CLI tool to query structured logs, including Kibana, Cloudwatch, Stackdriver, Docker and plain JSON file logs.","archived":false,"fork":false,"pushed_at":"2018-11-18T07:09:43.000Z","size":133,"stargazers_count":61,"open_issues_count":15,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-06-20T13:35:20.840Z","etag":null,"topics":["cli","cloudwatch","kibana","logging","stackdriver"],"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/egnyte.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}},"created_at":"2017-08-21T11:02:30.000Z","updated_at":"2024-04-25T13:39:16.000Z","dependencies_parsed_at":"2022-08-28T16:51:39.395Z","dependency_job_id":null,"html_url":"https://github.com/egnyte/ax","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/egnyte/ax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egnyte%2Fax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egnyte%2Fax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egnyte%2Fax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egnyte%2Fax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/egnyte","download_url":"https://codeload.github.com/egnyte/ax/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/egnyte%2Fax/sbom","scorecard":{"id":368903,"data":{"date":"2025-08-11","repo":{"name":"github.com/egnyte/ax","commit":"2c2d4e04cf5cea1a38b282438bbdd0fdc467aa1f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":5,"reason":"Found 12/22 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.3.3 not signed: https://api.github.com/repos/egnyte/ax/releases/14063000","Warn: release artifact v0.3.2 not signed: https://api.github.com/repos/egnyte/ax/releases/14058258","Warn: release artifact v0.3.1 not signed: https://api.github.com/repos/egnyte/ax/releases/10779450","Warn: release artifact v0.3.0 not signed: https://api.github.com/repos/egnyte/ax/releases/10669632","Warn: release artifact v0.2.1 not signed: https://api.github.com/repos/egnyte/ax/releases/10669536","Warn: release artifact v0.3.3 does not have provenance: https://api.github.com/repos/egnyte/ax/releases/14063000","Warn: release artifact v0.3.2 does not have provenance: https://api.github.com/repos/egnyte/ax/releases/14058258","Warn: release artifact v0.3.1 does not have provenance: https://api.github.com/repos/egnyte/ax/releases/10779450","Warn: release artifact v0.3.0 does not have provenance: https://api.github.com/repos/egnyte/ax/releases/10669632","Warn: release artifact v0.2.1 does not have provenance: https://api.github.com/repos/egnyte/ax/releases/10669536"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T12:31:17.815Z","repository_id":57515922,"created_at":"2025-08-18T12:31:17.815Z","updated_at":"2025-08-18T12:31:17.815Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28915126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T12:13:43.263Z","status":"ssl_error","status_checked_at":"2026-01-30T12:13:22.389Z","response_time":66,"last_error":"SSL_read: 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":["cli","cloudwatch","kibana","logging","stackdriver"],"created_at":"2026-01-30T16:18:02.226Z","updated_at":"2026-01-30T16:18:02.817Z","avatar_url":"https://github.com/egnyte.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ax\n\n![Logo](https://raw.githubusercontent.com/egnyte/ax/master/ax.png)\n\n[![Travis CI status image](https://travis-ci.org/egnyte/ax.svg?branch=master)](https://travis-ci.org/egnyte/ax)\n\nIt's a structured logging world we live in, but do we really have to look at JSON logs? Not with Ax.\n\nAx features:\n\n* Read logs from various sources, currently:\n  * [Kibana](https://www.elastic.co/products/kibana)\n  * [AWS Cloudwatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)\n  * [GCP Stackdriver Logs](https://cloud.google.com/logging/)\n  * Piped input\n  * Docker containers\n* Filter logs based on attribute (field) values as well as text phrase search\n* Select only the attributes you are interested in\n* The ability to \"follow\" logs (Ax keeps running and shows new results as they come in)\n* Various output format (pretty text, JSON, pretty JSON, YAML) that can be used for further processing\n* Command completion for all commands and flags (e.g. completing attribute names)\n\n## Installation\nAx can be installed in two ways:\n\n1. through downloading pre-compiled binaries (for official releases)\n2. through fetching the latest version from Github and compiling using the Go tools\n\n### Pre-compiled binaries\nOn Linux or Mac (this will attempt to install the binary into `/usr/local/bin` by default):\n\n    curl -sfL https://raw.githubusercontent.com/egnyte/ax/master/install.sh | sh\n\nIf you want to install the `ax` binary into another location, simply set the `BINDIR` environment variable, e.g.:\n\n    curl -sfL https://raw.githubusercontent.com/egnyte/ax/master/install.sh | BINDIR=. sh\n\nto install in the current directory.\n\nIf you don't trust piping random shell scripts from the internet into a shell, feel free to download the `install.sh` script first, inspect it, then run it through bash manually or, simply go through the [Ax releases](https://github.com/egnyte/ax/releases) page and download the tarball of your choice.\n\nUpgrade using:\n\n    ax upgrade\n\n### Bleeding edge with Go-tools\nFor now there's no pre-built binaries, so to run this you need a reasonably recent version of Go, then download it into your GOPATH:\n\n    go get -u github.com/egnyte/ax/...\n\nThis will also put the `ax` binary into your `$GOPATH/bin` so make sure that's in your `$PATH`.\n\nTo update Ax to the latest and greatest, just rerun the command above.\n\n## Development\nAfter the above `go get` call, you will have a git checkout of the repo under `$GOPATH/src/github.com/egnyte/ax`. If you want to work on Ax, just fork the repo and update `.git/config` appropriately.\n\nTo make sure you're building Ax with the approriate versions of its dependencies run:\n\n    dep ensure\n\nTo run tests:\n\n    make test\n\nTo \"go install\" ax (this will put the resulting binary in `$GOPATH/bin` so put that in your `$PATH`)\n\n    make\n\n## Setup\nOnce you have `ax` installed, the first thing you'll want to do is setup bash or zsh command completion (I'm not kidding).\n\nFor bash, add to `~/.bash_profile`:\n\n    eval \"$(ax --completion-script-bash)\"\n\nFor zsh, add to `~/.zshrc`:\n\n    eval \"$(ax --completion-script-zsh)\"\n\nAfter this, you can auto complete commands, flags, environments, docker container names and even attribute names by hittig TAB. Use it, love it, never go back.\n\n## Setup with Kibana, Cloudwatch or Stackdriver\nTo setup Ax for use with Kibana, Cloudwatch or Stackdriver, run:\n\n    ax env add\n\nThis will prompt you for a name, backend-type and various other things depending on your backend of choice. After a successful setup, you should be ready to go.\n\nTo see if it works, just run:\n\n    ax --env yourenvname\n\nOr, most likely your new env is the default (check with `ax env`) and you can just run:\n\n    ax\n\nThis should show you the (200) most recent logs.\n\nIf you're comfortable with YAML, you can run `ax env edit` which will open an editor with the `~/.config/ax/ax.yaml` file (either the editor set in your `EDITOR` env variable, with a fallback to `nano`). In there you can easily create more environments quickly.\n\n## Use with Docker\nTo use Ax with docker, simply use the `--docker` flag and a container name pattern. I usually use auto complete here (which works for docker containers too):\n\n    ax --docker turbo_\n\nTo query logs for all containers with \"turbo\\_\" in the name. This assumes you have the `docker` binary in your path and setup properly.\n\n## Use with log files or processes\nYou can also pipe logs directly into Ax:\n\n    tail -f /var/log/something.log | ax\n\n# Filtering and selecting attributes\n\nLooking at all logs is nice, but it only gets really interesting if you can start to filter stuff and by selecting only certain attributes.\n\nTo search for all logs containing the phrase \"Traceback\":\n\n    ax \"Traceback\"\n\nTo search for all logs with the phrase \"Traceback\" and where the attribute \"domain\" is set to \"zef\":\n\n    ax --where domain=zef \"Traceback\"\n\nAgain, after running Ax once on an environment it will cache attribute names, so you get completion for those too, usually.\n\nAx also supports the `!=` operator:\n\n    ax --where domain!=zef\n\nIf you have a lot of extra attributes in your log messages, you can select just a few of them:\n\n    ax --where domain=zef --select message --select tag\n\n# Advanced filtering\n\nAx also allows you to filter by the existence of a field in a message, or to test field values for membership in a set of values.\n\nTo search for all logs with a `domain` field:\n\n    ax --where-exists domain\n\nOr for all logs without a traceback field:\n\n    ax --where-not-exists traceback\n\nTo search for messages from a subset of domains:\n\n    ax --where-on-of domain:zef --where-one-of domain:fredek\n\nTo search for all messages *except* ones from specific domains:\n    ax --where-not-on-of domain:boring --where-not-one-of domain:dull\n\n**NOTE** Advanced filtering is currently only implemented for the stream and Docker backends. Attempting to use them with other backend will raise an error.\n# \"Tailing\" logs\n\nUse the `-f` flag:\n\n    ax -f --where domain=zef\n\n# Different output formats\n\nDon't like the default textual output, perhaps you prefer YAML:\n\n    ax --output yaml\n\nor pretty JSON:\n\n    ax --output pretty-json\n\n# Customizing colors for \"text\" output\n\nIn your `~/.config/ax/ax.yaml` file (`ax env edit`) you can override the default colors as follows:\n\n    colors:\n        timestamp:\n            fg: magenta\n        message:\n            bold: true\n        attributekey:\n            faint: true\n            fg: green\n        attributevalue:\n            faint: true\n            fg: blue\n\nFor each \"color\" you can set:\n\n* `fg` — foreground color (`red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`)\n* `bg` — background color (same options)\n* `bold` — bold font (`true` or `false`)\n* `italic` — italic font (`true` or `false`)\n* `underline` — underline font (`true` or `false`)\n* `faint` — faint (color) font (`true` or `false`)\n\n# Getting help\n\n    ax --help\n    ax query --help\n\n# Found anything broken?\n\nReport it as a Github issue!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fegnyte%2Fax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fegnyte%2Fax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fegnyte%2Fax/lists"}