如何監控容器或K8s中的OpenSearch

东风微鸣發表於2024-04-10

概述

當前 OpenSearch 使用的越來越多, 但是 OpenSearch 生態還不盡完善.

針對如下情況:

  • 監控容器化或執行在 K8s 中的 OpenSearch

我查了下, 官方還沒有提供完備的方案.

這裡如何監控 K8s 中的 OpenSearch, 包括安裝 exporter 外掛、採集、展示全環節。

OpenSearch 簡介

  • OpenSearch 是一款開源的分散式搜尋引擎(從 ElasticSearch 特定版本分叉而來),可以執行快速、可擴充套件的全文搜尋、應用程式和基礎設施監控、安全和事件資訊管理、運營健康跟蹤等用例。
  • OpenSearch 具有多種功能和外掛,可以幫助索引、保護、監控和分析資料。
  • OpenSearch 包含一個演示配置,以便您可以快速啟動和執行,但在生產環境中使用 OpenSearch 之前,您必須使用自己的證書、身份驗證方法、使用者和密碼手動配置安全外掛。
  • OpenSearch 由 AWS 支援,所有元件均可在 GitHub 上獲得 Apache 許可證版本 2.0。

Prometheus Exporter Plugin for OpenSearch 簡介

  • Prometheus Exporter 外掛用於將 OpenSearch 指標暴露為 Prometheus 格式。
  • 外掛版本必須與 OpenSearch 版本完全匹配,因此需要保持 prometheus-exporter-plugin-for-opensearch 版本與 OpenSearch 版本同步。
  • 可以透過在每個要由 Prometheus 抓取的 OpenSearch 節點上安裝外掛來安裝外掛。
  • 可以透過在 config/opensearch.yml 中配置靜態設定和動態設定來配置外掛。
  • 指標可以直接在 http(s)://<opensearch-host>:9200/_prometheus/metrics 獲得。

📚️相關參考資料

本文會使用到 2 個資源:

  • OpenSearch
  • Prometheus Exporter Plugin for OpenSearch

具體實現

兩種方案:

  1. 自己製作包含 prometheus-exporter 外掛的映象
  2. 透過 OpenSearch Helm Chart 安裝prometheus-exporter 外掛

(方案一)製作包含 prometheus-exporter 外掛的映象並使用

📝Notes:

這裡以 opensearch:2.12 版本為例

Dockerfile 內容如下:

FROM opensearchproject/opensearch:2.12.0
LABEL maintainer="cuikaidong@foxmail.com"
ARG EXPORTER_PLUGIN_URL="https://github.com/Aiven-Open/prometheus-exporter-plugin-for-opensearch/releases/download/2.12.0.0/prometheus-exporter-2.12.0.0.zip"
RUN opensearch-plugin install -b ${EXPORTER_PLUGIN_URL}

📝Notes

如果 docker build 過程下載超時, 可以將對應EXPORTER_PLUGIN_URL行替換為相關代理的 URL(這裡不詳述).
或者, 下載後, 透過 COPY 複製進去後再執行:
opensearch-plugin install -b file:///path/to/prometheus-exporter-2.12.0.0.zip

構建並推送映象:

docker build -t xxxxx/opensearch:2.12.0-prometheus-exporter -f ./Dockerfile
docker push xxxx/opensearch:2.12.0-prometheus-exporter

📝Notes

您可以透過 CICD Pipeline, 隨著 OpenSearch 和 prometheus-exporter-plugin-for-opensearch 的更新, 自動構建新的映象.
我相信, 隨著 OpenSearch 生態的完善, 應該會有已經包含 exporter 的 OpenSearch 映象.

對於容器化或 K8s 執行的 OpenSearch, 只需要將映象改為構建後的, 帶 prometheus-exporter 的映象即可.

如:

原來是:

image: opensearchproject/opensearch:2.12.0

修改為:

image: xxxx/opensearch:2.12.0-prometheus-exporter

(方案二)使用 OpenSearch Helm Chart

如果你是在 K8s 中執行 OpenSearch, 也可以考慮使用 OpenSearch 的 Helm Chart, 它包含了安裝第三方外掛的功能, 具體 values.yaml 如下:

## Enable to add 3rd Party / Custom plugins not offered in the default OpenSearch image.
plugins:
  enabled: true
  installList:
    - https://github.com/Aiven-Open/prometheus-exporter-plugin-for-opensearch/releases/download/2.12.0.0/prometheus-exporter-2.12.0.0.zip

📚️參考文件:

OpenSearch Helm Chart

修改 pometheus-exporter 的配置

另外, 可以按需修改prometheus-exporter 的配置, 詳細配置說明見:

  • prometheus-exporter-plugin-for-opensearch config

示例配置如下:

config/opensearch.yml, 追加如下內容:

plugins.security.disabled: true
prometheus.indices_filter.selected_indices: "log-*,*log,*log*,log*-test"
prometheus.indices_filter.selected_option: "STRICT_EXPAND_OPEN_FORBID_CLOSED"

📝宣告

plugins.security.disabled: true 可選項, 允許透過 http 協議訪問外掛 url. 生產不建議使用. 建議只在快速驗證時採用

prometheus.indices_filter.selected_indices 僅供參考. 請按需調整.

prometheus.indices_filter.selected_option 使用預設配置. 請閱讀細節後按需調整.

修改完配置後, 重啟容器正常生效.

驗證外掛已啟用

指標可直接在以下位置獲取:

http(s)://opensearch-host:9200/_prometheus/metrics

作為示例結果,你將得到如下內容:

# HELP opensearch_process_mem_total_virtual_bytes Memory used by ES process
# TYPE opensearch_process_mem_total_virtual_bytes gauge
opensearch_process_mem_total_virtual_bytes{cluster="develop",node="develop01",} 3.626733568E9
# HELP opensearch_indices_indexing_is_throttled_bool Is indexing throttling ?
# TYPE opensearch_indices_indexing_is_throttled_bool gauge
opensearch_indices_indexing_is_throttled_bool{cluster="develop",node="develop01",} 0.0
# HELP opensearch_jvm_gc_collection_time_seconds Time spent for GC collections
# TYPE opensearch_jvm_gc_collection_time_seconds counter
opensearch_jvm_gc_collection_time_seconds{cluster="develop",node="develop01",gc="old",} 0.0
opensearch_jvm_gc_collection_time_seconds{cluster="develop",node="develop01",gc="young",} 0.0
# HELP opensearch_indices_requestcache_memory_size_bytes Memory used for request cache
# TYPE opensearch_indices_requestcache_memory_size_bytes gauge
opensearch_indices_requestcache_memory_size_bytes{cluster="develop",node="develop01",} 0.0
# HELP opensearch_indices_search_open_contexts_number Number of search open contexts
# TYPE opensearch_indices_search_open_contexts_number gauge
opensearch_indices_search_open_contexts_number{cluster="develop",node="develop01",} 0.0
# HELP opensearch_jvm_mem_nonheap_used_bytes Memory used apart from heap
# TYPE opensearch_jvm_mem_nonheap_used_bytes gauge
opensearch_jvm_mem_nonheap_used_bytes{cluster="develop",node="develop01",} 5.5302736E7
...

使用 Prometheus 採集指標

(僅作為參考示例, 請按需調整), 在 Prometheus 的 scrape 下面, 追加如下內容:

    - job_name: opensearch
      metrics_path: /_prometheus/metrics
      relabel_configs:
        - replacement: '<your-instance-name>'
          target_label: node
      static_configs:
        - targets: ['<your-host-name>:9200']

配置 Prometheus Rules 和 Alerts

這裡隨便舉一個簡單例子, 現在使用 OpenSearch 的, 之前應該有完備的 ES 相關的 rules 和 alerts. 略作修改即可.

alert: OpenSearchYellowCluster
for: 5m
annotations:
  summary: At least one of the clusters is reporting a yellow status.
  description: '{{$labels.cluster}} health status is yellow over the last 5 minutes'
  runbook_url: ''
labels:
  severity: warning
  '': ''
expr: |
  opensearch_cluster_status == 1

使用 Grafana 檢視

可以使用如下 Grafana Dashboard 進行檢視:

  • https://grafana.com/grafana/dashboards/20827-opensearch/

效果如下:

OpenSearch Dashboard

更多 OpenSearch Dashboard 可以在 https://grafana.com/grafana/dashboards/ 中搜尋關鍵詞 "OpenSearch".

總結

如何監控容器或 K8s 中的 OpenSearch?

  1. 先安裝 OpenSearch Prometheus Exporter 外掛, 有 2 種辦法:
    1. 自己製作包含 OpenSearch Prometheus Exporter 外掛的映象
    2. 使用 OpenSearch Helm Chart 安裝
  2. 配置 Prometheus scrape config
  3. 配置 Prometheus Rules 和 Alerts
  4. 使用 Grafana 檢視

以上.

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章