成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在EKS中實(shí)現(xiàn)基于Promtail + Loki + Grafana容器日志解決方案

IT那活兒 / 3574人閱讀
在EKS中實(shí)現(xiàn)基于Promtail + Loki + Grafana容器日志解決方案





ELK/EFK日志系統(tǒng)



提到日志系統(tǒng),一般首先想到的都是經(jīng)典的ELK架構(gòu),或者現(xiàn)在被稱為Elastic Stack。Elastic Stack架構(gòu)為Elasticsearch + Logstash + Kibana + Beats的組合,其中,Beats負(fù)責(zé)日志的采集, Logstash負(fù)責(zé)做日志的聚合和處理,Elasticsearch作為日志的存儲(chǔ)和搜索系統(tǒng),Kibana作為可視化前端展示,整體架構(gòu)如下圖所示:

此外,在容器化場(chǎng)景中,尤其是在Kubernetes環(huán)境中,用戶經(jīng)常使用的另一套框架是EFK架構(gòu)。其中,E還是Elasticsearch,K還是Kibana,其中的F代表Fluent Bit,一個(gè)開源多平臺(tái)的日志處理器和轉(zhuǎn)發(fā)器。Fluent Bit可以讓用戶從不同的來源收集數(shù)據(jù)/日志,統(tǒng)一并發(fā)送到多個(gè)目的地,并且它完全兼容Docker和Kubernetes環(huán)境。





PLG日志系統(tǒng)



但是,Grafana Labs提供的另一個(gè)日志解決方案PLG目前也逐漸變得流行起來。PLG架構(gòu)為Promtail + Loki + Grafana的組合,整體架構(gòu)圖下所示:

其中,Grafana大家應(yīng)該都比較熟悉,它是一款開源的可視化和分析軟件,它允許用戶查詢、可視化、警告和探索監(jiān)控指標(biāo)。Grafana主要提供時(shí)間序列數(shù)據(jù)的儀表板解決方案,支持超過數(shù)十種數(shù)據(jù)源(還在陸續(xù)添加支持中)。

這里稍微介紹下另外兩個(gè)軟件Promtail和Loki。官方介紹Grafana Loki是一組可以組成一個(gè)功能齊全的日志堆棧組件,與其它日志系統(tǒng)不同的是,Loki只建立日志標(biāo)簽的索引而不索引原始日志消息,而是為日志數(shù)據(jù)設(shè)置一組標(biāo)簽,這意味著Loki的運(yùn)營(yíng)成本更低,效率也能提高幾個(gè)數(shù)量級(jí)。

Loki的設(shè)計(jì)理念收到了很多Prometheus的啟發(fā),可以實(shí)現(xiàn)可水平擴(kuò)展、高可用的多租戶日志系統(tǒng)。Loki整體架構(gòu)也是由不同的組件來協(xié)同完成日志收集、索引、存儲(chǔ)等工作的,各個(gè)組件如下所示,有關(guān)Loki架構(gòu)的更多信息這里不再展開描述,可以參考官方文檔Loki’s Architecture進(jìn)一步深入了解。最后,一句話形容下Loki就是like Prometheus, but for logs。

Promtail是一個(gè)日志收集的代理,它會(huì)將本地日志的內(nèi)容發(fā)送到一個(gè)Loki實(shí)例,它通常部署到需要監(jiān)視應(yīng)用程序的每臺(tái)機(jī)器/容器上。Promtail主要是用來發(fā)現(xiàn)目標(biāo)、將標(biāo)簽附加到日志流以及將日志推送到Loki。截止到目前,Promtail可以跟蹤兩個(gè)來源的日志:本地日志文件和systemd日志(僅支持AMD64架構(gòu))。

這樣看上去,PLG和ELK都能完成類似的日志管理工作,那它們之間的差別在哪里呢?





日志方案對(duì)比



