Kubernetes集群部署好后,就可以部署相关业务服务了,各个容器的日志可以帮助排错,问题快速定位,ELK 太繁琐,但是速度快,一般 loki 就够用了,loki 可以较快的安装调试,占用很少的服务器资源,安装的 loki 日志会默认存储在 /var/log/docker 里面,一直保留,本次也是使用helm 安装 loki 日志采集器,不用繁琐的过程。loki 的持久化后端存储采用 Ceph 做持久化
前提条件
- 运行正常的 kubernetes,这里是 kubernetes 1.28.x 集群
- 运行正常 Ceph 集群,并安装了 Ceph-CSI 插件,这里是采用 rook-ceph 部署的 Ceph 集群
- kubernetes 集群已安装 Helm
- 集群已经配置好 StorageClass,这里的 StorageClass 名称是 “rook-ceph-block”
部署 Loki
添加 Loki 的 helm 仓库地址
1
helm repo add grafana https://grafana.github.io/helm-charts
下载 Loki 的 chart 包到本地
1
helm pull grafana/loki-stack
解压 Chart 包,修改
charts/loki/values.yaml
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35tar -xf loki-stack-2.10.2.tgz
cd loki-stack/
vim charts/loki/values.yaml
# 修改镜像仓库地址
image:
repository: harbor.cs.yubang168.cn/publics/loki
tag: 2.6.1
pullPolicy: IfNotPresent
# 修改 Loki 服务采集日志相关配置
config:
limits_config:
ingestion_rate_strategy: local # 配置抓取速率限制在每个 Loki 节点本地生效。
ingestion_rate_mb: 64 # 将摄取速率从默认的 16MB/s 提高到 64MB/s 或更高
ingestion_burst_size_mb: 32 # 增加突发容量限制
# 配置 Loki 数据持久化
persistence:
enabled: true
accessModes:
- ReadWriteOnce
size: 30Gi
labels: {}
annotations: {}
# selector:
# matchLabels:
# app.kubernetes.io/name: loki
# subPath: ""
# existingClaim:
storageClassName: rook-ceph-block # 取消该行注释,并配置 StorageClass 名字
# 修改 Loki 副本数为 3
replicas: 3修改
charts/promtail/values.yaml
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40vim charts/promtail/values.yaml
# 修改镜像仓库地址
image:
# -- The Docker registry
registry: harbor.cs.yubang168.cn
# -- Docker image repository
repository: publics/promtail
# -- Overrides the image tag whose default is the chart's appVersion
tag: 2.9.3 # 该版本可以查看 Charts.yaml 文件确定
# -- Docker image pull policy
pullPolicy: IfNotPresent
sidecar:
configReloader:
enabled: false
image:
# -- The Docker registry for sidecar config-reloader
registry: harbor.cs.yubang168.cn
# -- Docker image repository for sidecar config-reloader
repository: publics/loki/configmap-reload
# -- Docker image tag for sidecar config-reloader
tag: v0.8.0
# -- Docker image pull policy for sidecar config-reloader
pullPolicy: IfNotPresent
# 修改 scrapeConfigs 配置,只抓取 具有 `logging=true` 标签的 Pod 日志
scrapeConfigs:
- job_name: kubernetes-pods
pipeline_stages:
{{- toYaml .Values.config.snippets.pipelineStages | nindent 4 }}
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_logging] # source_labels: [__meta_kubernetes_pod_label_logging] 这表示 Promtail 从 Kubernetes 元数据中提取 logging 标签。
regex: "true" # 表示只保留 logging=true 的 Pod 日志。
action: keep # 表示仅保留符合条件的日志,丢弃其他不符合条件的日志。
# 修改 readinessProbe 探针,
readinessProbe: {} # 取消该探针,否则 Pod 会因为一致无法找到抓取目标日志而报错部署 Loki
1
helm install -n loki-stack --create-namespace loki-stack .