溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker怎么部署EFK日志系統(tǒng)

發(fā)布時間:2021-09-14 09:54:13 來源:億速云 閱讀:186 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“docker怎么部署EFK日志系統(tǒng)”,在日常操作中,相信很多人在docker怎么部署EFK日志系統(tǒng)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”docker怎么部署EFK日志系統(tǒng)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

    一個完整的k8s集群,應(yīng)該包含如下六大部分:kube-dns、ingress-controller、metrics server監(jiān)控系統(tǒng)、dashboard、存儲和EFK日志系統(tǒng)。

    我們的日志系統(tǒng)要部署在k8s集群之外,這樣即使整個k8s集群宕機了,我們還能從外置的日志系統(tǒng)查看到k8s宕機前的日志。    

    另外,我們生產(chǎn)部署的日志系統(tǒng)要單獨放在一個存儲卷上。這里我們?yōu)榱朔奖?,本次測試關(guān)閉了日志系統(tǒng)的存儲卷功能。

    1、添加incubator源(這個源是開發(fā)版的安裝包,用起來可能不穩(wěn)定)

    訪問https://hub.kubeapps.com/charts

[root@master ~]# helm repo list
NAME  URL                                                   
local http://127.0.0.1:8879/charts                          
stablehttps://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@master efk]# helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com
"incubator" has been added to your repositories
[root@master efk]# helm repo list
NAME     URL                                                       
local    http://127.0.0.1:8879/charts                              
stable   https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts    
incubatorhttps://kubernetes-charts-incubator.storage.googleapis.com

    2、下載elasticsearch

[root@master efk]# helm fetch incubator/elasticsearch
[root@master efk]# ls
elasticsearch-1.10.2.tgz
[root@master efk]# tar -xvf elasticsearch-1.10.2.tgz

    3、關(guān)閉存儲卷(生產(chǎn)上不要關(guān),我們這里為了測試方便才關(guān)的)

[root@master efk]# vim elasticsearch/values.yaml 
把
 persistence:
    enabled: true
改成
 persistence:
    enabled: false
有兩處需要改

    上面我們關(guān)閉了存儲卷的功能,而改用本地目錄來存儲日志。

    4、創(chuàng)建單獨的名稱空間

[root@master efk]# kubectl   create namespace efk
namespace/logs created
[root@master efk]# kubectl get ns
NAME               STATUS    AGE
ekf               Active    13s

    5、把elasticsearch安裝在efk名稱空間中

[root@master efk]# helm install --name els1 --namespace=efk -f elasticsearch/values.yaml incubator/elasticsearch
NAME:   els1
LAST DEPLOYED: Thu Oct 18 01:59:15 2018
NAMESPACE: efk
STATUS: DEPLOYED
RESOURCES:
==> v1/Pod(related)
NAME                                        READY  STATUS   RESTARTS  AGE
els1-elasticsearch-client-58899f6794-gxn7x  0/1    Pending  0         0s
els1-elasticsearch-client-58899f6794-mmqq6  0/1    Pending  0         0s
els1-elasticsearch-data-0                   0/1    Pending  0         0s
els1-elasticsearch-master-0                 0/1    Pending  0         0s
==> v1/ConfigMap
NAME                DATA  AGE
els1-elasticsearch  4     1s
==> v1/Service
NAME                          TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)   AGE
els1-elasticsearch-client     ClusterIP  10.103.147.142  <none>       9200/TCP  0s
els1-elasticsearch-discovery  ClusterIP  None            <none>       9300/TCP  0s
==> v1beta1/Deployment
NAME                       DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
els1-elasticsearch-client  2        0        0           0          0s
==> v1beta1/StatefulSet
NAME                       DESIRED  CURRENT  AGE
els1-elasticsearch-data    2        1        0s
els1-elasticsearch-master  3        1        0s
NOTES:
The elasticsearch cluster has been installed.
***
Please note that this chart has been deprecated and moved to stable.
Going forward please use the stable version of this chart.
***
Elasticsearch can be accessed:
  * Within your cluster, at the following DNS name at port 9200:
    els1-elasticsearch-client.efk.svc
  * From outside the cluster, run these commands in the same shell:
    export POD_NAME=$(kubectl get pods --namespace efk -l "app=elasticsearch,component=client,release=els1" -o jsonpath="{.items[0].metadata.name}")
    echo "Visit http://127.0.0.1:9200 to use Elasticsearch"
    kubectl port-forward --namespace efk $POD_NAME 9200:9200

    說明:--name els1是chart部署后的release名字,名字自己隨便取就行。

    上面我們是通過values.yaml文件在線安裝的els。但是我們已經(jīng)下載els安裝包了,也可以通過下載的els包進行離線安裝,如下:

[root@master efk]# ls
elasticsearch  elasticsearch-1.10.2.tgz
[root@master efk]# helm  install --name els1 --namespace=efk ./elasticsearch

    說明:./elasticsearch就是當(dāng)前els安裝包目錄的名字。

    安裝完后,我們就能在efk名稱空間中看到相應(yīng)的pods資源了(我在安裝elasticsearch時,當(dāng)時是安裝不上的,因為說是打不開elasticseartch的官網(wǎng),也就是不能再這個官網(wǎng)下載鏡像,后來我就放置了兩天沒管,再登錄上看,發(fā)現(xiàn)鏡像竟然自己下載好了,真是有意思)

[root@master efk]#  kubectl get pods -n efk -o wide
NAME                                         READY     STATUS    RESTARTS   AGE       IP             NODE
els1-elasticsearch-client-78b54979c5-kzj7z   1/1       Running   2          1h        10.244.2.157   node2
els1-elasticsearch-client-78b54979c5-xn2gb   1/1       Running   1          1h        10.244.2.151   node2
els1-elasticsearch-data-0                    1/1       Running   0          1h        10.244.1.165   node1
els1-elasticsearch-data-1                    1/1       Running   0          1h        10.244.2.169   node2
els1-elasticsearch-master-0                  1/1       Running   0          1h        10.244.1.163   node1
els1-elasticsearch-master-1                  1/1       Running   0          1h        10.244.2.168   node2
els1-elasticsearch-master-2                  1/1       Running   0          57m       10.244.1.170   node1

    查看安裝好的release:

[root@master efk]# helm list
NAME  REVISIONUPDATED                 STATUS  CHART               NAMESPACE
els1  1       Thu Oct 18 23:11:54 2018DEPLOYEDelasticsearch-1.10.2efk

    查看els1的狀態(tài):

[root@k8s-master1 ~]# helm status els1
  * Within your cluster, at the following DNS name at port 9200:
    els1-elasticsearch-client.efk.svc  ##這個就是els1 service的主機名
  * From outside the cluster, run these commands in the same shell:
    export POD_NAME=$(kubectl get pods --namespace efk -l "app=elasticsearch,component=client,release=els1" -o jsonpath="{.items[0].metadata.name}")
    echo "Visit http://127.0.0.1:9200 to use Elasticsearch"
    kubectl port-forward --namespace efk $POD_NAME 9200:9200

    cirror是專門為測試虛擬環(huán)境的客戶端,它可以快速創(chuàng)建一個kvm的虛擬機,一共才幾兆的大小,而且里面提供的工具還是比較完整的。

    下面我們運行cirror:

[root@k8s-master1 ~]# kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
If you don't see a command prompt, try pressing enter.
/ #
/ # nslookup els1-elasticsearch-client.efk.svc
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name:      els1-elasticsearch-client.efk.svc
Address 1: 10.103.105.170 els1-elasticsearch-client.efk.svc.cluster.local

-rm:表示退出我們就直接刪除掉

-it:表示交互式登錄

    上面我們看到els1-elasticsearch-client.efk.svc服務(wù)名解析出來的ip地址。

    下面我們再訪問http:els1-elasticsearch-client.efk.svc:9200 頁面:

/ # curl els1-elasticsearch-client.efk.svc:9200
curl: (6) Couldn't resolve host 'els1-elasticsearch-client.efk.svc'
/ # 
/ # curl els1-elasticsearch-client.efk.svc.cluster.local:9200
{
  "name" : "els1-elasticsearch-client-b898c9d47-5gwzq",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "RFiD2ZGWSAqM2dF6wy24Vw",
  "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"
}

    看里面的內(nèi)容:

/ # curl els1-elasticsearch-client.efk.svc.cluster.local:9200/_cat
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates

    看有幾個節(jié)點:

/ # curl els1-elasticsearch-client.efk.svc.cluster.local:9200/_cat/nodes
10.244.2.104 23 95 0 0.00 0.02 0.05 di - els1-elasticsearch-data-0
10.244.4.83  42 99 1 0.01 0.11 0.13 mi * els1-elasticsearch-master-1
10.244.4.81  35 99 1 0.01 0.11 0.13 i  - els1-elasticsearch-client-b898c9d47-5gwzq
10.244.4.84  31 99 1 0.01 0.11 0.13 mi - els1-elasticsearch-master-2
10.244.2.105 35 95 0 0.00 0.02 0.05 i  - els1-elasticsearch-client-b898c9d47-shqd2
10.244.4.85  18 99 1 0.01 0.11 0.13 di - els1-elasticsearch-data-1
10.244.4.82  40 99 1 0.01 0.11 0.13 mi - els1-elasticsearch-master-0

6、把fluentd安裝在efk空間中

[root@k8s-master1 ~]# helm fetch  incubator/fluentd-elasticsearch
[root@k8s-master1 ~]# tar -xvf fluentd-elasticsearch-0.7.2.tgz
[root@k8s-master1 ~]# cd fluentd-elasticsearch
[root@k8s-master1 fluentd-elasticsearch]# vim values.yaml 
1、改其中的host: 'elasticsearch-client',改成host: 'els1-elasticsearch-client.efk.svc.cluster.local'表示到哪找我們的elasticsearch服務(wù)。
2、改tolerations污點,表示讓k8s master也能接受部署fluentd pod,這樣才能收集主節(jié)點的日志:
把
tolerations: {}
  # - key: node-role.kubernetes.io/master
  #   operator: Exists
  #   effect: NoSchedule
改成
tolerations: 
  - key: node-role.kubernetes.io/master
    operator: Exists
    effect: NoSchedule
3、改annotations,這樣也就能收集監(jiān)控prometheus的日志了
把
annotations: {}
  # prometheus.io/scrape: "true"
  # prometheus.io/port: "24231"
改成
annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "24231"
同時把
service: {}
  # type: ClusterIP
  # ports:
  #   - name: "monitor-agent"
  #     port: 24231
改成
service: 
  type: ClusterIP
  ports:
    - name: "monitor-agent"
    port: 24231
  這樣通過service 24231找監(jiān)控prometheus的fluentd

    開始安裝fluentd:

[root@k8s-master1 fluentd-elasticsearch]# helm install --name fluentd1 --namespace=efk -f values.yaml  ./
[root@k8s-master1 fluentd-elasticsearch]# helm list
NAME    REVISIONUPDATED                 STATUS  CHART                      NAMESPACE
els1    1       Sun Nov  4 09:37:35 2018DEPLOYEDelasticsearch-1.10.2       efk      
fluentd11       Tue Nov  6 09:28:42 2018DEPLOYEDfluentd-elasticsearch-0.7.2efk
[root@k8s-master1 fluentd-elasticsearch]# kubectl get pods -n efk
NAME                                        READY   STATUS             RESTARTS   AGE
els1-elasticsearch-client-b898c9d47-5gwzq   1/1     Running            0          47h
els1-elasticsearch-client-b898c9d47-shqd2   1/1     Running            0          47h
els1-elasticsearch-data-0                   1/1     Running            0          47h
els1-elasticsearch-data-1                   1/1     Running            0          45h
els1-elasticsearch-master-0                 1/1     Running            0          47h
els1-elasticsearch-master-1                 1/1     Running            0          45h
els1-elasticsearch-master-2                 1/1     Running            0          45h
fluentd1-fluentd-elasticsearch-9k456        1/1     Running           0          2m28s
fluentd1-fluentd-elasticsearch-dcnsc        1/1     Running           0          2m28s
    fluentd1-fluentd-elasticsearch-p5h88        1/1   Running           0          2m28s
fluentd1-fluentd-elasticsearch-sdvn9        1/1     Running           0          2m28s
fluentd1-fluentd-elasticsearch-ztm9s        1/1     Running           0          2m28s

7、把kibanna安裝在efk空間中

    注意,安裝kibana的版本號一定要和elasticsearch的版本號一致,否則二者無法結(jié)合起來。

[root@k8s-master1 ~]# helm fetch stable/kibana
[root@k8s-master1 ~]# ls
 kibana-0.2.2.tgz