首先,ELK/EFK架構(gòu)功能確實(shí)強(qiáng)大,也經(jīng)過了多年的實(shí)際環(huán)境驗(yàn)證,其中存儲(chǔ)在Elasticsearch中的日志通常以非結(jié)構(gòu)化JSON對(duì)象的形式存儲(chǔ)在磁盤上,并且Elasticsearch為每個(gè)對(duì)象都建立了索引,以便進(jìn)行全文搜索,然后用戶可以特定查詢語言來搜索這些日志數(shù)據(jù)。與之對(duì)應(yīng)的Loki的數(shù)據(jù)存儲(chǔ)是解耦的,既可以在磁盤上存儲(chǔ)數(shù)據(jù),也可以使用如Amazon S3的云存儲(chǔ)系統(tǒng)。Loki中的日志帶有一組標(biāo)簽名和值,其中只有標(biāo)簽對(duì)被索引,這種權(quán)衡使得它比完整索引的操作成本更低,但是針對(duì)基于內(nèi)容的查詢,需要通過LogQL再多帶帶查詢。

和Fluentd相比,Promtail是專門為L(zhǎng)oki量身定制的,它可以為運(yùn)行在同一節(jié)點(diǎn)上的Kubernetes Pods做服務(wù)發(fā)現(xiàn),從指定文件夾讀取日志。Loki采用了類似于Prometheus的標(biāo)簽方式。因此,當(dāng)與Prometheus部署在同一個(gè)環(huán)境中時(shí),因?yàn)橄嗤姆?wù)發(fā)現(xiàn)機(jī)制,來自Promtail的日志通常具有與應(yīng)用程序指標(biāo)相同的標(biāo)簽,統(tǒng)一了標(biāo)簽管理。

Kibana提供了許多可視化工具來進(jìn)行數(shù)據(jù)分析,高級(jí)功能比如異常檢測(cè)等機(jī)器學(xué)習(xí)功能。Grafana專門針對(duì)Prometheus和Loki等時(shí)間序列數(shù)據(jù)打造,可以在同一個(gè)儀表板上查看日志的指標(biāo)。





部署解決方案



在EKS上部署Promtail + Loki + Grafana解決方案

接下來,我們將演示如何在EKS上部署Promtail + Loki + Grafana組合,下面演示需要有滿足一些前提條件:

  • 一個(gè)正常運(yùn)行的EKS集群

  • 可以執(zhí)行kubectl命令行的環(huán)境

  • 可以執(zhí)行helm命令行的環(huán)境

演示環(huán)境如下:

  • EKS集群版本19.8

  • EKS集群為2個(gè)托管節(jié)點(diǎn)

  • Helm版本5.1


1.  部署Promtail + Loki + Grafana

首先,添加helm的repo信息。

$ helm repo add grafana https://grafana.github.io/helm-charts

然后,更新helm repo。

$ helm repo update

更新完成后,使用helm安裝loki和grafana。默認(rèn)情況下,Loki和Grafana都是安裝在default命名空間的,可以添加 –namespace <命名空間> 參數(shù)將Loki和Grafana部署在指定的命名空間,這里演示創(chuàng)建一個(gè)新的命名空間loki,并將Loki和Grafana都安裝在這里。其中g(shù)rafana.enabled=true選項(xiàng)可以將Grafana一起進(jìn)行部署,如果希望同時(shí)安裝Prometheus,則也可以選擇配置prometheus.enabled=true參數(shù),演示中并未開啟此參數(shù)。

$ kubectl create namespace loki
$ helm upgrade --install loki --namespace=loki grafana/loki-stack --set grafana.enabled=true

PowerShell

正常安裝會(huì)返回以下輸出結(jié)果:

Binding
NAME: loki
LAST DEPLOYED: Thu May 13 12:38:52 2021
NAMESPACE: loki
STATUS: deployed
REVISION: 1
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.

See http://docs.grafana.org/features/datasources/loki/ for more detail.

部署完成后,我們來檢查下使用helm部署的資源情況:

