自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

云原生可觀測平臺 OpenObserve 初體驗(yàn)

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

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

OpenObserve 與 Elasticsearch 的比較

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

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

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

OpenObserve VS Elasticsearch

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

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

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

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

架構(gòu)

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

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

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

Sled 和本地磁盤模式

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

Sled本地模式

Sled 和對象存儲模式

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

Sled對象存儲模式

Etcd 和對象存儲模式

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

Etcd對象存儲模式

HA 模式

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

Etcd對象存儲

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

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

安裝

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

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

$ 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 # 指定一個可用的存儲類
        resources:
          requests:
            storage: 10Gi

上面的資源清單中,我們使用了一個 StatefulSet 來創(chuàng)建 OpenObserve,需要注意的是需要配置 ZO_ROOT_USER_EMAIL 和 ZO_ROOT_USER_PASSWORD 兩個環(huán)境變量用來指定管理員郵箱和密碼。然后在 PVC 模板中指定一個可用的 StorageClass,用于持久化存儲數(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)證是否啟動成功:

$ 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

啟動后我們可以通過 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ù),所以頁面中沒有任何內(nèi)容,在 ingestion 頁面提供了 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)入成功后,刷新頁面即可看到有數(shù)據(jù)了:

OpenObserve Web

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

Stream流

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

圖片

OpenObserve Logs

現(xiàn)在我們就可以去根據(jù)直接的需求去查詢?nèi)罩玖耍S玫囊恍┎樵冋Z法如所示:

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

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

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

參考文檔: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開源云原生

2022-05-24 13:47:11

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

2023-11-27 10:18:05

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

2021-06-09 05:44:45

云原生 CICD

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

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

2023-01-18 07:58:54

云原生數(shù)據(jù)采集
點(diǎn)贊
收藏

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