{"id":13767570,"url":"https://github.com/marcinbudny/eventstore_exporter","last_synced_at":"2025-05-14T08:13:18.499Z","repository":{"id":39255047,"uuid":"134612662","full_name":"marcinbudny/eventstore_exporter","owner":"marcinbudny","description":"KurrentDB / EventStoreDB (https://www.kurrent.io/) metrics Prometheus exporter.","archived":false,"fork":false,"pushed_at":"2025-03-30T15:05:33.000Z","size":7279,"stargazers_count":52,"open_issues_count":0,"forks_count":10,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-10T23:31:42.515Z","etag":null,"topics":["eventstore","exporter","prometheus"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcinbudny.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-05-23T18:51:23.000Z","updated_at":"2025-03-31T16:06:34.000Z","dependencies_parsed_at":"2023-09-25T01:51:53.756Z","dependency_job_id":"450c5186-92c1-4db9-aa05-3439e134fe45","html_url":"https://github.com/marcinbudny/eventstore_exporter","commit_stats":{"total_commits":115,"total_committers":9,"mean_commits":"12.777777777777779","dds":"0.23478260869565215","last_synced_commit":"f7c96e924d47c62803c437732b659d93fe899b72"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinbudny%2Feventstore_exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinbudny%2Feventstore_exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinbudny%2Feventstore_exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcinbudny%2Feventstore_exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcinbudny","download_url":"https://codeload.github.com/marcinbudny/eventstore_exporter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254101549,"owners_count":22014908,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eventstore","exporter","prometheus"],"created_at":"2024-08-03T16:01:09.836Z","updated_at":"2025-05-14T08:13:18.463Z","avatar_url":"https://github.com/marcinbudny.png","language":"Go","funding_links":[],"categories":["Visualization"],"sub_categories":["Python"],"readme":"# KurrentDB / EventStoreDB Prometheus exporter\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/marcinbudny/eventstore_exporter)](https://goreportcard.com/report/github.com/marcinbudny/eventstore_exporter)\n[![CI](https://github.com/marcinbudny/eventstore_exporter/actions/workflows/main.yml/badge.svg)](https://github.com/marcinbudny/eventstore_exporter/actions/workflows/main.yml)\n\nKurrentDB (\u003chttps://www.kurrent.io/\u003e) metrics Prometheus exporter.\n\n\u003e [!NOTE]\n\u003e KurrentDB is the new name of EventStoreDB, starting with version 25.0. This exporter supports older LTS versions too, see [Supported KurrentDB versions](#supported-kurrentdb-versions).\n\n## Installation\n\n### Using binaries\n\nDownload latest binaries from the [releases page](https://github.com/marcinbudny/eventstore_exporter/releases).\n\n```bash\neventstore_exporter \\\n    --eventstore-url=https://my-eventstore:2113 \\\n    --eventstore-user=admin \\\n    --eventstore-password=changeit \\\n    --enable-parked-messages-stats\n```\n\n### Using Docker\n\n```bash\ndocker run -d -p 9448:9448 \\\n    -e EVENTSTORE_URL=https://my-eventstore:2113 \\\n    -e EVENTSTORE_USER=admin \\\n    -e EVENTSTORE_PASSWORD=changeit \\\n    -e ENABLE_PARKED_MESSAGES_STATS=True \\\n    marcinbudny/eventstore_exporter\n```\n\n### From source\n\nYou need to have a Go 1.24+ environment configured.\n\n```bash\ngo install github.com/marcinbudny/eventstore_exporter@latest\n\neventstore_exporter \\\n    --eventstore-url=https://my-eventstore:2113 \\\n    --eventstore-user=admin \\\n    --eventstore-password=changeit \\\n    --enable-parked-messages-stats\n```\n\n### Supported KurrentDB versions\n\n- EventStoreDB 23.10 LTS\n- EventStoreDB 24.10 LTS\n- KurrentDB 25.0\n\nOther versions may also work but are not tested.\n\n### Unsupported versions\n\n- EventStoreDB 5.0 (last supported in exporter version v0.10.4)\n- EventStoreDB 20.10 LTS (last supported in exporter version v0.15.1)\n\n## Configuration\n\n\u003e [!NOTE]\n\u003e Since EventStoreDB was renamed to KurrentDB, also its configuration settings now use the `KURRENTDB_` prefix. This exporter however does not follow this change (for now) and any configuration settings that have `EVENTSTORE_` prefix are the same regardless if connecting to KurrentDB or older EventStoreDB version.\n\nThe exporter can be configured with command line arguments, environment variables and a configuration file. For the details on how to format the configuration file, visit [namsral/flag](https://github.com/namsral/flag) repo.\n\n| Flag                           | ENV variable                 | Default                 | Meaning                                                                                                                                 |\n| ------------------------------ | ---------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |\n| --config                       |                              |                         | Path to config file (optional)                                                                                                          |\n| --eventstore-url               | EVENTSTORE_URL               | \u003chttp://localhost:2113\u003e | EventStoreDB HTTP endpoint                                                                                                              |\n| --eventstore-user              | EVENTSTORE_USER              | (empty)                 | EventStoreDB user (if not specified, basic auth is not used)                                                                            |\n| --eventstore-password          | EVENTSTORE_PASSWORD          | (empty)                 | EventStoreDB password (if not specified, basic auth is not used)                                                                        |\n| --port                         | PORT                         | 9448                    | Port to expose scrape endpoint on                                                                                                       |\n| --timeout                      | TIMEOUT                      | 8s                      | Timeout for the scrape operation                                                                                                        |\n| --verbose                      | VERBOSE                      | false                   | Enable verbose logging                                                                                                                  |\n| --insecure-skip-verify         | INSECURE_SKIP_VERIFY         | false                   | Skip TLS certificate verification for EventStore HTTP client                                                                            |\n| --enable-parked-messages-stats | ENABLE_PARKED_MESSAGES_STATS | false                   | Enable parked messages stats scraping.                                                                                                  |\n| --streams                      | STREAMS                      | (empty)                 | List of streams to get stats for e.g. `$all,my-stream`. Currently last event position / last event number is the only supported metric. |\n| --streams-separator            | STREAMS_SEPARATOR            | `,`                     | Single character separator for streams list provided in `--streams`. Change from default if your stream names contain commas.           |\n| --enable-tcp-connection-stats  | ENABLE_TCP_CONNECTION_STATS  | false                   | Enable scraping of TCP connection stats (connections between nodes in the cluster, TCP client connections, excluding gRPC)              |\n\nSample configuration file\n\n```text\neventstore-url=http://localhost:2113\nport=8888\nverbose\n```\n\nTo run with configuration file:\n\n```bash\n./eventstore_exporter --config my_config_file\n```\n\n## Grafana dashboard\n\nCan be found [here](https://grafana.com/dashboards/7673)\n\n![EventStore Grafana dashboard](dashboard.png)\n\n## Exported metrics\n\n\u003e [!NOTE]\n\u003e Since EventStoreDB was renamed to KurrentDB, also its native Prometheus metrics now use `kurrentdb_` prefix. This exporter however does not follow this change (for now) and any metrics that have `eventstore_` prefix are the same regardless if connecting to KurrentDB or older EventStoreDB version.\n\nLet me know if there is a metric you would like to be added.\n\n```text\n# HELP eventstore_cluster_member_alive If 1, cluster member is alive, as seen from current cluster member\n# TYPE eventstore_cluster_member_alive gauge\neventstore_cluster_member_alive{member=\"172.16.1.11:2113\"} 1\n\n# HELP eventstore_cluster_member_is_clone If 1, current cluster member is a clone\n# TYPE eventstore_cluster_member_is_clone gauge\neventstore_cluster_member_is_clone 1\n\n# HELP eventstore_cluster_member_is_follower If 1, current cluster member is a follower\n# TYPE eventstore_cluster_member_is_follower gauge\neventstore_cluster_member_is_follower 0\n\n# HELP eventstore_cluster_member_is_leader If 1, current cluster member is the leader\n# TYPE eventstore_cluster_member_is_leader gauge\neventstore_cluster_member_is_leader 0\n\n# HELP eventstore_cluster_member_is_readonly_replica If 1, current cluster member is a readonly replica\n# TYPE eventstore_cluster_member_is_readonly_replica gauge\neventstore_cluster_member_is_readonly_replica 0\n\n# HELP eventstore_disk_io_read_bytes Total number of disk IO read bytes\n# TYPE eventstore_disk_io_read_bytes gauge\neventstore_disk_io_read_bytes 20480\n\n# HELP eventstore_disk_io_read_ops Total number of disk IO read operations\n# TYPE eventstore_disk_io_read_ops gauge\neventstore_disk_io_read_ops 2814\n\n# HELP eventstore_disk_io_write_ops Total number of disk IO write operations\n# TYPE eventstore_disk_io_write_ops gauge\neventstore_disk_io_write_ops 4421\n\n# HELP eventstore_disk_io_written_bytes Total number of disk IO written bytes\n# TYPE eventstore_disk_io_written_bytes gauge\neventstore_disk_io_written_bytes 2.6918912e+08\n\n# HELP eventstore_drive_available_bytes Drive available bytes\n# TYPE eventstore_drive_available_bytes gauge\neventstore_drive_available_bytes{drive=\"/var/lib/eventstore\"} 5.6815230976e+10\n\n# HELP eventstore_drive_total_bytes Drive total size in bytes\n# TYPE eventstore_drive_total_bytes gauge\neventstore_drive_total_bytes{drive=\"/var/lib/eventstore\"} 6.2725787648e+10\n\n# HELP eventstore_process_cpu Process CPU usage, 0 - number of cores\n# TYPE eventstore_process_cpu gauge\neventstore_process_cpu 0.08\n\n# HELP eventstore_process_memory_bytes Process memory usage, as reported by EventStore\n# TYPE eventstore_process_memory_bytes gauge\neventstore_process_memory_bytes 1.19267328e+08\n\n# HELP eventstore_projection_events_processed_after_restart_total Projection event processed count after restart\n# TYPE eventstore_projection_events_processed_after_restart_total counter\neventstore_projection_events_processed_after_restart_total{projection=\"$by_event_type\"} 0\n\n# HELP eventstore_projection_progress Projection progress 0 - 1, where 1 = projection progress at 100%\n# TYPE eventstore_projection_progress gauge\neventstore_projection_progress{projection=\"$by_event_type\"} 1\n\n# HELP eventstore_projection_running If 1, projection is in 'Running' state\n# TYPE eventstore_projection_running gauge\neventstore_projection_running{projection=\"$by_event_type\"} 1\n\n# HELP eventstore_projection_status If 1, projection is in specified state\n# TYPE eventstore_projection_status gauge\neventstore_projection_status{projection=\"$by_event_type\",status=\"Faulted\"} 0\neventstore_projection_status{projection=\"$by_event_type\",status=\"Running\"} 1\neventstore_projection_status{projection=\"$by_event_type\",status=\"Stopped\"} 0\n\n# HELP eventstore_queue_items_processed_total Total number items processed by queue\n# TYPE eventstore_queue_items_processed_total counter\neventstore_queue_items_processed_total{queue=\"index Committer\"} 54\n\n# HELP eventstore_queue_length Queue length\n# TYPE eventstore_queue_length gauge\neventstore_queue_length{queue=\"index Committer\"} 0\n\n# HELP eventstore_stream_last_commit_position Last commit position in a stream ($all stream only)\n# TYPE eventstore_stream_last_commit_position gauge\neventstore_stream_last_commit_position{event_stream_id=\"$all\"} 36169\n\n# HELP eventstore_stream_last_event_number Last event number in a stream (streams other than $all)\n# TYPE eventstore_stream_last_event_number gauge\neventstore_stream_last_event_number{event_stream_id=\"my-stream\"} 7\n\n# HELP eventstore_subscription_connections Number of connections to subscription\n# TYPE eventstore_subscription_connections gauge\neventstore_subscription_connections{event_stream_id=\"test-stream\",group_name=\"group1\"} 0\n\n# HELP eventstore_subscription_items_processed_total Total items processed by subscription\n# TYPE eventstore_subscription_items_processed_total counter\neventstore_subscription_items_processed_total{event_stream_id=\"test-stream\",group_name=\"group1\"} 24\n\n# HELP eventstore_subscription_last_known_event_number Last known event number in subscription\n# TYPE eventstore_subscription_last_known_event_number gauge\neventstore_subscription_last_known_event_number{event_stream_id=\"test-stream\",group_name=\"group1\"} 23\n\n# HELP eventstore_subscription_last_checkpointed_event_commit_position Last checkpointed event's commit position ($all stream only)\n# TYPE eventstore_subscription_last_checkpointed_event_commit_position gauge\neventstore_subscription_last_checkpointed_event_commit_position{event_stream_id=\"$all\",group_name=\"group1\"} 43950\n\n# HELP eventstore_subscription_last_known_event_commit_position Last known event's commit position ($all stream only)\n# TYPE eventstore_subscription_last_known_event_commit_position gauge\neventstore_subscription_last_known_event_commit_position{event_stream_id=\"$all\",group_name=\"group1\"} 47509\n\n# HELP eventstore_subscription_last_known_event_number Last known event number in subscription (streams other than $all)\n# TYPE eventstore_subscription_last_known_event_number gauge\neventstore_subscription_last_known_event_number{event_stream_id=\"test-stream\",group_name=\"group1\"} 251\n\n# HELP eventstore_subscription_last_processed_event_number Last event number processed by subscription (streams other than $all)\n# TYPE eventstore_subscription_last_processed_event_number gauge\neventstore_subscription_last_processed_event_number{event_stream_id=\"test-stream\",group_name=\"group1\"} 95\n\n# HELP eventstore_subscription_oldest_parked_message_age_seconds Oldest parked message age for subscription in seconds\n# TYPE eventstore_subscription_oldest_parked_message_age_seconds gauge\neventstore_subscription_oldest_parked_message_age_seconds{event_stream_id=\"test-stream\",group_name=\"group1\"} 33\n\n# HELP eventstore_subscription_parked_messages Number of parked messages for subscription\n# TYPE eventstore_subscription_parked_messages gauge\neventstore_subscription_parked_messages{event_stream_id=\"test-stream\",group_name=\"group1\"} 1\n\n# HELP eventstore_tcp_connections Current number of TCP connections\n# TYPE eventstore_tcp_connections gauge\neventstore_tcp_connections 1\n\n# HELP eventstore_tcp_received_bytes TCP received bytes\n# TYPE eventstore_tcp_received_bytes gauge\neventstore_tcp_received_bytes 17237\n\n# HELP eventstore_tcp_sent_bytes TCP sent bytes\n# TYPE eventstore_tcp_sent_bytes gauge\neventstore_tcp_sent_bytes 3423\n\n# HELP eventstore_tcp_connection_pending_received_bytes TCP connection pending received bytes\n# TYPE eventstore_tcp_connection_pending_received_bytes gauge\neventstore_tcp_connection_pending_received_bytes{client_name=\"ES-8d3d28dd-7944-49b4-a130-686cc9aecc92\",external=\"true\",id=\"7d7f9762-9565-4cca-8bdf-2dc7c845c19a\",local_endpoint=\"172.16.1.11:1113\",remote_endpoint=\"172.16.1.1:59230\",ssl=\"false\"} 0\n\n# HELP eventstore_tcp_connection_pending_send_bytes TCP connection pending send bytes\n# TYPE eventstore_tcp_connection_pending_send_bytes gauge\neventstore_tcp_connection_pending_send_bytes{client_name=\"ES-8d3d28dd-7944-49b4-a130-686cc9aecc92\",external=\"true\",id=\"7d7f9762-9565-4cca-8bdf-2dc7c845c19a\",local_endpoint=\"172.16.1.11:1113\",remote_endpoint=\"172.16.1.1:59230\",ssl=\"false\"} 0\n\n# HELP eventstore_tcp_connection_received_bytes TCP connection total received bytes\n# TYPE eventstore_tcp_connection_received_bytes counter\neventstore_tcp_connection_received_bytes{client_name=\"ES-8d3d28dd-7944-49b4-a130-686cc9aecc92\",external=\"true\",id=\"7d7f9762-9565-4cca-8bdf-2dc7c845c19a\",local_endpoint=\"172.16.1.11:1113\",remote_endpoint=\"172.16.1.1:59230\",ssl=\"false\"} 398542\n\n# HELP eventstore_tcp_connection_sent_bytes TCP connection total sent bytes\n# TYPE eventstore_tcp_connection_sent_bytes counter\neventstore_tcp_connection_sent_bytes{client_name=\"ES-8d3d28dd-7944-49b4-a130-686cc9aecc92\",external=\"true\",id=\"7d7f9762-9565-4cca-8bdf-2dc7c845c19a\",local_endpoint=\"172.16.1.11:1113\",remote_endpoint=\"172.16.1.1:59230\",ssl=\"false\"} 252635\n\n# HELP eventstore_up Whether the EventStore scrape was successful\n# TYPE eventstore_up gauge\neventstore_up 1\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcinbudny%2Feventstore_exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcinbudny%2Feventstore_exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcinbudny%2Feventstore_exporter/lists"}