$ kubectl -n loki get all
NAME READY STATUS RESTARTS AGE
pod/loki-0                         1/1     Running 0          113s
pod/loki-grafana-b664d6c4f-qlg87 1/1     Running 0          113s
pod/loki-promtail-jm8x8 1/1     Running 0          113s
pod/loki-promtail-lb8jq 1/1     Running 0          113s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/loki ClusterIP 10.100.52.51     3100/TCP 114s
service/loki-grafana ClusterIP 10.100.134.81    80/TCP 114s
service/loki-headless ClusterIP None 3100/TCP 114s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/loki-promtail 2         2         2       2            2            114s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/loki-grafana 1/1     1            1           114s
NAME DESIRED CURRENT READY AGE
replicaset.apps/loki-grafana-b664d6c4f 1         1         1       114s
NAME READY AGE
statefulset.apps/loki 1/1     114s

可以看到通過Helm部署后自動(dòng)完成了Promtail + Loki + Grafana組合的安裝,其中Promtail部署模式為daemonset,在每個(gè)計(jì)算節(jié)點(diǎn)上都有部署,來收集節(jié)點(diǎn)以及Pod上的日志信息,具體配置如下所示:

$ kubectl describe ds loki-promtail -n loki
Name: loki-promtail
Selector: app=promtail,release=loki
Node-Selector: <none>
Labels: app=promtail
                app.kubernetes.io/managed-by=Helm
                chart=promtail-2.2.0
                heritage=Helm
                release=loki
Annotations: deprecated.daemonset.template.generation: 1
                meta.helm.sh/release-name: loki
                meta.helm.sh/release-namespace: loki
Desired Number of Nodes Scheduled: 2
Current Number of Nodes Scheduled: 2
Number of Nodes Scheduled with Up-to-date Pods: 2
Number of Nodes Scheduled with Available Pods: 2
Number of Nodes Misscheduled: 0
Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels: app=promtail
                    release=loki
  Annotations: checksum/config: 8c87a13d751c87f1b8726a725bffbe18c827c5e60d4a7aea47cd4871ea8271f3
                    prometheus.io/port: http-metrics
                    prometheus.io/scrape: true
  Service Account: loki-promtail
  Containers:
   promtail:
    Image: grafana/promtail:2.1.0
    Port: 3101/TCP
    Host Port: 0/TCP
    Args:
      -config.file=/etc/promtail/promtail.yaml
      -client.url=http://loki:3100/loki/api/v1/push
    Readiness: http-get http://:http-metrics/ready delay=10s timeout=1s period=10s #success=1 #failure=5
    Environment:
      HOSTNAME: (v1:spec.nodeName)
    Mounts:
      /etc/promtail from config (rw)
      /run/promtail from run (rw)
      /var/lib/docker/containers from docker (ro)
      /var/log/pods from pods (ro)
  Volumes:
   config:
    Type: ConfigMap (a volume populated by a ConfigMap)
    Name: loki-promtail
    Optional: false
   run:
    Type: HostPath (bare host directory volume)
    Path: /run/promtail
    HostPathType:
   docker:
    Type: HostPath (bare host directory volume)
    Path: /var/lib/docker/containers
    HostPathType:
   pods:
    Type: HostPath (bare host directory volume)
    Path: /var/log/pods
    HostPathType:
Events:
  Type    Reason Age From                  Message
  ---- ------ ---- ---- -------
  Normal  SuccessfulCreate 14m daemonset-controller Created pod: loki-promtail-lb8jq
  Normal  SuccessfulCreate 14m daemonset-controller Created pod: loki-promtail-jm8x8

Loki本身默認(rèn)是通過statefulset的方式部署,這是為了避免在數(shù)據(jù)攝入組件崩潰時(shí)丟失索引,因此官方建議將Loki通過statefulset運(yùn)行,并使用持久化存儲(chǔ)來存儲(chǔ)索引文件,具體配置如下所示:

