operator: Publish docs as public website (#6449)

pull/6529/head
Periklis Tsirakidis 4 years ago committed by GitHub
parent 56bf3a49a2
commit dd80d86210
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      .gitmodules
  2. 6
      operator/.bingo/Variables.mk
  3. 7
      operator/.bingo/hugo.mod
  4. 1250
      operator/.bingo/hugo.sum
  5. 2
      operator/.bingo/variables.env
  6. 5
      operator/.gitignore
  7. 34
      operator/ADOPTERS.md
  8. 49
      operator/CONTRIBUTING.md
  9. 29
      operator/Makefile
  10. 13
      operator/docs/_index.md
  11. 23
      operator/docs/enhancements/retention_support.md
  12. 27
      operator/docs/enhancements/ruler_support.md
  13. 60
      operator/docs/lokistack/object_storage.md
  14. 25
      operator/docs/lokistack/sop.md
  15. 812
      operator/docs/operator/api.md
  16. 30
      operator/docs/operator/compatibility.md
  17. 39
      operator/docs/operator/design.md
  18. 55
      operator/docs/operator/feature-flags.md
  19. 22
      operator/docs/operator/hack_loki_operator.md
  20. 19
      operator/docs/operator/hack_operator_make_run.md
  21. 0
      operator/docs/operator/storage_size_calculator.md
  22. 9
      operator/docs/prologue/_index.md
  23. 1
      operator/docs/prologue/contributing.md
  24. 28
      operator/docs/prologue/introduction.md
  25. 39
      operator/docs/prologue/quickstart.md
  26. 16
      operator/docs/user-guides/forwarding_logs_to_gateway.md
  27. 15
      operator/docs/user-guides/forwarding_logs_without_gateway.md
  28. 17
      operator/docs/user-guides/howto_connect_grafana.md
  29. 17
      operator/netlify.toml
  30. 6
      operator/website/archetypes/default.md
  31. 16
      operator/website/archetypes/docs.md
  32. 18
      operator/website/assets/js/clipboard.js
  33. 140
      operator/website/assets/js/index.js
  34. 3
      operator/website/assets/scss/_variables.scss
  35. 37
      operator/website/assets/scss/app.scss
  36. 7
      operator/website/config.toml
  37. 27
      operator/website/config/_default/config.toml
  38. 45
      operator/website/config/_default/menus.toml
  39. 47
      operator/website/config/_default/params.toml
  40. 32
      operator/website/config/postcss.config.js
  41. 9
      operator/website/content/_index.md
  42. 1
      operator/website/content/adopters.md
  43. 1
      operator/website/content/docs
  44. 58
      operator/website/layouts/index.html
  45. 1
      operator/website/node_modules
  46. BIN
      operator/website/static/logo.png
  47. 19
      operator/website/static/site.webmanifest
  48. 1
      operator/website/themes/doks

3
.gitmodules vendored

@ -0,0 +1,3 @@
[submodule "operator/website/themes/doks"]
path = operator/website/themes/doks
url = https://github.com/h-enk/doks.git

@ -47,6 +47,12 @@ $(KIND): $(BINGO_DIR)/kind.mod
@echo "(re)installing $(GOBIN)/kind-v0.11.0"
@cd $(BINGO_DIR) && $(GO) build -mod=mod -modfile=kind.mod -o=$(GOBIN)/kind-v0.11.0 "sigs.k8s.io/kind"
HUGO := $(GOBIN)/hugo-v0.80.0
$(HUGO): $(BINGO_DIR)/hugo.mod
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.
@echo "(re)installing $(GOBIN)/hugo-v0.80.0"
@cd $(BINGO_DIR) && CGO_ENABLED=1 $(GO) build -tags=extended -mod=mod -modfile=hugo.mod -o=$(GOBIN)/hugo-v0.80.0 "github.com/gohugoio/hugo"
KUSTOMIZE := $(GOBIN)/kustomize-v4.2.0
$(KUSTOMIZE): $(BINGO_DIR)/kustomize.mod
@# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies.

@ -0,0 +1,7 @@
module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT
go 1.17
replace github.com/markbates/inflect => github.com/markbates/inflect v0.0.0-20171215194931-a12c3aec81a6
require github.com/gohugoio/hugo v0.80.0 // CGO_ENABLED=1 -tags=extended

File diff suppressed because it is too large Load Diff

@ -18,6 +18,8 @@ GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.38.0"
KIND="${GOBIN}/kind-v0.11.0"
HUGO="${GOBIN}/hugo-v0.80.0"
KUSTOMIZE="${GOBIN}/kustomize-v4.2.0"
LOGCLI="${GOBIN}/logcli-v1.6.2-0.20220407212443-2d9d0ee236ea"

@ -23,3 +23,8 @@ testbin/*
*.swp
*.swo
*~
# website
website/public/*
website/resources/*

@ -1 +1,33 @@
* [Red Hat](https://www.redhat.com)
---
title: Adopters
lead: ""
date: 2021-04-30T10:40:00+00:00
lastmod: 2021-04-30T10:40:00+00:00
draft: false
images: []
---
<!--
Insert your entry using this template keeping the list alphabetically sorted:
## <Company/Organization Name>
https://our-link.com/
Environments: AWS, Azure, Google Cloud, Bare Metal, etc
Details (optional):
- Ruler for LokiStack
-->
This document tracks people and use cases for the Prometheus Operator in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various the Prometheus Operator applications, operation environments, and cluster sizes. The Prometheus Operator development team may reach out periodically to check-in on how the Prometheus Operator is working in the field and update this list.
Go ahead and [add your organization](https://github.com/grafana/loki/edit/main/operator/ADOPTERS.md) to the list.
## Red Hat Inc
https://www.redhat.com
Environments: AWS, Azure, Google Cloud, Bare Metal, etc

@ -1,20 +1,49 @@
Contributing to Loki Operator
---
title: Contributing
description: How can I contribute to the Loki Operator?
lead: ""
lastmod: "2021-03-08T08:48:57+00:00"
draft: false
images: []
menu:
docs:
parent: prologue
weight: 200
toc: true
---
## Ideology
This project is licensed under the [AGPLv3 license](../../../../../LICENSE) and accept
contributions via GitHub pull requests. This document outlines some of the
conventions on development workflow, contact points
and other resources to make it easier to get your contribution accepted.
OpenShift has proven to be a powerful and successful platform for running containers in production. Our primary goal is to bring Loki Operator to our customers. That being said, it is a very large platform intended for large-scale production use. It is not intended to be ephemeral.
To maintain a safe and welcoming community, all participants must adhere to the
project's [Code of Conduct](../../../../../CODE_OF_CONDUCT.md).
The tools required to run and test an OCP cluster are complex and cumbersome. The current processes to build an OCP cluster include the slack cluster-bot, openshift-install script, and CRC. The fastest route to create a working OCP cluster is 45 minutes. CRC *may* be faster, but it requires over [half of your local machine's resources](https://coreos.slack.com/archives/GGUR75P60/p1591803889037800) and doesn’t handle sleeping/suspending very well. Using openshift-install comes with its own [headaches](https://coreos.slack.com/archives/GGUR75P60/p1615458361119300). These blockers cause a significant amount of [wasted time](https://coreos.slack.com/archives/GGUR75P60/p1599242159479000?thread_ts=1599241354.478700&cid=GGUR75P60) that could be spent on more valuable things.
# Contributor License Agreement
Nevertheless, I argue that none of this is necessary. The problems are caused when we bastardize a large, complex, production platform for testing and tooling. OpenShift is a superset of Kubernetes. Operators are now Kubernetes native. Given this reality, we have called the Loki Operator a Kubernetes operator rather than an OpenShift operator. This may seem like a trivial delineation, but it isn’t. The operator has been designed from the beginning using Kubernetes tools and APIs. This has allowed us to build, test, and deploy in very little time with very little effort. It is not uncommon to create a pull request and have it [reviewed and merged](https://github.com/grafana/loki/pulls?q=is%3Apr+is%3Aclosed) within 15 minutes.
By contributing to this project you agree to the Contributor License Agreement.
There are certainly OCP exclusives that we want to program into the Loki Operator, but this shouldn’t block or break the primary objectives. In other words, the Loki Operator should be Kubernetes first and OpenShift second. The Loki Operator should be open to using the OpenShift APIs without requiring them. All tools, automation, scripts, make targets, etc, should work naturally with Kubernetes and Kubernetes compatible APIs. <u>OCP exclusives should be opt-in</u>. It might be natural for you to think this causes obstruction for deploying to OCP, but that is far from true. Packaging for OCP should be a scripted process that, once opted in, should build all of the necessary components. So far, it has proven to be successful.
# Email and Chat
## Tooling
The project currently uses the [Grafana Slack](https://grafana.slack.com):
- [#loki-operator-dev](https://grafana.slack.com/archives/C02RFD9CWVA)
We use [KinD](https://github.com/kubernetes-sigs/kind) to deploy and test the Loki Operator. We have had no compatibility issues, no wasted time on a learning curve, no failed clusters, no token expirations, no cluster expirations, no spinning laptop fans from gluttonous virtual machines, etc. It takes approximately 20 seconds to create a local KinD cluster and your machine won’t even notice it’s running. The cluster is fully compatible with all Kubernetes APIs and the operator runs on KinD perfectly. After your KinD cluster is created your kubeconfig is updated and the Makefile will work. The Makefiles and scripts are written to work with kubectl. This abstraction prevents any unnecessary complications caused by magic processes like deploying images to internal clusters, etc.
## Getting Started
- Fork the repository on GitHub
- Read the [README](README.md) for build and test instructions
- Play with the project, submit bugs, submit patches!
## Testing
## Contribution Flow
Tests should be succinct and without dependencies. This means that unit tests are the de-facto form of testing the Loki Operator. Unit tests are written with the standard Go library using [testify](https://github.com/stretchr/testify) for assertions. [Counterfeiter](https://github.com/maxbrunsfeld/counterfeiter) is included for generating test fakes and stubs for all dependencies. This library provides an API for generating fake implementations of interfaces for injecting them into testable units of code. Unit tests should implement or stub *only the parts required to test*. Large, all-inclusive structs should be avoided in favor of concise, single responsibility functions. This encourages small tests with minimal assertions to keep them hyper-focused, making tests easy to create *and* maintain.
This is a rough outline of what a contributor's workflow looks like:
- Create a topic branch from where you want to base your work (usually `main`).
- Make commits of logical units.
- Make sure your commit messages are in the proper format (see below).
- Push your changes to a topic branch in your fork of the repository.
- Make sure the tests pass, and add any new tests as appropriate.
- Submit a pull request to the original repository.
Thanks for your contributions!

@ -2,6 +2,9 @@
# referenced here as make variables. For example: $(GOLANGCI_LINT)
include .bingo/Variables.mk
WEBSITE_DIR ?= website
WEBSITE_BASE_URL ?= https://loki-operator.dev
# set the default target here, because the include above will automatically set
# it to the first defined target
.DEFAULT_GOAL := default
@ -257,3 +260,29 @@ oci-build-calculator: ## Build the calculator image
.PHONY: oci-push-calculator
oci-push-calculator: ## Push the calculator image
$(OCI_RUNTIME) push $(CALCULATOR_IMG)
##@ Website
TYPES_V1BETA1_TARGET := $(shell find apis/loki -type f -iname "*_types.go")
docs/operator/api.md: $(TYPES_V1BETA1_TARGET)
po-docgen api $(TYPES_V1BETA1_TARGET) > $@
sed -i 's/Prometheus Operator/Loki Operator/ig' $@
FEATURE_FLAGS_TARGET := $(shell find apis/config -type f -iname "*_types.go")
docs/operator/feature-flags.md: $(FEATURE_FLAGS_TARGET)
po-docgen api $(FEATURE_FLAGS_TARGET) > $@
sed -i 's/title: "API"/title: "Feature Flags"/' $@
sed -i 's/Prometheus Operator/Loki Operator/ig' $@
.PHONY: web-pre
web-pre: docs/operator/api.md docs/operator/feature-flags.md
@echo ">> preprocessing docs for website"
@git submodule update --init --recursive
cd $(WEBSITE_DIR)/themes/doks/ && npm install && rm -rf content
.PHONY: web
web: $(HUGO) | web-pre ## Run production build of the loki-operator.dev website
cd $(WEBSITE_DIR) && $(HUGO) -b $(WEBSITE_BASE_URL)
.PHONY: web-serve
web-serve: $(HUGO) | web-pre ## Run local preview version of the loki-operator.dev website
@cd $(WEBSITE_DIR) && $(HUGO) serve

@ -0,0 +1,13 @@
---
title : "Loki-Operator Docs"
description: "Documentation for the Loki-Operator."
lead: ""
date: 2021-04-30T10:40:00+00:00
lastmod: 2021-04-30T10:40:00+00:00
draft: false
images: []
---
# Loki-Operator
A Kubernetes Operator for Loki provided by the Grafana Loki SIG operator.

@ -1,18 +1,21 @@
---
title: lokistack log retention support
title: Stream-based Retention Support
authors:
- @shwetaap
- "@shwetaap"
reviewers:
- @xperimental
- @periklis
creation-date: 2022-05-21
last-updated: 2022-05-21
tracking-link:
see-also:
- "@xperimental"
- "@periklis"
lead: ""
date: 2022-05-21T08:48:45+00:00
lastmod: 2022-05-21T08:48:45+00:00
draft: false
menu:
docs:
parent: "enhancements"
weight: 100
toc: true
---
# LokiStack Log Retention Support
## Summary
Retention in Grafana Loki is achieved either through the Table Manager or the Compactor.

@ -1,21 +1,22 @@
---
title: lokistack ruler support
title: Ruler Support
description: Support for Loki Ruler and alerting/recording rules
authors:
- @periklis
- "@periklis"
reviewers:
- @xperimental
- @cyriltovena
creation-date: 2022-04-21
last-updated: 2022-04-21
tracking-link:
- [5211](https://github.com/grafana/loki/issues/5211)
- [5843](https://github.com/grafana/loki/issues/5843)
see-also:
- [PR 5986](https://github.com/grafana/loki/pull/5986)
- "@xperimental"
- "@cyriltovena"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
menu:
docs:
parent: "enhancements"
weight: 100
toc: true
---
# LokiStack Ruler Support
## Summary
The ruler has been an integral part of Loki since release v2.2.0 and complete since v2.3.0 that added support for recording rules. This component enables users to give a group of LogQL expressions that trigger either alerts (e.g. high amount of error logs in production service) and/or post-evaluation recorded metrics (e.g. rate of incoming error logs on production service per minute). The following sections describe a set of APIs in form of custom resource definitions (CRD) that enable users of `LokiStack` resources to support:

@ -1,4 +1,37 @@
# Storing Objects to Google Cloud Platform
---
title: "Object Storage"
description: "Setup for storing logs to Object Storage"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "lokistack"
weight: 100
toc: true
---
Loki Operator supports [AWS S3](https://aws.amazon.com/), [Azure](https://azure.microsoft.com), [GCS](https://cloud.google.com/), [Minio](https://min.io/), [OpenShift Data Foundation](https://www.redhat.com/en/technologies/cloud-computing/openshift-data-foundation) and [Swift](https://docs.openstack.org/swift/latest/) for LokiStack object storage.
## AWS S3
Coming soon.
### Requirements
### Installation
## Azure
Coming soon.
### Requirements
### Installation
## Google Cloud Storage
Loki Operator supports [GCS](https://cloud.google.com/) for Loki storage.
@ -33,3 +66,28 @@ Loki Operator supports [GCS](https://cloud.google.com/) for Loki storage.
name: test
type: gcs
```
## Minio
Coming soon.
### Requirements
### Installation
## OpenShift Data Foundation
Coming soon.
### Requirements
### Installation
## Swift
Coming soon.
### Requirements
### Installation

@ -1,12 +1,19 @@
# Alerts
<!-- TOC depthTo:2 -->
- Loki Cluster
- [Loki Request Errors](#Loki-Request-Errors)
- [Loki Request Panics](#Loki-Request-Panics)
<!-- /TOC -->
---
title: "Standard Operational Procedures"
description: "The LokiStack Alerts and Standard Operational Procedures"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "lokistack"
weight: 100
toc: true
---
The following page describes Standard Operational Procedures for alerts provided and managed by the Loki Operator for any LokiStack instance.
## Loki Request Errors

@ -0,0 +1,812 @@
---
title: "API"
description: "Generated API docs for the Loki Operator"
lead: ""
date: 2021-03-08T08:49:31+00:00
draft: false
images: []
menu:
docs:
parent: "operator"
weight: 1000
toc: true
---
This Document documents the types introduced by the Loki Operator to be consumed by users.
> Note this document is generated from code comments. When contributing a change to this document please do so by changing the code comments.
## Table of Contents
* [AlertingRule](#alertingrule)
* [AlertingRuleGroup](#alertingrulegroup)
* [AlertingRuleGroupSpec](#alertingrulegroupspec)
* [AlertingRuleList](#alertingrulelist)
* [AlertingRuleSpec](#alertingrulespec)
* [AlertingRuleStatus](#alertingrulestatus)
* [AuthenticationSpec](#authenticationspec)
* [AuthorizationSpec](#authorizationspec)
* [IngestionLimitSpec](#ingestionlimitspec)
* [LimitsSpec](#limitsspec)
* [LimitsTemplateSpec](#limitstemplatespec)
* [LokiComponentSpec](#lokicomponentspec)
* [LokiStack](#lokistack)
* [LokiStackComponentStatus](#lokistackcomponentstatus)
* [LokiStackList](#lokistacklist)
* [LokiStackSpec](#lokistackspec)
* [LokiStackStatus](#lokistackstatus)
* [LokiStackStorageStatus](#lokistackstoragestatus)
* [LokiTemplateSpec](#lokitemplatespec)
* [OIDCSpec](#oidcspec)
* [OPASpec](#opaspec)
* [ObjectStorageSchema](#objectstorageschema)
* [ObjectStorageSecretSpec](#objectstoragesecretspec)
* [ObjectStorageSpec](#objectstoragespec)
* [ObjectStorageTLSSpec](#objectstoragetlsspec)
* [QueryLimitSpec](#querylimitspec)
* [RoleBindingsSpec](#rolebindingsspec)
* [RoleSpec](#rolespec)
* [RulesSpec](#rulesspec)
* [Subject](#subject)
* [TenantSecretSpec](#tenantsecretspec)
* [TenantsSpec](#tenantsspec)
* [RecordingRule](#recordingrule)
* [RecordingRuleGroup](#recordingrulegroup)
* [RecordingRuleGroupSpec](#recordingrulegroupspec)
* [RecordingRuleList](#recordingrulelist)
* [RecordingRuleSpec](#recordingrulespec)
* [RecordingRuleStatus](#recordingrulestatus)
* [AlertManagerDiscoverySpec](#alertmanagerdiscoveryspec)
* [AlertManagerNotificationQueueSpec](#alertmanagernotificationqueuespec)
* [AlertManagerSpec](#alertmanagerspec)
* [RelabelConfig](#relabelconfig)
* [RemoteWriteClientQueueSpec](#remotewriteclientqueuespec)
* [RemoteWriteClientSpec](#remotewriteclientspec)
* [RemoteWriteSpec](#remotewritespec)
* [RulerConfig](#rulerconfig)
* [RulerConfigList](#rulerconfiglist)
* [RulerConfigSpec](#rulerconfigspec)
* [RulerConfigStatus](#rulerconfigstatus)
## AlertingRule
AlertingRule is the Schema for the alertingrules API
<em>appears in: [AlertingRuleList](#alertingrulelist)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| metadata | | [metav1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta) | false |
| spec | | [AlertingRuleSpec](#alertingrulespec) | false |
| status | | [AlertingRuleStatus](#alertingrulestatus) | false |
[Back to TOC](#table-of-contents)
## AlertingRuleGroup
AlertingRuleGroup defines a group of Loki alerting rules.
<em>appears in: [AlertingRuleSpec](#alertingrulespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| name | Name of the alerting rule group. Must be unique within all alerting rules. | string | true |
| interval | Interval defines the time interval between evaluation of the given alerting rule. | PrometheusDuration | true |
| limit | Limit defines the number of alerts an alerting rule can produce. 0 is no limit. | int32 | false |
| rules | Rules defines a list of alerting rules | []*[AlertingRuleGroupSpec](#alertingrulegroupspec) | true |
[Back to TOC](#table-of-contents)
## AlertingRuleGroupSpec
AlertingRuleGroupSpec defines the spec for a Loki alerting rule.
<em>appears in: [AlertingRuleGroup](#alertingrulegroup)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| alert | The name of the alert. Must be a valid label value. | string | false |
| expr | The LogQL expression to evaluate. Every evaluation cycle this is evaluated at the current time, and all resultant time series become pending/firing alerts. | string | true |
| for | Alerts are considered firing once they have been returned for this long. Alerts which have not yet fired for long enough are considered pending. | PrometheusDuration | false |
| annotations | Annotations to add to each alert. | map[string]string | false |
| labels | Labels to add to each alert. | map[string]string | false |
[Back to TOC](#table-of-contents)
## AlertingRuleList
AlertingRuleList contains a list of AlertingRule
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| metadata | | [metav1.ListMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#listmeta-v1-meta) | false |
| items | | [][AlertingRule](#alertingrule) | true |
[Back to TOC](#table-of-contents)
## AlertingRuleSpec
AlertingRuleSpec defines the desired state of AlertingRule
<em>appears in: [AlertingRule](#alertingrule)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| tenantID | TenantID of tenant where the alerting rules are evaluated in. | string | true |
| groups | List of groups for alerting rules. | []*[AlertingRuleGroup](#alertingrulegroup) | true |
[Back to TOC](#table-of-contents)
## AlertingRuleStatus
AlertingRuleStatus defines the observed state of AlertingRule
<em>appears in: [AlertingRule](#alertingrule)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| conditions | Conditions of the AlertingRule generation health. | []metav1.Condition | false |
[Back to TOC](#table-of-contents)
## AuthenticationSpec
AuthenticationSpec defines the oidc configuration per tenant for lokiStack Gateway component.
<em>appears in: [TenantsSpec](#tenantsspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| tenantName | TenantName defines the name of the tenant. | string | true |
| tenantId | TenantID defines the id of the tenant. | string | true |
| oidc | OIDC defines the spec for the OIDC tenant's authentication. | *[OIDCSpec](#oidcspec) | true |
[Back to TOC](#table-of-contents)
## AuthorizationSpec
AuthorizationSpec defines the opa, role bindings and roles configuration per tenant for lokiStack Gateway component.
<em>appears in: [TenantsSpec](#tenantsspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| opa | OPA defines the spec for the third-party endpoint for tenant's authorization. | *[OPASpec](#opaspec) | true |
| roles | Roles defines a set of permissions to interact with a tenant. | [][RoleSpec](#rolespec) | true |
| roleBindings | RoleBindings defines configuration to bind a set of roles to a set of subjects. | [][RoleBindingsSpec](#rolebindingsspec) | true |
[Back to TOC](#table-of-contents)
## IngestionLimitSpec
IngestionLimitSpec defines the limits applied at the ingestion path.
<em>appears in: [LimitsTemplateSpec](#limitstemplatespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| ingestionRate | IngestionRate defines the sample size per second. Units MB. | int32 | false |
| ingestionBurstSize | IngestionBurstSize defines the local rate-limited sample size per distributor replica. It should be set to the set at least to the maximum logs size expected in a single push request. | int32 | false |
| maxLabelNameLength | MaxLabelNameLength defines the maximum number of characters allowed for label keys in log streams. | int32 | false |
| maxLabelValueLength | MaxLabelValueLength defines the maximum number of characters allowed for label values in log streams. | int32 | false |
| maxLabelNamesPerSeries | MaxLabelNamesPerSeries defines the maximum number of label names per series in each log stream. | int32 | false |
| maxGlobalStreamsPerTenant | MaxGlobalStreamsPerTenant defines the maximum number of active streams per tenant, across the cluster. | int32 | false |
| maxLineSize | MaxLineSize defines the maximum line size on ingestion path. Units in Bytes. | int32 | false |
[Back to TOC](#table-of-contents)
## LimitsSpec
LimitsSpec defines the spec for limits applied at ingestion or query path across the cluster or per tenant.
<em>appears in: [LokiStackSpec](#lokistackspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| global | Global defines the limits applied globally across the cluster. | *[LimitsTemplateSpec](#limitstemplatespec) | false |
| tenants | Tenants defines the limits applied per tenant. | map[string][LimitsTemplateSpec](#limitstemplatespec) | false |
[Back to TOC](#table-of-contents)
## LimitsTemplateSpec
LimitsTemplateSpec defines the limits applied at ingestion or query path.
<em>appears in: [LimitsSpec](#limitsspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| ingestion | IngestionLimits defines the limits applied on ingested log streams. | *[IngestionLimitSpec](#ingestionlimitspec) | false |
| queries | QueryLimits defines the limit applied on querying log streams. | *[QueryLimitSpec](#querylimitspec) | false |
[Back to TOC](#table-of-contents)
## LokiComponentSpec
LokiComponentSpec defines the requirements to configure scheduling of each loki component individually.
<em>appears in: [LokiTemplateSpec](#lokitemplatespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| replicas | Replicas defines the number of replica pods of the component. | int32 | false |
| nodeSelector | NodeSelector defines the labels required by a node to schedule the component onto it. | map[string]string | false |
| tolerations | Tolerations defines the tolerations required by a node to schedule the component onto it. | []corev1.Toleration | false |
[Back to TOC](#table-of-contents)
## LokiStack
LokiStack is the Schema for the lokistacks API
<em>appears in: [LokiStackList](#lokistacklist)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| spec | | [LokiStackSpec](#lokistackspec) | false |
| status | | [LokiStackStatus](#lokistackstatus) | false |
| metadata | | [metav1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta) | false |
[Back to TOC](#table-of-contents)
## LokiStackComponentStatus
LokiStackComponentStatus defines the map of per pod status per LokiStack component. Each component is represented by a separate map of v1.Phase to a list of pods.
<em>appears in: [LokiStackStatus](#lokistackstatus)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| compactor | Compactor is a map to the pod status of the compactor pod. | PodStatusMap | false |
| distributor | Distributor is a map to the per pod status of the distributor deployment | PodStatusMap | false |
| indexGateway | IndexGateway is a map to the per pod status of the index gateway statefulset | PodStatusMap | false |
| ingester | Ingester is a map to the per pod status of the ingester statefulset | PodStatusMap | false |
| querier | Querier is a map to the per pod status of the querier deployment | PodStatusMap | false |
| queryFrontend | QueryFrontend is a map to the per pod status of the query frontend deployment | PodStatusMap | false |
| gateway | Gateway is a map to the per pod status of the lokistack gateway deployment. | PodStatusMap | false |
| ruler | Ruler is a map to the per pod status of the lokistack ruler statefulset. | PodStatusMap | false |
[Back to TOC](#table-of-contents)
## LokiStackList
LokiStackList contains a list of LokiStack
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| metadata | | [metav1.ListMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#listmeta-v1-meta) | false |
| items | | [][LokiStack](#lokistack) | true |
[Back to TOC](#table-of-contents)
## LokiStackSpec
LokiStackSpec defines the desired state of LokiStack
<em>appears in: [LokiStack](#lokistack)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| managementState | ManagementState defines if the CR should be managed by the operator or not. Default is managed. | ManagementStateType | false |
| size | Size defines one of the support Loki deployment scale out sizes. | LokiStackSizeType | true |
| storage | Storage defines the spec for the object storage endpoint to store logs. | [ObjectStorageSpec](#objectstoragespec) | true |
| storageClassName | Storage class name defines the storage class for ingester/querier PVCs. | string | true |
| replicationFactor | ReplicationFactor defines the policy for log stream replication. | int32 | true |
| rules | Rules defines the spec for the ruler component | *[RulesSpec](#rulesspec) | false |
| limits | Limits defines the limits to be applied to log stream processing. | *[LimitsSpec](#limitsspec) | false |
| template | Template defines the resource/limits/tolerations/nodeselectors per component | *[LokiTemplateSpec](#lokitemplatespec) | false |
| tenants | Tenants defines the per-tenant authentication and authorization spec for the lokistack-gateway component. | *[TenantsSpec](#tenantsspec) | false |
[Back to TOC](#table-of-contents)
## LokiStackStatus
LokiStackStatus defines the observed state of LokiStack
<em>appears in: [LokiStack](#lokistack)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| components | Components provides summary of all Loki pod status grouped per component. | [LokiStackComponentStatus](#lokistackcomponentstatus) | false |
| storage | Storage provides summary of all changes that have occurred to the storage configuration. | [LokiStackStorageStatus](#lokistackstoragestatus) | false |
| conditions | Conditions of the Loki deployment health. | []metav1.Condition | false |
[Back to TOC](#table-of-contents)
## LokiStackStorageStatus
LokiStackStorageStatus defines the observed state of the Loki storage configuration.
<em>appears in: [LokiStackStatus](#lokistackstatus)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| schemas | Schemas is a list of schemas which have been applied to the LokiStack. | [][ObjectStorageSchema](#objectstorageschema) | false |
[Back to TOC](#table-of-contents)
## LokiTemplateSpec
LokiTemplateSpec defines the template of all requirements to configure scheduling of all Loki components to be deployed.
<em>appears in: [LokiStackSpec](#lokistackspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| compactor | Compactor defines the compaction component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
| distributor | Distributor defines the distributor component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
| ingester | Ingester defines the ingester component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
| querier | Querier defines the querier component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
| queryFrontend | QueryFrontend defines the query frontend component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
| gateway | Gateway defines the lokistack gateway component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
| indexGateway | IndexGateway defines the index gateway component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
| ruler | Ruler defines the ruler component spec. | *[LokiComponentSpec](#lokicomponentspec) | false |
[Back to TOC](#table-of-contents)
## OIDCSpec
OIDCSpec defines the oidc configuration spec for lokiStack Gateway component.
<em>appears in: [AuthenticationSpec](#authenticationspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| secret | Secret defines the spec for the clientID, clientSecret and issuerCAPath for tenant's authentication. | *[TenantSecretSpec](#tenantsecretspec) | true |
| issuerURL | IssuerURL defines the URL for issuer. | string | true |
| redirectURL | RedirectURL defines the URL for redirect. | string | false |
| groupClaim | Group claim field from ID Token | string | false |
| usernameClaim | User claim field from ID Token | string | false |
[Back to TOC](#table-of-contents)
## OPASpec
OPASpec defines the opa configuration spec for lokiStack Gateway component.
<em>appears in: [AuthorizationSpec](#authorizationspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| url | URL defines the third-party endpoint for authorization. | string | true |
[Back to TOC](#table-of-contents)
## ObjectStorageSchema
ObjectStorageSchema defines the requirements needed to configure a new storage schema.
<em>appears in: [LokiStackStorageStatus](#lokistackstoragestatus), [ObjectStorageSpec](#objectstoragespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| version | Version for writing and reading logs. | ObjectStorageSchemaVersion | true |
| effectiveDate | EffectiveDate is the date in UTC that the schema will be applied on. To ensure readibility of logs, this date should be before the current date in UTC. | StorageSchemaEffectiveDate | true |
[Back to TOC](#table-of-contents)
## ObjectStorageSecretSpec
ObjectStorageSecretSpec is a secret reference containing name only, no namespace.
<em>appears in: [ObjectStorageSpec](#objectstoragespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| type | Type of object storage that should be used | ObjectStorageSecretType | true |
| name | Name of a secret in the namespace configured for object storage secrets. | string | true |
[Back to TOC](#table-of-contents)
## ObjectStorageSpec
ObjectStorageSpec defines the requirements to access the object storage bucket to persist logs by the ingester component.
<em>appears in: [LokiStackSpec](#lokistackspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| schemas | Schemas for reading and writing logs. | [][ObjectStorageSchema](#objectstorageschema) | true |
| secret | Secret for object storage authentication. Name of a secret in the same namespace as the LokiStack custom resource. | [ObjectStorageSecretSpec](#objectstoragesecretspec) | true |
| tls | TLS configuration for reaching the object storage endpoint. | *[ObjectStorageTLSSpec](#objectstoragetlsspec) | false |
[Back to TOC](#table-of-contents)
## ObjectStorageTLSSpec
ObjectStorageTLSSpec is the TLS configuration for reaching the object storage endpoint.
<em>appears in: [ObjectStorageSpec](#objectstoragespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| caName | CA is the name of a ConfigMap containing a CA certificate. It needs to be in the same namespace as the LokiStack custom resource. | string | false |
[Back to TOC](#table-of-contents)
## QueryLimitSpec
QueryLimitSpec defines the limits applies at the query path.
<em>appears in: [LimitsTemplateSpec](#limitstemplatespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| maxEntriesLimitPerQuery | MaxEntriesLimitsPerQuery defines the maximum number of log entries that will be returned for a query. | int32 | false |
| maxChunksPerQuery | MaxChunksPerQuery defines the maximum number of chunks that can be fetched by a single query. | int32 | false |
| maxQuerySeries | MaxQuerySeries defines the the maximum of unique series that is returned by a metric query. | int32 | false |
[Back to TOC](#table-of-contents)
## RoleBindingsSpec
RoleBindingsSpec binds a set of roles to a set of subjects.
<em>appears in: [AuthorizationSpec](#authorizationspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| name | | string | true |
| subjects | | [][Subject](#subject) | true |
| roles | | []string | true |
[Back to TOC](#table-of-contents)
## RoleSpec
RoleSpec describes a set of permissions to interact with a tenant.
<em>appears in: [AuthorizationSpec](#authorizationspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| name | | string | true |
| resources | | []string | true |
| tenants | | []string | true |
| permissions | | []PermissionType | true |
[Back to TOC](#table-of-contents)
## RulesSpec
RulesSpec deifnes the spec for the ruler component.
<em>appears in: [LokiStackSpec](#lokistackspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| enabled | Enabled defines a flag to enable/disable the ruler component | bool | true |
| selector | A selector to select which LokiRules to mount for loading alerting/recording rules from. | *[metav1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#labelselector-v1-meta) | false |
| namespaceSelector | Namespaces to be selected for PrometheusRules discovery. If unspecified, only the same namespace as the LokiStack object is in is used. | *[metav1.LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#labelselector-v1-meta) | false |
[Back to TOC](#table-of-contents)
## Subject
Subject represents a subject that has been bound to a role.
<em>appears in: [RoleBindingsSpec](#rolebindingsspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| name | | string | true |
| kind | | SubjectKind | true |
[Back to TOC](#table-of-contents)
## TenantSecretSpec
TenantSecretSpec is a secret reference containing name only for a secret living in the same namespace as the LokiStack custom resource.
<em>appears in: [OIDCSpec](#oidcspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| name | Name of a secret in the namespace configured for tenant secrets. | string | true |
[Back to TOC](#table-of-contents)
## TenantsSpec
TenantsSpec defines the mode, authentication and authorization configuration of the lokiStack gateway component.
<em>appears in: [LokiStackSpec](#lokistackspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| mode | Mode defines the mode in which lokistack-gateway component will be configured. | ModeType | true |
| authentication | Authentication defines the lokistack-gateway component authentication configuration spec per tenant. | [][AuthenticationSpec](#authenticationspec) | false |
| authorization | Authorization defines the lokistack-gateway component authorization configuration spec per tenant. | *[AuthorizationSpec](#authorizationspec) | false |
[Back to TOC](#table-of-contents)
## RecordingRule
RecordingRule is the Schema for the recordingrules API
<em>appears in: [RecordingRuleList](#recordingrulelist)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| metadata | | [metav1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta) | false |
| spec | | [RecordingRuleSpec](#recordingrulespec) | false |
| status | | [RecordingRuleStatus](#recordingrulestatus) | false |
[Back to TOC](#table-of-contents)
## RecordingRuleGroup
RecordingRuleGroup defines a group of Loki recording rules.
<em>appears in: [RecordingRuleSpec](#recordingrulespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| name | Name of the recording rule group. Must be unique within all recording rules. | string | true |
| interval | Interval defines the time interval between evaluation of the given recoding rule. | PrometheusDuration | true |
| limit | Limit defines the number of series a recording rule can produce. 0 is no limit. | int32 | false |
| rules | Rules defines a list of recording rules | []*[RecordingRuleGroupSpec](#recordingrulegroupspec) | true |
[Back to TOC](#table-of-contents)
## RecordingRuleGroupSpec
RecordingRuleGroupSpec defines the spec for a Loki recording rule.
<em>appears in: [RecordingRuleGroup](#recordingrulegroup)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| record | The name of the time series to output to. Must be a valid metric name. | string | false |
| expr | The LogQL expression to evaluate. Every evaluation cycle this is evaluated at the current time, and all resultant time series become pending/firing alerts. | string | true |
[Back to TOC](#table-of-contents)
## RecordingRuleList
RecordingRuleList contains a list of RecordingRule
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| metadata | | [metav1.ListMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#listmeta-v1-meta) | false |
| items | | [][RecordingRule](#recordingrule) | true |
[Back to TOC](#table-of-contents)
## RecordingRuleSpec
RecordingRuleSpec defines the desired state of RecordingRule
<em>appears in: [RecordingRule](#recordingrule)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| tenantID | TenantID of tenant where the recording rules are evaluated in. | string | true |
| groups | List of groups for recording rules. | []*[RecordingRuleGroup](#recordingrulegroup) | true |
[Back to TOC](#table-of-contents)
## RecordingRuleStatus
RecordingRuleStatus defines the observed state of RecordingRule
<em>appears in: [RecordingRule](#recordingrule)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| conditions | Conditions of the RecordingRule generation health. | []metav1.Condition | false |
[Back to TOC](#table-of-contents)
## AlertManagerDiscoverySpec
AlertManagerDiscoverySpec defines the configuration to use DNS resolution for AlertManager hosts.
<em>appears in: [AlertManagerSpec](#alertmanagerspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| enableSRV | Use DNS SRV records to discover Alertmanager hosts. | bool | true |
| refreshInterval | How long to wait between refreshing DNS resolutions of Alertmanager hosts. | PrometheusDuration | false |
[Back to TOC](#table-of-contents)
## AlertManagerNotificationQueueSpec
AlertManagerNotificationQueueSpec defines the configuration for AlertManager notification settings.
<em>appears in: [AlertManagerSpec](#alertmanagerspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| capacity | Capacity of the queue for notifications to be sent to the Alertmanager. | int32 | false |
| timeout | HTTP timeout duration when sending notifications to the Alertmanager. | PrometheusDuration | false |
| forOutageTolerance | Max time to tolerate outage for restoring \"for\" state of alert. | PrometheusDuration | false |
| forGracePeriod | Minimum duration between alert and restored \"for\" state. This is maintained only for alerts with configured \"for\" time greater than the grace period. | PrometheusDuration | false |
| resendDelay | Minimum amount of time to wait before resending an alert to Alertmanager. | PrometheusDuration | false |
[Back to TOC](#table-of-contents)
## AlertManagerSpec
AlertManagerSpec defines the configuration for ruler's alertmanager connectivity.
<em>appears in: [RulerConfigSpec](#rulerconfigspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| externalUrl | URL for alerts return path. | string | false |
| externalLabels | Additional labels to add to all alerts. | map[string]string | false |
| enableV2 | If enabled, then requests to Alertmanager use the v2 API. | bool | true |
| endpoints | List of AlertManager URLs to send notifications to. Each Alertmanager URL is treated as a separate group in the configuration. Multiple Alertmanagers in HA per group can be supported by using DNS resolution (See EnableDNSDiscovery). | []string | true |
| discovery | Defines the configuration for DNS-based discovery of AlertManager hosts. | *[AlertManagerDiscoverySpec](#alertmanagerdiscoveryspec) | false |
| notificationQueue | Defines the configuration for the notification queue to AlertManager hosts. | *[AlertManagerNotificationQueueSpec](#alertmanagernotificationqueuespec) | false |
[Back to TOC](#table-of-contents)
## RelabelConfig
RelabelConfig allows dynamic rewriting of the label set, being applied to samples before ingestion. It defines `<metric_relabel_configs>`-section of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs
<em>appears in: [RemoteWriteClientSpec](#remotewriteclientspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| sourceLabels | The source labels select values from existing labels. Their content is concatenated using the configured separator and matched against the configured regular expression for the replace, keep, and drop actions. | []string | true |
| separator | Separator placed between concatenated source label values. default is ';'. | string | false |
| targetLabel | Label to which the resulting value is written in a replace action. It is mandatory for replace actions. Regex capture groups are available. | string | false |
| regex | Regular expression against which the extracted value is matched. Default is '(.*)' | string | false |
| modulus | Modulus to take of the hash of the source label values. | uint64 | false |
| replacement | Replacement value against which a regex replace is performed if the regular expression matches. Regex capture groups are available. Default is '$1' | string | false |
| action | Action to perform based on regex matching. Default is 'replace' | RelabelActionType | false |
[Back to TOC](#table-of-contents)
## RemoteWriteClientQueueSpec
RemoteWriteClientQueueSpec defines the configuration of the remote write client queue.
<em>appears in: [RemoteWriteSpec](#remotewritespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| capacity | Number of samples to buffer per shard before we block reading of more | int32 | false |
| maxShards | Maximum number of shards, i.e. amount of concurrency. | int32 | false |
| minShards | Minimum number of shards, i.e. amount of concurrency. | int32 | false |
| maxSamplesPerSend | Maximum number of samples per send. | int32 | false |
| batchSendDeadline | Maximum time a sample will wait in buffer. | PrometheusDuration | false |
| minBackOffPeriod | Initial retry delay. Gets doubled for every retry. | PrometheusDuration | false |
| maxBackOffPeriod | Maximum retry delay. | PrometheusDuration | false |
[Back to TOC](#table-of-contents)
## RemoteWriteClientSpec
RemoteWriteClientSpec defines the configuration of the remote write client.
<em>appears in: [RemoteWriteSpec](#remotewritespec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| name | Name of the remote write config, which if specified must be unique among remote write configs. | string | true |
| url | The URL of the endpoint to send samples to. | string | true |
| timeout | Timeout for requests to the remote write endpoint. | PrometheusDuration | false |
| authorization | Type of authorzation to use to access the remote write endpoint | RemoteWriteAuthType | true |
| authorizationSecretName | Name of a secret in the namespace configured for authorization secrets. | string | true |
| additionalHeaders | Additional HTTP headers to be sent along with each remote write request. | map[string]string | false |
| relabelConfigs | List of remote write relabel configurations. | [][RelabelConfig](#relabelconfig) | false |
| proxyUrl | Optional proxy URL. | string | false |
| followRedirects | Configure whether HTTP requests follow HTTP 3xx redirects. | bool | true |
[Back to TOC](#table-of-contents)
## RemoteWriteSpec
RemoteWriteSpec defines the configuration for ruler's remote_write connectivity.
<em>appears in: [RulerConfigSpec](#rulerconfigspec)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| enabled | Enable remote-write functionality. | bool | false |
| refreshPeriod | Minimum period to wait between refreshing remote-write reconfigurations. | PrometheusDuration | false |
| client | Defines the configuration for remote write client. | *[RemoteWriteClientSpec](#remotewriteclientspec) | false |
| queue | Defines the configuration for remote write client queue. | *[RemoteWriteClientQueueSpec](#remotewriteclientqueuespec) | false |
[Back to TOC](#table-of-contents)
## RulerConfig
RulerConfig is the Schema for the rulerconfigs API
<em>appears in: [RulerConfigList](#rulerconfiglist)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| metadata | | [metav1.ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta) | false |
| spec | | [RulerConfigSpec](#rulerconfigspec) | false |
| status | | [RulerConfigStatus](#rulerconfigstatus) | false |
[Back to TOC](#table-of-contents)
## RulerConfigList
RulerConfigList contains a list of RuleConfig
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| metadata | | [metav1.ListMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#listmeta-v1-meta) | false |
| items | | [][RulerConfig](#rulerconfig) | true |
[Back to TOC](#table-of-contents)
## RulerConfigSpec
RulerConfigSpec defines the desired state of Ruler
<em>appears in: [RulerConfig](#rulerconfig)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| evaluationInterval | Interval on how frequently to evaluate rules. | PrometheusDuration | false |
| pollInterval | Interval on how frequently to poll for new rule definitions. | PrometheusDuration | false |
| alertmanager | Defines alert manager configuration to notify on firing alerts. | *[AlertManagerSpec](#alertmanagerspec) | false |
| remoteWrite | Defines a remote write endpoint to write recording rule metrics. | *[RemoteWriteSpec](#remotewritespec) | false |
[Back to TOC](#table-of-contents)
## RulerConfigStatus
RulerConfigStatus defines the observed state of RulerConfig
<em>appears in: [RulerConfig](#rulerconfig)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| conditions | Conditions of the RulerConfig health. | []metav1.Condition | false |
[Back to TOC](#table-of-contents)

@ -0,0 +1,30 @@
---
title: "Compatibility"
description: "The Loki Operator supports a number of Kubernetes and Loki releases."
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "operator"
weight: 100
toc: true
---
The Loki Operator supports a number of Kubernetes and Loki releases.
## Kubernetes
The Loki Operator uses client-go to communicate with Kubernetes clusters. The supported Kubernetes cluster version is determined by client-go. The compatibility matrix for client-go and Kubernetes clusters can be found [here](https://github.com/kubernetes/client-go#compatibility-matrix). All additional compatibility is only best effort, or happens to still/already be supported. The currently used client-go version is "v0.23.5".
Due to the use of CustomResourceDefinitions Kubernetes >= v1.7.0 is required.
Due to the use of apiextensions.k8s.io/v1 CustomResourceDefinitions, requires Kubernetes >= v1.16.0.
## Loki
The versions of Loki compatible to be run with the Loki Operator are:
* v2.5.0

@ -0,0 +1,39 @@
---
title: "Design"
description: "Design of the Loki Operator"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "operator"
weight: 10
toc: true
---
This document describes the design and interaction between the custom resource definitions that the Loki Operator introduces.
The custom resources that the Loki Operator introduces are:
* [LokiStack](#lokistack)
* [AlertingRule](#alertingrule)
* [RecordingRule](#recordingrule)
* [RulerConfig](#rulerconfig)
## LokiStack
Coming soon.
## AlertingRule
Coming soon.
## RecordingRule
Coming soon.
## RulerConfig
Coming soon.

@ -0,0 +1,55 @@
---
title: "Feature Flags"
description: "Generated API docs for the Loki Operator"
lead: ""
date: 2021-03-08T08:49:31+00:00
draft: false
images: []
menu:
docs:
parent: "operator"
weight: 1000
toc: true
---
This Document documents the types introduced by the Loki Operator to be consumed by users.
> Note this document is generated from code comments. When contributing a change to this document please do so by changing the code comments.
## Table of Contents
* [FeatureFlags](#featureflags)
* [ProjectConfig](#projectconfig)
## FeatureFlags
FeatureFlags is a set of operator feature flags.
<em>appears in: [ProjectConfig](#projectconfig)</em>
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| enableCertSigningService | | bool | false |
| enableServiceMonitors | | bool | false |
| enableTlsHttpServices | | bool | false |
| enableTlsServiceMonitorConfig | | bool | false |
| enableTlsGrpcServices | | bool | false |
| enableLokiStackAlerts | | bool | false |
| enableLokiStackGateway | | bool | false |
| enableLokiStackGatewayRoute | | bool | false |
| enableGrafanaLabsStats | | bool | false |
| enableLokiStackWebhook | | bool | false |
| enableAlertingRuleWebhook | | bool | false |
| enableRecordingRuleWebhook | | bool | false |
[Back to TOC](#table-of-contents)
## ProjectConfig
ProjectConfig is the Schema for the projectconfigs API
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| featureFlags | | [FeatureFlags](#featureflags) | false |
[Back to TOC](#table-of-contents)

@ -1,8 +1,21 @@
# Hacking on Loki Operator
---
title: "Hacking using an image registry"
description: "Hacking using an image registry"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "operator"
weight: 100
toc: true
---
Loki Operator is the Kubernetes Operator for [Loki](https://grafana.com/docs/loki/latest/).
## Hacking on Loki Operator using kind
## Hacking using kind
[kind](https://kind.sigs.k8s.io/docs/user/quick-start/) is a tool for running local Kubernetes clusters using Docker container "nodes". kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.
@ -74,7 +87,8 @@ make undeploy
It will undeploy controller from the configured Kubernetes cluster in [~/.kube/config](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#the-kubeconfig-environment-variable)
## Hacking on Loki Operator on OpenShift
## Hacking on OpenShift
### Requirements
@ -218,7 +232,7 @@ kubectl apply -f ./hack/addons_dev.yaml
[2] When deploying on a native K8s cluster, ensure that the namespaces of the `ServiceAccount` in the `ClusterRoleBinding` objects are changed accordingly.
## Basic Troubleshooting on Hacking on Loki Operator
## Basic Troubleshooting
### New changes are not detected by Loki Operator

@ -1,10 +1,23 @@
# Hacking on Loki Operator using `make run`
---
title: "Hacking using make run"
description: "Hacking using make run"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "operator"
weight: 100
toc: true
---
This document demonstrates how to use Loki Operator for development and testing locally on Kind and OpenShift using the `make run` command.
_Note:_ This is helpful when you don't want to deploy the Loki Operator image everytime you make slight changes to the operator code.
## Hacking on Loki Operator using kind
## Hacking using kind
[kind](https://kind.sigs.k8s.io/docs/user/quick-start/) is a tool for running local Kubernetes clusters using Docker container "nodes". kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.
@ -99,7 +112,7 @@ _Note:_ This is helpful when you don't want to deploy the Loki Operator image ev
kubectl delete -f config/overlays/development/minio
```
## Hacking on Loki Operator on OpenShift
## Hacking on OpenShift
### Requirements

@ -0,0 +1,9 @@
---
title : "Prologue"
description: "Prologue for the Loki Operator."
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
---

@ -0,0 +1,28 @@
---
title: "Introduction"
description: "The Loki Operator provides Kubernetes native deployment and management of Loki and related logging components"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "prologue"
weight: 100
toc: true
---
The Loki Operator provides [Kubernetes](https://kubernetes.io/) native deployment and management of [Loki](https://github.com/grafana/loki) and related logging components.
The purpose of this project is to simplify and automate the configuration of a Loki based logging stack for Kubernetes clusters.
The Loki operator includes, but is not limited to, the following features:
* Kubernetes Custom Resources: Use Kubernetes custom resources to deploy and manage Loki, Alerting rules, Recording rules, and related components.
* Simplified Deployment Configuration: Configure the fundamentals of Loki like tenants, limits, replication factor and storage from a native Kubernetes resource.
## Get started
### Quick Start
One page summary of how to start with the Loki Operator. [Quick Start →]({{< ref "quickstart" >}})

@ -0,0 +1,39 @@
---
title: Quick Start
description: Quick Start
lead: ""
lastmod: "2021-03-08T08:48:57+00:00"
draft: false
images: []
menu:
docs:
parent: prologue
weight: 200
toc: true
---
One page summary on how to start with Loki Operator and LokiStack.
## Requirements
The easiest way to start with the Loki Operator is to use Kubernetes [kind](sigs.k8s.io/kind).
## Deploy from Github repository
The simplest form to deploy the Loki Operator and a LokiStack for demo purposes is:
```shell
make quickstart
```
If you want to test local changes from your repository fork, you need to provide an image registry organization that you own that has an image repository name `loki-operator`, e.g. `quay.io/my-company-org/loki-operator`. The command to use your custom images is:
```shell
make quickstart REGISTRY_ORG=my-company-org
```
## Further reading
For detailed instructions on how to start hacking on the Loki Operator, please follow one of the two guides:
- [Hack using an image registry →]({{< ref "hack_loki_operator.md" >}})
- [Hack using make run →]({{< ref "hack_operator_make_run.md" >}})

@ -1,4 +1,18 @@
# Forwarding Logs to LokiStack
---
title: "Forwarding Logs to LokiStack"
description: "Forwarding Logs to Loki-Operator managed LokiStack resources"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "user-guides"
weight: 100
toc: true
---
This document will describe how to send application, infrastructure, and audit logs to the LokiStack Gateway as different tenants using Promtail or Fluentd. The built-in gateway provides secure access to the distributor (and query-frontend) via consulting an OAuth/OIDC endpoint for the request subject.

@ -1,4 +1,17 @@
# Forwarding Logs to LokiStack without LokiStack Gateway
---
title: "Forwarding Logs without the Gateway"
description: "Forwarding Logs to LokiStack without LokiStack Gateway"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "user-guides"
weight: 100
toc: true
---
This document describes how to send application, infrastructure, and audit logs to the Loki Distributor as different tenants using Fluentd or Vector.

@ -1,4 +1,17 @@
# How-To: Connect Grafana to an in-cluster LokiStack
---
title: "Connect Grafana to an in-cluster LokiStack"
description: "How to Connect Grafana to an in-cluster LokiStack"
lead: ""
date: 2022-06-21T08:48:45+00:00
lastmod: 2022-06-21T08:48:45+00:00
draft: false
images: []
menu:
docs:
parent: "user-guides"
weight: 100
toc: true
---
## Introduction
@ -29,7 +42,7 @@ If your LokiStack deployment has the gateway enabled, use one of the first two o
The preferred option for accessing the data stored in Loki managed by loki-operator when running on OpenShift with the default OpenShift tenancy model is to go through the LokiStack gateway and do proper authentication against the authentication service included in OpenShift.
An example configuration authenticating to the gateway in this manner is available in [`addon_grafana_gateway_ocp_oauth.yaml`](../hack/addon_grafana_gateway_ocp_oauth.yaml).
An example configuration authenticating to the gateway in this manner is available in [`addon_grafana_gateway_ocp_oauth.yaml`](../../hack/addon_grafana_gateway_ocp_oauth.yaml).
The configuration uses `oauth-proxy` to authenticate the user to the Grafana instance and forwards the token through Grafana to LokiStack's gateway service. This enables the configuration to fully take advantage of the tenancy model, so that users can only see the logs of their applications and only admins can view infrastructure and audit logs.

@ -0,0 +1,17 @@
[build]
publish = "website/public"
functions = "functions"
[build.environment]
# HUGO_VERSION = "..." is set by bingo which allows reproducible local environment.
NODE_VERSION = "15.5.1"
NPM_VERSION = "7.3.0"
[context.production]
command = "(env && make web) || (sleep 30; false)"
[context.deploy-preview]
command = "(env && make web WEBSITE_BASE_URL=${DEPLOY_PRIME_URL}) || (sleep 30; false)"
[context.branch-deploy]
command = "(env && make web WEBSITE_BASE_URL=${DEPLOY_PRIME_URL}) || (sleep 30; false)"

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

@ -0,0 +1,16 @@
---
title: "{{ replace .Name "-" " " | title }}"
description: ""
lead: ""
date: {{ .Date }}
lastmod: {{ .Date }}
draft: true
images: []
menu:
docs:
parent: ""
weight: 999
toc: true
---
{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" >}}

@ -0,0 +1,18 @@
import Clipboard from 'clipboard';
var clipboard = new Clipboard('.btn-clipboard');
clipboard.on('success', function(e) {
/*
console.info('Action:', e.action);
console.info('Text:', e.text);
console.info('Trigger:', e.trigger);
*/
e.clearSelection();
});
clipboard.on('error', function(e) {
console.error('Action:', e.action);
console.error('Trigger:', e.trigger);
});

