Need Help to monitor the opensearch cluster health via grafana monitoring to

Versions (relevant - OpenSearch/Dashboard/Server OS/Browser): OpenSearch version 2.15.0
And Grafana version is Grafana v12.1.0

Describe the issue: We are planning to monitor the OpenSearch cluster health using Grafana — metrics such as unassigned shards, replicas, etc. However, we haven’t found a proper solution for the OpenSearch exporter. We also tried using es_exporter v1.3.0, but it didn’t help. Please suggest a solution for monitoring OpenSearch health through Grafana.

Configuration:

Relevant Logs or Screenshots:

@shubhammugale Did you try Prometheus exporter?

Yes i have tried but no luck. tried via configuring the prometheus exporter plugin but it shows {“error”:“no handler found for uri [/_prometheus/metrics] and method [GET]”}

@shubhammugale Did you install the Prometheus exporter plugin?

/usr/share/opensearch/bin/opensearch-plugin list
opensearch-alerting
opensearch-anomaly-detection
...
prometheus-exporter

I had no issues with getting metrics from OS 2.15.0 and 3.2.0

curl --insecure -u admin:Eliatra123 https://localhost:9200/_prometheus/metrics
# HELP opensearch_jvm_bufferpool_total_capacity_bytes Total capacity provided by buffer pools
# TYPE opensearch_jvm_bufferpool_total_capacity_bytes gauge
opensearch_jvm_bufferpool_total_capacity_bytes{cluster="opensearch-cluster1",node="opensearch-node1",nodeid="qtTFUtgISGatrIPJSVnBmQ",bufferpool="mapped - 'non-volatile memory'",} 0.0
opensearch_jvm_bufferpool_total_capacity_bytes{cluster="opensearch-cluster1",node="opensearch-node1",nodeid="qtTFUtgISGatrIPJSVnBmQ",bufferpool="direct",} 4522270.0
opensearch_jvm_bufferpool_total_capacity_bytes{cluster="opensearch-cluster1",node="opensearch-node1",nodeid="qtTFUtgISGatrIPJSVnBmQ",bufferpool="mapped",} 205918.0
# HELP opensearch_indices_refresh_listeners_number Number of refresh listeners
# TYPE opensearch_indices_refresh_listeners_number gauge
opensearch_indices_refresh_listeners_number{cluster="opensearch-cluster1",node="opensearch-node1",nodeid="qtTFUtgISGatrIPJSVnBmQ",} 0.0
# HELP opensearch_ingest_pipeline_processor_total_time_seconds Ingestion total time in seconds
# TYPE opensearch_ingest_pipeline_processor_total_time_seconds gauge
# HELP opensearch_cluster_pending_tasks_number Number of pending tasks
# TYPE opensearch_cluster_pending_tasks_number gauge
opensearch_cluster_pending_tasks_number{cluster="opensearch-cluster1",} 0.0
# HELP opensearch_indices_percolate_count Count of percolates
# TYPE opensearch_indices_percolate_count gauge
# HELP opensearch_index_requestcache_hit_count Number of hits in request cache
# TYPE opensearch_index_requestcache_hit_count gauge
opensearch_index_requestcache_hit_count{cluster="opensearch-cluster1",index="security-auditlog-2025.11.12",context="total",} 0.0
opensearch_index_requestcache_hit_count{cluster="opensearch-cluster1",index=".kibana_1",context="primaries",} 0.0
opensearch_index_requestcache_hit_count{cluster="opensearch-cluster1",index=".plugins-ml-config",context="total",} 0.0
opensearch_index_requestcache_hit_count{cluster="opensearch-cluster1",index=".opendistro_security",context="total",} 0.0
opensearch_index_requestcache_hit_count{cluster="opensearch-cluster1",index=".kibana_1",context="total",} 0.0
opensearch_index_requestcache_hit_count{cluster="opensearch-cluster1",index="security-auditlog-2025.11.12",context="primaries",} 0.0
...

Yes i have done that but still no luck

root@TEST02:~# /usr/share/opensearch/bin/opensearch-plugin list | grep prom
prometheus-exporter
root@TEST02:~# curl --insecure -u admin:test https://localhost:9200/_prometheus/metrics
{“error”:“no handler found for uri [/_prometheus/metrics] and method [GET]”}root@TEST02:~#

@shubhammugale Is this a managed service or on-prem?
If on-prem, how did you deploy OpenSearch?

@shubhammugale Could you share the exact command that you’ve used to install the exporter?

Is this a managed service or on-prem? — It is OnPrem
how did you deploy OpenSearch? — We have deployed OpenSearch via a dpkg package. We have installed and then configured it as per our requirement. We have a cluster of 2 nodes
Could you share the exact command that you’ve used to install the exporter? – /usr/share/opensearch/bin/opensearch-plugin install file:///home/shubham/prometheus-exporter-2.15.0.0.zip

