{"owner":"grafana","repo":"loki","hasSkills":true,"totalSkillsCount":45,"totalTokensCount":16474,"categories":["anthropic-skill","plugin-manifest","root-instruction"],"hasMcp":false,"mcpConfig":null,"found":["tools/dev.values.yaml","tools/helm.yaml","tools/dataobj-locality/README.md",".cursor/skills/go/SKILL.md","tools/release-note.md","AGENTS.md","tools/doc-generator/README.md","tools/deprecated-config-checker/README.md","tools/deprecated-config-checker/deprecated-config.yaml","tools/gcplog/README.md","tools/deprecated-config-checker/deleted-config.yaml","tools/kafka/README.md","tools/stream-generator/README.md","tools/stream-generator/docker-compose.yaml","tools/stream-generator/loki-local-config.debug.yaml","tools/deprecated-config-checker/test-fixtures/config.yaml","tools/deprecated-config-checker/test-fixtures/runtime-config.yaml","tools/dev/k3d/README.md","tools/dev/k3d/chartfile.yaml","tools/dev/k3d/jsonnetfile.json","tools/dev/k3d/jsonnetfile.lock.json","tools/dev/kafka/README.md","tools/dev/kafka/docker-compose.yaml","tools/dev/kafka/loki-local-config.debug.yaml","tools/dev/kafka/prometheus.yaml","tools/dev/loki-tsdb-storage-s3/README.md","pkg/tool/rules/testdata/basic_namespace.yaml","pkg/tool/rules/testdata/basic_namespace_repeated.yaml","pkg/tool/rules/testdata/loki_basic.yaml","pkg/tool/rules/testdata/loki_basic_failure.yaml","pkg/tool/rules/testdata/loki_basic_namespace.yaml","pkg/tool/rules/testdata/loki_multiple_namespace.yaml","pkg/tool/rules/testdata/multiple_namespace.yaml","tools/dev/loki-tsdb-storage-s3/config/datasource.yaml","tools/dev/loki-tsdb-storage-s3/config/loki.yaml","tools/dev/k3d/environments/helm-cluster/README.md","tools/dev/k3d/environments/helm-cluster/spec.json","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml","tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml","tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml","tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml","tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml","tools/dev/k3d/environments/helm-cluster/values/loki.yaml"],"skills":{"tools/dev.values.yaml":"grafana:\n  enabled: true\n  service:\n    type: LoadBalancer\n    port: 3000\n  adminPassword: admin\n\nprometheus:\n  enabled: true\n  pushgateway:\n    enabled: false\n  server:\n    service:\n      type: LoadBalancer\n      servicePort: 9090\n\nfluent-bit:\n  enable: false\n\nloki:\n  image:\n    pullPolicy: Never\n  service:\n    type: LoadBalancer\n","tools/helm.yaml":"apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: helm\n  namespace: kube-system\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: helm\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: cluster-admin\nsubjects:\n  - kind: ServiceAccount\n    name: helm\n    namespace: kube-system\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  creationTimestamp: null\n  name: cluster-admin\n  annotations:\n    rbac.authorization.kubernetes.io/autoupdate: \"true\"\nrules:\n- apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n- nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'","tools/dataobj-locality/README.md":"# dataobj-locality\n\n`dataobj-locality` measures how well label values and log records are\nphysically clustered inside Loki's data objects. It reads directly from the\nlive index (postings sections) and, optionally, the logs objects referenced by\nthat index, for a given tenant and time range.\n\nBecause scanning hundreds of index objects is expensive, the tool supports\nexporting raw posting facts as Parquet and CSV so the data can be shared\nand re-queried offline without re-scanning.\n\n## Installation\n\n```bash\ngo build -o dataobj-locality ./tools/dataobj-locality/\n```\n\n## Usage\n\n```\ndataobj-locality [flags]\n```\n\n### Flags\n\n| Flag | Default | Description |\n|---|---|---|\n| `--config.file` | | Path to a Loki config YAML (reads storage credentials and prefixes from it, same as the running engine). Mutually exclusive with `--dir`. |\n| `--config.expand-env` | false | Expand `${VAR}` in the config file before parsing. |\n| `--dir` | | Local directory holding TOC and index objects. Useful for local testing. Mutually exclusive with `--config.file`. |\n| `--tenant` | | Tenant ID to inspect. Required for bucket sources. |\n| `--from` | now - 12h | Start of the time range (RFC3339). |\n| `--to` | now | End of the time range (RFC3339). |\n| `--locality` | both | What to measure: `postings`, `logs`, or `both`. |\n| `--sort-key` | service_name | Label used as the primary sort dimension for the logs locality rollup. |\n| `--logs-section-target-bytes` | 134217728 (128 MiB) | Uncompressed logs-section target size, used to compute the ideal section count. |\n| `--top` | 20 | Rows to show in each top-N table. |\n| `--concurrency` | 8 | Maximum number of index objects to open and scan in parallel. |\n| `--export` | | Path prefix for raw-fact export. Produces `<prefix>.parquet` and/or `<prefix>.csv`. |\n| `--export-format` | both | Output format for `--export`: `parquet`, `csv`, or `both`. |\n\n## Examples\n\n### Quick console report against a live bucket\n\n```bash\ndataobj-locality \\\n  --config.file /etc/loki/config.yaml \\\n  --tenant acme \\\n  --from 2024-01-15T00:00:00Z \\\n  --to   2024-01-15T06:00:00Z \\\n  --locality both \\\n  --sort-key service_name\n```\n\nThis prints a summary and top-20 tables to stdout, then exits.\n\n### Credentials\n\nThe tool reuses Loki's own storage configuration, so credentials are resolved\nthrough the same chain the engine uses:\n\n- **AWS S3**: set `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` in the\n  environment, or rely on instance-profile / workload-identity if running\n  inside AWS.\n- **GCS**: set `GOOGLE_APPLICATION_CREDENTIALS`, or rely on Application\n  Default Credentials (`gcloud auth application-default login` for local\n  development).\n- **Local testing**: use `--dir` pointing at a directory that mirrors the\n  object-store layout.\n\n### Export to Parquet + CSV, then query with DuckDB\n\n```bash\ndataobj-locality \\\n  --config.file /etc/loki/config.yaml \\\n  --tenant acme \\\n  --from 2024-01-15T00:00:00Z \\\n  --to   2024-01-15T06:00:00Z \\\n  --locality both \\\n  --export ./facts \\\n  --export-format both\n```\n\nThis produces `facts.parquet` and `facts.csv` alongside the console report.\n\n## Querying with DuckDB\n\nInstall DuckDB: <https://duckdb.org/docs/installation>\n\n```bash\nduckdb\n```\n\n### Schema\n\n| Column | Type | Description |\n|---|---|---|\n| `tenant` | VARCHAR | Tenant the posting belongs to. |\n| `index_object` | VARCHAR | Path of the index object that contains the postings section. |\n| `index_section` | BIGINT | Section index of the postings section within the index object. Together with `index_object` this uniquely identifies a physical postings section, matching the `sectionSpread` metric in the console report. |\n| `compacted` | BOOLEAN | Whether the index object is a compacted (IndexMerge) output rather than an uncompacted per-partition index. Derived from the index object path (`indexes/tenants/...` = compacted). |\n| `column_name` | VARCHAR | Label name (e.g. `service_name`). |\n| `label_value` | VARCHAR | Label value (e.g. `frontend`). |\n| `logs_object` | VARCHAR | Path of the logs object referenced by the posting. |\n| `logs_section` | BIGINT | Section index within the logs object. |\n| `stream_refs` | BIGINT | Number of distinct log streams in the section for this label value. |\n| `uncompressed_size` | BIGINT | Uncompressed bytes of log records for this label value in this section. |\n\n### Useful queries\n\n**How many distinct logs sections does each service touch?**\n\n```sql\nSELECT\n    label_value                          AS service,\n    COUNT(DISTINCT (logs_object, logs_section)) AS logs_sections,\n    COUNT(DISTINCT logs_object)          AS logs_objects,\n    SUM(uncompressed_size) / 1024 / 1024 AS total_mb\nFROM 'facts.parquet'\nWHERE column_name = 'service_name'\nGROUP BY label_value\nORDER BY logs_sections DESC\nLIMIT 20;\n```\n\n**Spread factor: actual sections vs ideal (128 MiB target)**\n\n```sql\nSELECT\n    label_value AS service,\n    COUNT(DISTINCT (logs_object, logs_section)) AS actual_sections,\n    CEIL(SUM(uncompressed_size) / 134217728.0) AS ideal_sections,\n    ROUND(\n        COUNT(DISTINCT (logs_object, logs_section)) /\n        CEIL(SUM(uncompressed_size) / 134217728.0),\n        2\n    ) AS spread_factor\nFROM 'facts.parquet'\nWHERE column_name = 'service_name'\nGROUP BY label_value\nHAVING ideal_sections >= 1\nORDER BY spread_factor DESC\nLIMIT 20;\n```\n\nA `spread_factor` of 1.0 means logs are perfectly clustered. Higher values\nindicate fragmentation — the service's logs are spread across more sections\nthan the data volume requires.\n\n**Postings-section spread per label name (how many index sections reference each label?)**\n\n```sql\nSELECT\n    column_name,\n    COUNT(DISTINCT index_object)                  AS index_objects,\n    COUNT(DISTINCT (index_object, index_section)) AS postings_sections,\n    SUM(stream_refs)                              AS total_stream_refs\nFROM 'facts.parquet'\nGROUP BY column_name\nORDER BY postings_sections DESC\nLIMIT 20;\n```\n\n**Re-slice by a different sort key without re-scanning**\n\nBecause the export contains every label column, you can analyse locality for\nany label — not just the one used as `--sort-key` at scan time:\n\n```sql\nSELECT\n    label_value AS namespace,\n    COUNT(DISTINCT (logs_object, logs_section)) AS logs_sections,\n    CEIL(SUM(uncompressed_size) / 134217728.0) AS ideal_sections\nFROM 'facts.parquet'\nWHERE column_name = 'namespace'\nGROUP BY label_value\nORDER BY logs_sections DESC\nLIMIT 20;\n```\n",".cursor/skills/go/SKILL.md":"---\nname: go\ndescription: >\n  Best practices for working with Go codebases. Use when writing, debugging,\n  or exploring Go code, including reading dependency sources and documentation.\nallowed-tools: \"Read,Bash(go:*)\"\nversion: \"1.0.0\"\nauthor: \"User\"\nlicense: \"MIT\"\n---\n\n# Go Programming Language\n\nGuidelines for working effectively with Go projects.\n\n## Reading Dependency Source Files\n\nTo see source files from a dependency, or to answer questions about a dependency:\n\n```bash\ngo mod download -json MODULE\n```\n\nUse the returned Dir path to read the source files.\n\n## Reading Documentation\n\nUse go doc to read documentation for packages, types, functions, etc:\n\n```bash\ngo doc foo.Bar       # Documentation for a specific symbol\ngo doc -all foo      # All documentation for a package\n```\n\n## Running Programs\n\nUse go run instead of go build to avoid leaving behind build artifacts:\n\n```bash\ngo run .             # Run the current package\ngo run ./cmd/foo     # Run a specific command\n```\n","tools/release-note.md":"This is release `${DRONE_TAG}` of Loki.\n\n### Notable changes:\n:warning: **ADD RELEASE NOTES HERE** :warning:\n\n\n### Installation:\nThe components of Loki are currently distributed in plain binary form and as Docker container images. Choose what fits your use-case best.\n\n#### Docker container:\n* https://hub.docker.com/r/grafana/loki\n* https://hub.docker.com/r/grafana/promtail\n```bash\n$ docker pull \"grafana/loki:${DRONE_TAG_NO_V}\"\n$ docker pull \"grafana/promtail:${DRONE_TAG_NO_V}\"\n```\n\n#### Binary\nWe provide pre-compiled binary executables for the most common operating systems and architectures.\nChoose from the assets below for the application and architecture matching your system.\nExample for `Loki` on the `linux` operating system and `amd64` architecture:\n\n```bash\n$ curl -O -L \"https://github.com/grafana/loki/releases/download/${DRONE_TAG}/loki-linux-amd64.zip\"\n# extract the binary\n$ unzip \"loki-linux-amd64.zip\"\n# make sure it is executable\n$ chmod a+x \"loki-linux-amd64\"\n```\n","AGENTS.md":"# AGENTS.md\n\nInstructions file for coding agents.\n\n## Environment Setup\n\n- Use the minimum Go version specified in [go.mod](go.mod)\n- Warn the user about an old Go version\n- The project uses GNU make for building binaries and images. See [Makefile](Makefile)\n\n## Commands\n\n### Tests\n\nFor fast feeback run tests using `go test` (or `gotest` if available).\n\n```bash\ngo test -v ./...                               # run all tests with Go directly\ngo test -v ./pkg/...                           # run Loki package tests\ngo test -v ./pkg/<pkg>/...                     # run tests in specific package\ngo test -v -test.run TestName ./pkg/<pkg>/...  # run a specific test\n```\n\nFor full verification use dedicated `make` targets (only when requested).\n\n```\nmake test                                      # run full test suite\nmake test-integration                          # run integration test suite\nmake test-fuzz                                 # run fuzz tests\n```\n\n## Code Style\n\n- Follow standard Go formatting (gofmt/goimports)\n- Follow import order:\n  1. standard lib\n  2. external packages\n  3. Loki packages (`github.com/grafana/loki/v3`)\n- Error handling: Always check errors with `if err != nil { return ... }`\n- Use structured logging with leveled logging (`github.com/go-kit/log`)\n- Document all exported functions, types, and variables\n\n### Testing\n\n- Always prefer `github.com/stretchr/testify/require` over `github.com/stretchr/testify/assert`\n- Use table-driven tests when appropriate\n\n## Commits and Pull Requests\n\n- Always run Loki package tests `gotest -v ./pkg/...` before commiting\n- Focus on \"why\", rather than \"what\" in the commit message and PR description\n- Follow conventional commits format: `<type>(<scope>): Your change` (note the uppercase after colon)\n- Never approve, merge or enable auto-merge on Renovate PRs that touch `operator/**` — they risk breaking the operator build and are left for the operator maintainers to apply\n\n## Documentation Standards\n\n- Follow the Grafana [Writers' Toolkit](https://grafana.com/docs/writers-toolkit/) Style Guide\n- Use CommonMark flavor of markdown for documentation\n- Create Github issues for large functionality changes\n- Document upgrading steps in `docs/sources/setup/upgrade/_index.md`\n- Preview docs locally with `make docs` from the `/docs` directory\n- Include examples and clear descriptions for public APIs\n\n## Using Tools\n\n- When using the `mcp__acp__Write` tool, write to a path within the current worktree to avoid sandboxing/permissions issues. This includes when writing plan files.\n","tools/doc-generator/README.md":"# Documentation generation tool\n\nThe doc-generator tool is used to automatically generate the configuration flags documentation from the metadata information\nprovided in the code. \n\n## Run \n\nThe tool receives as input a template file and generates the list of configuration value blocks: \n\n```shell\ngo run ./tools/doc-generator docs/sources/configuration/index.template > docs/sources/configuration/_index.md\n```\n\n## `doc` tag\n\nThe description and default value of configuration values can be set via CLI flag registration by using the `flag` package. \nHowever, for a more flexible documentation generation it is possible to combine this with the `doc` tag by applying the following custom values:\n\n* `doc:\"deprecated\"`: sets the element as deprecated in the documentation.\n* `doc:\"hidden\"`: does not show the element in the documentation.\n* `doc:\"description=foo\"`: overrides the element's description (set via flag registration, if any) with `foo`.\n* `doc:\"default=<hostname>\"`: sets the element's documentation default value as `<hostname>`. \nNote: this only sets the default value shown in the documentation, it doesn't override the default configuration value. ","tools/deprecated-config-checker/README.md":"# Deprecated Config Checker\n\nThis script can check your configuration files for deprecated and deleted options.\n\n## Usage\n\nRun the script with `-help` for a list of options.\n\n### Example\n\n```bash\ngo run tools/deprecated-config-checker/main.go \\\n  -config.file tools/deprecated-config-checker/test-fixtures/config.yaml \\\n  -runtime-config.file tools/deprecated-config-checker/test-fixtures/runtime-config.yaml\n```\n\n## Adding a new config deprecation or deletion?\n\nAdd deprecations to the `deprecated-config.yaml` file, and deletions to the `deleted-config.yaml`. \nThen, update the `test-fixtures/config.yaml` and `test-fixtures/runtime-config.yaml` files as well as\nthe tests in `checker/checker_test.go`.\n","tools/deprecated-config-checker/deprecated-config.yaml":"# This file should contain a list fo deprecated config options.\n#\n# -- Syntax --\n# The value for a deprecated option should be a message that explains why the option is deprecated and what to use instead. E.g.\n# storage_config:\n#  cassandra: \"Cassandra is deprecated. Use any other non-deprecated storage instead.\n#\n# A given set of deprecated values can also be given though the _values field along with a message in the _msg field. E.g.\n# schema_config:\n#   configs:\n#     store:\n#       _values: [\"aws\", \"aws-dynamo\", \"gcp\", \"gcp-columnkey\", \"bigtable\", \"bigtable-hashed\", \"cassandra\", \"grpc\"]\n#       _msg: \"Use tsdb (preferred) or boltdb-shipper instead.\"\n#\n# Note that even though the configs in schema_config takes a list, here we specify the deprecated fields for each item in the list.\n\nbloom_build: \"Bloom filters are deprecated.\"\nbloom_gateway: \"Bloom filters are deprecated.\"\n\nindex_gateway:\n  ring:\n    replication_factor: \"Use global or per-tenant index_gateway_shard_size configuration from limits_config.\"\n\ningester:\n  delegate_stream_limits_enabled: \"Use global or per-tenant delegate_stream_limits_enabled configuration from limits_config.\"\n\nkafka_config:\n  address: \"Use reader_config.address or writer_config.address instead.\"\n  client_id: \"Use reader_config.client_id or writer_config.client_id instead.\"\n\n## NOTE: This will also be used to validate per-tenant overrides.\nlimits_config:\n  bloom_gateway_enable_filtering: \"Bloom filters are deprecated.\"\n  bloom_build_max_builders: \"Bloom filters are deprecated.\"\n  bloom_build_task_max_retries: \"Bloom filters are deprecated.\"\n  bloom_build_builder_response_timeout: \"Bloom filters are deprecated.\"\n  bloom_creation_enabled: \"Bloom filters are deprecated.\"\n  bloom_planning_strategy: \"Bloom filters are deprecated.\"\n  bloom_split_series_keyspace_by: \"Bloom filters are deprecated.\"\n  bloom_task_target_series_chunk_size: \"Bloom filters are deprecated.\"\n  bloom_block_encoding: \"Bloom filters are deprecated.\"\n  bloom_prefetch_blocks: \"Bloom filters are deprecated.\"\n  bloom_max_block_size: \"Bloom filters are deprecated.\"\n  bloom_max_bloom_size: \"Bloom filters are deprecated.\"\n\nserver:\n  grpc_server_stats_tracking_enabled: \"Deprecated, currently doesn't do anything, will be removed in a future version.\"\n\nstorage_config:\n  bloom_shipper: \"Bloom filters are deprecated.\"\n","tools/gcplog/README.md":"# Cloud provisioning for GCP logs\n\nThis document covers how to configure your GCP via Terraform to make cloud logs available for `promtail` to consume.\n\nTo choose what logs need to exported from Google Cloud, we use log filters. Log filters are normal GCP logging queries except the goal is export logs from specific set Google cloud resources\n\ne.g: Export Google APP Engine logs\n```bash\nresource.type=\"gae_app\" AND\nseverity>=ERROR\n```\n\ne.g: Export Google HTTP Loadbalancer logs\n```bash\nresource.type=\"http_load_balancer\" AND\nhttpRequest.status>=500\n```\nYou can read more about these log filters in [GCP logging](https://cloud.google.com/logging/docs/view/query-library)\n\n## Prerequisite\n- Terraform >= 0.14.5\n- GCP Service account credentials with following roles/permissions\n  - \"roles/pubsub.editor\"\n  - \"roles/logging.configWriter\"\n\n## Usage\n\n```bash\nterraform init\n```\n\n```bash\nterraform plan\n```\n\n```bash\nterraform apply\n```\n\nTerraform will prompt for following variables.\n\n1. credentials_file - ServiceAccount credentials file with permissions mentioned in the prerequisite.\n2. zone - GCP zone (e.g: `us-central1-b`)\n3. region - GCP region (e.g: `us-central1`)\n4. project - GCP Project ID\n5. name - name we use to create pubsub topics, log router and pubsub subscription.\n6. inclusion_filter - To include cloud resources to export.\n7. exclusions - Ignore these logs while exporting.\n\nyou can pass these variables via CLI.\n\ne.g:\n```bash\nterraform apply \\\n-var=\"credentials_file=./permissions.json\" \\\n-var=\"zone=us-central1-b\" \\\n-var=\"region=us-central1\" \\\n-var=\"project=grafanalabs-dev\" \\\n-var=\"logname=cloud-logs\"\n```\n\nThese variables can be passed in multiple ways. For complete reference refer terraform [doc](https://www.terraform.io/docs/configuration/variables.html#assigning-values-to-root-module-variables)\n","tools/deprecated-config-checker/deleted-config.yaml":"# This file should contain a list of deleted config options.\n#\n# The syntax for this file is the same as the syntax for deprecated-config.yaml.\n\nlegacy-read-mode: \"Legacy read SSD mode is deprecated and will be eventually removed. Use the new read and backend targets.\"\n\ndistributor:\n  max_recv_msg_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n  max_decompressed_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n\ningester:\n  max_transfer_retries: \"Enable the ingester WAL and rely on new ingesters to replay the WAL.\"\n\nquerier:\n  engine:\n    timeout: \"Use global or per-tenant query_timeout configuration from limits_config.\"\n\nquery_range:\n  split_queries_by_interval: \"Configure global or per-tenant split_queries_by_interval limit\"\n  forward_headers_list: \"This setting is removed without an alternative\"\n\nfrontend_worker:\n  parallelism: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n  match_max_concurrent: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n\ncommon:\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    filesystem:\n      admin_api_directory: \"Removed in 3.5.0. This field is no longer supported or recognized by Loki.\"\n\nruler:\n  remote_write:\n    client: \"Use clients instead.\"\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\nschema_config:\n  configs:\n    store:\n      _values:\n        [\n          \"aws\",\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use tsdb or boltdb-shipper instead.\"\n    object_store:\n      _values:\n        [\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use a different supported object storage instead.\"\n    chunks: \"The chunks block is removed as it only configured chunk tables for removed legacy storage backends. TSDB stores chunks directly in object storage.\"\n    index:\n      tags: \"The tags setting is removed as it only applied to managed tables of removed legacy storage backends.\"\n    row_shards: \"The row_shards setting is removed. It configured a static query shard factor for removed legacy index types; TSDB resolves query sharding dynamically.\"\n\nstorage_config:\n  bigtable: \"Support for Bigtable is removed.\"\n  cassandra: \"Support for Cassandra is removed.\"\n  boltdb: \"Support for BoltDB is removed.\"\n  grpc_store: \"Support for gRPC store is removed.\"\n  index_queries_cache_config: \"Index read cache configuration is removed.\"\n  index_cache_validity: \"Index cache validity is removed.\"\n  disable_broad_index_queries: \"Broad index queries are removed along with the legacy index types.\"\n  boltdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    use_boltdb_shipper_as_backup: \"Since TSDB is now stable and the recommended index type, the setting has become irrelevant and therefore was removed. The previous default value false is applied.\"\n  tsdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    shadow_index_gateway_client: \"The experimental shadow index gateway client is removed.\"\n  aws:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    dynamodb: \"Support for DynamoDB is removed.\"\n  s3:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\ncompactor:\n  deletion_mode: \"Use global or per-tenant deletion_mode configuration from limits_config.\"\n  shared_store: \"Compactor will now operate on all the object stores configured in period config where the index type is either tsdb or boltdb-shipper. -compactor.delete-request-store to configure the store for delete requests is now a required field.\"\n  shared_store_key_prefix: \"Use -compactor.delete-request-store.key-prefix to configure the path prefix under which the delete requests are stored.\"\n\nchunk_store_config:\n  max_look_back_period: \"Use global or per-tenant max_query_lookback configuration from limits_config.\"\n  write_dedupe_cache_config: \"Write dedupe cache is removed along with deprecated index types.\"\n  cache_lookups_older_than: \"Index entry caching is removed along with deprecated index types.\"\n\nlimits_config:\n  unordered_writes: \"This setting is removed.\"\n  ruler_evaluation_delay_duration: \"This setting is removed.\"\n  enforce_metric_name: \"This setting is removed.\"\n  allow_deletes: \"This setting is removed.\"\n  ruler_enable_wal_replay: \"This setting is removed. The ruler now always wipes its remote-write WAL on startup, so there is nothing to replay.\"\n  per_tenant_override_config: \"This setting is removed in favor of runtime_config.file\"\n  per_tenant_override_period: \"This setting is removed in favor of runtime_config.period\"\n  enable_multi_variant_queries: \"This setting is removed. LogQL no longer supports variants() queries.\"\n  ruler_remote_write_url: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_timeout: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_headers: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_relabel_configs: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_capacity: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_samples_per_send: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_batch_send_deadline: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_retry_on_ratelimit: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_sigv4_config: \"This setting is removed. Use ruler_remote_write_config instead.\"\n","tools/kafka/README.md":"# Kafka tools\n\nThis folder contains tools for testing Loki's Kafka integration.\n\n**Requirements:**\n\n- docker and docker-compose\n- make\n\n## Running kafka locally\n\nTo start kafka use `make start-kafka` this should start `kafka` and a `zookeeper` docker compose stack.\nTo discover available brokers you can use the `make print-brokers`.\n\nFinally to stop the compose stack use `make stop-kafka`. This will result in all topics being lost with their messages.\n\n## Running secure kafka locally\n\nTo test authentication, you need to start the Kafka container which is configured with authentication.\n\nYou can also use `make start-kafka` in appropriate directory like `sasl-scram` you need.\n\nIn addition, you need to create certificates using `make create-certs` when using SSL/TLS.\n\nIf you don't need to authenticate, you should use the tools in `plain` directory.\n\n## Working with Topic\n\nIn Kafka before sending messages you need to create and select the topic you want to use for the exchange.\n\nTo create a new topic use: `make create-topic`, by default the topic name will be `promtail` if you wish to overrides it you can use the `TOPIC` variable as shown below:\n\n```bash\nTOPIC=new-topic make create-topic\n```\n\nTo list all available topics use the `make list-topics` target.\n\n```bash\n make list-topics\n__consumer_offsets\npromtail\n```\n\nTo describe a topic use the `make describe-topic` target.\n\n```bash\n TOPIC=new-topic make describe-topic\n\nTopic: new-topic        PartitionCount: 3       ReplicationFactor: 1    Configs: segment.bytes=1073741824\n        Topic: new-topic        Partition: 0    Leader: 1001    Replicas: 1001  Isr: 1001\n        Topic: new-topic        Partition: 1    Leader: 1001    Replicas: 1001  Isr: 1001\n        Topic: new-topic        Partition: 2    Leader: 1001    Replicas: 1001  Isr: 1001\n```\n\nAs you can see by default each topic is assigned by default  3 partitions and a replication factor of 1. You can change those default using respectively `PARTS` and `RF` variable, for example the example below will create a topic with 4 partitions:\n\n```bash\nPARTS=4 TOPIC=new-topic-part make create-topic\n```\n\nPartitions in kafka are used for scaling reads and writes. Each partitions is replicated on multiple machines.\n\n> WARNING: Order of messages is guaranteed on a single partition but not across a single topic.\n\n## Producing messages\n\nYou can start sending message using `make producer` target, it will start reading newlines and send them to the default topic (`promtail`):\n\n```bash\nTOPIC=new-topic make producer\n\nProducing messages to topic new-topic...\nWrite a message and press Enter\n>hello world !\n>\n```\n\n## Consuming with Grafana Alloy\n\nYou can use [Grafana Alloy](https://grafana.com/docs/alloy/latest/) to consume from Kafka and send logs to Loki.\n\nMake sure the brokers list (`make print-broker`) is correctly configured in your Alloy configuration file. Refer to the [Alloy documentation](https://grafana.com/docs/alloy/latest/reference/components/loki/loki.source.kafka/) for Kafka source configuration.\n","tools/stream-generator/README.md":"# stream-generator Documentation\n\nPath: `tools/stream-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/README.md)","tools/stream-generator/docker-compose.yaml":"# Stream-generator Skill\n\nPath: `tools/stream-generator/docker-compose.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/docker-compose.yaml)","tools/stream-generator/loki-local-config.debug.yaml":"# Stream-generator Skill\n\nPath: `tools/stream-generator/loki-local-config.debug.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/loki-local-config.debug.yaml)","tools/deprecated-config-checker/test-fixtures/config.yaml":"# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/config.yaml)","tools/deprecated-config-checker/test-fixtures/runtime-config.yaml":"# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/runtime-config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/runtime-config.yaml)","tools/dev/k3d/README.md":"# k3d Documentation\n\nPath: `tools/dev/k3d/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/README.md)","tools/dev/k3d/chartfile.yaml":"# K3d Skill\n\nPath: `tools/dev/k3d/chartfile.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/chartfile.yaml)","tools/dev/k3d/jsonnetfile.json":"# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.json)","tools/dev/k3d/jsonnetfile.lock.json":"# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.lock.json)","tools/dev/kafka/README.md":"# kafka Documentation\n\nPath: `tools/dev/kafka/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/README.md)","tools/dev/kafka/docker-compose.yaml":"# Kafka Skill\n\nPath: `tools/dev/kafka/docker-compose.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/docker-compose.yaml)","tools/dev/kafka/loki-local-config.debug.yaml":"# Kafka Skill\n\nPath: `tools/dev/kafka/loki-local-config.debug.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/loki-local-config.debug.yaml)","tools/dev/kafka/prometheus.yaml":"# Kafka Skill\n\nPath: `tools/dev/kafka/prometheus.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/prometheus.yaml)","tools/dev/loki-tsdb-storage-s3/README.md":"# loki-tsdb-storage-s3 Documentation\n\nPath: `tools/dev/loki-tsdb-storage-s3/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/README.md)","pkg/tool/rules/testdata/basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace.yaml)","pkg/tool/rules/testdata/basic_namespace_repeated.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace_repeated.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace_repeated.yaml)","pkg/tool/rules/testdata/loki_basic.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic.yaml)","pkg/tool/rules/testdata/loki_basic_failure.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_failure.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_failure.yaml)","pkg/tool/rules/testdata/loki_basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_namespace.yaml)","pkg/tool/rules/testdata/loki_multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_multiple_namespace.yaml)","pkg/tool/rules/testdata/multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/multiple_namespace.yaml)","tools/dev/loki-tsdb-storage-s3/config/datasource.yaml":"# Config Skill\n\nPath: `tools/dev/loki-tsdb-storage-s3/config/datasource.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/datasource.yaml)","tools/dev/loki-tsdb-storage-s3/config/loki.yaml":"# Config Skill\n\nPath: `tools/dev/loki-tsdb-storage-s3/config/loki.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/loki.yaml)","tools/dev/k3d/environments/helm-cluster/README.md":"# helm-cluster Documentation\n\nPath: `tools/dev/k3d/environments/helm-cluster/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/README.md)","tools/dev/k3d/environments/helm-cluster/spec.json":"# Helm-cluster Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/spec.json)","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml)","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml)","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml)","tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki.yaml)"},"files":{"tools/dev.values.yaml":"grafana:\n  enabled: true\n  service:\n    type: LoadBalancer\n    port: 3000\n  adminPassword: admin\n\nprometheus:\n  enabled: true\n  pushgateway:\n    enabled: false\n  server:\n    service:\n      type: LoadBalancer\n      servicePort: 9090\n\nfluent-bit:\n  enable: false\n\nloki:\n  image:\n    pullPolicy: Never\n  service:\n    type: LoadBalancer\n","tools/helm.yaml":"apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: helm\n  namespace: kube-system\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: helm\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: cluster-admin\nsubjects:\n  - kind: ServiceAccount\n    name: helm\n    namespace: kube-system\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  creationTimestamp: null\n  name: cluster-admin\n  annotations:\n    rbac.authorization.kubernetes.io/autoupdate: \"true\"\nrules:\n- apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n- nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'","tools/dataobj-locality/README.md":"# dataobj-locality\n\n`dataobj-locality` measures how well label values and log records are\nphysically clustered inside Loki's data objects. It reads directly from the\nlive index (postings sections) and, optionally, the logs objects referenced by\nthat index, for a given tenant and time range.\n\nBecause scanning hundreds of index objects is expensive, the tool supports\nexporting raw posting facts as Parquet and CSV so the data can be shared\nand re-queried offline without re-scanning.\n\n## Installation\n\n```bash\ngo build -o dataobj-locality ./tools/dataobj-locality/\n```\n\n## Usage\n\n```\ndataobj-locality [flags]\n```\n\n### Flags\n\n| Flag | Default | Description |\n|---|---|---|\n| `--config.file` | | Path to a Loki config YAML (reads storage credentials and prefixes from it, same as the running engine). Mutually exclusive with `--dir`. |\n| `--config.expand-env` | false | Expand `${VAR}` in the config file before parsing. |\n| `--dir` | | Local directory holding TOC and index objects. Useful for local testing. Mutually exclusive with `--config.file`. |\n| `--tenant` | | Tenant ID to inspect. Required for bucket sources. |\n| `--from` | now - 12h | Start of the time range (RFC3339). |\n| `--to` | now | End of the time range (RFC3339). |\n| `--locality` | both | What to measure: `postings`, `logs`, or `both`. |\n| `--sort-key` | service_name | Label used as the primary sort dimension for the logs locality rollup. |\n| `--logs-section-target-bytes` | 134217728 (128 MiB) | Uncompressed logs-section target size, used to compute the ideal section count. |\n| `--top` | 20 | Rows to show in each top-N table. |\n| `--concurrency` | 8 | Maximum number of index objects to open and scan in parallel. |\n| `--export` | | Path prefix for raw-fact export. Produces `<prefix>.parquet` and/or `<prefix>.csv`. |\n| `--export-format` | both | Output format for `--export`: `parquet`, `csv`, or `both`. |\n\n## Examples\n\n### Quick console report against a live bucket\n\n```bash\ndataobj-locality \\\n  --config.file /etc/loki/config.yaml \\\n  --tenant acme \\\n  --from 2024-01-15T00:00:00Z \\\n  --to   2024-01-15T06:00:00Z \\\n  --locality both \\\n  --sort-key service_name\n```\n\nThis prints a summary and top-20 tables to stdout, then exits.\n\n### Credentials\n\nThe tool reuses Loki's own storage configuration, so credentials are resolved\nthrough the same chain the engine uses:\n\n- **AWS S3**: set `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` in the\n  environment, or rely on instance-profile / workload-identity if running\n  inside AWS.\n- **GCS**: set `GOOGLE_APPLICATION_CREDENTIALS`, or rely on Application\n  Default Credentials (`gcloud auth application-default login` for local\n  development).\n- **Local testing**: use `--dir` pointing at a directory that mirrors the\n  object-store layout.\n\n### Export to Parquet + CSV, then query with DuckDB\n\n```bash\ndataobj-locality \\\n  --config.file /etc/loki/config.yaml \\\n  --tenant acme \\\n  --from 2024-01-15T00:00:00Z \\\n  --to   2024-01-15T06:00:00Z \\\n  --locality both \\\n  --export ./facts \\\n  --export-format both\n```\n\nThis produces `facts.parquet` and `facts.csv` alongside the console report.\n\n## Querying with DuckDB\n\nInstall DuckDB: <https://duckdb.org/docs/installation>\n\n```bash\nduckdb\n```\n\n### Schema\n\n| Column | Type | Description |\n|---|---|---|\n| `tenant` | VARCHAR | Tenant the posting belongs to. |\n| `index_object` | VARCHAR | Path of the index object that contains the postings section. |\n| `index_section` | BIGINT | Section index of the postings section within the index object. Together with `index_object` this uniquely identifies a physical postings section, matching the `sectionSpread` metric in the console report. |\n| `compacted` | BOOLEAN | Whether the index object is a compacted (IndexMerge) output rather than an uncompacted per-partition index. Derived from the index object path (`indexes/tenants/...` = compacted). |\n| `column_name` | VARCHAR | Label name (e.g. `service_name`). |\n| `label_value` | VARCHAR | Label value (e.g. `frontend`). |\n| `logs_object` | VARCHAR | Path of the logs object referenced by the posting. |\n| `logs_section` | BIGINT | Section index within the logs object. |\n| `stream_refs` | BIGINT | Number of distinct log streams in the section for this label value. |\n| `uncompressed_size` | BIGINT | Uncompressed bytes of log records for this label value in this section. |\n\n### Useful queries\n\n**How many distinct logs sections does each service touch?**\n\n```sql\nSELECT\n    label_value                          AS service,\n    COUNT(DISTINCT (logs_object, logs_section)) AS logs_sections,\n    COUNT(DISTINCT logs_object)          AS logs_objects,\n    SUM(uncompressed_size) / 1024 / 1024 AS total_mb\nFROM 'facts.parquet'\nWHERE column_name = 'service_name'\nGROUP BY label_value\nORDER BY logs_sections DESC\nLIMIT 20;\n```\n\n**Spread factor: actual sections vs ideal (128 MiB target)**\n\n```sql\nSELECT\n    label_value AS service,\n    COUNT(DISTINCT (logs_object, logs_section)) AS actual_sections,\n    CEIL(SUM(uncompressed_size) / 134217728.0) AS ideal_sections,\n    ROUND(\n        COUNT(DISTINCT (logs_object, logs_section)) /\n        CEIL(SUM(uncompressed_size) / 134217728.0),\n        2\n    ) AS spread_factor\nFROM 'facts.parquet'\nWHERE column_name = 'service_name'\nGROUP BY label_value\nHAVING ideal_sections >= 1\nORDER BY spread_factor DESC\nLIMIT 20;\n```\n\nA `spread_factor` of 1.0 means logs are perfectly clustered. Higher values\nindicate fragmentation — the service's logs are spread across more sections\nthan the data volume requires.\n\n**Postings-section spread per label name (how many index sections reference each label?)**\n\n```sql\nSELECT\n    column_name,\n    COUNT(DISTINCT index_object)                  AS index_objects,\n    COUNT(DISTINCT (index_object, index_section)) AS postings_sections,\n    SUM(stream_refs)                              AS total_stream_refs\nFROM 'facts.parquet'\nGROUP BY column_name\nORDER BY postings_sections DESC\nLIMIT 20;\n```\n\n**Re-slice by a different sort key without re-scanning**\n\nBecause the export contains every label column, you can analyse locality for\nany label — not just the one used as `--sort-key` at scan time:\n\n```sql\nSELECT\n    label_value AS namespace,\n    COUNT(DISTINCT (logs_object, logs_section)) AS logs_sections,\n    CEIL(SUM(uncompressed_size) / 134217728.0) AS ideal_sections\nFROM 'facts.parquet'\nWHERE column_name = 'namespace'\nGROUP BY label_value\nORDER BY logs_sections DESC\nLIMIT 20;\n```\n",".cursor/skills/go/SKILL.md":"---\nname: go\ndescription: >\n  Best practices for working with Go codebases. Use when writing, debugging,\n  or exploring Go code, including reading dependency sources and documentation.\nallowed-tools: \"Read,Bash(go:*)\"\nversion: \"1.0.0\"\nauthor: \"User\"\nlicense: \"MIT\"\n---\n\n# Go Programming Language\n\nGuidelines for working effectively with Go projects.\n\n## Reading Dependency Source Files\n\nTo see source files from a dependency, or to answer questions about a dependency:\n\n```bash\ngo mod download -json MODULE\n```\n\nUse the returned Dir path to read the source files.\n\n## Reading Documentation\n\nUse go doc to read documentation for packages, types, functions, etc:\n\n```bash\ngo doc foo.Bar       # Documentation for a specific symbol\ngo doc -all foo      # All documentation for a package\n```\n\n## Running Programs\n\nUse go run instead of go build to avoid leaving behind build artifacts:\n\n```bash\ngo run .             # Run the current package\ngo run ./cmd/foo     # Run a specific command\n```\n","tools/release-note.md":"This is release `${DRONE_TAG}` of Loki.\n\n### Notable changes:\n:warning: **ADD RELEASE NOTES HERE** :warning:\n\n\n### Installation:\nThe components of Loki are currently distributed in plain binary form and as Docker container images. Choose what fits your use-case best.\n\n#### Docker container:\n* https://hub.docker.com/r/grafana/loki\n* https://hub.docker.com/r/grafana/promtail\n```bash\n$ docker pull \"grafana/loki:${DRONE_TAG_NO_V}\"\n$ docker pull \"grafana/promtail:${DRONE_TAG_NO_V}\"\n```\n\n#### Binary\nWe provide pre-compiled binary executables for the most common operating systems and architectures.\nChoose from the assets below for the application and architecture matching your system.\nExample for `Loki` on the `linux` operating system and `amd64` architecture:\n\n```bash\n$ curl -O -L \"https://github.com/grafana/loki/releases/download/${DRONE_TAG}/loki-linux-amd64.zip\"\n# extract the binary\n$ unzip \"loki-linux-amd64.zip\"\n# make sure it is executable\n$ chmod a+x \"loki-linux-amd64\"\n```\n","AGENTS.md":"# AGENTS.md\n\nInstructions file for coding agents.\n\n## Environment Setup\n\n- Use the minimum Go version specified in [go.mod](go.mod)\n- Warn the user about an old Go version\n- The project uses GNU make for building binaries and images. See [Makefile](Makefile)\n\n## Commands\n\n### Tests\n\nFor fast feeback run tests using `go test` (or `gotest` if available).\n\n```bash\ngo test -v ./...                               # run all tests with Go directly\ngo test -v ./pkg/...                           # run Loki package tests\ngo test -v ./pkg/<pkg>/...                     # run tests in specific package\ngo test -v -test.run TestName ./pkg/<pkg>/...  # run a specific test\n```\n\nFor full verification use dedicated `make` targets (only when requested).\n\n```\nmake test                                      # run full test suite\nmake test-integration                          # run integration test suite\nmake test-fuzz                                 # run fuzz tests\n```\n\n## Code Style\n\n- Follow standard Go formatting (gofmt/goimports)\n- Follow import order:\n  1. standard lib\n  2. external packages\n  3. Loki packages (`github.com/grafana/loki/v3`)\n- Error handling: Always check errors with `if err != nil { return ... }`\n- Use structured logging with leveled logging (`github.com/go-kit/log`)\n- Document all exported functions, types, and variables\n\n### Testing\n\n- Always prefer `github.com/stretchr/testify/require` over `github.com/stretchr/testify/assert`\n- Use table-driven tests when appropriate\n\n## Commits and Pull Requests\n\n- Always run Loki package tests `gotest -v ./pkg/...` before commiting\n- Focus on \"why\", rather than \"what\" in the commit message and PR description\n- Follow conventional commits format: `<type>(<scope>): Your change` (note the uppercase after colon)\n- Never approve, merge or enable auto-merge on Renovate PRs that touch `operator/**` — they risk breaking the operator build and are left for the operator maintainers to apply\n\n## Documentation Standards\n\n- Follow the Grafana [Writers' Toolkit](https://grafana.com/docs/writers-toolkit/) Style Guide\n- Use CommonMark flavor of markdown for documentation\n- Create Github issues for large functionality changes\n- Document upgrading steps in `docs/sources/setup/upgrade/_index.md`\n- Preview docs locally with `make docs` from the `/docs` directory\n- Include examples and clear descriptions for public APIs\n\n## Using Tools\n\n- When using the `mcp__acp__Write` tool, write to a path within the current worktree to avoid sandboxing/permissions issues. This includes when writing plan files.\n","tools/doc-generator/README.md":"# Documentation generation tool\n\nThe doc-generator tool is used to automatically generate the configuration flags documentation from the metadata information\nprovided in the code. \n\n## Run \n\nThe tool receives as input a template file and generates the list of configuration value blocks: \n\n```shell\ngo run ./tools/doc-generator docs/sources/configuration/index.template > docs/sources/configuration/_index.md\n```\n\n## `doc` tag\n\nThe description and default value of configuration values can be set via CLI flag registration by using the `flag` package. \nHowever, for a more flexible documentation generation it is possible to combine this with the `doc` tag by applying the following custom values:\n\n* `doc:\"deprecated\"`: sets the element as deprecated in the documentation.\n* `doc:\"hidden\"`: does not show the element in the documentation.\n* `doc:\"description=foo\"`: overrides the element's description (set via flag registration, if any) with `foo`.\n* `doc:\"default=<hostname>\"`: sets the element's documentation default value as `<hostname>`. \nNote: this only sets the default value shown in the documentation, it doesn't override the default configuration value. ","tools/deprecated-config-checker/README.md":"# Deprecated Config Checker\n\nThis script can check your configuration files for deprecated and deleted options.\n\n## Usage\n\nRun the script with `-help` for a list of options.\n\n### Example\n\n```bash\ngo run tools/deprecated-config-checker/main.go \\\n  -config.file tools/deprecated-config-checker/test-fixtures/config.yaml \\\n  -runtime-config.file tools/deprecated-config-checker/test-fixtures/runtime-config.yaml\n```\n\n## Adding a new config deprecation or deletion?\n\nAdd deprecations to the `deprecated-config.yaml` file, and deletions to the `deleted-config.yaml`. \nThen, update the `test-fixtures/config.yaml` and `test-fixtures/runtime-config.yaml` files as well as\nthe tests in `checker/checker_test.go`.\n","tools/deprecated-config-checker/deprecated-config.yaml":"# This file should contain a list fo deprecated config options.\n#\n# -- Syntax --\n# The value for a deprecated option should be a message that explains why the option is deprecated and what to use instead. E.g.\n# storage_config:\n#  cassandra: \"Cassandra is deprecated. Use any other non-deprecated storage instead.\n#\n# A given set of deprecated values can also be given though the _values field along with a message in the _msg field. E.g.\n# schema_config:\n#   configs:\n#     store:\n#       _values: [\"aws\", \"aws-dynamo\", \"gcp\", \"gcp-columnkey\", \"bigtable\", \"bigtable-hashed\", \"cassandra\", \"grpc\"]\n#       _msg: \"Use tsdb (preferred) or boltdb-shipper instead.\"\n#\n# Note that even though the configs in schema_config takes a list, here we specify the deprecated fields for each item in the list.\n\nbloom_build: \"Bloom filters are deprecated.\"\nbloom_gateway: \"Bloom filters are deprecated.\"\n\nindex_gateway:\n  ring:\n    replication_factor: \"Use global or per-tenant index_gateway_shard_size configuration from limits_config.\"\n\ningester:\n  delegate_stream_limits_enabled: \"Use global or per-tenant delegate_stream_limits_enabled configuration from limits_config.\"\n\nkafka_config:\n  address: \"Use reader_config.address or writer_config.address instead.\"\n  client_id: \"Use reader_config.client_id or writer_config.client_id instead.\"\n\n## NOTE: This will also be used to validate per-tenant overrides.\nlimits_config:\n  bloom_gateway_enable_filtering: \"Bloom filters are deprecated.\"\n  bloom_build_max_builders: \"Bloom filters are deprecated.\"\n  bloom_build_task_max_retries: \"Bloom filters are deprecated.\"\n  bloom_build_builder_response_timeout: \"Bloom filters are deprecated.\"\n  bloom_creation_enabled: \"Bloom filters are deprecated.\"\n  bloom_planning_strategy: \"Bloom filters are deprecated.\"\n  bloom_split_series_keyspace_by: \"Bloom filters are deprecated.\"\n  bloom_task_target_series_chunk_size: \"Bloom filters are deprecated.\"\n  bloom_block_encoding: \"Bloom filters are deprecated.\"\n  bloom_prefetch_blocks: \"Bloom filters are deprecated.\"\n  bloom_max_block_size: \"Bloom filters are deprecated.\"\n  bloom_max_bloom_size: \"Bloom filters are deprecated.\"\n\nserver:\n  grpc_server_stats_tracking_enabled: \"Deprecated, currently doesn't do anything, will be removed in a future version.\"\n\nstorage_config:\n  bloom_shipper: \"Bloom filters are deprecated.\"\n","tools/gcplog/README.md":"# Cloud provisioning for GCP logs\n\nThis document covers how to configure your GCP via Terraform to make cloud logs available for `promtail` to consume.\n\nTo choose what logs need to exported from Google Cloud, we use log filters. Log filters are normal GCP logging queries except the goal is export logs from specific set Google cloud resources\n\ne.g: Export Google APP Engine logs\n```bash\nresource.type=\"gae_app\" AND\nseverity>=ERROR\n```\n\ne.g: Export Google HTTP Loadbalancer logs\n```bash\nresource.type=\"http_load_balancer\" AND\nhttpRequest.status>=500\n```\nYou can read more about these log filters in [GCP logging](https://cloud.google.com/logging/docs/view/query-library)\n\n## Prerequisite\n- Terraform >= 0.14.5\n- GCP Service account credentials with following roles/permissions\n  - \"roles/pubsub.editor\"\n  - \"roles/logging.configWriter\"\n\n## Usage\n\n```bash\nterraform init\n```\n\n```bash\nterraform plan\n```\n\n```bash\nterraform apply\n```\n\nTerraform will prompt for following variables.\n\n1. credentials_file - ServiceAccount credentials file with permissions mentioned in the prerequisite.\n2. zone - GCP zone (e.g: `us-central1-b`)\n3. region - GCP region (e.g: `us-central1`)\n4. project - GCP Project ID\n5. name - name we use to create pubsub topics, log router and pubsub subscription.\n6. inclusion_filter - To include cloud resources to export.\n7. exclusions - Ignore these logs while exporting.\n\nyou can pass these variables via CLI.\n\ne.g:\n```bash\nterraform apply \\\n-var=\"credentials_file=./permissions.json\" \\\n-var=\"zone=us-central1-b\" \\\n-var=\"region=us-central1\" \\\n-var=\"project=grafanalabs-dev\" \\\n-var=\"logname=cloud-logs\"\n```\n\nThese variables can be passed in multiple ways. For complete reference refer terraform [doc](https://www.terraform.io/docs/configuration/variables.html#assigning-values-to-root-module-variables)\n","tools/deprecated-config-checker/deleted-config.yaml":"# This file should contain a list of deleted config options.\n#\n# The syntax for this file is the same as the syntax for deprecated-config.yaml.\n\nlegacy-read-mode: \"Legacy read SSD mode is deprecated and will be eventually removed. Use the new read and backend targets.\"\n\ndistributor:\n  max_recv_msg_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n  max_decompressed_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n\ningester:\n  max_transfer_retries: \"Enable the ingester WAL and rely on new ingesters to replay the WAL.\"\n\nquerier:\n  engine:\n    timeout: \"Use global or per-tenant query_timeout configuration from limits_config.\"\n\nquery_range:\n  split_queries_by_interval: \"Configure global or per-tenant split_queries_by_interval limit\"\n  forward_headers_list: \"This setting is removed without an alternative\"\n\nfrontend_worker:\n  parallelism: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n  match_max_concurrent: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n\ncommon:\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    filesystem:\n      admin_api_directory: \"Removed in 3.5.0. This field is no longer supported or recognized by Loki.\"\n\nruler:\n  remote_write:\n    client: \"Use clients instead.\"\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\nschema_config:\n  configs:\n    store:\n      _values:\n        [\n          \"aws\",\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use tsdb or boltdb-shipper instead.\"\n    object_store:\n      _values:\n        [\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use a different supported object storage instead.\"\n    chunks: \"The chunks block is removed as it only configured chunk tables for removed legacy storage backends. TSDB stores chunks directly in object storage.\"\n    index:\n      tags: \"The tags setting is removed as it only applied to managed tables of removed legacy storage backends.\"\n    row_shards: \"The row_shards setting is removed. It configured a static query shard factor for removed legacy index types; TSDB resolves query sharding dynamically.\"\n\nstorage_config:\n  bigtable: \"Support for Bigtable is removed.\"\n  cassandra: \"Support for Cassandra is removed.\"\n  boltdb: \"Support for BoltDB is removed.\"\n  grpc_store: \"Support for gRPC store is removed.\"\n  index_queries_cache_config: \"Index read cache configuration is removed.\"\n  index_cache_validity: \"Index cache validity is removed.\"\n  disable_broad_index_queries: \"Broad index queries are removed along with the legacy index types.\"\n  boltdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    use_boltdb_shipper_as_backup: \"Since TSDB is now stable and the recommended index type, the setting has become irrelevant and therefore was removed. The previous default value false is applied.\"\n  tsdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    shadow_index_gateway_client: \"The experimental shadow index gateway client is removed.\"\n  aws:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    dynamodb: \"Support for DynamoDB is removed.\"\n  s3:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\ncompactor:\n  deletion_mode: \"Use global or per-tenant deletion_mode configuration from limits_config.\"\n  shared_store: \"Compactor will now operate on all the object stores configured in period config where the index type is either tsdb or boltdb-shipper. -compactor.delete-request-store to configure the store for delete requests is now a required field.\"\n  shared_store_key_prefix: \"Use -compactor.delete-request-store.key-prefix to configure the path prefix under which the delete requests are stored.\"\n\nchunk_store_config:\n  max_look_back_period: \"Use global or per-tenant max_query_lookback configuration from limits_config.\"\n  write_dedupe_cache_config: \"Write dedupe cache is removed along with deprecated index types.\"\n  cache_lookups_older_than: \"Index entry caching is removed along with deprecated index types.\"\n\nlimits_config:\n  unordered_writes: \"This setting is removed.\"\n  ruler_evaluation_delay_duration: \"This setting is removed.\"\n  enforce_metric_name: \"This setting is removed.\"\n  allow_deletes: \"This setting is removed.\"\n  ruler_enable_wal_replay: \"This setting is removed. The ruler now always wipes its remote-write WAL on startup, so there is nothing to replay.\"\n  per_tenant_override_config: \"This setting is removed in favor of runtime_config.file\"\n  per_tenant_override_period: \"This setting is removed in favor of runtime_config.period\"\n  enable_multi_variant_queries: \"This setting is removed. LogQL no longer supports variants() queries.\"\n  ruler_remote_write_url: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_timeout: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_headers: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_relabel_configs: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_capacity: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_samples_per_send: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_batch_send_deadline: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_retry_on_ratelimit: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_sigv4_config: \"This setting is removed. Use ruler_remote_write_config instead.\"\n","tools/kafka/README.md":"# Kafka tools\n\nThis folder contains tools for testing Loki's Kafka integration.\n\n**Requirements:**\n\n- docker and docker-compose\n- make\n\n## Running kafka locally\n\nTo start kafka use `make start-kafka` this should start `kafka` and a `zookeeper` docker compose stack.\nTo discover available brokers you can use the `make print-brokers`.\n\nFinally to stop the compose stack use `make stop-kafka`. This will result in all topics being lost with their messages.\n\n## Running secure kafka locally\n\nTo test authentication, you need to start the Kafka container which is configured with authentication.\n\nYou can also use `make start-kafka` in appropriate directory like `sasl-scram` you need.\n\nIn addition, you need to create certificates using `make create-certs` when using SSL/TLS.\n\nIf you don't need to authenticate, you should use the tools in `plain` directory.\n\n## Working with Topic\n\nIn Kafka before sending messages you need to create and select the topic you want to use for the exchange.\n\nTo create a new topic use: `make create-topic`, by default the topic name will be `promtail` if you wish to overrides it you can use the `TOPIC` variable as shown below:\n\n```bash\nTOPIC=new-topic make create-topic\n```\n\nTo list all available topics use the `make list-topics` target.\n\n```bash\n make list-topics\n__consumer_offsets\npromtail\n```\n\nTo describe a topic use the `make describe-topic` target.\n\n```bash\n TOPIC=new-topic make describe-topic\n\nTopic: new-topic        PartitionCount: 3       ReplicationFactor: 1    Configs: segment.bytes=1073741824\n        Topic: new-topic        Partition: 0    Leader: 1001    Replicas: 1001  Isr: 1001\n        Topic: new-topic        Partition: 1    Leader: 1001    Replicas: 1001  Isr: 1001\n        Topic: new-topic        Partition: 2    Leader: 1001    Replicas: 1001  Isr: 1001\n```\n\nAs you can see by default each topic is assigned by default  3 partitions and a replication factor of 1. You can change those default using respectively `PARTS` and `RF` variable, for example the example below will create a topic with 4 partitions:\n\n```bash\nPARTS=4 TOPIC=new-topic-part make create-topic\n```\n\nPartitions in kafka are used for scaling reads and writes. Each partitions is replicated on multiple machines.\n\n> WARNING: Order of messages is guaranteed on a single partition but not across a single topic.\n\n## Producing messages\n\nYou can start sending message using `make producer` target, it will start reading newlines and send them to the default topic (`promtail`):\n\n```bash\nTOPIC=new-topic make producer\n\nProducing messages to topic new-topic...\nWrite a message and press Enter\n>hello world !\n>\n```\n\n## Consuming with Grafana Alloy\n\nYou can use [Grafana Alloy](https://grafana.com/docs/alloy/latest/) to consume from Kafka and send logs to Loki.\n\nMake sure the brokers list (`make print-broker`) is correctly configured in your Alloy configuration file. Refer to the [Alloy documentation](https://grafana.com/docs/alloy/latest/reference/components/loki/loki.source.kafka/) for Kafka source configuration.\n","tools/stream-generator/README.md":"# stream-generator Documentation\n\nPath: `tools/stream-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/README.md)","tools/stream-generator/docker-compose.yaml":"# Stream-generator Skill\n\nPath: `tools/stream-generator/docker-compose.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/docker-compose.yaml)","tools/stream-generator/loki-local-config.debug.yaml":"# Stream-generator Skill\n\nPath: `tools/stream-generator/loki-local-config.debug.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/loki-local-config.debug.yaml)","tools/deprecated-config-checker/test-fixtures/config.yaml":"# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/config.yaml)","tools/deprecated-config-checker/test-fixtures/runtime-config.yaml":"# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/runtime-config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/runtime-config.yaml)","tools/dev/k3d/README.md":"# k3d Documentation\n\nPath: `tools/dev/k3d/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/README.md)","tools/dev/k3d/chartfile.yaml":"# K3d Skill\n\nPath: `tools/dev/k3d/chartfile.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/chartfile.yaml)","tools/dev/k3d/jsonnetfile.json":"# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.json)","tools/dev/k3d/jsonnetfile.lock.json":"# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.lock.json)","tools/dev/kafka/README.md":"# kafka Documentation\n\nPath: `tools/dev/kafka/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/README.md)","tools/dev/kafka/docker-compose.yaml":"# Kafka Skill\n\nPath: `tools/dev/kafka/docker-compose.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/docker-compose.yaml)","tools/dev/kafka/loki-local-config.debug.yaml":"# Kafka Skill\n\nPath: `tools/dev/kafka/loki-local-config.debug.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/loki-local-config.debug.yaml)","tools/dev/kafka/prometheus.yaml":"# Kafka Skill\n\nPath: `tools/dev/kafka/prometheus.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/prometheus.yaml)","tools/dev/loki-tsdb-storage-s3/README.md":"# loki-tsdb-storage-s3 Documentation\n\nPath: `tools/dev/loki-tsdb-storage-s3/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/README.md)","pkg/tool/rules/testdata/basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace.yaml)","pkg/tool/rules/testdata/basic_namespace_repeated.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace_repeated.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace_repeated.yaml)","pkg/tool/rules/testdata/loki_basic.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic.yaml)","pkg/tool/rules/testdata/loki_basic_failure.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_failure.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_failure.yaml)","pkg/tool/rules/testdata/loki_basic_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_namespace.yaml)","pkg/tool/rules/testdata/loki_multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_multiple_namespace.yaml)","pkg/tool/rules/testdata/multiple_namespace.yaml":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/multiple_namespace.yaml)","tools/dev/loki-tsdb-storage-s3/config/datasource.yaml":"# Config Skill\n\nPath: `tools/dev/loki-tsdb-storage-s3/config/datasource.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/datasource.yaml)","tools/dev/loki-tsdb-storage-s3/config/loki.yaml":"# Config Skill\n\nPath: `tools/dev/loki-tsdb-storage-s3/config/loki.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/loki.yaml)","tools/dev/k3d/environments/helm-cluster/README.md":"# helm-cluster Documentation\n\nPath: `tools/dev/k3d/environments/helm-cluster/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/README.md)","tools/dev/k3d/environments/helm-cluster/spec.json":"# Helm-cluster Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/spec.json)","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml)","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml)","tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml)","tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml)","tools/dev/k3d/environments/helm-cluster/values/loki.yaml":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki.yaml)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AGENTS.md\n\nInstructions file for coding agents.\n\n## Environment Setup\n\n- Use the minimum Go version specified in [go.mod](go.mod)\n- Warn the user about an old Go version\n- The project uses GNU make for building binaries and images. See [Makefile](Makefile)\n\n## Commands\n\n### Tests\n\nFor fast feeback run tests using `go test` (or `gotest` if available).\n\n```bash\ngo test -v ./...                               # run all tests with Go directly\ngo test -v ./pkg/...                           # run Loki package tests\ngo test -v ./pkg/<pkg>/...                     # run tests in specific package\ngo test -v -test.run TestName ./pkg/<pkg>/...  # run a specific test\n```\n\nFor full verification use dedicated `make` targets (only when requested).\n\n```\nmake test                                      # run full test suite\nmake test-integration                          # run integration test suite\nmake test-fuzz                                 # run fuzz tests\n```\n\n## Code Style\n\n- Follow standard Go formatting (gofmt/goimports)\n- Follow import order:\n  1. standard lib\n  2. external packages\n  3. Loki packages (`github.com/grafana/loki/v3`)\n- Error handling: Always check errors with `if err != nil { return ... }`\n- Use structured logging with leveled logging (`github.com/go-kit/log`)\n- Document all exported functions, types, and variables\n\n### Testing\n\n- Always prefer `github.com/stretchr/testify/require` over `github.com/stretchr/testify/assert`\n- Use table-driven tests when appropriate\n\n## Commits and Pull Requests\n\n- Always run Loki package tests `gotest -v ./pkg/...` before commiting\n- Focus on \"why\", rather than \"what\" in the commit message and PR description\n- Follow conventional commits format: `<type>(<scope>): Your change` (note the uppercase after colon)\n- Never approve, merge or enable auto-merge on Renovate PRs that touch `operator/**` — they risk breaking the operator build and are left for the operator maintainers to apply\n\n## Documentation Standards\n\n- Follow the Grafana [Writers' Toolkit](https://grafana.com/docs/writers-toolkit/) Style Guide\n- Use CommonMark flavor of markdown for documentation\n- Create Github issues for large functionality changes\n- Document upgrading steps in `docs/sources/setup/upgrade/_index.md`\n- Preview docs locally with `make docs` from the `/docs` directory\n- Include examples and clear descriptions for public APIs\n\n## Using Tools\n\n- When using the `mcp__acp__Write` tool, write to a path within the current worktree to avoid sandboxing/permissions issues. This includes when writing plan files.\n","isInternal":false,"tokens":575,"sizeBytes":2563},{"name":"SKILL.md","path":".cursor/skills/go/SKILL.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/.cursor/skills/go/SKILL.md","title":"go","category":"anthropic-skill","format":"markdown","content":"---\nname: go\ndescription: >\n  Best practices for working with Go codebases. Use when writing, debugging,\n  or exploring Go code, including reading dependency sources and documentation.\nallowed-tools: \"Read,Bash(go:*)\"\nversion: \"1.0.0\"\nauthor: \"User\"\nlicense: \"MIT\"\n---\n\n# Go Programming Language\n\nGuidelines for working effectively with Go projects.\n\n## Reading Dependency Source Files\n\nTo see source files from a dependency, or to answer questions about a dependency:\n\n```bash\ngo mod download -json MODULE\n```\n\nUse the returned Dir path to read the source files.\n\n## Reading Documentation\n\nUse go doc to read documentation for packages, types, functions, etc:\n\n```bash\ngo doc foo.Bar       # Documentation for a specific symbol\ngo doc -all foo      # All documentation for a package\n```\n\n## Running Programs\n\nUse go run instead of go build to avoid leaving behind build artifacts:\n\n```bash\ngo run .             # Run the current package\ngo run ./cmd/foo     # Run a specific command\n```\n","frontmatter":{"name":"go","description":"Best practices for working with Go codebases. Use when writing, debugging, or exploring Go code, including reading dependency sources and documentation.\n","allowed-tools":"Read,Bash(go:*)","version":"1.0.0","author":"User","license":"MIT","allowedTools":["Read,Bash(go:*)"]},"allowedTools":["Read,Bash(go:*)"],"isInternal":false,"tokens":221,"sizeBytes":988},{"name":"basic_namespace_repeated.yaml","path":"pkg/tool/rules/testdata/basic_namespace_repeated.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace_repeated.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace_repeated.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace_repeated.yaml)","tokens":300,"sizeBytes":216},{"name":"basic_namespace.yaml","path":"pkg/tool/rules/testdata/basic_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace.yaml)","tokens":300,"sizeBytes":198},{"name":"loki_basic_failure.yaml","path":"pkg/tool/rules/testdata/loki_basic_failure.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_failure.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_failure.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_failure.yaml)","tokens":300,"sizeBytes":204},{"name":"loki_basic_namespace.yaml","path":"pkg/tool/rules/testdata/loki_basic_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_namespace.yaml)","tokens":300,"sizeBytes":208},{"name":"loki_basic.yaml","path":"pkg/tool/rules/testdata/loki_basic.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic.yaml)","tokens":300,"sizeBytes":188},{"name":"loki_multiple_namespace.yaml","path":"pkg/tool/rules/testdata/loki_multiple_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_multiple_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_multiple_namespace.yaml)","tokens":300,"sizeBytes":214},{"name":"multiple_namespace.yaml","path":"pkg/tool/rules/testdata/multiple_namespace.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/multiple_namespace.yaml","title":"Testdata Skill","category":"anthropic-skill","format":"yaml","content":"# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/multiple_namespace.yaml)","tokens":300,"sizeBytes":204},{"name":"deleted-config.yaml","path":"tools/deprecated-config-checker/deleted-config.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/deleted-config.yaml","title":"Deprecated-config-checker Skill","category":"anthropic-skill","format":"yaml","content":"# This file should contain a list of deleted config options.\n#\n# The syntax for this file is the same as the syntax for deprecated-config.yaml.\n\nlegacy-read-mode: \"Legacy read SSD mode is deprecated and will be eventually removed. Use the new read and backend targets.\"\n\ndistributor:\n  max_recv_msg_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n  max_decompressed_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n\ningester:\n  max_transfer_retries: \"Enable the ingester WAL and rely on new ingesters to replay the WAL.\"\n\nquerier:\n  engine:\n    timeout: \"Use global or per-tenant query_timeout configuration from limits_config.\"\n\nquery_range:\n  split_queries_by_interval: \"Configure global or per-tenant split_queries_by_interval limit\"\n  forward_headers_list: \"This setting is removed without an alternative\"\n\nfrontend_worker:\n  parallelism: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n  match_max_concurrent: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n\ncommon:\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    filesystem:\n      admin_api_directory: \"Removed in 3.5.0. This field is no longer supported or recognized by Loki.\"\n\nruler:\n  remote_write:\n    client: \"Use clients instead.\"\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\nschema_config:\n  configs:\n    store:\n      _values:\n        [\n          \"aws\",\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use tsdb or boltdb-shipper instead.\"\n    object_store:\n      _values:\n        [\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use a different supported object storage instead.\"\n    chunks: \"The chunks block is removed as it only configured chunk tables for removed legacy storage backends. TSDB stores chunks directly in object storage.\"\n    index:\n      tags: \"The tags setting is removed as it only applied to managed tables of removed legacy storage backends.\"\n    row_shards: \"The row_shards setting is removed. It configured a static query shard factor for removed legacy index types; TSDB resolves query sharding dynamically.\"\n\nstorage_config:\n  bigtable: \"Support for Bigtable is removed.\"\n  cassandra: \"Support for Cassandra is removed.\"\n  boltdb: \"Support for BoltDB is removed.\"\n  grpc_store: \"Support for gRPC store is removed.\"\n  index_queries_cache_config: \"Index read cache configuration is removed.\"\n  index_cache_validity: \"Index cache validity is removed.\"\n  disable_broad_index_queries: \"Broad index queries are removed along with the legacy index types.\"\n  boltdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    use_boltdb_shipper_as_backup: \"Since TSDB is now stable and the recommended index type, the setting has become irrelevant and therefore was removed. The previous default value false is applied.\"\n  tsdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    shadow_index_gateway_client: \"The experimental shadow index gateway client is removed.\"\n  aws:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    dynamodb: \"Support for DynamoDB is removed.\"\n  s3:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\ncompactor:\n  deletion_mode: \"Use global or per-tenant deletion_mode configuration from limits_config.\"\n  shared_store: \"Compactor will now operate on all the object stores configured in period config where the index type is either tsdb or boltdb-shipper. -compactor.delete-request-store to configure the store for delete requests is now a required field.\"\n  shared_store_key_prefix: \"Use -compactor.delete-request-store.key-prefix to configure the path prefix under which the delete requests are stored.\"\n\nchunk_store_config:\n  max_look_back_period: \"Use global or per-tenant max_query_lookback configuration from limits_config.\"\n  write_dedupe_cache_config: \"Write dedupe cache is removed along with deprecated index types.\"\n  cache_lookups_older_than: \"Index entry caching is removed along with deprecated index types.\"\n\nlimits_config:\n  unordered_writes: \"This setting is removed.\"\n  ruler_evaluation_delay_duration: \"This setting is removed.\"\n  enforce_metric_name: \"This setting is removed.\"\n  allow_deletes: \"This setting is removed.\"\n  ruler_enable_wal_replay: \"This setting is removed. The ruler now always wipes its remote-write WAL on startup, so there is nothing to replay.\"\n  per_tenant_override_config: \"This setting is removed in favor of runtime_config.file\"\n  per_tenant_override_period: \"This setting is removed in favor of runtime_config.period\"\n  enable_multi_variant_queries: \"This setting is removed. LogQL no longer supports variants() queries.\"\n  ruler_remote_write_url: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_timeout: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_headers: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_relabel_configs: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_capacity: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_samples_per_send: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_batch_send_deadline: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_retry_on_ratelimit: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_sigv4_config: \"This setting is removed. Use ruler_remote_write_config instead.\"\n","isInternal":false,"tokens":1521,"sizeBytes":6996},{"name":"deprecated-config.yaml","path":"tools/deprecated-config-checker/deprecated-config.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/deprecated-config.yaml","title":"Deprecated-config-checker Skill","category":"anthropic-skill","format":"yaml","content":"# This file should contain a list fo deprecated config options.\n#\n# -- Syntax --\n# The value for a deprecated option should be a message that explains why the option is deprecated and what to use instead. E.g.\n# storage_config:\n#  cassandra: \"Cassandra is deprecated. Use any other non-deprecated storage instead.\n#\n# A given set of deprecated values can also be given though the _values field along with a message in the _msg field. E.g.\n# schema_config:\n#   configs:\n#     store:\n#       _values: [\"aws\", \"aws-dynamo\", \"gcp\", \"gcp-columnkey\", \"bigtable\", \"bigtable-hashed\", \"cassandra\", \"grpc\"]\n#       _msg: \"Use tsdb (preferred) or boltdb-shipper instead.\"\n#\n# Note that even though the configs in schema_config takes a list, here we specify the deprecated fields for each item in the list.\n\nbloom_build: \"Bloom filters are deprecated.\"\nbloom_gateway: \"Bloom filters are deprecated.\"\n\nindex_gateway:\n  ring:\n    replication_factor: \"Use global or per-tenant index_gateway_shard_size configuration from limits_config.\"\n\ningester:\n  delegate_stream_limits_enabled: \"Use global or per-tenant delegate_stream_limits_enabled configuration from limits_config.\"\n\nkafka_config:\n  address: \"Use reader_config.address or writer_config.address instead.\"\n  client_id: \"Use reader_config.client_id or writer_config.client_id instead.\"\n\n## NOTE: This will also be used to validate per-tenant overrides.\nlimits_config:\n  bloom_gateway_enable_filtering: \"Bloom filters are deprecated.\"\n  bloom_build_max_builders: \"Bloom filters are deprecated.\"\n  bloom_build_task_max_retries: \"Bloom filters are deprecated.\"\n  bloom_build_builder_response_timeout: \"Bloom filters are deprecated.\"\n  bloom_creation_enabled: \"Bloom filters are deprecated.\"\n  bloom_planning_strategy: \"Bloom filters are deprecated.\"\n  bloom_split_series_keyspace_by: \"Bloom filters are deprecated.\"\n  bloom_task_target_series_chunk_size: \"Bloom filters are deprecated.\"\n  bloom_block_encoding: \"Bloom filters are deprecated.\"\n  bloom_prefetch_blocks: \"Bloom filters are deprecated.\"\n  bloom_max_block_size: \"Bloom filters are deprecated.\"\n  bloom_max_bloom_size: \"Bloom filters are deprecated.\"\n\nserver:\n  grpc_server_stats_tracking_enabled: \"Deprecated, currently doesn't do anything, will be removed in a future version.\"\n\nstorage_config:\n  bloom_shipper: \"Bloom filters are deprecated.\"\n","isInternal":false,"tokens":531,"sizeBytes":2344},{"name":"config.yaml","path":"tools/deprecated-config-checker/test-fixtures/config.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/config.yaml","title":"Test-fixtures Skill","category":"anthropic-skill","format":"yaml","content":"# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/config.yaml)","tokens":300,"sizeBytes":229},{"name":"runtime-config.yaml","path":"tools/deprecated-config-checker/test-fixtures/runtime-config.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/runtime-config.yaml","title":"Test-fixtures Skill","category":"anthropic-skill","format":"yaml","content":"# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/runtime-config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/runtime-config.yaml)","tokens":300,"sizeBytes":245},{"name":"dev.values.yaml","path":"tools/dev.values.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev.values.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"grafana:\n  enabled: true\n  service:\n    type: LoadBalancer\n    port: 3000\n  adminPassword: admin\n\nprometheus:\n  enabled: true\n  pushgateway:\n    enabled: false\n  server:\n    service:\n      type: LoadBalancer\n      servicePort: 9090\n\nfluent-bit:\n  enable: false\n\nloki:\n  image:\n    pullPolicy: Never\n  service:\n    type: LoadBalancer\n","isInternal":false,"tokens":97,"sizeBytes":333},{"name":"chartfile.yaml","path":"tools/dev/k3d/chartfile.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/chartfile.yaml","title":"K3d Skill","category":"anthropic-skill","format":"yaml","content":"# K3d Skill\n\nPath: `tools/dev/k3d/chartfile.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/chartfile.yaml)","tokens":300,"sizeBytes":161},{"name":"spec.json","path":"tools/dev/k3d/environments/helm-cluster/spec.json","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/spec.json","title":"Helm-cluster Skill","category":"anthropic-skill","format":"json","content":"# Helm-cluster Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/spec.json)","tokens":300,"sizeBytes":212},{"name":"enterprise-logs-cloud-monitoring.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml)","tokens":300,"sizeBytes":276},{"name":"enterprise-logs-ha-single-binary.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml)","tokens":300,"sizeBytes":276},{"name":"enterprise-logs.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml)","tokens":300,"sizeBytes":242},{"name":"kube-state-metrics.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml)","tokens":300,"sizeBytes":248},{"name":"loki-distributed-tls.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml)","tokens":300,"sizeBytes":252},{"name":"loki-distributed.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml)","tokens":300,"sizeBytes":244},{"name":"loki-ha-single-binary.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml)","tokens":300,"sizeBytes":254},{"name":"loki.yaml","path":"tools/dev/k3d/environments/helm-cluster/values/loki.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki.yaml","title":"Values Skill","category":"anthropic-skill","format":"yaml","content":"# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki.yaml)","tokens":300,"sizeBytes":220},{"name":"jsonnetfile.json","path":"tools/dev/k3d/jsonnetfile.json","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.json","title":"K3d Skill","category":"anthropic-skill","format":"json","content":"# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.json)","tokens":300,"sizeBytes":165},{"name":"jsonnetfile.lock.json","path":"tools/dev/k3d/jsonnetfile.lock.json","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.lock.json","title":"K3d Skill","category":"anthropic-skill","format":"json","content":"# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.lock.json)","tokens":300,"sizeBytes":175},{"name":"docker-compose.yaml","path":"tools/dev/kafka/docker-compose.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/docker-compose.yaml","title":"Kafka Skill","category":"anthropic-skill","format":"yaml","content":"# Kafka Skill\n\nPath: `tools/dev/kafka/docker-compose.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/docker-compose.yaml)","tokens":300,"sizeBytes":177},{"name":"loki-local-config.debug.yaml","path":"tools/dev/kafka/loki-local-config.debug.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/loki-local-config.debug.yaml","title":"Kafka Skill","category":"anthropic-skill","format":"yaml","content":"# Kafka Skill\n\nPath: `tools/dev/kafka/loki-local-config.debug.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/loki-local-config.debug.yaml)","tokens":300,"sizeBytes":195},{"name":"prometheus.yaml","path":"tools/dev/kafka/prometheus.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/prometheus.yaml","title":"Kafka Skill","category":"anthropic-skill","format":"yaml","content":"# Kafka Skill\n\nPath: `tools/dev/kafka/prometheus.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/prometheus.yaml)","tokens":300,"sizeBytes":169},{"name":"datasource.yaml","path":"tools/dev/loki-tsdb-storage-s3/config/datasource.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/datasource.yaml","title":"Config Skill","category":"anthropic-skill","format":"yaml","content":"# Config Skill\n\nPath: `tools/dev/loki-tsdb-storage-s3/config/datasource.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/datasource.yaml)","tokens":300,"sizeBytes":214},{"name":"loki.yaml","path":"tools/dev/loki-tsdb-storage-s3/config/loki.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/loki.yaml","title":"Config Skill","category":"anthropic-skill","format":"yaml","content":"# Config Skill\n\nPath: `tools/dev/loki-tsdb-storage-s3/config/loki.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/loki.yaml)","tokens":300,"sizeBytes":202},{"name":"helm.yaml","path":"tools/helm.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/helm.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: helm\n  namespace: kube-system\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n  name: helm\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: cluster-admin\nsubjects:\n  - kind: ServiceAccount\n    name: helm\n    namespace: kube-system\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n  creationTimestamp: null\n  name: cluster-admin\n  annotations:\n    rbac.authorization.kubernetes.io/autoupdate: \"true\"\nrules:\n- apiGroups:\n  - '*'\n  resources:\n  - '*'\n  verbs:\n  - '*'\n- nonResourceURLs:\n  - '*'\n  verbs:\n  - '*'","isInternal":false,"tokens":189,"sizeBytes":644},{"name":"release-note.md","path":"tools/release-note.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/release-note.md","title":"Tools Skill","category":"anthropic-skill","format":"markdown","content":"This is release `${DRONE_TAG}` of Loki.\n\n### Notable changes:\n:warning: **ADD RELEASE NOTES HERE** :warning:\n\n\n### Installation:\nThe components of Loki are currently distributed in plain binary form and as Docker container images. Choose what fits your use-case best.\n\n#### Docker container:\n* https://hub.docker.com/r/grafana/loki\n* https://hub.docker.com/r/grafana/promtail\n```bash\n$ docker pull \"grafana/loki:${DRONE_TAG_NO_V}\"\n$ docker pull \"grafana/promtail:${DRONE_TAG_NO_V}\"\n```\n\n#### Binary\nWe provide pre-compiled binary executables for the most common operating systems and architectures.\nChoose from the assets below for the application and architecture matching your system.\nExample for `Loki` on the `linux` operating system and `amd64` architecture:\n\n```bash\n$ curl -O -L \"https://github.com/grafana/loki/releases/download/${DRONE_TAG}/loki-linux-amd64.zip\"\n# extract the binary\n$ unzip \"loki-linux-amd64.zip\"\n# make sure it is executable\n$ chmod a+x \"loki-linux-amd64\"\n```\n","isInternal":false,"tokens":249,"sizeBytes":988},{"name":"docker-compose.yaml","path":"tools/stream-generator/docker-compose.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/docker-compose.yaml","title":"Stream-generator Skill","category":"anthropic-skill","format":"yaml","content":"# Stream-generator Skill\n\nPath: `tools/stream-generator/docker-compose.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/docker-compose.yaml)","tokens":300,"sizeBytes":202},{"name":"loki-local-config.debug.yaml","path":"tools/stream-generator/loki-local-config.debug.yaml","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/loki-local-config.debug.yaml","title":"Stream-generator Skill","category":"anthropic-skill","format":"yaml","content":"# Stream-generator Skill\n\nPath: `tools/stream-generator/loki-local-config.debug.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/loki-local-config.debug.yaml)","tokens":300,"sizeBytes":220},{"name":"README.md","path":"tools/dataobj-locality/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dataobj-locality/README.md","title":"dataobj-locality Documentation","category":"plugin-manifest","format":"markdown","content":"# dataobj-locality\n\n`dataobj-locality` measures how well label values and log records are\nphysically clustered inside Loki's data objects. It reads directly from the\nlive index (postings sections) and, optionally, the logs objects referenced by\nthat index, for a given tenant and time range.\n\nBecause scanning hundreds of index objects is expensive, the tool supports\nexporting raw posting facts as Parquet and CSV so the data can be shared\nand re-queried offline without re-scanning.\n\n## Installation\n\n```bash\ngo build -o dataobj-locality ./tools/dataobj-locality/\n```\n\n## Usage\n\n```\ndataobj-locality [flags]\n```\n\n### Flags\n\n| Flag | Default | Description |\n|---|---|---|\n| `--config.file` | | Path to a Loki config YAML (reads storage credentials and prefixes from it, same as the running engine). Mutually exclusive with `--dir`. |\n| `--config.expand-env` | false | Expand `${VAR}` in the config file before parsing. |\n| `--dir` | | Local directory holding TOC and index objects. Useful for local testing. Mutually exclusive with `--config.file`. |\n| `--tenant` | | Tenant ID to inspect. Required for bucket sources. |\n| `--from` | now - 12h | Start of the time range (RFC3339). |\n| `--to` | now | End of the time range (RFC3339). |\n| `--locality` | both | What to measure: `postings`, `logs`, or `both`. |\n| `--sort-key` | service_name | Label used as the primary sort dimension for the logs locality rollup. |\n| `--logs-section-target-bytes` | 134217728 (128 MiB) | Uncompressed logs-section target size, used to compute the ideal section count. |\n| `--top` | 20 | Rows to show in each top-N table. |\n| `--concurrency` | 8 | Maximum number of index objects to open and scan in parallel. |\n| `--export` | | Path prefix for raw-fact export. Produces `<prefix>.parquet` and/or `<prefix>.csv`. |\n| `--export-format` | both | Output format for `--export`: `parquet`, `csv`, or `both`. |\n\n## Examples\n\n### Quick console report against a live bucket\n\n```bash\ndataobj-locality \\\n  --config.file /etc/loki/config.yaml \\\n  --tenant acme \\\n  --from 2024-01-15T00:00:00Z \\\n  --to   2024-01-15T06:00:00Z \\\n  --locality both \\\n  --sort-key service_name\n```\n\nThis prints a summary and top-20 tables to stdout, then exits.\n\n### Credentials\n\nThe tool reuses Loki's own storage configuration, so credentials are resolved\nthrough the same chain the engine uses:\n\n- **AWS S3**: set `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` in the\n  environment, or rely on instance-profile / workload-identity if running\n  inside AWS.\n- **GCS**: set `GOOGLE_APPLICATION_CREDENTIALS`, or rely on Application\n  Default Credentials (`gcloud auth application-default login` for local\n  development).\n- **Local testing**: use `--dir` pointing at a directory that mirrors the\n  object-store layout.\n\n### Export to Parquet + CSV, then query with DuckDB\n\n```bash\ndataobj-locality \\\n  --config.file /etc/loki/config.yaml \\\n  --tenant acme \\\n  --from 2024-01-15T00:00:00Z \\\n  --to   2024-01-15T06:00:00Z \\\n  --locality both \\\n  --export ./facts \\\n  --export-format both\n```\n\nThis produces `facts.parquet` and `facts.csv` alongside the console report.\n\n## Querying with DuckDB\n\nInstall DuckDB: <https://duckdb.org/docs/installation>\n\n```bash\nduckdb\n```\n\n### Schema\n\n| Column | Type | Description |\n|---|---|---|\n| `tenant` | VARCHAR | Tenant the posting belongs to. |\n| `index_object` | VARCHAR | Path of the index object that contains the postings section. |\n| `index_section` | BIGINT | Section index of the postings section within the index object. Together with `index_object` this uniquely identifies a physical postings section, matching the `sectionSpread` metric in the console report. |\n| `compacted` | BOOLEAN | Whether the index object is a compacted (IndexMerge) output rather than an uncompacted per-partition index. Derived from the index object path (`indexes/tenants/...` = compacted). |\n| `column_name` | VARCHAR | Label name (e.g. `service_name`). |\n| `label_value` | VARCHAR | Label value (e.g. `frontend`). |\n| `logs_object` | VARCHAR | Path of the logs object referenced by the posting. |\n| `logs_section` | BIGINT | Section index within the logs object. |\n| `stream_refs` | BIGINT | Number of distinct log streams in the section for this label value. |\n| `uncompressed_size` | BIGINT | Uncompressed bytes of log records for this label value in this section. |\n\n### Useful queries\n\n**How many distinct logs sections does each service touch?**\n\n```sql\nSELECT\n    label_value                          AS service,\n    COUNT(DISTINCT (logs_object, logs_section)) AS logs_sections,\n    COUNT(DISTINCT logs_object)          AS logs_objects,\n    SUM(uncompressed_size) / 1024 / 1024 AS total_mb\nFROM 'facts.parquet'\nWHERE column_name = 'service_name'\nGROUP BY label_value\nORDER BY logs_sections DESC\nLIMIT 20;\n```\n\n**Spread factor: actual sections vs ideal (128 MiB target)**\n\n```sql\nSELECT\n    label_value AS service,\n    COUNT(DISTINCT (logs_object, logs_section)) AS actual_sections,\n    CEIL(SUM(uncompressed_size) / 134217728.0) AS ideal_sections,\n    ROUND(\n        COUNT(DISTINCT (logs_object, logs_section)) /\n        CEIL(SUM(uncompressed_size) / 134217728.0),\n        2\n    ) AS spread_factor\nFROM 'facts.parquet'\nWHERE column_name = 'service_name'\nGROUP BY label_value\nHAVING ideal_sections >= 1\nORDER BY spread_factor DESC\nLIMIT 20;\n```\n\nA `spread_factor` of 1.0 means logs are perfectly clustered. Higher values\nindicate fragmentation — the service's logs are spread across more sections\nthan the data volume requires.\n\n**Postings-section spread per label name (how many index sections reference each label?)**\n\n```sql\nSELECT\n    column_name,\n    COUNT(DISTINCT index_object)                  AS index_objects,\n    COUNT(DISTINCT (index_object, index_section)) AS postings_sections,\n    SUM(stream_refs)                              AS total_stream_refs\nFROM 'facts.parquet'\nGROUP BY column_name\nORDER BY postings_sections DESC\nLIMIT 20;\n```\n\n**Re-slice by a different sort key without re-scanning**\n\nBecause the export contains every label column, you can analyse locality for\nany label — not just the one used as `--sort-key` at scan time:\n\n```sql\nSELECT\n    label_value AS namespace,\n    COUNT(DISTINCT (logs_object, logs_section)) AS logs_sections,\n    CEIL(SUM(uncompressed_size) / 134217728.0) AS ideal_sections\nFROM 'facts.parquet'\nWHERE column_name = 'namespace'\nGROUP BY label_value\nORDER BY logs_sections DESC\nLIMIT 20;\n```\n","isInternal":false,"tokens":1646,"sizeBytes":6427},{"name":"README.md","path":"tools/deprecated-config-checker/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/README.md","title":"deprecated-config-checker Documentation","category":"plugin-manifest","format":"markdown","content":"# Deprecated Config Checker\n\nThis script can check your configuration files for deprecated and deleted options.\n\n## Usage\n\nRun the script with `-help` for a list of options.\n\n### Example\n\n```bash\ngo run tools/deprecated-config-checker/main.go \\\n  -config.file tools/deprecated-config-checker/test-fixtures/config.yaml \\\n  -runtime-config.file tools/deprecated-config-checker/test-fixtures/runtime-config.yaml\n```\n\n## Adding a new config deprecation or deletion?\n\nAdd deprecations to the `deprecated-config.yaml` file, and deletions to the `deleted-config.yaml`. \nThen, update the `test-fixtures/config.yaml` and `test-fixtures/runtime-config.yaml` files as well as\nthe tests in `checker/checker_test.go`.\n","isInternal":false,"tokens":156,"sizeBytes":705},{"name":"README.md","path":"tools/dev/k3d/environments/helm-cluster/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/README.md","title":"helm-cluster Documentation","category":"plugin-manifest","format":"markdown","content":"# helm-cluster Documentation\n\nPath: `tools/dev/k3d/environments/helm-cluster/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/README.md)","tokens":300,"sizeBytes":220},{"name":"README.md","path":"tools/dev/k3d/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/README.md","title":"k3d Documentation","category":"plugin-manifest","format":"markdown","content":"# k3d Documentation\n\nPath: `tools/dev/k3d/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/README.md)","tokens":300,"sizeBytes":159},{"name":"README.md","path":"tools/dev/kafka/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/README.md","title":"kafka Documentation","category":"plugin-manifest","format":"markdown","content":"# kafka Documentation\n\nPath: `tools/dev/kafka/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/README.md)","tokens":300,"sizeBytes":165},{"name":"README.md","path":"tools/dev/loki-tsdb-storage-s3/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/README.md","title":"loki-tsdb-storage-s3 Documentation","category":"plugin-manifest","format":"markdown","content":"# loki-tsdb-storage-s3 Documentation\n\nPath: `tools/dev/loki-tsdb-storage-s3/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/README.md)","tokens":300,"sizeBytes":210},{"name":"README.md","path":"tools/doc-generator/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/doc-generator/README.md","title":"doc-generator Documentation","category":"plugin-manifest","format":"markdown","content":"# Documentation generation tool\n\nThe doc-generator tool is used to automatically generate the configuration flags documentation from the metadata information\nprovided in the code. \n\n## Run \n\nThe tool receives as input a template file and generates the list of configuration value blocks: \n\n```shell\ngo run ./tools/doc-generator docs/sources/configuration/index.template > docs/sources/configuration/_index.md\n```\n\n## `doc` tag\n\nThe description and default value of configuration values can be set via CLI flag registration by using the `flag` package. \nHowever, for a more flexible documentation generation it is possible to combine this with the `doc` tag by applying the following custom values:\n\n* `doc:\"deprecated\"`: sets the element as deprecated in the documentation.\n* `doc:\"hidden\"`: does not show the element in the documentation.\n* `doc:\"description=foo\"`: overrides the element's description (set via flag registration, if any) with `foo`.\n* `doc:\"default=<hostname>\"`: sets the element's documentation default value as `<hostname>`. \nNote: this only sets the default value shown in the documentation, it doesn't override the default configuration value. ","isInternal":false,"tokens":235,"sizeBytes":1166},{"name":"README.md","path":"tools/gcplog/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/gcplog/README.md","title":"gcplog Documentation","category":"plugin-manifest","format":"markdown","content":"# Cloud provisioning for GCP logs\n\nThis document covers how to configure your GCP via Terraform to make cloud logs available for `promtail` to consume.\n\nTo choose what logs need to exported from Google Cloud, we use log filters. Log filters are normal GCP logging queries except the goal is export logs from specific set Google cloud resources\n\ne.g: Export Google APP Engine logs\n```bash\nresource.type=\"gae_app\" AND\nseverity>=ERROR\n```\n\ne.g: Export Google HTTP Loadbalancer logs\n```bash\nresource.type=\"http_load_balancer\" AND\nhttpRequest.status>=500\n```\nYou can read more about these log filters in [GCP logging](https://cloud.google.com/logging/docs/view/query-library)\n\n## Prerequisite\n- Terraform >= 0.14.5\n- GCP Service account credentials with following roles/permissions\n  - \"roles/pubsub.editor\"\n  - \"roles/logging.configWriter\"\n\n## Usage\n\n```bash\nterraform init\n```\n\n```bash\nterraform plan\n```\n\n```bash\nterraform apply\n```\n\nTerraform will prompt for following variables.\n\n1. credentials_file - ServiceAccount credentials file with permissions mentioned in the prerequisite.\n2. zone - GCP zone (e.g: `us-central1-b`)\n3. region - GCP region (e.g: `us-central1`)\n4. project - GCP Project ID\n5. name - name we use to create pubsub topics, log router and pubsub subscription.\n6. inclusion_filter - To include cloud resources to export.\n7. exclusions - Ignore these logs while exporting.\n\nyou can pass these variables via CLI.\n\ne.g:\n```bash\nterraform apply \\\n-var=\"credentials_file=./permissions.json\" \\\n-var=\"zone=us-central1-b\" \\\n-var=\"region=us-central1\" \\\n-var=\"project=grafanalabs-dev\" \\\n-var=\"logname=cloud-logs\"\n```\n\nThese variables can be passed in multiple ways. For complete reference refer terraform [doc](https://www.terraform.io/docs/configuration/variables.html#assigning-values-to-root-module-variables)\n","isInternal":false,"tokens":438,"sizeBytes":1821},{"name":"README.md","path":"tools/kafka/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/kafka/README.md","title":"kafka Documentation","category":"plugin-manifest","format":"markdown","content":"# Kafka tools\n\nThis folder contains tools for testing Loki's Kafka integration.\n\n**Requirements:**\n\n- docker and docker-compose\n- make\n\n## Running kafka locally\n\nTo start kafka use `make start-kafka` this should start `kafka` and a `zookeeper` docker compose stack.\nTo discover available brokers you can use the `make print-brokers`.\n\nFinally to stop the compose stack use `make stop-kafka`. This will result in all topics being lost with their messages.\n\n## Running secure kafka locally\n\nTo test authentication, you need to start the Kafka container which is configured with authentication.\n\nYou can also use `make start-kafka` in appropriate directory like `sasl-scram` you need.\n\nIn addition, you need to create certificates using `make create-certs` when using SSL/TLS.\n\nIf you don't need to authenticate, you should use the tools in `plain` directory.\n\n## Working with Topic\n\nIn Kafka before sending messages you need to create and select the topic you want to use for the exchange.\n\nTo create a new topic use: `make create-topic`, by default the topic name will be `promtail` if you wish to overrides it you can use the `TOPIC` variable as shown below:\n\n```bash\nTOPIC=new-topic make create-topic\n```\n\nTo list all available topics use the `make list-topics` target.\n\n```bash\n make list-topics\n__consumer_offsets\npromtail\n```\n\nTo describe a topic use the `make describe-topic` target.\n\n```bash\n TOPIC=new-topic make describe-topic\n\nTopic: new-topic        PartitionCount: 3       ReplicationFactor: 1    Configs: segment.bytes=1073741824\n        Topic: new-topic        Partition: 0    Leader: 1001    Replicas: 1001  Isr: 1001\n        Topic: new-topic        Partition: 1    Leader: 1001    Replicas: 1001  Isr: 1001\n        Topic: new-topic        Partition: 2    Leader: 1001    Replicas: 1001  Isr: 1001\n```\n\nAs you can see by default each topic is assigned by default  3 partitions and a replication factor of 1. You can change those default using respectively `PARTS` and `RF` variable, for example the example below will create a topic with 4 partitions:\n\n```bash\nPARTS=4 TOPIC=new-topic-part make create-topic\n```\n\nPartitions in kafka are used for scaling reads and writes. Each partitions is replicated on multiple machines.\n\n> WARNING: Order of messages is guaranteed on a single partition but not across a single topic.\n\n## Producing messages\n\nYou can start sending message using `make producer` target, it will start reading newlines and send them to the default topic (`promtail`):\n\n```bash\nTOPIC=new-topic make producer\n\nProducing messages to topic new-topic...\nWrite a message and press Enter\n>hello world !\n>\n```\n\n## Consuming with Grafana Alloy\n\nYou can use [Grafana Alloy](https://grafana.com/docs/alloy/latest/) to consume from Kafka and send logs to Loki.\n\nMake sure the brokers list (`make print-broker`) is correctly configured in your Alloy configuration file. Refer to the [Alloy documentation](https://grafana.com/docs/alloy/latest/reference/components/loki/loki.source.kafka/) for Kafka source configuration.\n","isInternal":false,"tokens":716,"sizeBytes":3039},{"name":"README.md","path":"tools/stream-generator/README.md","rawUrl":"https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/README.md","title":"stream-generator Documentation","category":"plugin-manifest","format":"markdown","content":"# stream-generator Documentation\n\nPath: `tools/stream-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/stream-generator/README.md)","tokens":300,"sizeBytes":190}],"systemPromptSnippet":"<yakaai_skills repo=\"grafana/loki\">\n<!-- File: AGENTS.md (Tokens: ~575 | Category: root-instruction) -->\n# AGENTS.md\n\nInstructions file for coding agents.\n\n## Environment Setup\n\n- Use the minimum Go version specified in [go.mod](go.mod)\n- Warn the user about an old Go version\n- The project uses GNU make for building binaries and images. See [Makefile](Makefile)\n\n## Commands\n\n### Tests\n\nFor fast feeback run tests using `go test` (or `gotest` if available).\n\n```bash\ngo test -v ./...                               # run all tests with Go directly\ngo test -v ./pkg/...                           # run Loki package tests\ngo test -v ./pkg/<pkg>/...                     # run tests in specific package\ngo test -v -test.run TestName ./pkg/<pkg>/...  # run a specific test\n```\n\nFor full verification use dedicated `make` targets (only when requested).\n\n```\nmake test                                      # run full test suite\nmake test-integration                          # run integration test suite\nmake test-fuzz                                 # run fuzz tests\n```\n\n## Code Style\n\n- Follow standard Go formatting (gofmt/goimports)\n- Follow import order:\n  1. standard lib\n  2. external packages\n  3. Loki packages (`github.com/grafana/loki/v3`)\n- Error handling: Always check errors with `if err != nil { return ... }`\n- Use structured logging with leveled logging (`github.com/go-kit/log`)\n- Document all exported functions, types, and variables\n\n### Testing\n\n- Always prefer `github.com/stretchr/testify/require` over `github.com/stretchr/testify/assert`\n- Use table-driven tests when appropriate\n\n## Commits and Pull Requests\n\n- Always run Loki package tests `gotest -v ./pkg/...` before commiting\n- Focus on \"why\", rather than \"what\" in the commit message and PR description\n- Follow conventional commits format: `<type>(<scope>): Your change` (note the uppercase after colon)\n- Never approve, merge or enable auto-merge on Renovate PRs that touch `operator/**` — they risk breaking the operator build and are left for the operator maintainers to apply\n\n## Documentation Standards\n\n- Follow the Grafana [Writers' Toolkit](https://grafana.com/docs/writers-toolkit/) Style Guide\n- Use CommonMark flavor of markdown for documentation\n- Create Github issues for large functionality changes\n- Document upgrading steps in `docs/sources/setup/upgrade/_index.md`\n- Preview docs locally with `make docs` from the `/docs` directory\n- Include examples and clear descriptions for public APIs\n\n## Using Tools\n\n- When using the `mcp__acp__Write` tool, write to a path within the current worktree to avoid sandboxing/permissions issues. This includes when writing plan files.\n\n<!-- File: .cursor/skills/go/SKILL.md (Tokens: ~221 | Category: anthropic-skill) -->\n---\nname: go\ndescription: >\n  Best practices for working with Go codebases. Use when writing, debugging,\n  or exploring Go code, including reading dependency sources and documentation.\nallowed-tools: \"Read,Bash(go:*)\"\nversion: \"1.0.0\"\nauthor: \"User\"\nlicense: \"MIT\"\n---\n\n# Go Programming Language\n\nGuidelines for working effectively with Go projects.\n\n## Reading Dependency Source Files\n\nTo see source files from a dependency, or to answer questions about a dependency:\n\n```bash\ngo mod download -json MODULE\n```\n\nUse the returned Dir path to read the source files.\n\n## Reading Documentation\n\nUse go doc to read documentation for packages, types, functions, etc:\n\n```bash\ngo doc foo.Bar       # Documentation for a specific symbol\ngo doc -all foo      # All documentation for a package\n```\n\n## Running Programs\n\nUse go run instead of go build to avoid leaving behind build artifacts:\n\n```bash\ngo run .             # Run the current package\ngo run ./cmd/foo     # Run a specific command\n```\n\n<!-- File: pkg/tool/rules/testdata/basic_namespace_repeated.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace_repeated.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace_repeated.yaml)\n\n<!-- File: pkg/tool/rules/testdata/basic_namespace.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/basic_namespace.yaml)\n\n<!-- File: pkg/tool/rules/testdata/loki_basic_failure.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_failure.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_failure.yaml)\n\n<!-- File: pkg/tool/rules/testdata/loki_basic_namespace.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic_namespace.yaml)\n\n<!-- File: pkg/tool/rules/testdata/loki_basic.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_basic.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_basic.yaml)\n\n<!-- File: pkg/tool/rules/testdata/loki_multiple_namespace.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/loki_multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/loki_multiple_namespace.yaml)\n\n<!-- File: pkg/tool/rules/testdata/multiple_namespace.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Testdata Skill\n\nPath: `pkg/tool/rules/testdata/multiple_namespace.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/pkg/tool/rules/testdata/multiple_namespace.yaml)\n\n<!-- File: tools/deprecated-config-checker/deleted-config.yaml (Tokens: ~1521 | Category: anthropic-skill) -->\n# This file should contain a list of deleted config options.\n#\n# The syntax for this file is the same as the syntax for deprecated-config.yaml.\n\nlegacy-read-mode: \"Legacy read SSD mode is deprecated and will be eventually removed. Use the new read and backend targets.\"\n\ndistributor:\n  max_recv_msg_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n  max_decompressed_size: \"Replaced by max_push_size_bytes which includes both max_recv_msg_size and max_decompressed_size.\"\n\ningester:\n  max_transfer_retries: \"Enable the ingester WAL and rely on new ingesters to replay the WAL.\"\n\nquerier:\n  engine:\n    timeout: \"Use global or per-tenant query_timeout configuration from limits_config.\"\n\nquery_range:\n  split_queries_by_interval: \"Configure global or per-tenant split_queries_by_interval limit\"\n  forward_headers_list: \"This setting is removed without an alternative\"\n\nfrontend_worker:\n  parallelism: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n  match_max_concurrent: \"Configure querier.max_concurrent to limit the max concurrent requests processed by the queriers.\"\n\ncommon:\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    filesystem:\n      admin_api_directory: \"Removed in 3.5.0. This field is no longer supported or recognized by Loki.\"\n\nruler:\n  remote_write:\n    client: \"Use clients instead.\"\n  storage:\n    s3:\n      sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\nschema_config:\n  configs:\n    store:\n      _values:\n        [\n          \"aws\",\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use tsdb or boltdb-shipper instead.\"\n    object_store:\n      _values:\n        [\n          \"aws-dynamo\",\n          \"gcp\",\n          \"gcp-columnkey\",\n          \"bigtable\",\n          \"bigtable-hashed\",\n          \"cassandra\",\n          \"grpc\",\n        ]\n      _msg: \"Use a different supported object storage instead.\"\n    chunks: \"The chunks block is removed as it only configured chunk tables for removed legacy storage backends. TSDB stores chunks directly in object storage.\"\n    index:\n      tags: \"The tags setting is removed as it only applied to managed tables of removed legacy storage backends.\"\n    row_shards: \"The row_shards setting is removed. It configured a static query shard factor for removed legacy index types; TSDB resolves query sharding dynamically.\"\n\nstorage_config:\n  bigtable: \"Support for Bigtable is removed.\"\n  cassandra: \"Support for Cassandra is removed.\"\n  boltdb: \"Support for BoltDB is removed.\"\n  grpc_store: \"Support for gRPC store is removed.\"\n  index_queries_cache_config: \"Index read cache configuration is removed.\"\n  index_cache_validity: \"Index cache validity is removed.\"\n  disable_broad_index_queries: \"Broad index queries are removed along with the legacy index types.\"\n  boltdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    use_boltdb_shipper_as_backup: \"Since TSDB is now stable and the recommended index type, the setting has become irrelevant and therefore was removed. The previous default value false is applied.\"\n  tsdb_shipper:\n    shared_store: \"object_store setting in the period_config will be used to configure the store for the index.\"\n    shared_store_key_prefix: \"Path prefix for storing the index can now be configured by setting path_prefix under index key in period_config.\"\n    shadow_index_gateway_client: \"The experimental shadow index gateway client is removed.\"\n  aws:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n    dynamodb: \"Support for DynamoDB is removed.\"\n  s3:\n    sse_encryption: \"Encryption for all S3 buckets is now SSE-S3. Configure .sse field instead.\"\n\ncompactor:\n  deletion_mode: \"Use global or per-tenant deletion_mode configuration from limits_config.\"\n  shared_store: \"Compactor will now operate on all the object stores configured in period config where the index type is either tsdb or boltdb-shipper. -compactor.delete-request-store to configure the store for delete requests is now a required field.\"\n  shared_store_key_prefix: \"Use -compactor.delete-request-store.key-prefix to configure the path prefix under which the delete requests are stored.\"\n\nchunk_store_config:\n  max_look_back_period: \"Use global or per-tenant max_query_lookback configuration from limits_config.\"\n  write_dedupe_cache_config: \"Write dedupe cache is removed along with deprecated index types.\"\n  cache_lookups_older_than: \"Index entry caching is removed along with deprecated index types.\"\n\nlimits_config:\n  unordered_writes: \"This setting is removed.\"\n  ruler_evaluation_delay_duration: \"This setting is removed.\"\n  enforce_metric_name: \"This setting is removed.\"\n  allow_deletes: \"This setting is removed.\"\n  ruler_enable_wal_replay: \"This setting is removed. The ruler now always wipes its remote-write WAL on startup, so there is nothing to replay.\"\n  per_tenant_override_config: \"This setting is removed in favor of runtime_config.file\"\n  per_tenant_override_period: \"This setting is removed in favor of runtime_config.period\"\n  enable_multi_variant_queries: \"This setting is removed. LogQL no longer supports variants() queries.\"\n  ruler_remote_write_url: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_timeout: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_headers: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_relabel_configs: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_capacity: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_shards: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_samples_per_send: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_batch_send_deadline: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_min_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_max_backoff: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_queue_retry_on_ratelimit: \"This setting is removed. Use ruler_remote_write_config instead.\"\n  ruler_remote_write_sigv4_config: \"This setting is removed. Use ruler_remote_write_config instead.\"\n\n<!-- File: tools/deprecated-config-checker/deprecated-config.yaml (Tokens: ~531 | Category: anthropic-skill) -->\n# This file should contain a list fo deprecated config options.\n#\n# -- Syntax --\n# The value for a deprecated option should be a message that explains why the option is deprecated and what to use instead. E.g.\n# storage_config:\n#  cassandra: \"Cassandra is deprecated. Use any other non-deprecated storage instead.\n#\n# A given set of deprecated values can also be given though the _values field along with a message in the _msg field. E.g.\n# schema_config:\n#   configs:\n#     store:\n#       _values: [\"aws\", \"aws-dynamo\", \"gcp\", \"gcp-columnkey\", \"bigtable\", \"bigtable-hashed\", \"cassandra\", \"grpc\"]\n#       _msg: \"Use tsdb (preferred) or boltdb-shipper instead.\"\n#\n# Note that even though the configs in schema_config takes a list, here we specify the deprecated fields for each item in the list.\n\nbloom_build: \"Bloom filters are deprecated.\"\nbloom_gateway: \"Bloom filters are deprecated.\"\n\nindex_gateway:\n  ring:\n    replication_factor: \"Use global or per-tenant index_gateway_shard_size configuration from limits_config.\"\n\ningester:\n  delegate_stream_limits_enabled: \"Use global or per-tenant delegate_stream_limits_enabled configuration from limits_config.\"\n\nkafka_config:\n  address: \"Use reader_config.address or writer_config.address instead.\"\n  client_id: \"Use reader_config.client_id or writer_config.client_id instead.\"\n\n## NOTE: This will also be used to validate per-tenant overrides.\nlimits_config:\n  bloom_gateway_enable_filtering: \"Bloom filters are deprecated.\"\n  bloom_build_max_builders: \"Bloom filters are deprecated.\"\n  bloom_build_task_max_retries: \"Bloom filters are deprecated.\"\n  bloom_build_builder_response_timeout: \"Bloom filters are deprecated.\"\n  bloom_creation_enabled: \"Bloom filters are deprecated.\"\n  bloom_planning_strategy: \"Bloom filters are deprecated.\"\n  bloom_split_series_keyspace_by: \"Bloom filters are deprecated.\"\n  bloom_task_target_series_chunk_size: \"Bloom filters are deprecated.\"\n  bloom_block_encoding: \"Bloom filters are deprecated.\"\n  bloom_prefetch_blocks: \"Bloom filters are deprecated.\"\n  bloom_max_block_size: \"Bloom filters are deprecated.\"\n  bloom_max_bloom_size: \"Bloom filters are deprecated.\"\n\nserver:\n  grpc_server_stats_tracking_enabled: \"Deprecated, currently doesn't do anything, will be removed in a future version.\"\n\nstorage_config:\n  bloom_shipper: \"Bloom filters are deprecated.\"\n\n<!-- File: tools/deprecated-config-checker/test-fixtures/config.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/config.yaml)\n\n<!-- File: tools/deprecated-config-checker/test-fixtures/runtime-config.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Test-fixtures Skill\n\nPath: `tools/deprecated-config-checker/test-fixtures/runtime-config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/deprecated-config-checker/test-fixtures/runtime-config.yaml)\n\n<!-- File: tools/dev.values.yaml (Tokens: ~97 | Category: anthropic-skill) -->\ngrafana:\n  enabled: true\n  service:\n    type: LoadBalancer\n    port: 3000\n  adminPassword: admin\n\nprometheus:\n  enabled: true\n  pushgateway:\n    enabled: false\n  server:\n    service:\n      type: LoadBalancer\n      servicePort: 9090\n\nfluent-bit:\n  enable: false\n\nloki:\n  image:\n    pullPolicy: Never\n  service:\n    type: LoadBalancer\n\n<!-- File: tools/dev/k3d/chartfile.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# K3d Skill\n\nPath: `tools/dev/k3d/chartfile.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/chartfile.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/spec.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Helm-cluster Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/spec.json)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-cloud-monitoring.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs-ha-single-binary.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/enterprise-logs.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/kube-state-metrics.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed-tls.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-distributed.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki-ha-single-binary.yaml)\n\n<!-- File: tools/dev/k3d/environments/helm-cluster/values/loki.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Values Skill\n\nPath: `tools/dev/k3d/environments/helm-cluster/values/loki.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/environments/helm-cluster/values/loki.yaml)\n\n<!-- File: tools/dev/k3d/jsonnetfile.json (Tokens: ~300 | Category: anthropic-skill) -->\n# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.json)\n\n<!-- File: tools/dev/k3d/jsonnetfile.lock.json (Tokens: ~300 | Category: anthropic-skill) -->\n# K3d Skill\n\nPath: `tools/dev/k3d/jsonnetfile.lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/k3d/jsonnetfile.lock.json)\n\n<!-- File: tools/dev/kafka/docker-compose.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Kafka Skill\n\nPath: `tools/dev/kafka/docker-compose.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/docker-compose.yaml)\n\n<!-- File: tools/dev/kafka/loki-local-config.debug.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Kafka Skill\n\nPath: `tools/dev/kafka/loki-local-config.debug.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/loki-local-config.debug.yaml)\n\n<!-- File: tools/dev/kafka/prometheus.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Kafka Skill\n\nPath: `tools/dev/kafka/prometheus.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/kafka/prometheus.yaml)\n\n<!-- File: tools/dev/loki-tsdb-storage-s3/config/datasource.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# Config Skill\n\nPath: `tools/dev/loki-tsdb-storage-s3/config/datasource.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/grafana/loki/HEAD/tools/dev/loki-tsdb-storage-s3/config/datasource.yaml)\n\n<!-- ... +15 more modular skills available via /api/skills/grafana/loki?path={path} -->\n</yakaai_skills>"}