@ -0,0 +1,140 @@
var suggestions = document.getElementById('suggestions');
var userinput = document.getElementById('userinput');
document.addEventListener('keydown', inputFocus);
function inputFocus(e) {
if (e.keyCode === 191 ) {
e.preventDefault();
userinput.focus();
}
if (e.keyCode === 27 ) {
userinput.blur();
suggestions.classList.add('d-none');
}
}
document.addEventListener('click', function(event) {
var isClickInsideElement = suggestions.contains(event.target);
if (!isClickInsideElement) {
suggestions.classList.add('d-none');
}
});
/*
Source:
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
*/
document.addEventListener('keydown',suggestionFocus);
function suggestionFocus(e){
const focusableSuggestions= suggestions.querySelectorAll('a');
const focusable= [...focusableSuggestions];
const index = focusable.indexOf(document.activeElement);
let nextIndex = 0;
if (e.keyCode === 38) {
e.preventDefault();
nextIndex= index > 0 ? index-1 : 0;
focusableSuggestions[nextIndex].focus();
}
else if (e.keyCode === 40) {
e.preventDefault();
nextIndex= index+1 < focusable.length ? index+1 : index;
focusableSuggestions[nextIndex].focus();
}
}
(function(){
var index = new FlexSearch({
preset: 'score',
cache: true,
doc: {
id: 'id',
field: [
'title',
'description',
'content',
],
store: [
'href',
'title',
'description',
],
},
});
var docs = [
{{ range $index, $page := (where .Site.Pages "Section" "docs") -}}
{
id: {{ $index }},
href: "{{ .RelPermalink | relURL }}",
title: {{ .Title | jsonify }},
description: {{ .Params.description | jsonify }},
content: {{ .Content | jsonify }}
},
{{ end -}}
];
index.add(docs);
userinput.addEventListener('input', show_results, true);
suggestions.addEventListener('click', accept_suggestion, true);
function show_results(){
var value = this.value;
var results = index.search(value, 5);
var entry, childs = suggestions.childNodes;
var i = 0, len = results.length;
suggestions.classList.remove('d-none');
results.forEach(function(page) {
entry = document.createElement('div');
entry.innerHTML = '<a href><span></span><span></span></a>';
a = entry.querySelector('a'),
t = entry.querySelector('span:first-child'),
d = entry.querySelector('span:nth-child(2)');
a.href = page.href;
t.textContent = page.title;
d.textContent = page.description;
suggestions.appendChild(entry);
});
while(childs.length > len){
suggestions.removeChild(childs[i])
}
}
function accept_suggestion(){
while(suggestions.lastChild){
suggestions.removeChild(suggestions.lastChild);
}
return false;
}
}());