@shubhammugale I’ve tested with deb package. I’ve restarted OpenSearch after installing Prometheus exporter

pablo@ubuntutemplate:~$ curl --insecure -u admin:Eliatra123 https://localhost:9200/_prometheus/metrics
{"error":"no handler found for uri [/_prometheus/metrics] and method [GET]"}pablo@ubuntutemplate:~$ 

root@ubuntutemplate:/home/pablo# /usr/share/opensearch/bin/opensearch-plugin list
opensearch-alerting
opensearch-anomaly-detection
opensearch-asynchronous-search
opensearch-cross-cluster-replication
opensearch-custom-codecs
opensearch-flow-framework
opensearch-geospatial
opensearch-index-management
opensearch-job-scheduler
opensearch-knn
opensearch-ml
opensearch-neural-search
opensearch-notifications
opensearch-notifications-core
opensearch-observability
opensearch-performance-analyzer
opensearch-reports-scheduler
opensearch-security
opensearch-security-analytics
opensearch-skills
opensearch-sql

root@ubuntutemplate:/home/pablo# wget https://github.com/opensearch-project/opensearch-prometheus-exporter/releases/download/2.15.0.0/prometheus-exporter-2.15.0.0.zip
--2025-11-15 00:49:21--  https://github.com/opensearch-project/opensearch-prometheus-exporter/releases/download/2.15.0.0/prometheus-exporter-2.15.0.0.zip
Resolving github.com (github.com)... 4.208.26.197
Connecting to github.com (github.com)|4.208.26.197|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://release-assets.githubusercontent.com/github-production-release-asset/441206783/183469f3-94b4-44b8-804f-41c6b40ffc31?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-11-15T01%3A41%3A34Z&rscd=attachment%3B+filename%3Dprometheus-exporter-2.15.0.0.zip&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-11-15T00%3A40%3A42Z&ske=2025-11-15T01%3A41%3A34Z&sks=b&skv=2018-11-09&sig=mX68K%2F7eXd4Y1%2BhCwQLPIZOlUHALc8cgzc0jEVJ4ErM%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MzE2ODA2MiwibmJmIjoxNzYzMTY3NzYyLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.hA5Iejhawl4an7Io-NC76PecZBzG5axcPNKLLMpV_6U&response-content-disposition=attachment%3B%20filename%3Dprometheus-exporter-2.15.0.0.zip&response-content-type=application%2Foctet-stream [following]
--2025-11-15 00:49:22--  https://release-assets.githubusercontent.com/github-production-release-asset/441206783/183469f3-94b4-44b8-804f-41c6b40ffc31?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-11-15T01%3A41%3A34Z&rscd=attachment%3B+filename%3Dprometheus-exporter-2.15.0.0.zip&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-11-15T00%3A40%3A42Z&ske=2025-11-15T01%3A41%3A34Z&sks=b&skv=2018-11-09&sig=mX68K%2F7eXd4Y1%2BhCwQLPIZOlUHALc8cgzc0jEVJ4ErM%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MzE2ODA2MiwibmJmIjoxNzYzMTY3NzYyLCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.hA5Iejhawl4an7Io-NC76PecZBzG5axcPNKLLMpV_6U&response-content-disposition=attachment%3B%20filename%3Dprometheus-exporter-2.15.0.0.zip&response-content-type=application%2Foctet-stream
Resolving release-assets.githubusercontent.com (release-assets.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to release-assets.githubusercontent.com (release-assets.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 149632 (146K) [application/octet-stream]
Saving to: ‘prometheus-exporter-2.15.0.0.zip’

prometheus-exporter-2.15.0.0.zip      100%[=======================================================================>] 146.12K  --.-KB/s    in 0.02s   

2025-11-15 00:49:22 (8.96 MB/s) - ‘prometheus-exporter-2.15.0.0.zip’ saved [149632/149632]

root@ubuntutemplate:/home/pablo# /usr/share/opensearch/bin/opensearch-plugin install file:///home/pablo/prometheus-exporter-2.15.0.0.zip 
-> Installing file:///home/pablo/prometheus-exporter-2.15.0.0.zip
-> Downloading file:///home/pablo/prometheus-exporter-2.15.0.0.zip
[=================================================] 100%   
-> Installed prometheus-exporter with folder name prometheus-exporter

root@ubuntutemplate:/home/pablo# /usr/share/opensearch/bin/opensearch-plugin list
opensearch-alerting
opensearch-anomaly-detection
opensearch-asynchronous-search
opensearch-cross-cluster-replication
opensearch-custom-codecs
opensearch-flow-framework
opensearch-geospatial
opensearch-index-management
opensearch-job-scheduler
opensearch-knn
opensearch-ml
opensearch-neural-search
opensearch-notifications
opensearch-notifications-core
opensearch-observability
opensearch-performance-analyzer
opensearch-reports-scheduler
opensearch-security
opensearch-security-analytics
opensearch-skills
opensearch-sql
prometheus-exporter
root@ubuntutemplate:/home/pablo# 
root@ubuntutemplate:/home/pablo# curl --insecure -u admin:Eliatra123 https://localhost:9200
{
  "name" : "ubuntutemplate",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "XpmjjkExQZWkRmnwC4hvVA",
  "version" : {
    "distribution" : "opensearch",
    "number" : "2.15.0",
    "build_type" : "deb",
    "build_hash" : "61dbcd0795c9bfe9b81e5762175414bc38bbcadf",
    "build_date" : "2024-06-20T03:27:12.329408119Z",
    "build_snapshot" : false,
    "lucene_version" : "9.10.0",
    "minimum_wire_compatibility_version" : "7.10.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}
root@ubuntutemplate:/home/pablo# curl --insecure -u admin:Eliatra123 https://localhost:9200/_prometheus/metrics
{"error":"no handler found for uri [/_prometheus/metrics] and method [GET]"}root@ubuntutemplate:/home/pablo# 
root@ubuntutemplate:/home/pablo# 
root@ubuntutemplate:/home/pablo# systemctl restart opensearch 
root@ubuntutemplate:/home/pablo# curl --insecure -u admin:Eliatra123 https://localhost:9200/_prometheus/metrics
# HELP opensearch_indices_querycache_hit_count Count of hits in query cache
# TYPE opensearch_indices_querycache_hit_count gauge
opensearch_indices_querycache_hit_count{cluster="opensearch",node="ubuntutemplate",nodeid="kyQoK2TFTAC-6PWvZwFhgw",} 0.0
# HELP opensearch_os_mem_used_percent Memory used in percent
# TYPE opensearch_os_mem_used_percent gauge
opensearch_os_mem_used_percent{cluster="opensearch",node="ubuntutemplate",nodeid="kyQoK2TFTAC-6PWvZwFhgw",} 93.0
# HELP opensearch_indices_indexing_index_current_number Current rate of documents indexed
# TYPE opensearch_indices_indexing_index_current_number gauge
opensearch_indices_indexing_index_current_number{cluster="opensearch",node="ubuntutemplate",nodeid="kyQoK2TFTAC-6PWvZwFhgw",} 0.0
# HELP opensearch_index_get_count Count of get commands
# TYPE opensearch_index_get_count gauge
opensearch_index_get_count{cluster="opensearch",index=".plugins-ml-config",context="total",} 1.0
opensearch_index_get_count{cluster="opensearch",index=".opensearch-observability",context="primaries",} 0.0
opensearch_index_get_count{cluster="opensearch",index=".opensearch-observability",context="total",} 0.0
opensearch_index_get_count{cluster="opensearch",index=".plugins-ml-config",context="primaries",} 1.0
opensearch_index_get_count{cluster="opensearch",index=".opendistro_security",context="primaries",} 10.0
opensearch_index_get_count{cluster="opensearch",index=".opendistro_security",context="total",} 10.0
# HELP opensearch_indices_search_fetch_current_number Current rate of search fetches
# TYPE opensearch_indices_search_fetch_current_number gauge
opensearch_indices_search_fetch_current_number{cluster="opensearch",node="ubuntutemplate",nodeid="kyQoK2TFTAC-6PWvZwFhgw",} 0.0
# HELP opensearch_index_search_open_contexts_number Number of search open contexts
# TYPE opensearch_index_search_open_contexts_number gauge
opensearch_index_search_open_contexts_number{cluster="opensearch",index=".plugins-ml-config",context="total",} 0.0
opensearch_index_search_open_contexts_number{cluster="opensearch",index=".opensearch-observability",context="primaries",} 0.0
opensearch_index_search_open_contexts_number{cluster="opensearch",index=".opensearch-observability",context="total",} 0.0
opensearch_index_search_open_contexts_number{cluster="opensearch",index=".plugins-ml-config",context="primaries",} 0.0
opensearch_index_search_open_contexts_number{cluster="opensearch",index=".opendistro_security",context="primaries",} 0.0
opensearch_index_search_open_contexts_number{cluster="opensearch",index=".opendistro_security",context="total",} 0.0
# HELP opensearch_index_warmer_time_seconds Time spent during warmers
# TYPE opensearch_index_warmer_time_seconds gauge
opensearch_index_warmer_time_seconds{cluster="opensearch",index=".plugins-ml