偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

云原生可觀測(cè)平臺(tái) OpenObserve 初體驗(yàn)

云計(jì)算 云原生
Elasticsearch 是一個(gè)通用搜索引擎,可以使用應(yīng)用程序搜索或日志搜索。OpenObserve 是專門為日志搜索而構(gòu)建的,如果你正在尋找 Elasticsearch 的輕量級(jí)替代品,那么您應(yīng)該看看 ZincSearch,如果只是想要一個(gè)日志搜索引擎,那么 OpenObserve 是一個(gè)非常好的選擇。

OpenObserve 是一個(gè) Rust 開發(fā)的開源的高性能云原生可觀測(cè)平臺(tái)(日志、指標(biāo)、追蹤),比起 Elasticsearch 它大約可以節(jié)省 140 倍的存儲(chǔ)成本,OpenObserve 能夠處理 PB 級(jí)的數(shù)據(jù),如果你正在尋找一個(gè)用于日志、指標(biāo)、追蹤的可觀測(cè)工具,那么 OpenObserve 是非常值得嘗試的。OpenObserve 雖然目前處于 alpha 階段,但其實(shí)也進(jìn)行了廣泛的測(cè)試。

OpenObserve 與 Elasticsearch 的比較

Elasticsearch 是一個(gè)通用搜索引擎,可以使用應(yīng)用程序搜索或日志搜索。OpenObserve 是專門為日志搜索而構(gòu)建的,如果你正在尋找 Elasticsearch 的輕量級(jí)替代品,那么您應(yīng)該看看 ZincSearch,如果只是想要一個(gè)日志搜索引擎,那么 OpenObserve 是一個(gè)非常好的選擇。

OpenObserve 不依賴于數(shù)據(jù)索引,它將未索引的數(shù)據(jù)以壓縮格式存儲(chǔ)在本地磁盤或以 parquet 列格式的對(duì)象存儲(chǔ)中。這使得數(shù)據(jù)攝取期間的計(jì)算要求大大降低,并且壓縮率非常高,從而使存儲(chǔ)成本降低約 140 倍。沒有數(shù)據(jù)索引意味著全掃描搜索可能比 Elasticsearch 慢,但由于分區(qū)和緩存等多種其他技術(shù),仍然應(yīng)該很快。Uber 發(fā)現(xiàn)其生產(chǎn)環(huán)境中 80% 的查詢是聚合查詢,而 OpenObserve 的列式數(shù)據(jù)存儲(chǔ)意味著聚合查詢通常比 Elasticsearch 快得多。

下面是我們使用 Fluentbit 將真實(shí)日志數(shù)據(jù)從 Kubernetes 集群發(fā)送到 Elasticsearch 和 OpenObserve 時(shí)的結(jié)果,這只與存儲(chǔ)有關(guān)。EBS 卷的成本為 8 美分/GB/月 (GP3),s3 的成本為 2.3 美分/GB/月。在 Elasticsearch 的 HA 模式下,通常有 1 個(gè)主節(jié)點(diǎn)和 2 個(gè)副本。無需復(fù)制 s3 來實(shí)現(xiàn)數(shù)據(jù)持久性/可用性,因?yàn)?AWS 會(huì)將你的對(duì)象冗余存儲(chǔ)在 Amazon S3 區(qū)域中至少三個(gè)可用區(qū) (AZ) 的多個(gè)設(shè)備上。

OpenObserve VS Elasticsearch

在上述場(chǎng)景中,OpenObserve 具有比 Elasticsearch 低 140 倍的存儲(chǔ)成本的顯著優(yōu)勢(shì),這甚至沒有考慮額外未使用的 EBS 卷容量(為了不耗盡磁盤空間而需要提供這些容量)以及持續(xù)監(jiān)控磁盤使用情況以使其不被填滿所需的工作。

無狀態(tài)節(jié)點(diǎn)架構(gòu)允許 OpenObserve 水平擴(kuò)展,而無需擔(dān)心數(shù)據(jù)復(fù)制或損壞。與 Elasticsearch 相比,您通常會(huì)發(fā)現(xiàn)管理 OpenObserve 集群的運(yùn)維工作量和成本要低得多。

