十九,基于helm搭建EFK日志收集系统

Posted peng-zone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十九,基于helm搭建EFK日志收集系统相关的知识,希望对你有一定的参考价值。

EFK日志系统

一,EFK日志系统简介:

关于系统日志收集处理方案,其实有很多种,因为之前使用ES比较多,所以也认为ELK是一个不错的解决方案,ELK(Elasticsearch + Logstash + Kibana)来管理日志。

Kubernetes 也要实现在整个集群级别收集和聚合日志,以便用户可以从单个仪表板监控整个集群,其常用的架构形式之一
一种流行的开源解决方案是将fluentd 作为节点级代理程序进行日志采集,并将之聚合存储于Elasticsearch 进行日志分析,以及通过Kibana 进行数据可视化。

Logstash是一个具有实时渠道能力的数据收集引擎,但和fluentd相比,它在效能上表现略逊一筹,故而逐渐被fluentd取代,并组合为EFK 。

EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成。

其中Elasticsearch是一款分布式搜索引擎,能够用于日志的检索

Fluentd是一个实时开源的数据收集器,

Kibana 是一款能够为Elasticsearch 提供分析和可视化的 Web 平台。

这三款开源工具的组合为日志数据提供了分布式的实时搜集与分析的监控系统。

技术图片

在Kubernetes 上部署fluentd 和Kibana 的方式易于实现
1.fluentd由DaemonSet 控制器部署于集群中的各节点
2.Kibana则由Deployment控制器部署并确保其持续运行即可。
3.ElasticSearch是一个有状态的应用,需要使用Statefu!Set
控制器创建并管理相关的Pod 对象,而且它们还分别需要专用的持久存储系统存储日志数据,因此,其部署过程较之前两者要略为烦琐,

EFK架构示意图:

技术图片

二,EFK系统部署

