前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何监控容器或K8s中的OpenSearch

如何监控容器或K8s中的OpenSearch

作者头像
东风微鸣
发布2024-04-16 16:10:53
810
发布2024-04-16 16:10:53
举报
文章被收录于专栏:东风微鸣技术博客

概述

当前 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[1]•Prometheus Exporter Plugin for OpenSearch[2]

具体实现

两种方案:

1.自己制作包含 prometheus-exporter 插件的镜像2.通过 OpenSearch Helm Chart 安装prometheus-exporter 插件

(方案一)制作包含 prometheus-exporter 插件的镜像并使用

📝Notes: 这里以 opensearch:2.12 版本为例

Dockerfile 内容如下:

代码语言:javascript
复制
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

构建并推送镜像:

代码语言:javascript
复制
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 的镜像即可.

如:

原来是:

代码语言:javascript
复制
image: opensearchproject/opensearch:2.12.0

修改为:

代码语言:javascript
复制
image: xxxx/opensearch:2.12.0-prometheus-exporter

(方案二)使用 OpenSearch Helm Chart

如果你是在 K8s 中运行 OpenSearch, 也可以考虑使用 OpenSearch 的 Helm Chart, 它包含了安装第三方插件的功能, 具体 values.yaml 如下:

代码语言:javascript
复制
## 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[3]

修改 pometheus-exporter 的配置

另外, 可以按需修改prometheus-exporter 的配置, 详细配置说明见:

•prometheus-exporter-plugin-for-opensearch config[4]

示例配置如下:

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

代码语言:javascript
复制
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 使用默认配置. 请阅读细节后按需调整.

修改完配置后, 重启容器正常生效.

验证插件已启用

指标可直接在以下位置获取:

代码语言:javascript
复制
http(s)://opensearch-host:9200/_prometheus/metrics

作为示例结果,你将得到如下内容:

代码语言:javascript
复制
# 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 下面, 追加如下内容:

代码语言:javascript
复制
    - 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. 略作修改即可.

代码语言:javascript
复制
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 config3.配置 Prometheus Rules 和 Alerts4.使用 Grafana 查看

以上.

References

[1] OpenSearch: https://github.com/opensearch-project/OpenSearch [2] Prometheus Exporter Plugin for OpenSearch: https://github.com/aiven/prometheus-exporter-plugin-for-opensearch [3] OpenSearch Helm Chart: https://github.com/opensearch-project/helm-charts/blob/main/charts/opensearch/values.yaml [4] prometheus-exporter-plugin-for-opensearch config: https://github.com/Aiven-Open/prometheus-exporter-plugin-for-opensearch/tree/main?tab=readme-ov-file#plugin-configuration

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • OpenSearch 简介
      • Prometheus Exporter Plugin for OpenSearch 简介
      • 📚️相关参考资料
      • 具体实现
        • (方案一)制作包含 prometheus-exporter 插件的镜像并使用
          • (方案二)使用 OpenSearch Helm Chart
            • 修改 pometheus-exporter 的配置
              • 验证插件已启用
            • 使用 Prometheus 采集指标
              • 配置 Prometheus Rules 和 Alerts
            • 使用 Grafana 查看
            • 总结
              • References
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档