Standalone Go parser and AST for Grafana Loki's LogQL. Lifts the
upstream syntax, log, and logqlmodel packages out of grafana/loki with their runtime
dependencies (dskit, etcd, jaeger, the queryrange/push machinery) stripped away.
go get github.com/qualithm/logql-syntaximport "github.com/qualithm/logql-syntax/syntax"
expr, err := syntax.ParseExpr(`sum by (job) (rate({app="api"} |= "error" [5m]))`)
if err != nil {
return err
}
expr.Walk(func(e syntax.Expr) bool {
// inspect the AST
return true
})| Path | Source |
|---|---|
syntax/ |
github.com/grafana/loki/v3/pkg/logql/syntax |
log/ |
github.com/grafana/loki/v3/pkg/logql/log |
log/jsonexpr/ |
github.com/grafana/loki/v3/pkg/logql/log/jsonexpr |
log/logfmt/ |
github.com/grafana/loki/v3/pkg/logql/log/logfmt |
log/pattern/ |
github.com/grafana/loki/v3/pkg/logql/log/pattern |
logqlmodel/ |
trimmed extract of pkg/logqlmodel (errors + label constants only) |
internal/util/ |
regex, matcher and encoding helpers from pkg/util |
internal/constants/ |
variants.go from pkg/util/constants |
The runtime Result and Streams types from logqlmodel are intentionally omitted because they
pull in loki/pkg/push and queryrange machinery.
Tracked against Loki v3.7.2.
To resync against a newer Loki release:
-
Download the release and run the sync script, which copies the upstream packages and rewrites their import paths.
make syncuses the version pinned inscripts/sync-upstream.sh.go mod download github.com/grafana/loki/v3@<loki-version> ./scripts/sync-upstream.sh <loki-version>
-
Reconcile any new uses of
pkg/logqlmodel— extend the trimmedlogqlmodel/package here as needed. -
go test ./...— the only known persistent failures are the two timestamp subtests inlog/that hardcode local-timezone dates upstream.
- Go 1.26+
make install-toolsThis installs golangci-lint, goimports, govulncheck and gosec into $GOPATH/bin (~/go/bin
by default). Put that directory on your PATH:
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcmake build
make test
make lintmake audit # govulncheck
make gosec # standalone gosec scan.github/workflows/audit.yaml runs govulncheck and gosec daily.
Go 1.26+.
Apache-2.0. See LICENSE and NOTICE for upstream attribution.