概述
當前 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
具體實現
兩種方案:
- 自己製作包含 prometheus-exporter 外掛的映象
- 透過 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 可以在 https://grafana.com/grafana/dashboards/ 中搜尋關鍵詞 "OpenSearch".
總結
如何監控容器或 K8s 中的 OpenSearch?
- 先安裝 OpenSearch Prometheus Exporter 外掛, 有 2 種辦法:
- 自己製作包含 OpenSearch Prometheus Exporter 外掛的映象
- 使用 OpenSearch Helm Chart 安裝
- 配置 Prometheus scrape config
- 配置 Prometheus Rules 和 Alerts
- 使用 Grafana 檢視
以上.
三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.