在Kubernetes上安装Grafana Loki

关于这篇文章

我在Kubernetes上安装了Grafana Loki,所以留下了一些笔记。

前提条件

    • Kubernetesクラスタは構築済み

 

    kubectl, helm導入済み

在Kubernetes中的日志

详细的信息可以在Kubernetes的官方文档中找到。

 

Pod的日志可以使用kubectl logs <pod名称>命令输出,但这些日志保存在运行Pod的节点的/var/log目录下。
(在Kubernetes的组件中,非容器的部分有些不会保存在/var/log中,但本次不讨论这些。)
在Kubernetes中,Pod结束后日志也会被清除,所以要永久保存日志,需要自行引入解决方案。
本次使用Grafana + Grafana Loki + Promtail来实现这一目标。

关于Grafana Loki

Loki是与Grafana配套使用的日志收集开源软件,由Grafana Labs开发。

    • Grafana: Lokiが集めたログを可視化するダッシュボードである。モニタリングツールのPrometheusとよくセットで使われる。

 

    • Grafana Loki: ログを集約するエージェント。

 

    Promtail: 各ノードにDaemonSetとしてデプロイされ、ノードに保存されたログをGrafana Lokiに転送する。

 

关于Loki的部署模式

Loki为不同的组件分割粒度准备了几种部署模式。

    • モノリシックモード: すべてのコンポーネントをシングルのバイナリでデプロイする。Lokiのテストや、1日100GB程度のread/writeなどの場合に選択する。

 

    • シンプルスケーラブルデプロイモード: readとwriteのコンポーネントを分離してデプロイする。1日100GBを超える場合や、readとwriteを別々にスケールしたい場合に選択する。

 

    マイクロサービスモード: Lokiのコンポーネントをすべて個別にデプロイする。コンポーネントごとに細かくスケールしたい場合に選択する。保守が大変。

 

以下是HELM Chart的位置。

 

在选择上需要准备多个HELM Chart,并选择适合特定用途的。其中主要包括以下3个选择。

    • grafana/loki: シンプルスケーラブルデプロイモードでlokiをデプロイする。

 

    • grafana/loki-distributed: マイクロサービスモードでlokiをデプロイする。

 

    grafana/loki-stack: モノリシックモードでlokiをデプロイする。あわせて、promtailなどもセットでデプロイする。

如果只是要确认功能是否正常工作,那么grafana/loki-stack是最简单的选择,但与其他两个选项相比,可以在values.yaml中自定义的项目较少,因此定制起来较为困难。
由于我们不需要微服务模式,因此我选择了简单可扩展的部署模式下的grafana/loki。

构建过程

环境

    • Azure Kubernetes Service

Kubernetes Version: 1.26.6
Agentpoolのノードサイズと数: Standard_B2ms x 1

添加helm仓库。

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

安装Grafana Loki

安装Grafana Loki。

    • ストレージはとりあえずminioを使う。

 

    • デフォルトではloki.auth_enabled=trueがセットされマルチテナントモードになる。マルチテナントモードではGrafanaとの通信にテナントの選択などが必要で設定が煩雑なので、とりあえずfalseにしておく。

 

    • read, write, backendのreplica数は1でOK。

replication_factorはデータ保護のためにwriteデータをレプリケーションするための設定。writeを1にしたため、こちらも1にしておかないと正常動作しない。

 

kubectl create namespace grafana
helm install loki -n grafana grafana/loki \
  --set minio.enabled=true \
  --set write.replicas=1 \
  --set read.replicas=1 \
  --set backend.replicas=1 \
  --set loki.auth_enabled=false \
  --set loki.commonConfig.replication_factor=1

安装Promtail

参考公式手册,基本上保持默认设置即可。请指定与Loki相同的命名空间。

 

helm install promtail -n grafana grafana/promtail

安装Grafana

请参考公式。

 

安装Grafana

helm install grafana -n grafana grafana/grafana --set service.type=LoadBalancer

获取管理员密码。

kubectl get secret --namespace grafana grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

获取外部IP地址。

kubectl get svc -n grafana grafana -o jsonpath="{.status.loadBalancer.ingress[0].ip}"

使用浏览器访问获得的IP地址,使用用户名admin和刚刚获取的密码进行登录。

数据源设置

    • 以下の設定を参考に

 

    • HTTPのURLの欄にhttp://loki-gatewayと入力し設定を保存する

grafanaとlokiのnamespaceが異なる場合はhttp://loki-gateway.{namespace}.svc.cluster.localと入力する

 

image.png

验证行动

为了确认是否能够收集日志,部署以下示例Pod以在标准输出中输出计数器。
(示例Pod来源于Kubernetes的官方文档)

kubectl apply -f https://k8s.io/examples/debug/counter-pod.yaml

在Grafana的主页>浏览器中,发出查询如{pod=”counter”}得到的结果,可以确认counter已经被显示出来了。

image.png

总结

使用Helm Chart几乎可以直接部署公式的应用。
根据在Loki安装过程中选择的选项组合不同,可能导致Loki无法正常运行,并且无法从Grafana进行连接,我在这方面遇到了一些困难。

广告
将在 10 秒后关闭
bannerAds