• 如何监控容器或K8s中的OpenSearch


    概述

    当前 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)://:9200/_prometheus/metrics 获得。

    📚️相关参考资料

    本文会使用到 2 个资源:

    具体实现

    两种方案:

    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 的配置, 详细配置说明见:

    示例配置如下:

    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: ''
              target_label: node
          static_configs:
            - targets: [':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 进行查看:

    效果如下:

    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 编写.

  • 相关阅读:
    快速构建基于Paddle Serving部署的Paddle Detection目标检测Docker镜像
    中国历史朝代
    深入探索 MongoDB:高级索引解析与优化策略
    记一次uniapp扫描NFC [ISO15693]
    RCNN系列网络的理解
    医疗产品设计的终极目标是什么?
    Allegro电商平台:为卖家打开全球市场,为消费者带来无限选择
    【设计模式】Java设计模式 - 模板模式
    使用idea(java-decompiler)插件反编译
    【Javascript】构造函数的参数写法
  • 原文地址:https://www.cnblogs.com/east4ming/p/18127135