多集群实现 PLG 日志收集
PLG介绍
快速部署 PLG 环境
新建目录保存配置文件
1 | mkdir -p /data/loki/config && cd /data/loki/config |
---|
部署 Loki
1 2 | wget https://raw.githubusercontent.com/grafana/loki/v2.6.1/cmd/loki/loki-local-config.yaml -O loki-config.yaml docker run --name loki -d -v /data/loki/config:/mnt/config -p 3100:3100 grafana/loki:2.6.1 -config.file=/mnt/config/loki-config.yaml |
---|
部署 promtail
1 | wget https://raw.githubusercontent.com/grafana/loki/v2.6.1/clients/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml |
---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // 修改 promtail 配置文件 server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://10.11.44.49:3100/loki/api/v1/push scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/lib/docker/containers/**/*.log |
---|
1 | docker run --name promtail -d -v /data/loki/config:/mnt/config -v /var/log:/var/log --link loki grafana/promtail:2.6.1 -config.file=/mnt/config/promtail-config.yaml |
---|
部署 grafana
1 | docker run -d --name grafana -p 3111:3000 grafana/grafana grafana |
---|
标签使用方法
单个标签
1 2 3 4 5 6 7 8 9 | scrape_configs: - job_name: system pipeline_stages: static_configs: - targets: - localhost labels: job: syslog __path__: /var/log/syslog |
---|
两个标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | scrape_configs: - job_name: system pipeline_stages: static_configs: - targets: - localhost labels: job: syslog __path__: /var/log/syslog - job_name: apache pipeline_stages: static_configs: - targets: - localhost labels: job: apache __path__: /var/log/apache.log |
---|
混合标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | scrape_configs: - job_name: system pipeline_stages: static_configs: - targets: - localhost labels: job: syslog env: dev __path__: /var/log/syslog - job_name: apache pipeline_stages: static_configs: - targets: - localhost labels: job: apache env: dev __path__: /var/log/apache.log |
---|
Helm 安装微服务模式的 Loki
Loki 的部署方式有很多种也非常灵活,有微服务部署模式,就是每个组件单独部署,也可以单进程部署。单模块部署相对比较复杂, 每个模块可以单独启动, 不同的模块间通过gRPC服务互相配合提供服务.
下载 chart 包,因为网络原因在线 helm 安装会失败,所以先下载下来。
1 | helm pull grafana/loki-distributed |
---|
安装
1 | helm install loki ./loki-distributed-0.56.7.tgz |
---|
Helm 安装简单可扩展模式的 Loki
下载 chart 包
1 | helm pull grafana/loki-simple-scalable |
---|
安装
1 | helm install loki ./loki-simple-scalable-0.56.7.tgz |
---|
Helm 安装 Loki 全家桶
下载 chart 包
1 2 3 4 5 | helm pull grafana/loki-stack 重装之前,先清理下资源 kubectl delete all --all -n loki kubectl delete ns loki |
---|
安装
1 2 3 4 5 6 | kubectl create namespace loki helm upgrade --install loki --namespace=loki loki-stack-2.8.2.tgz --set grafana.enabled=true // 只安装 Loki 和 promtail helm install loki ./loki-stack --namespace=loki --create-namespace |
---|
获取密码登录
1 | kubectl get secret --namespace loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo |
---|
访问
1 | kubectl port-forward --address 0.0.0.0 --namespace loki service/loki-grafana 3000:80 |
---|
检查 loki 的状态
curl -G -s "http://10.101.32.33:30389/loki/api/v1/label" | jq .
多集群 Loki 方案
一主多备
主要思路来自 issue
promtail
不仅向本集群 Loki 发送日志,也向主集群 Loki 发送日志。
单主
所有集群的 promtail 只向主集群发送日志
多主互备
参考文档
- https://github.com/grafana/loki/issues/1866
- https://github.com/grafana/loki/issues/5948
- K8s 日志架构
- PLG 实现 Kubernetes Pod 日志收集和展示
- Loki 使用系列
- Loki生产环境集群方案
遗留问题
- 有些节点的 promtail 健康检查一直失败。 主要原因是,/var/log/pods/ 目录里面的日志 都是软链接,导致 promtail 收集不到日志。
- 微服务和简单可扩展模式中的 Gateway pods 起不来。 修改 kube-dns 为 coredns
- helm 部署 Loki 怎么增加自定义标签。 在 promtail value.yaml 里面设置
- 主 Loki模式 和 多主模式 那个更优。 建议用 微服务部署主Loki,实现高可用和高性能。