kubernetes里prometheus-operator 监控jvm

本文详述了在Kubernetes环境中利用Prometheus Operator监控Java应用JVM的具体步骤,包括配置CRD资源、引入JMX Exporter、设置ServiceMonitor及RBAC权限,最终实现JVM指标的收集与展示。

在配置prometheus-operator 监控jvm之前,我们必须要了解prometheus-operator的4个crd不然后续会蒙蔽。

这四个CRD作用如下

  • Prometheus: 由 Operator 依据一个自定义资源kind: Prometheus类型中,所描述的内容而部署的 Prometheus Server 集群,可以将这个自定义资源看作是一种特别用来管理Prometheus Server的StatefulSets资源。
  • ServiceMonitor: 一个Kubernetes自定义资源(和kind: Prometheus一样是CRD),该资源描述了Prometheus Server的Target列表,Operator 会监听这个资源的变化来动态的更新Prometheus Server的Scrape targets并让prometheus server去reload配置(prometheus有对应reload的http接口/-/reload)。而该资源主要通过Selector来依据 Labels 选取对应的Service的endpoints,并让 Prometheus Server 通过 Service 进行拉取(拉)指标资料(也就是metrics信息),metrics信息要在http的url输出符合metrics格式的信息,ServiceMonitor也可以定义目标的metrics的url.
  • Alertmanager:Prometheus Operator 不只是提供 Prometheus Server 管理与部署,也包含了 AlertManager,并且一样通过一个 kind: Alertmanager 自定义资源来描述信息,再由 Operator 依据描述内容部署 Alertmanager 集群。
  • PrometheusRule:对于Prometheus而言,在原生的管理方式上,我们需要手动创建Prometheus的告警文件,并且通过在Prometheus配置中声明式的加载。而在Prometheus Operator模式中,告警规则也编程一个通过Kubernetes API 声明式创建的一个资源.告警规则创建成功后,通过在Prometheus中使用想servicemonitor那样用ruleSelector通过label匹配选择需要关联的PrometheusRule即可

 

 

监控后端jvm内存,我们需要下载jmx_prometheus_javaagent-0.11.0.jar

下载地址:

https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.11.0/jmx_prometheus_javaagent-0.11.0.jar

config.yaml下载例子:

https://github.com/prometheus/jmx_exporter/tree/master/example_configs

下载之后重命名为config.yaml

之后将以上两个文件封装在dockerfile里

 

 

并在docker启动参数环境变量里加入JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08 -javaagent:$PWD/jmx_prometheus_javaagent-0.2.0.jar=1234:$PWD/config.yaml -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"

之后通过k8s启动之后通过curl http://127.0.0.1:1234/metrics 去访问是否已经成功

 

 因为svc的负载均衡,所以在K8S里监控metrics基本最小单位都是一个svc背后的pod为target,所以prometheus-operator创建了对应的CRD: kind: ServiceMonitor ,创建的ServiceMonitor里声明需要监控选中的svc的label以及metrics的url路径的和namespaces即可

 

在需要获取jvm的应用的svc里配置相应的端口 也就是以上的1234端口 后续ServiceMonitor 会根据name的值对应相应的target

 

之后创建ServiceMonitor :

 

因ServiceMonitor 与监控的服务不再同一个namespace 所以需要加namespaceSelector

默认情况下ServiceMonitor和监控对象必须是在相同Namespace下的,如果要关联非同ns下需要下面这样设置值

spec:

namespaceSelector:

matchNames:

- target_ns_name

如果希望ServiceMonitor可以关联任意命名空间下的标签,则通过以下方式定义:

spec:

namespaceSelector:

any: true

 

创建完成之后 这里有一个坑:如果监控的服务不在同一个namespace 那么会出现无权限获取的问题:

User \"system:serviceaccount:monitoring:prometheus-k8s\" cannot list pods in the namespace \"pre\""

这里我们根据提示创建rbac认证

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: prometheus
rules:
- apiGroups: [""]
  resources:
  - nodes
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources:
  - configmaps
  verbs: ["get"]
