[TOC]html
关于系统日志收集处理方案,其实有不少种,由于以前使用ES比较多,因此也认为ELK是一个不错的解决方案,ELK(Elasticsearch + Logstash + Kibana)来管理日志。docker
Kubernetes 也要实如今整个集群级别收集和聚合日志,以便用户能够从单个仪表板监控整个集群,其经常使用的架构形式之一 一种流行的开源解决方案是将fluentd 做为节点级代理程序进行日志采集,并将之聚合存储于Elasticsearch 进行日志分析,以及经过Kibana 进行数据可视化。api
Logstash是一个具备实时渠道能力的数据收集引擎,但和fluentd相比,它在效能上表现略逊一筹,故而逐渐被fluentd取代,并组合为EFK 。网络
EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成。架构
其中Elasticsearch是一款分布式搜索引擎,可以用于日志的检索app
Fluentd是一个实时开源的数据收集器,curl
Kibana 是一款可以为Elasticsearch 提供分析和可视化的 Web 平台。elasticsearch
这三款开源工具的组合为日志数据提供了分布式的实时搜集与分析的监控系统。分布式
在Kubernetes 上部署fluentd 和Kibana 的方式易于实现 1.fluentd由DaemonSet 控制器部署于集群中的各节点 2.Kibana则由Deployment控制器部署并确保其持续运行便可。 3.ElasticSearch是一个有状态的应用,须要使用Statefu!Set 控制器建立并管理相关的Pod 对象,并且它们还分别须要专用的持久存储系统存储日志数据,所以,其部署过程较以前二者要略为烦琐,工具
在安装以前能够测试安装过程
如: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 增长仓库,固然也能够删除仓库
[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 的版本,必须一致
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 安装完成了,可使用了
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”
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 集群中。
修改kibana文件(<font size=3 color=red>注意kibana的版本必定要与elasticsearch一致</font>)
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
这样就能够看到饼图了,更详细的图形配置和数据展现,请经过相关资料自行学习去,这边不在详细介绍了
参考文章:http://www.javashuo.com/article/p-xrykucyk-ky.html
总结:本章详细讲解了Helm 的使用方式,并经过示例演示了其使用方法,大大下降了用户的使用k8s成本,不用本身编写配置清单,经过其余Chart文件,修改相应的参数,实现本身相符环境的部署。