@ -0,0 +1,3 @@
$lokioperator: #2b388f;
$primary: $lokioperator;

@ -0,0 +1,37 @@
/** Import Bootstrap functions */
@import "bootstrap/scss/functions";
/** Import theme variables */
@import "../../themes/doks/assets/scss/common/variables";
/** Overwrite variables */
@import "variables";
/** Import Bootstrap */
@import "bootstrap/scss/bootstrap";
/** Import highlight.js */
// @import "highlight.js/scss/dracula";
/** Import KaTeX */
@import "katex/dist/katex";
/** Import theme styles */
@import "../../themes/doks/assets/scss/common/fonts";
@import "../../themes/doks/assets/scss/common/global";
@import "../../themes/doks/assets/scss/common/dark";
@import "../../themes/doks/assets/scss/components/doks";
// @import "components/syntax";
@import "../../themes/doks/assets/scss/components/code";
@import "../../themes/doks/assets/scss/components/alerts";
@import "../../themes/doks/assets/scss/components/buttons";
@import "../../themes/doks/assets/scss/components/comments";
@import "../../themes/doks/assets/scss/components/forms";
@import "../../themes/doks/assets/scss/components/images";
@import "../../themes/doks/assets/scss/components/search";
@import "../../themes/doks/assets/scss/components/tables";
@import "../../themes/doks/assets/scss/layouts/footer";
@import "../../themes/doks/assets/scss/layouts/header";
@import "../../themes/doks/assets/scss/layouts/pages";
@import "../../themes/doks/assets/scss/layouts/posts";
@import "../../themes/doks/assets/scss/layouts/sidebar";

