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

目录

  • EFK日志系统

    • 一,EFK日志系统简介:
    • 二,EFK系统部署
      • 1,EFK系统部署方式
      • 2,基于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安装包

[[email protected] ~]# 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组成:负责重量级任务,索引,构建等,需要多个节点进行冗余

查看相关组件

[[email protected] 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
[[email protected] 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
[[email protected] 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文件,修改相应的参数,实现自己相符环境的部署。

原文地址:https://www.cnblogs.com/peng-zone/p/11841780.html

时间: 2024-10-11 15:13:19

十九,基于helm搭建EFK日志收集系统的相关文章

centos7搭建EFK日志分析系统

前言 EFK可能都不熟悉,实际上EFK是大名鼎鼎的日志系统ELK的一个变种 在没有分布式日志的时候,每次出问题了需要查询日志的时候,需要登录到Linux服务器,使用命令cat -n xxxx|grep xxxx 搜索出日志在哪一行,然后cat -n xxx|tail -n +n行|head -n 显示多少行,这样不仅效率低下,而且对于程序异常也不方便查询,日志少还好,一旦整合出来的日志达到几个G或者几十G的时候,仅仅是搜索都会搜索很长时间了,当然如果知道是哪天什么时候发生的问题当然也方便查询,但

基于Flume的美团日志收集系统(一)架构和设计【转】

美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收集系统>将分两部分给读者呈现美团日志收集系统的架构设计和实战经验. 第一部分架构和设计,将主要着眼于日志收集系统整体的架构设计,以及为什么要做这样的设计. 第二部分改进和优化,将主要着眼于实际部署和使用过程中遇到的问题,对Flume做的功能修改和优化等. 1 日志收集系统简介 日志收集是大数据的基石.

基于Flume的美团日志收集系统(一)架构和设计

来自:美团技术博客 http://tech.meituan.com/mt-log-system-arch.html 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收集系统>将分两部分给读者呈现美团日志收集系统的架构设计和实战经验. 第一部分架构和设计,将主要着眼于日志收集系统整体的架构设计,以及为什么要做这样的设计. 第二部分改进和优化,将主要着眼于

基于Flume的美团日志收集系统(二)改进和优化

问题导读: 1.Flume-NG与Scribe对比,Flume-NG的优势在什么地方? 2.架构设计考虑需要考虑什么问题? 3.Agent死机该如何解决? 4.Collector死机是否会有影响? 5.Flume-NG可靠性(reliability)方面做了哪些措施? 美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收集系统>将分两部分给读者呈现美团日

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana负责查询elasticsearch并在web中展示. logstash收集进程收获日志文件内容后,先输出到redis中缓存,还有一logstash处理进程从redis中读出并转存到elasticsearch中,以解决读快写慢速度不一致问题. 官方在线文档:https://www.elastic.co

elk架构-搭建一个日志收集系统

一.日志收集端 1.nginx:nginx-1.16.1.tar.gz 为了kibana收集nginx日志获取字段,先将日志转化为json格式.格式样式如下: log_format access_json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '&quo

elasticsearch + logstash + kibana 搭建实时日志收集系统【原创】

实时日志统一收集的好处: 1.快速定位集群中问题机器 2.无需下载整个日志文件(往往比较大,下载耗时多) 3.可以对日志进行统计 a.发现出现次数最多的异常,进行调优处理 b.统计爬虫ip c.统计用户行为,做聚类分析等 基于上面的需求,我采用了 ELK(elasticsearch + logstash + kibana)的方案,安装方法请到他们的官网:https://www.elastic.co/ 上面查询,这里我主要讲讲我遇到的问题. ??????1.LVS 分发UDP请求不成功的问题???

Linux 搭建ELK日志收集系统

在搭建ELK之前,首先要安装Redis和JDK,安装Redis请参考上一篇文章. 首先安装JDK及配置环境变量 1.解压安装包到/usr/local/java目录下[[email protected]_0_9_centos ~]# tar xvf /ryt/soft/jdk-11.0.3_linux-x64_bin.tar.gz -C /usr/local/java/ 2.配置环境变量(在尾部追加内容如下)[[email protected]_0_9_centos ~]# vim /etc/pr

结合Docker快速搭建ELK日志收集分析平台

结合Docker快速搭建ELK日志收集分析平台 2017-03-27 09:39 阅读 172 评论 0 作者:马哥Linux运维-Eason ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析. Introduction Elasticsearch, 基于json分析搜索引擎Logstash, 动态数据收集管道Kibana, 可视化视图将elasticsearh所收集