您当前的位置:首页 > 学海无涯 > 其他网站首页其他
Helm 部署 Loki 日志聚合
发布时间:2021-01-23作者:佚名
一、loki 介绍
1.1、loki 是什么
Loki是一个水平可扩展,高可用性,多租户的日志聚合系统,受到Prometheus的启发。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。官方介绍说到:Like Prometheus, but for logs.
1.2、loki特点
与其他日志聚合系统相比
不对日志进行全文索引。通过存储压缩的非结构化日志和仅索引元数据,Loki操作更简单,运行更便宜。
索引和组使用与Prometheus已使用的相同标签记录流,使您可以使用与Prometheus已使用的相同标签在指标和日志之间无缝切换。
特别适合存放Kubernetes Pod日志; 诸如Pod标签之类的元数据会被自动删除和编入索引。
在Grafana有本机支持(已经包含在Grafana 6.0或更新版本中)。
1.3、loki组成
Loki由3个组成部分组成:
loki 是主服务器,负责存储日志和处理查询。
promtail 是代理,负责收集日志并将其发送给loki。
用户界面的Grafana。
二、部署动态 PV
2.1、 创建名称空间
创建一个 nfs 名称空间,将 nfs-client-provisioner 放在这个名称空间上
kubectl create ns nfs
2.2、创建 EFK 存储目录
该存储目录专门存放 EFK 数据包括: Elasticsearch Fluentd Kibana 数据
mkdir -p /data/NFS/loki
3.3、使用 helm 安装 nfs-client-provisioner
项目地址:https://hub.helm.sh/charts/stable/nfs-client-provisioner
安装到 nfs 命名空间
重点:nfs.path 让数据存储到指定目录,这样好区分数据
重点:storageClass.name 这里填写 monitoring 专属名称,用于 PVC 自动绑定专属动态 PV 上。
# 下面代码直接复制黏贴即可
cat > loki-client.yaml << EOF # NFS 设置 nfs: server: 192.168.8.131 path: /data/NFS/loki storageClass: # 此配置用于绑定 PVC 和 PV name: loki-nfs-client # 资源回收策略 reclaimPolicy: Retain # 使用镜像 image: repository: kubesphere/nfs-client-provisioner # 副本数量 replicaCount: 2 EOF
helm 部署 Prometheus 安装指定版本 Prometheus 5.0.4
helm install loki -n nfs –values loki-client.yaml stable/nfs-client-provisioner –version 1.2.8
#### 2.4、查看运行 nfs-client-provisioner Pod 状态
[root@Node-01 ~]# kubectl get pod -n nfs -w NAME READY STATUS RESTARTS AGE loki-nfs-nfs-client-provisioner-7f656cdcf6-fgq5g 1/1 Running 0 2s loki-nfs-nfs-client-provisioner-7f656cdcf6-qrgwv 1/1 Running 0 2s
### 三、Loki 部署
* 采用 helm 方法部署
* 项目地址: https://artifacthub.io/packages/helm/kube-ops/loki
#### 3.1、创建名称空间
kubectl create namespace monitoring
3.2、安装 Loki
无需做数据持久化将 persistence.enabled=true 改为 persistence.enabled=false 即可
时间本地化
# 添加 helm 仓库
helm repo add kube-ops https://charts.kube-ops.io
# 部署 Liki
helm install loki -n monitoring \ --set promtail.enabled=true \ --set persistence.enabled=true \ --set persistence.storageClassName="loki-nfs-client" \ --set extraVolumeMounts[0].name=localtime \ --set extraVolumeMounts[0].mountPath="/etc/localtime" \ --set extraVolumes[0].name=localtime \ --set extraVolumes[0].hostPath.path="/etc/localtime" \ kube-ops/loki --version 1.2.1
3.3、查看运行 Pod 状态
root@k8s-master-01:~/Loki$ kubectl get pod -n monitoring -w NAME READY STATUS RESTARTS AGE loki-0 1/1 Running 0 70s loki-promtail-22297 1/1 Running 0 70s loki-promtail-4h4p8 1/1 Running 0 70s loki-promtail-mj6xd 1/1 Running 0 70s loki-promtail-zndlj 1/1 Running 0 70s
四、Grafana 配置
项目地址: https://artifacthub.io/packages/helm/grafana/grafana
4.1、部署 Grafana
# 添加 helm 仓库
helm repo add grafana https://grafana.github.io/helm-charts
# 部署 Grafana
helm install grafana -n monitoring \ --set ingress.enabled=true \ --set ingress.hosts[0]="grafana.akiraka.net" \ --set persistence.enabled=false \ grafana/grafana --version 6.1.6
4.2、查看 Grafana Pvc 状态
root@k8s-master-01:~/Loki$ kubectl get pod -n monitoring NAME READY STATUS RESTARTS AGE grafana-bbb647cb-km94j 1/1 Running 0 19d loki-0 1/1 Running 0 11m loki-promtail-22297 1/1 Running 0 11m loki-promtail-4h4p8 1/1 Running 0 11m loki-promtail-mj6xd 1/1 Running 0 11m loki-promtail-zndlj 1/1 Running 0 11m
4.3、配置 Grafna Loki 数据源
4.4、查看 Loki 日志
4.5、查看某个服务日志
这里查看 manager 名称空间中的 jenkins 日志
五、日志选择和过滤
5.1、日志选择器
对于查询表达式的标签部分,将其用大括号括起来{},然后使用键值语法选择标签。多个标签表达式用逗号分隔:
{namespace="manager",app_kubernetes_io_instance="jenkins"}
当前支持以下标签匹配运算符
= 完全相等
!= 不相等
=~ 正则表达式匹配
!~ 不进行正则表达式匹配
{name=~"mysql.+"} {name!~"mysql.+"}
5.2、日志过滤器
编写日志流选择器后,您可以通过编写搜索表达式来进一步过滤结果。搜索表达式可以只是文本或正则表达式。
# 查询示例:
{job="mysql"} |= "error" {name="kafka"} |~ "tsdb-ops.*io:2003" {instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager
# 过滤器运算符可以被链接,并将顺序过滤表达式-结果日志行将满足每个过滤器。例如:
{job="mysql"} |= "error" != "timeout"
已实现以下过滤器类型:
|= 行包含字符串
!= 行不包含字符串
|~ 行匹配正则表达式
!~ 行与正则表达式不匹配
regex表达式接受RE2语法。默认情况下,匹配项区分大小写,并且可以将regex切换为不区分大小写的前缀(?i)
关键字词:Helm,Loki,日志

上一篇:Elasticsearch安装
下一篇:常用Dockerfile
相关文章
-
无相关信息