Grafana Loki

Grafana Loki Essentials Part 2

Deploying Loki in Kubernetes

In this guide, we demonstrate how to deploy Grafana Loki using Helm in a Kubernetes cluster. We cover adding and updating the Grafana Helm repository, searching for the appropriate Loki chart, customizing the default configuration values, and finally installing the Loki stack (which includes Loki, Promtail, and Grafana) with minimal manual configuration.


1. Adding and Updating the Grafana Helm Repository

To begin, add the Grafana Helm repository by executing the following command:

helm repo add grafana https://grafana.github.io/helm-charts

You should receive output confirming that the repository has been added:

Documents\scratch\loki-demo
> helm repo add grafana https://grafana.github.io/helm-charts
"grafana" has been added to your repositories

Next, update your Helm repositories with:

helm repo update

The terminal output will indicate a successful update:

Documents\scratch\loki-demo
> helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "grafana" chart repository
...Successfully got an update from the "prometheus-community" chart repository
Update Complete. ⚓ Happy Helming! ⚓

Note

Ensure that your Helm version is up-to-date to prevent compatibility issues with newer charts.


2. Searching for the Loki Chart

Grafana offers several Loki-related charts. To search for these charts within the Grafana repository, run:

helm search repo loki

You will see output similar to this:

NAME                              CHART VERSION   APP VERSION     DESCRIPTION
grafana/loki                     5.10.0          2.8.3          Helm chart for Grafana Loki in simple, scalable...
grafana/loki-canary              0.13.0          2.8.3          Helm chart for Grafana Loki Canary
grafana/loki-distributed         0.71.1          2.8.3          Helm chart for Grafana Loki in microservices mode
grafana/loki-simple-scalable     1.8.11          2.6.1          Helm chart for Grafana Loki in simple, scalable...
grafana/loki-stack               2.6.1           2.8.3          Loki: like Prometheus, but for logs.
grafana/fluent-bit               2.6.0           v2.1.0         Uses fluent-bit Loki go plugin for gathering logs...
grafana/promtail                 6.14.1          2.8.3          Promtail is an agent which ships the contents of log files.

For this deployment, we will use the loki-stack chart, which packages Loki, Promtail, and Grafana for a complete logging solution.


3. Inspecting and Customizing Chart Values

Before installing the chart, it is best practice to review and customize its default configuration. Export the default values to a file named values.yaml:

helm show values grafana/loki-stack > values.yaml

Open values.yaml in your favorite editor to review the configuration. The file includes sections for Loki, Promtail, Fluent Bit, and Grafana. For instance, the Promtail configuration section may look like this:

promtail:
  enabled: true
  config:
    logLevel: info
    serverPort: 3101
    clients:
      - url: http://{{ .Release.Name }}:3100/loki/api/v1/push

This configuration ensures that Promtail is enabled and connected to the Loki server. Note that Fluent Bit is disabled and Grafana is disabled by default. Since Grafana is needed for dashboards, update the configurations as follows:

promtail:
  enabled: true
  config:
    logLevel: info
    serverPort: 3101
    clients:
      - url: http://{{ .Release.Name }}:3100/loki/api/v1/push

fluent-bit:
  enabled: false

grafana:
  enabled: true
  sidecar:
    datasources:
      label: ""
      labelValue: ""
      enabled: true
      maxLines: 1000
  image:
    tag: latest

Tip

You can adjust the Grafana image tag if you require a specific version for your environment.


4. Installing the Loki Stack with Helm

With your customized values.yaml in place, install the Loki stack by running:

helm install --values values.yaml loki grafana/loki-stack

The installation process will output information similar to the following:

Documents\scratch\loki-demo
> helm install --values values.yaml loki grafana/loki-stack
W0806 19:03:54.310850 34388 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+
W0806 19:03:54.312802 34388 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+
W0806 19:03:54.381651 34388 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+
W0806 19:03:54.382713 34388 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+
NAME: loki
LAST DEPLOYED: Sun Aug  6 19:03:53 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See http://docs.grafana.org/features/datasources/loki/ for more detail.
Documents\scratch\loki-demo took 2s

This output verifies that your Loki stack has been successfully deployed. You can now add Loki as a data source in Grafana.


5. Verifying the Deployment

Confirm that all components have been deployed by listing your Kubernetes resources:

kubectl get all

A sample output may look like this:

NAME                                      READY   STATUS      RESTARTS   AGE
pod/loki-0                                0/1     Running     0          40s
pod/loki-grafana-5df4fd7d99-x4794          2/2     Running     0          40s
pod/loki-promtail-bk9r                    1/1     Running     0          40s

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)      AGE
service/kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP      157d
service/loki           ClusterIP   10.96.247.199   <none>        3100/TCP     40s
service/loki-grafana   ClusterIP   10.103.158.170  <none>        80/TCP       40s
service/loki-headless  ClusterIP   None            <none>        3100/TCP     40s
service/loki-memberlist ClusterIP   None            <none>        7946/TCP     40s

NAME                                  DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/loki-promtail          1         1         1       1            1           <none>          40s

NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/loki-grafana             1/1     1            1           40s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/loki-grafana-5df4fd7d99       1         1         1       40s

NAME                               READY   AGE
statefulset.apps/loki             0/1     40s

This output confirms the deployment of key components:

  • A StatefulSet for Loki
  • A Deployment (and ReplicaSet) for Grafana
  • A DaemonSet for Promtail, ensuring an instance runs on every node

Reminder

For multi-node clusters, Promtail will automatically run on every node, ensuring comprehensive log collection.

Once deployed, log in to Grafana to verify that Loki has been automatically added as a data source, simplifying your log monitoring workflow.


By following these steps, you have successfully deployed the Loki stack to your Kubernetes cluster using Helm. This complete logging solution integrates efficient log aggregation with Grafana dashboards for powerful monitoring and troubleshooting.

For further reading and additional resources:

Watch Video

Watch video content

Previous
Loki in Kubernetes