$ kubectl describe deployment loki-grafana -n loki
Name: loki-grafana
Namespace: loki
CreationTimestamp: Thu, 13 May 2021 12:38:53 +0000
Labels: app.kubernetes.io/instance=loki
                        app.kubernetes.io/managed-by=Helm
                        app.kubernetes.io/name=grafana
                        app.kubernetes.io/version=6.7.0
                        helm.sh/chart=grafana-5.7.10
Annotations: deployment.kubernetes.io/revision: 1
                        meta.helm.sh/release-name: loki
                        meta.helm.sh/release-namespace: loki
Selector: app.kubernetes.io/instance=loki,app.kubernetes.io/name=grafana
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
  Labels: app.kubernetes.io/instance=loki
                    app.kubernetes.io/name=grafana
  Annotations: checksum/config: 19aac1c3228c4f4807da30538c8541c01e6b17fa3b518f80ab4f400621bb175c
                    checksum/dashboards-json-config: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
                    checksum/sc-dashboard-provider-config: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
                    checksum/secret: 416bf8ba1672c41e905574cab63bd1f658e30bc29309dcb7e68effdfbcb989f6
  Service Account: loki-grafana
  Init Containers:
   grafana-sc-datasources:
    Image: kiwigrid/k8s-sidecar:0.1.209
    Port: <none>
    Host Port: <none>
    Environment:
      METHOD: LIST
      LABEL: grafana_datasource
      FOLDER: /etc/grafana/provisioning/datasources
      RESOURCE: both
    Mounts:
      /etc/grafana/provisioning/datasources from sc-datasources-volume (rw)
  Containers:
   grafana:
    Image: grafana/grafana:6.7.0
    Ports: 80/TCP, 3000/TCP
    Host Ports: 0/TCP, 0/TCP
    Liveness: http-get http://:3000/api/health delay=60s timeout=30s period=10s #success=1 #failure=10
    Readiness: http-get http://:3000/api/health delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:
      GF_SECURITY_ADMIN_USER: <set to the key admin-user in secret loki-grafana> Optional: false
      GF_SECURITY_ADMIN_PASSWORD: <set to the key admin-password in secret loki-grafana> Optional: false
    Mounts:
      /etc/grafana/grafana.ini from config (rw,path="grafana.ini")
      /etc/grafana/provisioning/datasources from sc-datasources-volume (rw)
      /var/lib/grafana from storage (rw)
  Volumes:
   config:
    Type: ConfigMap (a volume populated by a ConfigMap)
    Name: loki-grafana
    Optional: false
   storage:
    Type: EmptyDir (a temporary directory that shares a pods lifetime)
    Medium:
    SizeLimit:
   sc-datasources-volume:
    Type: EmptyDir (a temporary directory that shares a pod
s lifetime)
    Medium:
    SizeLimit:
Conditions:
  Type           Status  Reason
  ---- ------ ------
  Available True    MinimumReplicasAvailable
  Progressing True    NewReplicaSetAvailable
OldReplicaSets: loki-grafana-b664d6c4f (1/1 replicas created)
NewReplicaSet: <none>
Events:
  Type    Reason              Age      From            Message
  ----        ------                   ----        ----               -------
  Normal  ScalingReplicaSet 16m deployment-controller Scaled up replica set loki-grafana-b664d6c4f to 1


最后Grafana是通過deployment來完成的,具體配置如下所示:

$ kubectl describe deployment loki-grafana -n loki
Name: loki-grafana
Namespace: loki
CreationTimestamp: Thu, 13 May 2021 12:38:53 +0000
Labels: app.kubernetes.io/instance=loki
                        app.kubernetes.io/managed-by=Helm
                        app.kubernetes.io/name=grafana
                        app.kubernetes.io/version=6.7.0
                        helm.sh/chart=grafana-5.7.10
Annotations: deployment.kubernetes.io/revision: 1
                        meta.helm.sh/release-name: loki
                        meta.helm.sh/release-namespace: loki