@ -0,0 +1,7 @@
baseURL = 'https://loki-operator.dev/'
languageCode = 'en-us'
title = 'Loki Operator'
theme = 'doks'
[permalinks]
docs = "/:sections/:filename.md"

@ -0,0 +1,27 @@
enableGitInfo = true
[markup]
[markup.highlight]
codeFences = true
guessSyntax = false
hl_Lines = ""
lineNoStart = 1
lineNos = false
lineNumbersInTable = true
noClasses = false
style = "dracula"
tabWidth = 4
[module]
[[module.mounts]]
source = "assets"
target = "assets"
[[module.mounts]]
source = "static"
target = "static"
[[module.mounts]]
source = "node_modules/flexsearch"
target = "assets/js/vendor/flexsearch"
[[module.mounts]]
source = "node_modules/katex"
target = "assets/js/vendor/katex"

@ -0,0 +1,45 @@
[[docs]]
name = "Prologue"
weight = 10
identifier = "prologue"
url = "/docs/prologue"
[[docs]]
name = "Loki Operator"
weight = 40
identifier = "operator"
url = "/docs/operator/"
[[docs]]
name = "LokiStack"
weight = 40
identifier = "lokistack"
url = "/docs/lokistack/"
[[docs]]
name = "User Guides"
weight = 40
identifier = "user-guides"
url = "/docs/user-guides/"
[[docs]]
name = "Enhancements"
weight = 50
identifier = "enhancements"
url = "/docs/enhancements/"
[[main]]
name = "Docs"
url = "/docs/prologue/introduction.md/"
weight = 10
[[main]]
name = "Adopters"
url = "/adopters"
weight = 30
[[social]]
name = "GitHub"
pre = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-github\"><path d=\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"></path></svg>"
url = "https://github.com/grafana/loki/tree/main/operator"
weight = 10