- nonResourceURLs: ["/metrics"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: prometheus
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: prometheus
subjects:
- kind: ServiceAccount
  name: prometheus-k8s
  namespace: monitoring

之后我们可以通过prometheus的ui界面查看到对应的target

 

总的来说就是创建自己的监控数据需要ServiceMonitor,通过ServiceMonitor去对应的label里找对应svc下的metrics的port。并且不同的namespace下的监控需要设置好rbac权限(在k8s集群中有配置rbac的集群里)

下载grafana的模版

https://grafana.com/dashboards/8878/revisions

导入到grafana的服务里最后查看对应的ui

 

<think>好的,我现在需要帮助用户解决如何在Helm安装的Prometheus Stack中添加Elasticsearch的监控。首先,我得回忆一下Prometheus Stack通常包括哪些组件,比如Prometheus本身、Grafana,可能还有各种Exporter。用户的问题是关于Elasticsearch的监控,所以需要确定Elasticsearch的监控方式。 首先,Prometheus监控外部服务通常需要通过Exporter来获取指标。Elasticsearch本身有HTTP API可以暴露监控数据,可能需要使用Elasticsearch Exporter,比如prometheus-community的elasticsearch-exporter。用户可能已经通过Helm安装了kube-prometheus-stack,现在需要在这个基础上添加对Elasticsearch的监控。 接下来,我需要考虑如何通过Helm Chart来配置。kube-prometheus-stack的Helm Chart中有一个部分叫做additionalPrometheusExporters,可能允许用户添加额外的Exporter。或者,可能需要单独安装elasticsearch-exporter的Helm Chart,然后配置ServiceMonitor以便Prometheus自动发现并抓取指标。 然后,需要确定Elasticsearch的访问信息,比如地址、端口、认证等。如果Elasticsearch运行在Kubernetes集群内部,可能需要通过服务名访问;如果是外部集群,可能需要配置外部端点。同时,如果启用了安全认证,Exporter需要相应的用户名和密码或者证书。 接下来,考虑如何安装elasticsearch-exporter。查找是否有官方的Helm Chart。例如,prometheus-community可能有这个Exporter的Chart。用户可以通过helm repo add添加仓库,然后helm install,或者作为子Chart添加到现有的kube-prometheus-stack中。 另外,可能需要配置ServiceMonitor,这样Prometheus Operator会创建相应的监控配置。需要确保ServiceMonitor的标签匹配Prometheus的serviceMonitorSelector,通常kube-prometheus-stack的Prometheus实例会监控带有release: prometheus-stack名称的ServiceMonitor,或者有其他标签选择器,可能需要调整。 然后,安装完成后,需要确认Exporter的Pod是否运行正常,指标是否被正确抓取。可以通过访问Prometheus的UI查看target状态,或者直接通过curl检查Exporter的/metrics端点。 最后,可能需要配置Grafana仪表板来展示Elasticsearch的监控数据。可以在Grafana中导入现有的Elasticsearch仪表板,比如通过Grafana.com查找相关的仪表板ID,或者自己创建。 可能遇到的问题包括:Exporter的配置错误,网络策略阻止访问Elasticsearch,ServiceMonitor的标签不匹配,或者Prometheus没有权限访问Exporter的端点。需要逐步排查这些问题,检查日志、Service和Endpoints是否正确,以及Prometheus配置是否生成了正确的抓取任务。 总结步骤应该是:安装elasticsearch-exporter,配置ServiceMonitor,验证指标抓取,然后配置Grafana仪表板。需要确保所有步骤的细节正确,比如Helm的值文件配置正确,特别是Elasticsearch的连接参数和ServiceMonitor的设置。</think>在 Helm 安装的 `kube-prometheus-stack` 中添加 Elasticsearch 监控,可以通过以下步骤实现: --- ### 一、部署 Elasticsearch Exporter **核心思路**:通过 [elasticsearch-exporter](https://github.com/prometheus-community/elasticsearch-exporter) 将 Elasticsearch 指标转换为 Prometheus 可读格式。 #### 方法 1:单独安装 Exporter ```bash helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm upgrade --install elasticsearch-exporter prometheus-community/elasticsearch-exporter \ --set es.uri=http://elasticsearch-host:9200 # 替换为你的 ES 地址 --set serviceMonitor.enabled=true \ --set serviceMonitor.additionalLabels.release=prometheus-stack # 与 Prometheus 的 selector 匹配 ``` #### 方法 2:集成到现有 Helm 部署 在 `kube-prometheus-stack` 的 `values.yaml` 中添加: ```yaml additionalPrometheusExporters: elasticsearch: enabled: true es: uri: http://elasticsearch-host:9200 serviceMonitor: enabled: true additionalLabels: release: prometheus-stack # 确保与 Prometheus 的 serviceMonitorSelector 匹配 ``` --- ### 二、验证 Exporter 状态 1. **检查 Pod 状态**: ```bash kubectl get pods -l app.kubernetes.io/name=elasticsearch-exporter ``` 2. **检查指标端点**: ```bash kubectl port-forward svc/elasticsearch-exporter 9114 curl http://localhost:9114/metrics ``` 3. **Prometheus 目标检查**: 访问 Prometheus Web → Status → Targets,确认 `elasticsearch-exporter` 状态为 **UP**。 --- ### 三、配置 Grafana 仪表板 1. **导入官方仪表板**: - 访问 [Grafana 仪表板库](https://grafana.com/grafana/dashboards/?search=elasticsearch) - 选择兼容仪表板(如 ID `2322` 或 `14054`) - 在 Grafana 中通过 ID 导入 2. **手动配置**: - 创建新仪表板,使用 Prometheus 数据源 - 关键指标: - 集群健康:`elasticsearch_cluster_health_status` - JVM 内存:`elasticsearch_jvm_memory_used_bytes` - 索引速率:`rate(elasticsearch_indices_indexing_index_time_seconds_total[5m])` --- ### 四、高级配置选项 #### 1. 安全认证 如果 Elasticsearch 启用认证: ```yaml es: uri: https://elasticsearch-host:9200 secret: enabled: true existingSecret: elasticsearch-auth # 包含 user/password 的 Secret ``` #### 2. 自定义指标过滤 在 `values.yaml` 中指定采集的指标: ```yaml es: uri: http://elasticsearch-host:9200 exportIndices: true exportIndicesSettings: true exportClusterSettings: true ``` #### 3. 网络策略(跨命名空间) ```yaml serviceMonitor: namespace: elasticsearch-ns # 监控其他命名空间的 ES additionalLabels: release: prometheus-stack ``` --- ### 常见问题排查 1. **指标无法抓取**: - 检查 ServiceMonitor 的 `selector` 是否匹配 Prometheus 配置 - 验证 `kubectl get servicemonitors` 是否存在对应资源 2. **连接被拒绝**: - 确认 Elasticsearch 端点可访问 - 检查网络策略是否允许流量 3. **认证失败**: - 验证 Secret 中的用户名/密码是否正确 - 确认 HTTPS 证书有效 通过以上步骤,即可在现有 Prometheus Stack 中实现对 Elasticsearch 的完整监控
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值