Loki日志持久化
前言:
基于当前生产环境及测试环境的Loki服务升级或重启后,历史的日志信息会丢失,因此需要做Loki日志持久化
Loki介绍:
Loki是一款同类于elk的日志收集系统,相较于elk日志收集系统,Loki更加的轻便,它的设计非常经济高效且易于操作,官方介绍说到:Like Prometheus, but for logs.
Loki由3个组成部分组成:
- loki 是主服务器,负责存储日志和处理查询。
- promtail 是代理,负责收集日志并将其发送给loki。
- 用户界面的Grafana。
一、Loki部署
1.helm安装
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
tar xf helm-v3.2.4-linux-amd64.tar.gz && mv linux-amd64/helm /usr/local/bin
helm version
version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}
2.loki安装
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm upgrade --install loki --namespace=monitoring loki/loki-stack
二、Loki日志持久化
基于helm安装的没有数据持久化, 可以直接更改statefulset
里面的数据卷挂载。
持久化前准备工作
1.nfs-server端搭建
sudo apt-get install nfs-kernel-server
sudo systemctl restart nfs-kernel-server.service
sudo mkdir -R /data/nfs_service
sudo chown -R nobody.nogroup /data/nfs-service
sudo vim /etc/exports
/nfs/loki_data 172.16.0.0/12(rw,sync,no_subtree_check) #添加授权网段的权限
sudo /etc/init.d/rpcbind restart
sudo systemctl status nfs-kernel-server.service
2.nfs-client端搭建
sudo apt-get install nfs-common
sudo mkdir /data/nfs-client
sudo showmount -e 172.21.12.24 查看nfs-server
sudo mount -t nfs 172.21.12.24:/data/nfs_service /data/nfs_service #临时挂载
sudo vim /etc/fstab
172.16.189.101:/nfs/loki_data /data/nfs-client nfs defaults,_rnetdev 1 1 #开机自动挂载 , _rnetdev 表示主机无法挂载直接跳过
mount -a #fstab文件书写是否正确
3.本地数据目录及用户的创建 ------------ 重要(不更改目录所属用户会提示权限拒绝错误)
mkdir /nfs/loki_data
useradd loki -u 10001
chown -R loki:loki /nfs
4.创建pv及pvc
cat > loki-pv-pvc.yaml << 'EOF'
apiVersion: v1
kind: PersistentVolume
metadata:
name: loki-log-nfs
namespace: loki
annotations:
volume.beta.kubernetes.io/storage-class: "loki-log"
spec:
capacity:
storage: 300Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 172.16.189.101
path: "/nfs/loki_data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: loki-log-nfs
namespace: loki
annotations:
volume.beta.kubernetes.io/storage-class: "loki-log"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 300Gi
EOF
kubectl apply -f loki-pv-pvc.yaml
5.statefulset控制器yaml文件重写
kubectl get statefulset loki -n loki -o yaml > loki.yaml
vim loki.yaml
...
volumes:
- name: config
secret:
defaultMode: 420
secretName: loki
- name: storage
persistentVolumeClaim: ## 将emtypDir改成pvc, 名称是上面创建的。
claimName: loki
...
kubectl apply -f loki.yaml