OpenObserve 內(nèi)置的圖形用戶界面消除了對(duì) Kibana 等其他組件的需求,而且由于 Rust 的優(yōu)勢(shì),性能出色,而無需面對(duì) JVM 所帶來的問題。

與 Elasticsearch 相比,Elasticsearch 是一個(gè)通用性的搜索引擎,同時(shí)也兼具觀測(cè)工具的功能。而 OpenObserve 是從頭開始構(gòu)建的觀測(cè)工具,非常注重提供優(yōu)秀的可觀測(cè)性能。

架構(gòu)

OpenObserve 可以在單節(jié)點(diǎn)下運(yùn)行,也可以在集群中以 HA 模式運(yùn)行。

單節(jié)點(diǎn)模式

單節(jié)點(diǎn)模式也分幾種架構(gòu),主要是數(shù)據(jù)存儲(chǔ)的方式不同,主要有如下幾種:

Sled 和本地磁盤模式

如果你只需要進(jìn)行簡(jiǎn)單使用和測(cè)試,或者對(duì)高可用性沒有要求,可以使用此模式。當(dāng)然你仍然可以在一臺(tái)機(jī)器上每天處理超過 2 TB 的數(shù)據(jù)。在我們的測(cè)試中,使用默認(rèn)配置,Mac M2 的處理速度為約 31 MB/秒,即每分鐘處理 1.8 GB,每天處理 2.6 TB。該模式也是運(yùn)行 OpenObserve 的默認(rèn)模式。

Sled本地模式

Sled 和對(duì)象存儲(chǔ)模式

該模式和 OpenObserve 的默認(rèn)模式基本上一致,只是數(shù)據(jù)存在了對(duì)象存儲(chǔ)中,這樣可以更好的支持高可用性,因?yàn)閿?shù)據(jù)不會(huì)丟失。

Sled對(duì)象存儲(chǔ)模式

Etcd 和對(duì)象存儲(chǔ)模式

該模式是使用 Etcd 來存儲(chǔ)元數(shù)據(jù),數(shù)據(jù)仍然存儲(chǔ)在對(duì)象存儲(chǔ)中。

Etcd對(duì)象存儲(chǔ)模式

HA 模式

HA 模式不支持本地磁盤存儲(chǔ),集群模式下 OpenObserve 會(huì)運(yùn)行多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都是無狀態(tài)的,數(shù)據(jù)存儲(chǔ)在對(duì)象存儲(chǔ)中,元數(shù)據(jù)存儲(chǔ)在 Etcd 中,這樣可以更好的支持高可用性,因?yàn)閿?shù)據(jù)不會(huì)丟失。

Etcd對(duì)象存儲(chǔ)

在該模式下 OpenObserve 主要包括 Router、Querier、Ingester 和 Compactor 四個(gè)組件,這些組件都可以水平擴(kuò)展;Etcd 用于存儲(chǔ)用戶、函數(shù)、報(bào)警規(guī)則和集群節(jié)點(diǎn)信息等元數(shù)據(jù);對(duì)象存儲(chǔ)(例如 s3、minio、gcs 等等)存儲(chǔ) parquet 文件和文件列表索引的所有數(shù)據(jù)。

  • Router:Router 路由器將請(qǐng)求分發(fā)給 ingester 或 querier,它還通過瀏覽器提供 UI 界面。Router 實(shí)際上就是一個(gè)非常簡(jiǎn)單的代理,用于在數(shù)據(jù)攝入程序和查詢程序之間發(fā)送適當(dāng)?shù)恼?qǐng)求并進(jìn)行響應(yīng)。
  • Ingester:Ingester 用于接收攝取請(qǐng)求并將數(shù)據(jù)轉(zhuǎn)換為 parquet 格式然后存儲(chǔ)在對(duì)象存儲(chǔ)中,它們?cè)趯?shù)據(jù)傳輸?shù)綄?duì)象存儲(chǔ)之前將數(shù)據(jù)臨時(shí)存儲(chǔ)在 WAL 中。
  • Querier:Querier 用于查詢數(shù)據(jù),查詢器節(jié)點(diǎn)是完全無狀態(tài)的。
  • Compactor:Compactor 會(huì)將小文件合并成大文件,使搜索更加高效。Compactor 還處理數(shù)據(jù)保留策略、full stream 刪除和文件列表索引更新。

安裝