Selector: app.kubernetes.io/instance=loki,app.kubernetes.io/name=grafana
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
  Labels: app.kubernetes.io/instance=loki
                    app.kubernetes.io/name=grafana
  Annotations: checksum/config: 19aac1c3228c4f4807da30538c8541c01e6b17fa3b518f80ab4f400621bb175c
                    checksum/dashboards-json-config: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
                    checksum/sc-dashboard-provider-config: 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
                    checksum/secret: 416bf8ba1672c41e905574cab63bd1f658e30bc29309dcb7e68effdfbcb989f6
  Service Account: loki-grafana
  Init Containers:
   grafana-sc-datasources:
    Image: kiwigrid/k8s-sidecar:0.1.209
    Port: <none>
    Host Port: <none>
    Environment:
      METHOD: LIST
      LABEL: grafana_datasource
      FOLDER: /etc/grafana/provisioning/datasources
      RESOURCE: both
    Mounts:
      /etc/grafana/provisioning/datasources from sc-datasources-volume (rw)
  Containers:
   grafana:
    Image: grafana/grafana:6.7.0
    Ports: 80/TCP, 3000/TCP
    Host Ports: 0/TCP, 0/TCP
    Liveness: http-get http://:3000/api/health delay=60s timeout=30s period=10s #success=1 #failure=10
    Readiness: http-get http://:3000/api/health delay=0s timeout=1s period=10s #success=1 #failure=3
    Environment:
      GF_SECURITY_ADMIN_USER: <set to the key admin-user in secret loki-grafana> Optional: false
      GF_SECURITY_ADMIN_PASSWORD: <set to the key admin-password in secret loki-grafana> Optional: false
    Mounts:
      /etc/grafana/grafana.ini from config (rw,path="grafana.ini")
      /etc/grafana/provisioning/datasources from sc-datasources-volume (rw)
      /var/lib/grafana from storage (rw)
  Volumes:
   config:
    Type: ConfigMap (a volume populated by a ConfigMap)
    Name: loki-grafana
    Optional: false
   storage:
    Type: EmptyDir (a temporary directory that shares a pods lifetime)
    Medium:
    SizeLimit:
   sc-datasources-volume:
    Type: EmptyDir (a temporary directory that shares a pod
s lifetime)
    Medium:
    SizeLimit:
Conditions:
  Type           Status  Reason
  ---- ------ ------
  Available True    MinimumReplicasAvailable
  Progressing True    NewReplicaSetAvailable
OldReplicaSets: loki-grafana-b664d6c4f (1/1 replicas created)
NewReplicaSet: <none>
Events:
  Type    Reason      Age From                 Message
  ----       ------             ---- ----                    -------
  Normal  ScalingReplicaSet 16m deployment-controller Scaled up replica set loki-grafana-b664d6c4f to 1

接下來,訪問Grafana UI界面來查看部署結(jié)果。首先,通過以下命令獲取Grafana管理員的密碼:

$ kubectl get secret --namespace loki loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

然后通過以下命令轉(zhuǎn)發(fā)Grafana的接口,以便通過Web UI進(jìn)行訪問。默認(rèn)情況下,端口轉(zhuǎn)發(fā)的地址localhost,可以根據(jù)kubectl所在實(shí)例的情況補(bǔ)充設(shè)置–address 。

$ kubectl port-forward --namespace loki service/loki-grafana 3000:80

打開localhost:3000或者:3000來查看Grafana,登錄過程輸入用戶名admin和上面獲得到的密碼。

成功登錄后可以正常進(jìn)入到Grafana首頁(yè),如下圖所示。