@ -0,0 +1,47 @@
# Meta Data for SEO
## Homepage
title = "Loki Operator"
titleSeparator = "-"
titleAddition = "Kubernetes Operator for Loki"
description = "A Kubernetes Operator for Loki provided by the Grafana Loki SIG operator. "
## Open Graph + Twitter Cards
images = ["logo.png"]
#twitterSite = ""
#twitterCreator = ""
#facebookAuthor = ""
#facebookPublisher = ""
ogLocale = "en_US"
## JSON-LD
schemaType = "Organization"
schemaLogo = "logo.png"
schemaTwitter = ""
schemaLinkedIn = ""
schemaGitHub = "https://github.com/grafana"
schemaSection = "blog"
## Sitelinks Search Box
siteLinksSearchBox = false
## Chrome Browser
themeColor = "#fff"
# Footer
footer = "Powered by <a href=\"https://www.netlify.com/\">Netlify</a>, <a href=\"https://gohugo.io/\">Hugo</a>, and based on <a href=\"https://getdoks.org/\">Doks</a>"
# Edit Page
docsRepo = "https://github.com/grafana/loki"
editPage = false
[options]
lazySizes = false
clipBoard = true
instantPage = false
flexSearch = true
darkMode = true
bootStrapJs = false
breadCrumb = true
highLight = false
kaTex = false