OpenObserve 的安裝非常簡(jiǎn)單,只需要下載二進(jìn)制文件即可,它支持 Linux、Windows 和 MacOS,也支持 Docker 鏡像。我們這里當(dāng)然還是將其安裝到 Kubernetes 集群中,為簡(jiǎn)單這里我們直接使用默認(rèn)的 Sled 和本地磁盤模式。

首先創(chuàng)建一個(gè)命名空間:

$ kubectl create ns openobserve

然后創(chuàng)建如下所示的資源清單文件:

# openobserve.yaml
apiVersion: v1
kind: Service
metadata:
  name: openobserve
  namespace: openobserve
spec:
  clusterIP: None
  selector:
    app: openobserve
  ports:
    - name: http
      port: 5080
      targetPort: 5080
---
# create statefulset
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: openobserve
  namespace: openobserve
  labels:
    app: openobserve
spec:
  serviceName: openobserve
  replicas: 1
  selector:
    matchLabels:
      app: openobserve
  template:
    metadata:
      labels:
        app: openobserve
    spec:
      securityContext:
        fsGroup: 2000
        runAsUser: 10000
        runAsGroup: 3000
        runAsNonRoot: true
      containers:
        - name: openobserve
          image: public.ecr.aws/zinclabs/openobserve:latest
          env:
            - name: ZO_ROOT_USER_EMAIL # 指定管理員郵箱
              value: root@example.com
            - name: ZO_ROOT_USER_PASSWORD # 指定管理員密碼
              value: root321
            - name: ZO_DATA_DIR
              value: /data
          imagePullPolicy: Always
          resources:
            limits:
              cpu: 4096m
              memory: 2048Mi
            requests:
              cpu: 256m
              memory: 50Mi
          ports:
            - containerPort: 5080
              name: http
          volumeMounts:
            - name: data
              mountPath: /data
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes:
          - ReadWriteOnce
        storageClassName: cfsauto # 指定一個(gè)可用的存儲(chǔ)類
        resources:
          requests:
            storage: 10Gi

上面的資源清單中,我們使用了一個(gè) StatefulSet 來創(chuàng)建 OpenObserve,需要注意的是需要配置 ZO_ROOT_USER_EMAIL 和 ZO_ROOT_USER_PASSWORD 兩個(gè)環(huán)境變量用來指定管理員郵箱和密碼。然后在 PVC 模板中指定一個(gè)可用的 StorageClass,用于持久化存儲(chǔ)數(shù)據(jù)。

然后直接應(yīng)用上面的資源清單文件即可:

$ kubectl apply -f openobserve.yaml
$ kubectl get pods -n openobserve
NAME            READY   STATUS    RESTARTS   AGE
openobserve-0   1/1     Running   0          2m31s
$ kubectl get svc -n openobserve
NAME          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
openobserve   ClusterIP   None         <none>        5080/TCP   2m52s

快速使用

創(chuàng)建后我們可以查看一下 OpenObserve 的日志來驗(yàn)證是否啟動(dòng)成功:

$ kubectl logs -f openobserve-0 -n openobserve
[2023-08-04T10:18:06Z INFO  openobserve] Starting OpenObserve v0.5.1
[2023-08-04T10:18:06Z INFO  openobserve::service::db::user] get; org_id=Some("default") name="root@example.com"
[2023-08-04T10:18:06Z INFO  tracing::span] set;
[2023-08-04T10:18:06Z INFO  openobserve::service::db::user] Users Cached
# ......
[2023-08-04T10:18:06Z INFO  openobserve::common::meta::telemetry] sending event OpenObserve - Starting server
[2023-08-04T10:18:07Z INFO  actix_server::builder] starting 4 workers
[2023-08-04T10:18:07Z INFO  actix_server::server] Tokio runtime found; starting in existing Tokio runtime
[2023-08-04T10:18:07Z INFO  openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0
[2023-08-04T10:18:07Z INFO  openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0
[2023-08-04T10:18:07Z INFO  openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0

啟動(dòng)后我們可以通過 kubectl port-forward 命令將 OpenObserve 的 5080 端口映射到本地,然后在瀏覽器中訪問 http://localhost:5080 即可看到 OpenObserve 的 UI 界面。

$ kubectl port-forward svc/openobserve 5080:5080 -n openobserve
Forwarding from 127.0.0.1:5080 -> 5080
Forwarding from [::1]:5080 -> 5080

OpenObserve Login

使用上面指定的管理員郵箱和密碼即可登錄,然后就可以看到 OpenObserve 的主界面:

OpenObserve Web

因?yàn)楝F(xiàn)在還沒有數(shù)據(jù),所以頁(yè)面中沒有任何內(nèi)容,在 ingestion 頁(yè)面提供了 Logs、Metrics、Traces 數(shù)據(jù)的各種攝取方法:

Ingestion

這里我們可以先使用 JSON API 來加載一些示例日志數(shù)據(jù)來了解一下 OpenObserve 的使用方法。先使用下面命令下載示例日志數(shù)據(jù):

$ curl -L https://zinc-public-data.s3.us-west-2.amazonaws.com/zinc-enl/sample-k8s-logs/k8slog_json.json.zip -o k8slog_json.json.zip
$ unzip k8slog_json.json.zip

然后使用下面命令將示例日志數(shù)據(jù)導(dǎo)入到 OpenObserve 中:

$ curl http://localhost:5080/api/default/default/_json -i -u "root@example.com:root321"  -d "@k8slog_json.json"
HTTP/1.1 100 Continue

HTTP/1.1 200 OK
content-length: 71
vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
content-type: application/json
date: Fri, 04 Aug 2023 10:46:46 GMT

{"code":200,"status":[{"name":"default","successful":3846,"failed":0}]}%

收據(jù)導(dǎo)入成功后,刷新頁(yè)面即可看到有數(shù)據(jù)了:

OpenObserve Web

在 Stream 頁(yè)面可以看到我們導(dǎo)入的數(shù)據(jù)元信息:

Stream流

然后可以切換到 Logs 頁(yè)面就可以看到日志數(shù)據(jù)了:

圖片

OpenObserve Logs

現(xiàn)在我們就可以去根據(jù)直接的需求去查詢?nèi)罩玖?,常用的一些查詢語(yǔ)法如所示:

  • 對(duì)于值 error 的全文搜索,在查詢編輯器中使用 match_all('error')
  • 對(duì)于值 error 的不區(qū)分大小寫的全文搜索,使用 match_all_ignore_case('error')
  • 對(duì)于值 error 的列搜索,使用 str_match(fieldname, 'error'),這比 match_all 更有效,因?yàn)樗趩蝹€(gè)字段中搜索。
  • 要搜索 code 列的值 200,使用 code=200
  • 要搜索列 stream 列的值為 stderr,使用stream='stderr'
  • 要在日志 log 列上搜索和使用查詢函數(shù)extract_ip,使用 extract_ip(log) | code=200

當(dāng)然除了日志之外,OpenObserve 還支持指標(biāo)和追蹤數(shù)據(jù),這里就不再演示了,有興趣的可以自己去嘗試一下。

這里我們只是簡(jiǎn)單的演示了一下 OpenObserve 的日志方面的使用方法,后續(xù)我們可以使用 Fluentbit、Vector 之類的工具來將 Kubernetes 集群中的日志數(shù)據(jù)發(fā)送到 OpenObserve 中,敬請(qǐng)期待!

參考文檔:https://openobserve.ai/docs

責(zé)任編輯:姜華 來源: k8s技術(shù)圈
相關(guān)推薦

2023-10-26 08:47:30

云原生數(shù)據(jù)采集

2023-09-20 16:11:32

云原生分布式系統(tǒng)

2022-02-21 10:17:33

Rancher開源云原生

2021-06-09 05:44:45

云原生 CICD

2022-05-24 13:47:11

云原生數(shù)據(jù)分辨率

2023-11-27 10:18:05

工業(yè)4.0物聯(lián)網(wǎng)

2022-06-22 16:31:26

阿里云數(shù)字化轉(zhuǎn)型云原生

2022-07-13 08:45:29

云原生容器網(wǎng)絡(luò)

2021-08-13 07:00:41

云原生k8sspringboot

2021-08-26 07:20:05

云原生K8sSpringboot

2022-06-07 13:48:25

可觀測(cè)性架構(gòu)系統(tǒng)開發(fā)

2023-01-18 07:58:54

云原生數(shù)據(jù)采集

2024-04-07 00:00:03

云原生Kubernetes數(shù)字化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)