默認(rèn)Loki數(shù)據(jù)源(http://loki:3100)已經(jīng)添加進(jìn)去了。

在Grafana側(cè)邊欄選擇Explore進(jìn)行快速日志查看,進(jìn)入到Explore頁(yè)面后選擇Loki數(shù)據(jù)源,然后選擇Logs標(biāo)簽,最后在Logs Labels中輸入標(biāo)簽的查詢條件,例如{namespace=”loki”},執(zhí)行查詢后就可以看到類似下圖中的日志信息。

上面的日志信息是通過默認(rèn)部署的Daemon Set的Promtail收集到的日志。

默認(rèn)情況下,Loki的索引存儲(chǔ)是通過boltdb-shipper來實(shí)現(xiàn)的,關(guān)于boltdb-shipper的更多信息請(qǐng)參考官方文檔Single Store Loki (boltdb-shipper index type)。這些配置是通過secret(內(nèi)容為loki.yaml的詳細(xì)配置)掛載到Pod中的,查看Loki配置文件的默認(rèn)值:

$ kubectl get secrets loki -n loki -o "jsonpath={.data[loki.yaml]}" | base64 -d
auth_enabled: false
chunk_store_config:
  max_look_back_period: 0s
compactor:
  shared_store: filesystem
  working_directory: /data/loki/boltdb-shipper-compactor
ingester:
  chunk_block_size: 262144
  chunk_idle_period: 3m
  chunk_retain_period: 1m
  lifecycler:
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
  max_transfer_retries: 0
limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
schema_config:
  configs:
  - from: "2020-10-24"
    index:
      period: 24h
      prefix: index_
    object_store: filesystem
    schema: v11
    store: boltdb-shipper
server:
  http_listen_port: 3100
storage_config:
  boltdb_shipper:
    active_index_directory: /data/loki/boltdb-shipper-active
    cache_location: /data/loki/boltdb-shipper-cache
    cache_ttl: 24h
    shared_store: filesystem
  filesystem:
    directory: /data/loki/chunks
table_manager:
  retention_deletes_enabled: false
  retention_period: 0s

其中store: boltdb-shipper和object_store: filesystem分別指定了使用boltdb-shipper和文件系統(tǒng)來作為索引和日志文件的存儲(chǔ),這些都需要額外的維護(hù),因?yàn)長(zhǎng)oki實(shí)現(xiàn)了計(jì)算存儲(chǔ)分離,所以這里可以充分借助云上的資源來減輕運(yùn)維管理的負(fù)擔(dān),在亞馬遜云平臺(tái)上可以使用Amazon DynamoDB作為索引實(shí)現(xiàn)快速的鍵值存儲(chǔ)的讀寫,使用Amazon S3作為日志存儲(chǔ)實(shí)現(xiàn)大規(guī)模日志存儲(chǔ),同時(shí)也具備極高的存儲(chǔ)性價(jià)比,下面將演示這些內(nèi)容的配置。


2. 使用DynamoDB作為索引,S3作為日志存儲(chǔ)

首先,節(jié)點(diǎn)要操作DynamoDB和S3就需要有足夠的IAM權(quán)限:

具體權(quán)限請(qǐng)參考官方文檔Loki Storage為EKS的節(jié)點(diǎn)配置相應(yīng)權(quán)限。

接下來,要想真正使用DynamoDB作為L(zhǎng)oki的索引存儲(chǔ)、S3作為日志存儲(chǔ),需要配置loki.yaml文件,這里可以修改secret文件,也可以配置新的configmap來掛載到Pod上。無論采用哪一種方式,主要的修改內(nèi)容為schema_config和storage_config,具體配置如下所示:

schema_config:
  configs:
  - from: "2020-10-24"
    index:
      period: 0
      prefix: loki_index
    object_store: s3
    schema: v11
    store: aws
server:
  http_listen_port: 3100
storage_config:
  aws:
    s3: s3://us-east-1/loki-shtian
    dynamodb:
      dynamodb_url: dynamodb://us-east-1

