概述

当前 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 个资源:

具体实现

两种方案:

  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: '<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 进行查看:

效果如下:

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

如何监控容器或K8s中的OpenSearch的更多相关文章

  1. k8s中yaml文常见语法

    在k8s中,所有的配置都是 json格式的.但为了读写方便,通常将这些配置写成yaml 格式,其运行的时候,还是会靠yaml引擎将其转化为json,apiserver 也仅接受json的数据类型. y ...

  2. 【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?

    背景介绍 最近的docker容器经常被kill掉,k8s中该节点的pod也被驱赶. 我有一个在主机中运行的Docker容器(也有在同一主机中运行的其他容器).该Docker容器中的应用程序将会计算数据 ...

  3. k8s中使用prometheus operator监控外部服务器部署的windows exporter

    k8s中使用prometheus operator监控外部服务器部署的windows exporter 0.文档说明 (1)Prometheus Operator是一个流行的k8s集群监控套件,项目地 ...

  4. k8s中初始化容器(init container)的作用及其使用方法

    概述 在容器的部署过程中,有的时候需要在容器运行之前进行一些预配置的工作,比如下载配置,判断某些服务是否启动,修改配置等一些准备的工作,想要实现这些功能,在k8s中可以使用初始化容器,在应用容器运行之 ...

  5. K8s中的多容器Pod和Pod内容器间通信

    容器(Container)常被用来解决比如微服务的单个问题,但在实际场景中,问题的解决往往需要多容器方案.本文会讨论将多个容器整合进单个Kubernetes Pod 中,以及Pod中的容器之间是如何通 ...

  6. k8s中pod的容器日志查看命令

    如果容器已经崩溃停止,您可以仍然使用 kubectl logs --previous 获取该容器的日志,只不过需要添加参数 --previous. 如果 Pod 中包含多个容器,而您想要看其中某一个容 ...

  7. 在k8s中搭建可解析hostname的DNS服务

    2016-01-25更新 上篇文章总结k8s中搭建hbase时,遇到Pod中hostname的DNS解析问题,本篇将通过修改kube2sky源码来解决这个问题. 1 前言 kube2sky在Githu ...

  8. Prometheus K8S中部署Alertmanager

    Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...

  9. Kubernetes之在k8s中部署Java应用

    部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...

  10. k8s 中的 Pod 细节了解

    k8s中Pod的理解 基本概念 k8s 为什么使用 Pod 作为最小的管理单元 如何使用 Pod 1.自主式 Pod 2.控制器管理的 Pod 静态 Pod Pod的生命周期 Pod 如何直接暴露服务 ...

随机推荐

  1. 【Azure 事件中心】使用Kafka消费Azure EventHub中数据,遇见消费慢的情况可以如何来调节呢?

    问题描述 使用Kafka消费Azure EventHub中数据,遇见消费慢的情况可以如何来调节呢? 问题解答 查看Kafka Consumer的配置参数,其中最只要的一个参数为:max.poll.re ...

  2. FolkMQ 作个简单的消息中间件(最简单的那种), v1.3.1 发布

    功能简介 角色 功能 生产端(或发起端) 发布消息.定时消息(或叫延时).顺序消息.可过期消息.事务消息.发送消息(rpc)支持 Qos0.Qos1 消费端(或接收端) 订阅.取消订阅.消费-ACK( ...

  3. YAML 语法简介与 C# 操作示例

    〇.简介 YAML(Yet Another Markup Language)另一种标记语言. YAML 是一种较为人性化的数据序列化语言,可以配合目前大多数编程语言使用.YAML 的语法比较简洁直观, ...

  4. SoftCnKiller 更新程序 bat 调用vbs 更新,下载gitee文件 更新自身数据

    bat @echo off title 更新流氓软件黑名单 cd /d "%~dp0" echo 请选择更新源,默认使用1.GitCode更新. echo.&choice ...

  5. C#项目管理引用的dll文件

    这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期使用. 设置dll路径 参考C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁中间的 方法一:配置App.config文件的pri ...

  6. arch安装deep-wine-wechat时,跳过md5检测的方法

    yay -S --mflags --skipinteg deepin-wine-wechat 这条命令是的我们跳过了md5检测! 微信的安装位置:C:\Program Files\Tencent\We ...

  7. 三维模型OBJ格式轻量化的纹理压缩和质量关系分析

    三维模型OBJ格式轻量化的纹理压缩和质量关系分析 三维模型的OBJ格式通常包含纹理信息,而对纹理进行轻量化压缩可以减小文件大小和提高加载性能.然而,在进行纹理压缩时需要权衡压缩比率和保持质量之间的关系 ...

  8. eviacam在Arch/Manjaro Linux下的安装

    安装base-devel 安装编译工具,默认的依赖里没有编译工具 sudo yay -S base-devel 如果安装编译工具,会报类似下面的错误: 安装eviacam yay -S eviacam ...

  9. 记录--浏览器渲染15M文本导致崩溃怎么办

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近,我刚刚完成了一个阅读器的txt文件阅读功能,但在处理大文件时,遇到了文本内容过多导致浏览器崩溃的问题. 一般情况下,没有任何样式渲染 ...

  10. UE4 c++重构简单死亡之眼的效果

    虚幻社区中有蓝图教学视频 使用C++重构,主要用到UGameplayStatics类中的SetGlobalTimerDilation方法,以及角色的相机管理器的调用,之后通过StartCameraFa ...