@ -0,0 +1,32 @@
const autoprefixer = require('autoprefixer');
const purgecss = require('@fullhuman/postcss-purgecss');
const whitelister = require('purgecss-whitelister');
module.exports = {
plugins: [
autoprefixer(),
purgecss({
content: [
'./layouts/**/*.html',
'./content/**/*.md',
'./themes/doks/layouts/**/*.html',
],
safelist: [
'lazyloaded',
'table',
'thead',
'tbody',
'tr',
'th',
'td',
...whitelister([
'./themes/doks/assets/scss/components/_doks.scss',
'./themes/doks/assets/scss/components/_code.scss',
'./themes/doks/assets/scss/components/_search.scss',
'./themes/doks/assets/scss/common/_dark.scss',
'./node_modules/katex/dist/katex.css',
]),
],
}),
],
}

@ -0,0 +1,9 @@
---
title : "Loki-Operator"
description: "A Kubernetes Operator for Loki provided by the Grafana Loki SIG operator. "
lead: "A Kubernetes Operator for Loki provided by the Grafana Loki SIG operator. "
date: 2021-04-30T09:45:00+00:00
lastmod: 2021-04-30T09:45:00+00:00
draft: false
images: []
---

@ -0,0 +1,58 @@
{{ define "main" }}
<section class="section container-fluid mt-n3 pb-3">
<div class="row justify-content-center">
<div class="col-lg-12 text-center">
<img src="{{ .Site.BaseURL | absURL }}/logo.png" alt="Loki Logo" height="200">
<h1 class="mt-0">{{ .Title }}</h1>
</div>
<div class="col-lg-9 col-xl-8 text-center">
<p class="lead">{{ .Params.lead | safeHTML }}</p>
<a class="btn btn-primary btn-lg px-4 mb-2" href="{{ "docs/prologue/introduction.md/" | relURL }}" role="button">Get started</a>
<p class="meta">AGPLv3 Licensed. <a href="https://github.com/grafana/loki">GitHub</a></p>
</div>
</div>
</section>
{{ end }}
{{ define "sidebar-prefooter" }}
<section class="section section-sm">
<div class="container">
<div class="row justify-content-center text-center">
<div class="col-lg-5">
<h2 class="h4">LokiStack</h2>
<p>Secure and multi-tenant Loki instances with built-in authentication/authorization</p>
</div>
<div class="col-lg-5">
<h2 class="h4">Alerting Rules</h2>
<p>Notify Alertmanager hosts by declarative kubernetes native Alerting Rules</p>
</div>
<div class="col-lg-5">
<h2 class="h4">Recording rules</h2>
<p>Push recorded metrics by declarative kuberentes native Recording Rules</p>
</div>
</div>
<div class="row justify-content-center text-center">
<div class="col-lg-5">
<h2 class="h4">AlertManager Support</h2>
</div>
<div class="col-lg-5">
<h2 class="h4">Authentication using OIDC/OAuth2/OpenShift</h2>
</div>
<div class="col-lg-5">
<h2 class="h4">Authorization using Open Policy Agent</h2>
</div>
</div>
</div>
</section>
{{ end }}
{{ define "sidebar-footer" }}
<section class="section section-sm container-fluid">
<div class="row justify-content-center text-center">
<div class="col-lg-9">
{{- .Content -}}
</div>
</div>
</section>
{{ end }}

@ -0,0 +1 @@
./themes/doks/node_modules

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

@ -0,0 +1,19 @@
{
"name": "Loki Operator",
"short_name": "Loki Operator",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#fff",
"background_color": "#fff",
"display": "standalone"
}

@ -0,0 +1 @@
Subproject commit 14fe597271d6efc7d77461798f22a6af068300d2
Loading…
Cancel
Save