其中,schema_config 中的store: aws設(shè)置指定索引存儲(chǔ),object_store: s3設(shè)置指定日志存儲(chǔ),需要注意的是period的值需要設(shè)置為0,否則Loki將會(huì)為每個(gè)時(shí)間段的日志都創(chuàng)建出多帶帶的索引表,設(shè)置為0可以保證只有一個(gè)DynamaDB表被創(chuàng)建出來,存儲(chǔ)所有索引信息。prefix為我們指定的DynamoDB表的名稱。

存儲(chǔ)配置storage_config中分別填寫了DynamaDB和S3的相關(guān)信息,這里的S3存儲(chǔ)桶以之前創(chuàng)建的loki-shtian為例,請(qǐng)根據(jù)實(shí)際情況進(jìn)行調(diào)整,示例選擇的區(qū)域以美東區(qū)(us-east-1)為例。其他配置保持默認(rèn)不變。

完成上述配置編寫后,前文提到既可以通過修改secret對(duì)象loki來生效,也可以使用configmap多帶帶配置掛載,這里以更新secrets對(duì)象為例,通過以下命令更新secret對(duì)象(假設(shè)當(dāng)前路徑下有配置好的loki.yaml文件):

$ kubectl -n loki create secret generic loki --from-file=./loki.yaml -o yaml --dry-run=client | kubectl apply -f -

PowerShell

之后,通過以下命令重啟statefulset中的Pod:

$ kubectl -n loki rollout restart statefulset loki

查看Pod日志信息,如下所示,可以看到Loki會(huì)自動(dòng)創(chuàng)建DynamoDB表loki_index,并按照默認(rèn)的參數(shù)配置DynamoDB的WCU(1000)和RCU值(300),這些都可以參考官方文檔Configuring Loki進(jìn)行定制化配置。

$ kubectl -n loki logs -f loki-0

level=info ts=2021-05-13T15:17:41.673886077Z caller=table_manager.go:476 msg="creating table" table=loki_index
level=info ts=2021-05-13T15:19:41.603526262Z caller=table_manager.go:324 msg="synching tables" expected_tables=1
level=info ts=2021-05-13T15:19:42.627187815Z caller=table_manager.go:531 msg="provisioned throughput on table, skipping" table=loki_index read=300 write=1000
level=info ts=2021-05-13T15:21:41.603525185Z caller=table_manager.go:324 msg="synching tables" expected_tables=1
level=info ts=2021-05-13T15:21:42.623189111Z caller=table_manager.go:531 msg="provisioned throughput on table, skipping" table=loki_index read=300 write=1000

關(guān)于DynamaDB和S3的配置示例可以參考官方文檔Loki Configuration Examples,詳細(xì)的配置信息可以參考官方文檔Configuring Loki。配置后的DynamoDB表使用h作為分區(qū)鍵,使用r作為排序鍵,如下圖所示:

 根據(jù)日志中的信息可以看到DynamoDB的WCU和RCU值配置為1000和300,如下圖所示:

DynamoDB表使用c 作為索引的內(nèi)容列,如下圖所示:

查看S3中的日志數(shù)據(jù),如下圖所示:

再次查看Grafana界面,查詢?nèi)罩拘畔⒁磺姓_\(yùn)行。

 

小結(jié):

本文首先簡(jiǎn)單介紹了經(jīng)典的日志系統(tǒng)ELK/EFK架構(gòu),引出了Grafana新推出的PLG架構(gòu),并探討了兩種架構(gòu)之間的對(duì)比和重點(diǎn)發(fā)展的方向。然后,本文介紹了在亞馬遜云平臺(tái)的EKS服務(wù)上部署Promtail + Loki + Grafana解決方案,以及配置使用Amazon DynamoDB和Amazon S3,以充分借助云服務(wù)的高性價(jià)比優(yōu)勢(shì),降低用戶維護(hù)管理成本。


END


更多精彩干貨分享

點(diǎn)擊下方名片關(guān)注

IT那活兒

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129761.html

