ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Elasticsearch Exporter Helm Chart 实战指南:Prometheus 监控 Elasticsearch 指标的全参数解析与部署方案

Elasticsearch Exporter Helm Chart 实战指南:Prometheus 监控 Elasticsearch 指标的全参数解析与部署方案 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本文以 Helm Charts 仓库中的stable/elasticsearch-exporterChart3.7.1 版为蓝本系统讲解基于 Go 编写的 Elasticsearch Prometheus Exporter 在 Kubernetes 集群上的部署、配置与 Prometheus 生态集成。文章完整覆盖该 Chart 的全部配置参数连接地址、采集范围、SSL 双向认证、ServiceMonitor、PrometheusRule、日志级别等并对照 deployment.yaml 等模板源码说明每个参数最终如何转化为 exporter 进程的启动命令行帮助读者直接落地一套可复制、可调优的 Elasticsearch 指标采集方案。一、Chart 概览它解决什么问题elasticsearch-exporter是一个把 Elasticsearch 运行指标转换成 Prometheus 格式暴露给抓取端scraper的监控组件。它以 Go 编写连接目标 Elasticsearch 节点周期性采集节点、索引、分片、快照、集群健康度等指标并通过 HTTP 端口暴露为 Prometheus 指标端点。该 Chart 在仓库中对应目录为stable/elasticsearch-exporter/其 Chart.yaml 声明了关键元数据名称elasticsearch-exporter版本3.7.1appVersion对应镜像版本1.1.0kubeVersion: 1.10.0-0即要求 Kubernetes 1.10 及以上维护状态deprecated: true官方说明本 Chart 已废弃并迁移至 prometheus-community 的 Helm Charts 仓库仓库中的实现仍可作为历史版本与配置语义的完整参考关键字metrics、elasticsearch、monitoring。注意原 README 参数表中es.cluster_settings的默认值写为true而当前仓库 values.yaml 中的实际默认值为false即默认不采集集群设置指标。本文以仓库实际内容为准其余默认值均与 README 一致。二、快速开始一条命令完成部署2.1 安装默认配置下一条命令即可完成安装$ helm install stable/elasticsearch-exporter如需指定 release 名称$ helm install --name my-release stable/elasticsearch-exporter该命令会按照默认配置在集群中创建以下资源见 templates 目录Deployment运行 exporter 容器deployment.yamlService默认类型ClusterIP端口 9108将指标端点暴露给集群内部service.yamlServiceAccount可选默认不创建、PodSecurityPolicy可选默认不启用仅在开启 SSL 且未复用已有 Secret 时额外创建证书 Secretcert-secret.yaml。2.2 验证指标端点安装完成后可通过kubectl port-forward在本地访问指标端点该指引由 NOTES.txt 模板在安装成功后自动输出export POD_NAME$(kubectl get pods --namespace default -l appmy-release-elasticsearch-exporter -o jsonpath{.items[0].metadata.name}) kubectl port-forward $POD_NAME 9108:9108 --namespace default随后在浏览器或 curl 中访问curl http://127.0.0.1:9108/metrics默认的指标路径为/metrics可用web.path修改容器内还提供了/healthz健康检查端点供 Deployment 的存活与就绪探针使用deployment.yaml 中 livenessProbe 与 readinessProbe 均探测/healthz。2.3 卸载$ helm delete --purge my-release该命令会移除与 release 关联的所有 Kubernetes 组件并删除 release。2.4 定制安装的两种方式方式一使用--set逐项指定参数$ helm install --name my-release \ --set es.urihttp://elasticsearch:9200,es.indicestrue,log.leveldebug \ stable/elasticsearch-exporter方式二使用-f指定自定义 values 文件# example for staging $ helm install --name my-release -f values.yaml stable/elasticsearch-exporter完整默认配置请参考仓库根目录下的 values.yaml它也是所有--set参数值的权威出处。仓库自带的 ci/default-values.yaml 为空文件说明 CI 会直接以默认配置构建并验证该 Chart。三、配置参数总表完整继承下表列出 Elasticsearch-Exporter Chart 的全部可配置参数及其默认值默认值以当前 values.yaml 为准。参数描述默认值replicaCount期望的 Pod 副本数1restartPolicy容器重启策略Alwaysimage.repository容器镜像仓库justwatch/elasticsearch_exporterimage.tag容器镜像标签1.1.0image.pullPolicy镜像拉取策略IfNotPresentimage.pullSecret私有仓库拉取凭证 Secret 名securityContext.enabled是否启用 Pod securityContextOpenShift 上建议关闭truesecurityContext.runAsUser容器运行用户 ID1000resources资源 requests 与 limits{}priorityClassNamePriorityClass 名称nodeSelector节点标签选择器{}tolerations节点容忍度{}podAnnotationsPod 附加注解{}podSecurityPolicies.enabled是否创建 PodSecurityPolicy 及关联 Role/RoleBindingfalseserviceAccount.create是否为 Pod 创建 ServiceAccountfalseserviceAccount.name使用非本 Chart 管理的 ServiceAccount 名称defaultservice.typeService 类型ClusterIPservice.httpPortHTTP 服务端口9108service.metricsPort.name指标端口名称httpservice.annotationsService 注解{}service.labelsService 附加标签{}env注入 Pod 的额外环境变量{}extraEnvSecrets从 K8s Secret 引用的环境变量见 values.yaml 示例{}envFromSecret将同名命名空间下已有 Secret 的全部值注入环境README 表记为nilsecretMounts需要挂载进 Pod 的 Secret 及其路径列表[]affinity亲和性规则{}es.uri要连接的 Elasticsearch 节点地址http://localhost:9200es.all为 true 时采集集群全部节点而非仅所连节点truees.indices为 true 时采集集群全部索引的统计truees.indices_settings为 true 时采集全部索引的设置统计truees.shards为 true 时采集集群分片统计truees.cluster_settings为 true 时采集集群设置统计falsevalues.yaml 实际值es.snapshots为 true 时采集集群快照统计truees.timeout从 Elasticsearch 获取统计的超时时间30ses.sslSkipVerify跳过 SSL 校验镜像 tag ≥ 1.0.4rc1 可用falsees.ssl.enabled为 true 时使用安全连接访问 Elasticsearchfalsees.ssl.useExistingSecrets为 true 时使用 secretMounts 中的证书falsees.ssl.ca.pem包含可信 CA 的 PEM 内容未设置es.ssl.ca.pathCA PEM 文件路径应与 secretMount 路径一致/ssl/ca.pemes.ssl.client.enabled为 true 时使用客户端证书做认证truees.ssl.client.pem连接 Elasticsearch 的客户端证书 PEM未设置es.ssl.client.pemPath客户端证书文件路径应与 secretMount 路径一致/ssl/client.pemes.ssl.client.key客户端认证私钥未设置es.ssl.client.keyPath客户端私钥文件路径应与 secretMount 路径一致/ssl/client.keyweb.path暴露指标的路径/metricsserviceMonitor.enabled为 true 时为 Prometheus Operator 创建 ServiceMonitor CRDfalseserviceMonitor.namespace设置后 ServiceMonitor 安装到其他命名空间serviceMonitor.labelsPrometheus Operator 所需标签{}serviceMonitor.interval指标抓取间隔10sserviceMonitor.scrapeTimeout抓取超时时间10sserviceMonitor.scheme抓取使用的协议httpserviceMonitor.relabelings指标抓取 relabel 配置[]serviceMonitor.targetLabels转移到 target 上的 Kubernetes Service 标签集合[]serviceMonitor.metricRelabelings入库前应用的 MetricRelabelConfigs[]serviceMonitor.sampleLimit超过该样本数则抓取失败0 表示不限制0prometheusRule.enabled为 true 时为 Prometheus Operator 创建 PrometheusRule CRDfalseprometheusRule.namespace设置后 PrometheusRule 安装到其他命名空间prometheusRule.labelsPrometheus Operator 所需标签{}prometheusRule.rules要创建的 PrometheusRules 列表见 values.yaml 示例[]log.format日志格式可选json与logfmtlogfmtlog.level日志级别可选debug、info、warn、errorinfo四、参数到运行命令的映射源码级拆解该 Chart 的核心价值在于把 values 参数翻译为 exporter 进程的真实命令行参数这一映射逻辑全部集中在 deployment.yaml。理解这层映射排查问题时就能精准定位改哪个值、影响哪个行为。4.1 连接与采集范围参数模板按如下规则拼接elasticsearch_exporter命令es.uri→--es.uriuri目标 Elasticsearch 地址。values.yaml 中的注释提示需要 Basic Auth 时可写成http://admin:passlocalhost:9200这样的带认证串es.all→--es.all采集集群全部节点统计es.indices→--es.indices采集全部索引统计es.indices_settings→--es.indices_settings采集索引设置统计es.shards→--es.shards采集分片统计es.snapshots→--es.snapshots采集快照统计es.cluster_settings→--es.cluster_settings采集集群设置统计es.timeout→--es.timeouttimeout每次向 Elasticsearch 请求统计的超时时间es.sslSkipVerify→--es.ssl-skip-verify跳过 SSL 证书校验该开关依赖镜像 tag ≥ 1.0.4rc1当前 Chart 默认镜像 1.1.0 满足条件。注意一个细节上述布尔开关在模板中采用的是为 true 才追加该参数的写法因此关闭对应采集项等价于不传该命令行参数。4.2 SSL/TLS 双向认证参数当es.ssl.enabledtrue时模板追加--es.caes.ssl.ca.pathCA 证书文件路径若es.ssl.client.enabledtrue默认开启再追加--es.client-certes.ssl.client.pemPath与--es.client-private-keyes.ssl.client.keyPath启用客户端证书认证。证书的提供方式有两种由es.ssl.useExistingSecrets控制内联 PEM默认直接在 values 中写入es.ssl.ca.pem、es.ssl.client.pem、es.ssl.client.key的明文 PEM 内容。cert-secret.yaml 会将这些值 base64 编码生成名为release-elasticsearch-exporter-cert的 Opaque SecretDeployment 再将其以 Secret 卷挂载到/ssl目录与默认路径/ssl/ca.pem、/ssl/client.pem、/ssl/client.key对应复用已有 Secret推荐生产环境设置es.ssl.useExistingSecretstrue同时通过secretMounts指定已有 Secret 及其挂载路径。此时cert-secret.yaml不再生成证书ca.path/pemPath/keyPath必须与 secretMount 的路径保持一致。secretMounts的典型写法secretMounts: - name: elastic-certs secretName: elastic-certs path: /ssl4.3 环境变量注入的三种途径Deployment 模板支持三种向 exporter Pod 注入环境变量的方式对应不同使用场景env普通键值直接写入静态值如env: { KEY_1: value1 }extraEnvSecrets按 Key 引用 Secret把 Secret 中的某个 key 映射为指定环境变量例如extraEnvSecrets: ES_PASSWORD: secret: my-secret key: password模板中会渲染为valueFrom.secretKeyRef且secret与key为必填项缺失时模板会直接报错Must specify secret!/Must specify key!见 deployment.yamlenvFromSecret整表注入指定一个已有 Secret 名称将其全部键值一次性注入环境适合存放认证 token 等批量配置。4.4 探针、生命周期与安全加固模板为 exporter 容器内置了一组默认运行保障deployment.yaml存活探针探测/healthzinitialDelaySeconds: 5、timeoutSeconds: 5、periodSeconds: 5就绪探针同样探测/healthzinitialDelaySeconds: 1preStop 钩子在容器退出前执行sleep 20配合 Deployment 的滚动更新策略maxSurge: 1、maxUnavailable: 0实现平滑摘流容器级安全上下文默认丢弃SETPCAP、CHOWN、NET_RAW、SETUID等 14 类 Linux capabilities并设置readOnlyRootFilesystem: truePod 级 securityContext默认runAsNonRoot: true、runAsUser: 1000。values.yaml 注释特别提醒OpenShift 平台在未授予额外权限时无法以runAsUser: 1000部署需要将securityContext.enabled设为false。五、Prometheus 生态集成ServiceMonitor 与 PrometheusRule5.1 ServiceMonitor让 Prometheus Operator 自动发现抓取目标将serviceMonitor.enabled设为true后servicemonitor.yaml 会生成monitoring.coreos.com/v1的 ServiceMonitor CRDPrometheus Operator 即可自动发现 exporter 的 Service 并开始抓取。模板中的关键映射port: {{ .Values.service.metricsPort.name }}抓取端口直接引用 Service 中名为http的端口即 9108path: {{ .Values.web.path }}抓取路径默认/metricsinterval与scrapeTimeout默认均为10shonorLabels: true保留 exporter 自身标签jobLabel: release name抓取任务的 job 标签使用 release 名称namespaceSelector.matchNames限定为当前 release 所在的命名空间targetLabels、relabelings、metricRelabelings、sampleLimit原样透传用于精细化控制标签流转与样本数限制通过serviceMonitor.labels附加 Prometheus Operator 的prometheus选择器所需标签例如release: prometheus-operator这类用于匹配 Prometheus CR 的 selector 标签。典型开启方式helm install --name my-release --set serviceMonitor.enabledtrue,serviceMonitor.interval15s stable/elasticsearch-exporter5.2 PrometheusRule内置告警与记录规则将prometheusRule.enabled设为true后prometheusrule.yaml 会生成 PrometheusRule CRD。值得特别注意的是prometheusRule.rules会被当作 Helm 模板执行模板中使用了tpl (toYaml .) $因此规则内可以直接使用{{ template elasticsearch-exporter.fullname . }}之类的模板函数来引用本 release 的 Service 标签。values.yaml 内置了可直接启用的示例规则覆盖三类典型监控场景1) 磁盘使用率记录规则record- record: elasticsearch_filesystem_data_used_percent expr: | 100 * (elasticsearch_filesystem_data_size_bytes{service{{ template elasticsearch-exporter.fullname . }}} - elasticsearch_filesystem_data_free_bytes{service{{ template elasticsearch-exporter.fullname . }}}) / elasticsearch_filesystem_data_size_bytes{service{{ template elasticsearch-exporter.fullname . }}} - record: elasticsearch_filesystem_data_free_percent expr: 100 - elasticsearch_filesystem_data_used_percent{service{{ template elasticsearch-exporter.fullname . }}}2) 节点数告警alert- alert: ElasticsearchTooFewNodesRunning expr: elasticsearch_cluster_health_number_of_nodes{service{{ template elasticsearch-exporter.fullname . }}} 3 for: 5m labels: severity: critical annotations: description: There are only {{ {{ $value }} }} 3 ElasticSearch nodes running summary: ElasticSearch running on less than 3 nodes3) JVM 堆内存告警alert- alert: ElasticsearchHeapTooHigh expr: | elasticsearch_jvm_memory_used_bytes{service{{ template elasticsearch-exporter.fullname . }}, areaheap} / elasticsearch_jvm_memory_max_bytes{service{{ template elasticsearch-exporter.fullname . }}, areaheap} 0.9 for: 15m labels: severity: critical annotations: description: The heap usage is over 90% for 15m summary: ElasticSearch node {{ {{ $labels.node }} }} heap usage is high注意告警描述中的{{ {{ $value }} }}这种写法是在 YAML 层面先让 Helm 输出字面量{{ $value }}从而避免与 Helm 模板解析冲突——这正是 3.0.0 版本引入的规则模板化语义详见下文升级说明。六、升级与破坏性变更6.1 升级到 2.0.0Kubernetes API 变更Chart 大版本升级如 v1.x → v2.0.0意味着存在需要人工处理的不兼容变更。1.x 版本中使用的部分 Kubernetes API 已废弃2.x 版本改用新的 API 定义要求集群必须先升级到 Kubernetes 1.10这也是 Chart 声明kubeVersion: 1.10.0-0的原因。升级前请确认集群版本满足要求。6.2 升级到 3.0.0PrometheusRule 模板化从 3.0.0 开始prometheusRule.rules会作为 Helm 模板被渲染处理允许在规则中使用模板变量。这一变更带来的直接影响是如果规则中出现{{ $value }}这类写法Helm 会尝试替换它并大概率渲染失败。因此升级后需要按 values.yaml 中的示例把规则内的模板冲突写法转义为{{ {{ $value }} }}形式后再部署。七、运维提示与限制说明命名与标签机制Chart 的fullname由 _helpers.tpl 计算——release 名已含 chart 名时直接复用 release 名否则拼接为release-chart并统一截断至 63 字符满足 DNS 命名规范。告警规则中的service标签即基于该名称生成自定义fullnameOverride/nameOverride时需要同步核对规则。资源与调度resources、nodeSelector、tolerations、affinity、priorityClassName均原样透传到 Deployment spec见 deployment.yaml生产环境建议显式设置resourcesrequests/limits如 cpu 100m / memory 128Mi并配合亲和性将 exporter 调度到靠近 Elasticsearch 集群的节点。安全基线默认容器以非 root 运行并只读根文件系统适合安全要求较高的环境如需访问受 TLS 保护的 ES请优先采用secretMountsuseExistingSecrets的证书管理方式避免把 PEM 明文写入 values 仓库。维护状态该 Chart 已在 Chart.yaml 中标记为 deprecated官方维护已迁移至 prometheus-community 的 Helm Charts 仓库。新项目建议直接使用迁移后的 Chart若为存量集群仍可依据本文参数语义平滑迁移因为核心参数es.*、serviceMonitor.*、prometheusRule.*等在新版 Chart 中保持了高度一致。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Helm 部署多角色 Elasticsearch 集群实战incubator/elasticsearch Chart 完整指南Helm 部署多角色 Elasticsearch 集群实战incubator/elasticsearch Chart 完整指南 本文围绕 charts 仓库中终极指南如何使用werf实现Kubernetes应用的自动化测试全流程终极指南如何使用werf实现Kubernetes应用的自动化测试全流程 werf是一个强大的解决方案旨在为Kubernetes实现高效且一致的软件交付流程人工智能AI 应用语音移动开发后端桌面应用智能硬件MCP 服务KnowStreaming 内置 Elasticsearch Helm Chart 部署与配置实战指南KnowStreaming 内置 Elasticsearch Helm Chart 部署与配置实战指南 本篇技术指南以 KnowStreaming 仓库中随 k后端消息队列运维可观测性上一篇GitHub Desktop 的 Windows 菜单栏设计解析从无边框窗口到高保真应用菜单的实现与键盘导航规范下一篇Style2Paints开源贡献统计代码提交量与issue处理效率创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表