在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と入力する

验证行动
为了确认是否能够收集日志,部署以下示例Pod以在标准输出中输出计数器。
(示例Pod来源于Kubernetes的官方文档)
kubectl apply -f https://k8s.io/examples/debug/counter-pod.yaml
在Grafana的主页>浏览器中,发出查询如{pod=”counter”}得到的结果,可以确认counter已经被显示出来了。

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