相關(guān)文章

  • 使用 Rancher 管理 AWS EKS 集群

    摘要:是一個(gè)流行的開源企業(yè)級(jí)管理平臺(tái),許多組織使用它來管理混合部署的集群。此使用顯示收集的數(shù)據(jù)。通過選擇左上角的下拉菜單返回集群控制臺(tái),屏幕截圖如下。 James SunAWS解決方案架構(gòu)師。James 擁有超過 15 年的信息技術(shù)行業(yè)從業(yè)經(jīng)驗(yàn)。加入 AWS 前,他曾在 MapR、惠普、NetApp、雅虎和 EMC 等公司擔(dān)任多個(gè)高級(jí)技術(shù)職位。他擁有斯坦福大學(xué)博士學(xué)位。本文原發(fā)于亞馬遜AWS...

    awokezhou 評(píng)論0 收藏0
  • k8s與監(jiān)控--k8s部署grafana6.0

    摘要:前言本文主要介紹最新版本的一些新特性和如何部署到當(dāng)中。主要亮點(diǎn)是一個(gè)新的查詢工作流,用于臨時(shí)數(shù)據(jù)探索和故障排除。已經(jīng)過測(cè)試版并正式發(fā)布。使更易于部署并提高安全性。下面是一張使用處理日志的截圖部署我們主要提供將部署到中的方法。 前言 本文主要介紹最新版本grafana6.0的一些新特性和如何部署到k8s當(dāng)中。 grafana6.0簡(jiǎn)介 Grafana的這一更新引入了一種新的查詢展示數(shù)據(jù)的...

    saucxs 評(píng)論0 收藏0
  • k8s與監(jiān)控--k8s部署grafana6.0

    摘要:前言本文主要介紹最新版本的一些新特性和如何部署到當(dāng)中。主要亮點(diǎn)是一個(gè)新的查詢工作流,用于臨時(shí)數(shù)據(jù)探索和故障排除。已經(jīng)過測(cè)試版并正式發(fā)布。使更易于部署并提高安全性。下面是一張使用處理日志的截圖部署我們主要提供將部署到中的方法。 前言 本文主要介紹最新版本grafana6.0的一些新特性和如何部署到k8s當(dāng)中。 grafana6.0簡(jiǎn)介 Grafana的這一更新引入了一種新的查詢展示數(shù)據(jù)的...

    Jeffrrey 評(píng)論0 收藏0
  • 思科聯(lián)手AWS打造基于Kubernetes混合云解決方案

    摘要:思科云平臺(tái)和解決方案高級(jí)副總裁解釋說正確配置以在本地和公有云中部署應(yīng)用需要定制集成,這從操作上來說可能是一項(xiàng)挑戰(zhàn)。近年來,容器由于其靈活性已經(jīng)成為部署應(yīng)用的一種流行方式。容器技術(shù)將工作負(fù)載捆綁成輕量級(jí)的便攜式軟件包,可以在不同類型的基礎(chǔ)設(shè)施之間輕松移動(dòng)。今天早上公布的Cisco Hybrid Solution for Kubernetes on AWS解決方案旨在消除大規(guī)模使用容器的障礙。 ...

    lifefriend_007 評(píng)論0 收藏0
  • 使用Kubernetes你需要知道的硬道理

    摘要:是谷歌內(nèi)部為解決這個(gè)問題所做的工作的產(chǎn)物,它為管理容器如何在整個(gè)集群中運(yùn)行提供了一個(gè)單一的框架。在云中使用服務(wù)在許多云中作為標(biāo)準(zhǔn)問題項(xiàng)提供,盡管它在谷歌云平臺(tái),中最突出地表現(xiàn)為本地特性。使用,運(yùn)行控制平面,將重點(diǎn)部署將用于所需配置的容器。每一項(xiàng)創(chuàng)新都會(huì)帶來新的復(fù)雜性。容器使以一種方便的、可移植的形式打包和運(yùn)行應(yīng)用程序成為可能,但至少要說以規(guī)模管理容器是一個(gè)挑戰(zhàn)。Kubernetes是谷歌內(nèi)部...

    fyber 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<