1,EFK系统部署方式

  • K8s 项目在其Addons 目录中提供了资源配置清单用于部署EFK
  • Kubeapps ( https: //hub.kubeapps.com )为此三者分别提供了相应的Charts帮助用户通过Helm 轻松完成其部署

2,基于Helm方式部署EFK

在安装之前可以测试安装过程

如:helm install --name myapp local/myapp --dry-run --debug 查看输出的内容是否符合要求

1.查看相应的chart安装包

[root@k8s-master ~]# helm repo list
NAME            URL
local           http://127.0.0.1:8879/charts
stable          https://kubernetes-charts.storage.googleapis.com
incubator       https://kubernetes-charts-incubator.storage.googleapis.com/

注: 可以通过helm repo add 增加仓库,当然也可以删除仓库

elasticsearch的组成

  • client:client负责与fluentd通信,充当elasticsearch服务的服务端,需要多个节点进行冗余
  • master:负责轻量化的查询请求,需要多个节点进行冗余
  • data组成:负责重量级任务,索引,构建等,需要多个节点进行冗余

查看相关组件

[root@master helm]# helm search elasticsearch
incubator/elasticsearch
incubator/elasticsearch-curator
incubator/fluentd-elasticsearch
stable/elasticsearch
stable/elasticsearch-curator
stable/elasticsearch-exporter
stable/fluentd-elasticsearch
stable/elastabot
stable/elastalert
[root@k8s-master helm]# helm search kibana
stable/kibana   3.0.0           6.7.0           Kibana is an open source data visualization plugin for El...

当然可以通过https: //hub.kubeapps.com 这个网站搜索相应的软件包

注:这里关注一下helm es 和kibana 的版本,必须一致

1,部署elasticsearch

helm fetch incubator/elasticsearch   #安装E ,这里关注一下helm es 和kibana 的版本,必须一致

tar -xzf  elasticsearch-1.10.2.tgz

cd elasticsearch

修改ES默认的values.

yaml文件符合自己的安装环境

技术图片

这里修改的内容大概如下:

需要特别说明的是,未明确定义持久存储使用的存储类时,无须持久保存数据,或者
无可用的实现动态供给PV 的存储时, 也可以使用empty Dir 存储卷,实现方法是将上面示
例中master.persistence.enabled 和data. persistence.enabled 配置参数的值分别设置为“ false ”
技术图片

技术图片

master 节点的PVC 存储卷大小都是4Gi, data节点的PVC 存储卷大小均为30Gi
rbac 相关的各资源创建为禁用状态。部署于生产环境时,默认设置中的资源请求和资源限制,以及data 节点的PVC 存储卷空间等较小
在启用了rbac 授权插件的集群中还需要创建elasticsearch 所需要的各ClusterRole 及ClusterRoleBinding 资源。
这些需要自定义的配置参数可以通过values 文件进行设置,或者直接由helm install 命令的 --set选项来实现

通过上面的方式修改好文件以后,接下来就是通过helm 命令来安装软件包

这些资源默认都安装到一个独立的名称空间,提前创建好
#创建logs名称空间
kubectl create namespace logs

##创建elasticsearch实例
helm install --name els1 --namespace=logs -f values.yaml incubator/elasticsearch 

#查看elasticserarch创建好的pod
[root@master elasticsearch]# kubectl get pod -n logs
NAME                                         READY   STATUS    RESTARTS   AGE
els1-elasticsearch-client-844687f9f8-4ctlp   1/1     Running   0          8m27s
els1-elasticsearch-client-844687f9f8-mct6d   1/1     Running   0          8m27s
els1-elasticsearch-data-0                    1/1     Running   0          8m27s
els1-elasticsearch-data-1                    1/1     Running   0          3m34s
els1-elasticsearch-master-0                  1/1     Running   0          8m27s
els1-elasticsearch-master-1                  1/1     Running   0          3m38s
els1-elasticsearch-master-2                  1/1     Running   0          2m48s

#测试访问elasticsearch-master
kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh #交互式工具
/ # nslookup  els1-elasticsearch-client.logs.svc
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      els1-elasticsearch-client.logs.svc #helm status els1获得
Address 1: 10.105.16.209 els1-elasticsearch-client.logs.svc.cluster.local
#以上可以看出 logs名称空间下els1已正常访问

/ # curl els1-elasticsearch-client.logs.svc.cluster.local:9200
{
  "name" : "els1-elasticsearch-client-844687f9f8-4ctlp",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "cazCbQpcTM20PRww4F9f4g",
  "version" : {
    "number" : "6.4.2",
    "build_flavor" : "oss",
    "build_type" : "tar",
    "build_hash" : "04711c2",
    "build_date" : "2018-09-26T13:34:09.098244Z",
    "build_snapshot" : false,
    "lucene_version" : "7.4.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

可以看到我们的ES 安装完成了,可以使用了

2,部署fluentd

helm fetch stable/fluentd-elasticsearch  #安装F
tar -xzf fluentd-elasticsearch-2.0.7.tgz
cd fluentd-elasticsearch

修改values.yaml文件

一共有2个地方可以修改

fluentd 是运行于各节点上的日志采集代理,因此它受控于DaemonSet 控制器。
基于此Charts部署fluentd时通常仅需为其指定Elastic Search 服务的访问接口即可
不过,若需要收集master 节点上的日志就需要为部署的Pod对象添加tolerations 以容忍master 上的taints ,第二步就是为接受主节点污点
技术图片

技术图片

当然如果不想收集MASTER日志可以通过下面简单的命令安装

helm install  stable/fluentd-elasticsearch --namespace=logs --set  elasticsearch.host="els1-elasticsearch-client.logs.svc.cluster.local” 
启动部署fluentd
helm install --name flu1 --namespace=logs -f values.yaml stable/fluentd-elasticsearch
 #这里面涉及到一个镜像gcr.io/google-containers/fluentd-elasticsearch:v2.3.2,国内网络无法访问,通过下面方式在各节点部署
docker pull mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2

docker tag mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2 gcr.io/google-
containers/fluentd-elasticsearch:v2.3.2

docker rmi mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2 

#helm package fluentd-elasticsearch
#Successfully packaged chart and saved it to: /data/helm/fluentd-elasticsearch-2.0.7.tgz
#tar -xzf fluentd-elasticsearch-2.0.7.tgz
#cd tar -xzf fluentd-elasticsearch            # 以上4步 可以不进行
 
helm install --name flu1 --namespace=logs stable/fluentd-elasticsearch -f values.yaml
kubectl get pod -n logs |egrep flu
flu-fluentd-elasticsearch-7p9l6            1/1     Running   0          143m
flu-fluentd-elasticsearch-gzflr            1/1     Running  0          143m

kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh  #测试效果
/ # curl els1-elasticsearch-client.logs.svc.cluster.local:9200/_cat/indices
green open logstash-2019.11.05 zwrG_TrmQKWcWUFKFyGJUg 5 1  773813 0 212.7mb 106.2mb
green open logstash-2019.09.06 oXx_3EovRTeItw6BB1Uv6A 5 1     778 0   1.1mb 734.9kb
green open logstash-2019.10.23 2cqVO4WSSxeU0S5k1Szr0g 5 1 1020027 0 403.8mb 202.3mb
green open logstash-2019.10.22 -1xt8XYyQzCQ4cL_f5tUFw 5 1  273546 0 121.3mb  60.5mb
green open logstash-2019.10.24 Sle0Uc9tTIuJNUEE7ahetg 5 1   19609 0  15.9mb   7.2mb
#命令结果中显示出以“ logstash-YYYY.MM.DD ”格式命名的索引列表,即表示fluentd已经能够正常采集到日志数据并输出到指定的Elastic Search 集群中。

3,部署kibana

修改kibana文件(注意kibana的版本一定要与elasticsearch一致)

Kibana 是Elastic Search 的数据分析及可视化平台, 能够用来搜索、查看存储在ElasticSearch索引中的数据。
它可以通过各种图表进行高级数据分析及展示,用户基于Web GUI可以快速创建仪表板( dashboard )实时显示ElasticSearch 的查询结果。
Kibana 配置过程简单便捷, 图形样式丰富,可借助于ElasticSearch 创建柱形图、折线图、散点图、直方图、饼图和地图等数据展示接口。
Kibana 增强了ElasticSearch 的数据分析能力,让用户能够更加智能地分析数据和展示数据

Kibana 是Elastic Search 的数据分析及可视化平台, 能够用来搜索、查看存储在ElasticSearch索引中的数据。
它可以通过各种图表进行高级数据分析及展示,用户基于Web GUI可以快速创建仪表板( dashboard )实时显示ElasticSearch 的查询结果。
Kibana 配置过程简单便捷, 图形样式丰富,可借助于ElasticSearch 创建柱形图、折线图、散点图、直方图、饼图和地图等数据展示接口。
Kibana 增强了ElasticSearch 的数据分析能力,让用户能够更加智能地分析数据和展示数据。
类似于fluentd , Kibana也通过URL 访问ElasticS earch但它要通过环境变量ELASTIC-仅供If:商业用法峡交流学习使用
部署于Kubernetes 上的Kibana 一般会由集群外的客户端访问,因此需要为其配置Ingress 资源,也可以使用NodePort 或LoadBalancer类型的Service 资源进行服务暴露。

默认通过HTTP 提供服务,在使用Ingress 暴露到互联网时,建议将其配置为HTTPS 类型的服务。

helm fetch stable/kibana   #安装最新稳定版的kibana
helm fetch stable/kibana --version 0.16.3 #由于需要与elasticsearch版本一致 所以指定了chart版本

下面是valus.yaml修改的部分:

技术图片

helm install --name kib1 --namespace=logs -f values.yaml stable/kibana --version  0.16.3   #创建kibana

kubectl get pods -n logs |egrep kib #查看pod创建情况
kib1-kibana-58d5745cf-xxb2q           1/1     Running   0          5m2s

kubectl get svc -n logs |egrep kibana   #由此可见kibana外部访问端口为30071
kib1-kibana    NodePort    10.99.132.184   <none>        443:30071/TCP   6m28s

技术图片

创建索引

技术图片

创建好索引模式之后,即可通过“ Discover ”搜索数据,或者在“ Visualize ”界面中定义可视化图形,并将它们集成于可在“ Dashboard ”中创建的仪表板里
技术图片

试着构建一个饼状图展示资源使用前五的pod-name

技术图片

技术图片

这样就可以看到饼图了,更详细的图形配置和数据展示,请通过相关资料自行学习去,这边不在详细介绍了

参考文章:https://www.cnblogs.com/cjsblog/p/9476813.html

总结:本章详细讲解了Helm 的使用方式,并通过示例演示了其使用方法,大大降低了用户的使用k8s成本,不用自己编写配置清单,通过其他Chart文件,修改相应的参数,实现自己相符环境的部署。

以上是关于十九,基于helm搭建EFK日志收集系统的主要内容,如果未能解决你的问题,请参考以下文章

helm,efk日志系统

Centos 7.3 简便搭建EFK日志分析

kubernetes集群搭建efk日志收集平台

k8s搭建EFK日志管理系统

openshift4 EFK日志系统

使用Docker搭建ELK日志搜集系统