Akiraka Akiraka
  • 首页
  • Linux
    • ELK
    • PHP
    • Shell
    • Nginx
    • Docker
      • Docker Compose
    • Centos
    • Ubuntu
    • Jenkins
  • Python
  • Mac OS
  • Windows
  • 大数据
    • Hadoop
    • CDH
    • Hive
    • Spark
    • ZooKeeper
  • 微服务
    • Kubernetes
    • Helm
  • Other
  • Quark
  • 首页
  • Linux
    • ELK
    • PHP
    • Shell
    • Nginx
    • Docker
      • Docker Compose
    • Centos
    • Ubuntu
    • Jenkins
  • Python
  • Mac OS
  • Windows
  • 大数据
    • Hadoop
    • CDH
    • Hive
    • Spark
    • ZooKeeper
  • 微服务
    • Kubernetes
    • Helm
  • Other
  • Quark
首页 › Kubernetes › Helm › Helm 部署 Loki 日志聚合

Helm 部署 Loki 日志聚合

Akiraka3月前

文章目录

  • 一、loki 介绍
    • 1.1、loki 是什么
    • 1.2、loki特点
    • 1.3、loki组成
  • 二、部署动态 PV
    • 2.1、 创建名称空间
    • 2.2、创建 EFK 存储目录
    • 2.3、使用 helm 安装 nfs-client-provisioner
    • 2.4、查看运行 nfs-client-provisioner Pod 状态
  • 三、Loki 部署
    • 3.1、创建名称空间
    • 3.2、安装 Loki
    • 3.3、查看运行 Pod 状态
  • 四、Grafana 配置
    • 4.1、部署 Grafana
    • 4.2、查看 Grafana Pvc 状态
    • 4.3、配置 Grafna Loki 数据源
    • 4.4、查看 Loki 日志
    • 4.5、查看某个服务日志
  • 五、日志选择和过滤
    • 5.1、日志选择器
    • 5.2、日志过滤器

一、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

2.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 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 即可
  • 时间本地化
  • service.httpNodePort 指定http端口
  • service.grpcNodePort 指定grpc端口
  • serviceMonitor.enabled 让普罗米修斯监控到指标
  • –set serviceMonitor.labels="prometheus-operated"
  • k8s版本低无法安装修改版本:kubeVersion: ^1.10.0-0
#   添加 helm 仓库
helm repo add kube-ops https://charts.kube-ops.io

#   部署 Liki
helm install loki -n monitoring \
--set promtail.enabled=true \
--set serviceMonitor.enabled=true \
--set service.type=ClusterIP \
--set persistence.enabled=true \
--set persistence.size="100Gi" \
--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 数据源

Helm 部署 Loki 日志聚合-Akiraka

4.4、查看 Loki 日志

Helm 部署 Loki 日志聚合-Akiraka

4.5、查看某个服务日志

  • 这里查看 manager 名称空间中的 jenkins 日志

Helm 部署 Loki 日志聚合-Akiraka

五、日志选择和过滤

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#k8s#kubernetes#loki
2
分享
Akiraka 站长
文章 121评论 10
相关文章
  • 存活探针(Liveness)、就绪探针(Readiness)、启动探针(Startup)、容器钩子
  • kubernetes Node 宕机 Pod 驱离
  • 密码保护:Kubeadm-etcd 备份
  • Kubernetes(k8s)helm 部署 Traefik
  • Kubernetes(k8s)Helm 部署 Redis 集群
Akiraka
站长
本人擅长 Ai、Au、Fl、Ae、Pr、Ps 等软件的安装与卸载,精通 CSS、JavaScript、PHP、Python、Shell、Go 等单词的拼写,熟悉 Windows、Linux、Mac、Android、IOS 等系统的开关机!
121文章
10评论
47获赞
想找什么搜一下
文章聚合
mydumper数据库备份工具
1年前
Centos与Ubuntu安装 Docker 18
1年前
微信公众号服务器验证
1年前
Ubuntu 与 Centos Vim 配置
10月前
Kubernetes(k8s)Helm 部署 EFK 集群
12月前
微信小程序
微信小程序
标签云
brew cdh centos cmd docker docker compose elasticsearch elk filebase filebeat gitlab grafana hadoop helm hive hue jdk jenkins k8s kibana kubernetes liniux linux logstash mac mikrotik mydumper mysql nfs nginx openssl oss php pip pyspark python RabbitMQ redis rocketmq shell Spark ubuntu windows ZooKeeper 容器编排
Copyright © 2019-2021 Akiraka. Designed by nicetheme. 沪18036911号