[root@k8s-master1 ~]# tar -xvf kibana-0.2.2.tgz  
[root@k8s-master1 ~]# cd kibana
[root@t-cz-mysql1 appuser]# vim last_10_null_sql.txt 
修改ELASTICSEARCH_URL為:
ELASTICSEARCH_URL: 
els的域名是通過helm status els1輸出結(jié)果查看到:
[root@k8s-master1 ~]# helm status els1 
  * Within your cluster, at the following DNS name at port 9200:
    els1-elasticsearch-client.efk.svc
    
另外,把vim last_10_null_sql.txt中
service:
  type: ClusterIP
  externalPort: 443
  internalPort: 5601    
改成
service:
  type: NodePort
  externalPort: 443
  internalPort: 5601

    開始部署kibana:

[root@k8s-master1 kibana]# helm install --name=kib1 --namespace=efk -f values.yaml ./
==> v1/Service
NAME         TYPE      CLUSTER-IP    EXTERNAL-IP  PORT(S)        AGE
kib1-kibana  NodePort  10.108.188.4  <none>       443:31865/TCP  0s
[root@k8s-master1 kibana]# kubectl get svc -n efk
NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
els1-elasticsearch-client      ClusterIP   10.103.105.170   <none>        9200/TCP        2d22h
els1-elasticsearch-discovery   ClusterIP   None             <none>        9300/TCP        2d22h
kib1-kibana                    NodePort    10.108.188.4     <none>        443:31865/TCP   4m27s
[root@k8s-master1 kibana]# kubectl get pods -n efk 
NAME                                        READY   STATUS              RESTARTS   AGE
els1-elasticsearch-client-b898c9d47-5gwzq   1/1     Running             0          2d22h
els1-elasticsearch-client-b898c9d47-shqd2   1/1     Running             0          2d22h
els1-elasticsearch-data-0                   1/1     Running             0          22h
els1-elasticsearch-data-1                   1/1     Running             0          22h
els1-elasticsearch-master-0                 1/1     Running             0          2d22h
els1-elasticsearch-master-1                 1/1     Running             0          2d19h
els1-elasticsearch-master-2                 1/1     Running             0          2d19h
fluentd1-fluentd-elasticsearch-9k456        1/1     Running             0          22h
fluentd1-fluentd-elasticsearch-dcnsc        1/1     Running             0          22h
fluentd1-fluentd-elasticsearch-p5h88        1/1     Running             0          22h
fluentd1-fluentd-elasticsearch-sdvn9        1/1     Running             0          22h
fluentd1-fluentd-elasticsearch-ztm9s        1/1     Running             0          22h
kib1-kibana-68f9fbfd84-pt2dt                0/1     Running   0          9m59s #這個鏡像如果下載不下來,多等幾天就下載下來了

    然后找個瀏覽器,打開宿主機ip:nodeport

     https://172.16.22.201:31865

    不過我這個打開的頁面有錯誤,做如下操作即可:

[root@k8s-master1 ~]# kubectl get pods -n efk |grep ela
els1-elasticsearch-client-b898c9d47-8pntr   1/1     Running   1          43h
els1-elasticsearch-client-b898c9d47-shqd2   1/1     Running   1          5d13h
els1-elasticsearch-data-0                   1/1     Running   0          117m
els1-elasticsearch-data-1                   1/1     Running   0          109m
els1-elasticsearch-master-0                 1/1     Running   1          2d11h
els1-elasticsearch-master-1                 1/1     Running   0          14h
els1-elasticsearch-master-2                 1/1     Running   0          14h
[root@k8s-master1 ~]# kubectl exec -it els1-elasticsearch-client-b898c9d47-shqd2  -n efk -- /bin/bash 
刪除elasticsearch下的.kibana即可
[root@els1-elasticsearch-client-b898c9d47-shqd2 elasticsearch]#  curl -XDELETE http://els1-elasticsearch-client.efk.svc:9200/.kibana

    docker怎么部署EFK日志系統(tǒng)

docker怎么部署EFK日志系統(tǒng)

docker怎么部署EFK日志系統(tǒng)

docker怎么部署EFK日志系統(tǒng)

    最終,看到我們做出了EFK的日志收集系統(tǒng)

到此,關(guān)于“docker怎么部署EFK日志系統(tǒng)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI