十九,基於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文件,修改相應的參數,實現自己相符環境的部署。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM