- Observability with Prometheus
- Prerequisite
- 1. Setup - create universe
- 2. Run sample key-value app
- 3. Prepare Prometheus config file
- 4. Start Prometheus server
- 5. Analyze key metrics
- 6. Clean up (optional)
- Prerequisite
- 1. Setup - create universe
- 2. Run sample key-value app
- 3. Prepare Prometheus config file
- 4. Start Prometheus server
- 5. Analyze key metrics
- 6. Clean up (optional)
- 1. Setup - create universe
- 2. Run sample key-value app
- 3. Prepare Prometheus config file
- 4. Start Prometheus server
- 5. Analyze key metrics
- 6. Clean up (optional)
- 1. Setup - create universe
- Step 6. Clean up (optional)
Observability with Prometheus
AttentionThis page documents an earlier version. Go to the latest (v2.1)version.
You can monitor your local YugabyteDB cluster with a local instance of Prometheus, the de-facto standard for time-series monitoring of cloud native infrastructure. Every YugabyteDB service exposes metrics in the Prometheus format at the /prometheus-metrics
endpoint.
If you haven’t installed YugabyteDB yet, do so first by following the Quick Start guide.
Prerequisite
Prometheus is installed on your local machine. If you have not done so already, follow the links below.
1. Setup - create universe
If you have a previously running local universe, destroy it using the following.
$ ./bin/yb-ctl destroy
Start a new local cluster - by default, this will create a 3-node universe with a replication factor of 3.
$ ./bin/yb-ctl create
2. Run sample key-value app
Run a simple key-value workload in a separate shell.
$ java -jar java/yb-sample-apps.jar \
--workload CassandraKeyValue \
--nodes 127.0.0.1:9042 \
--num_threads_read 1 \
--num_threads_write 1
3. Prepare Prometheus config file
Copy the following into a file called yugabytedb.yml
.
global:
scrape_interval: 5s # Set the scrape interval to every 5 seconds. Default is every 1 minute.
evaluation_interval: 5s # Evaluate rules every 5 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# YugabyteDB configuration to scrape Prometheus time-series metrics
scrape_configs:
- job_name: 'yugabytedb'
metrics_path: /prometheus-metrics
static_configs:
- targets: ['127.0.0.1:7000', '127.0.0.2:7000', '127.0.0.3:7000']
labels:
group: 'yb-master'
- targets: ['127.0.0.1:9000', '127.0.0.2:9000', '127.0.0.3:9000']
labels:
group: 'yb-tserver'
- targets: ['127.0.0.1:11000', '127.0.0.2:11000', '127.0.0.3:11000']
labels:
group: 'yedis'
- targets: ['127.0.0.1:12000', '127.0.0.2:12000', '127.0.0.3:12000']
labels:
group: 'ycql'
- targets: ['127.0.0.1:13000', '127.0.0.2:13000', '127.0.0.3:13000']
labels:
group: 'ypostgresql'
4. Start Prometheus server
Go to the directory where Prometheus is installed and start the Prometheus server as below.
$ ./prometheus --config.file=yugabytedb.yml
Open the Prometheus UI at http://localhost:9090 and then navigate to the Targets page under Status.
5. Analyze key metrics
On the Prometheus Graph UI, you can now plot the read IOPS and write IOPS for the CassandraKeyValue
sample app. As we can see from the source code of the app, it uses only SELECT statements for reads and INSERT statements for writes (aside from the initial CREATE TABLE). This means we can measure throughput and latency by simply using the metrics corresponding to the SELECT and INSERT statements.
Paste the following expressions into the Expression box and click Execute followed by Add Graph.
Throughput
Read IOPS
sum(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_count[1m]))
Write IOPS
sum(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_count[1m]))
Latency
Read Latency (in microseconds)
avg(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_sum[1m])) / avg(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_count[1m]))
Write Latency (in microseconds)
avg(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_sum[1m])) / avg(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_count[1m]))
6. Clean up (optional)
Optionally, you can shutdown the local cluster created in Step 1.
$ ./bin/yb-ctl destroy
Prerequisite
Prometheus is installed on your local machine. If you have not done so already, follow the links below.
1. Setup - create universe
If you have a previously running local universe, destroy it using the following.
$ ./bin/yb-ctl destroy
Start a new local cluster - by default, this will create a 3-node universe with a replication factor of 3.
$ ./bin/yb-ctl create
2. Run sample key-value app
Run a simple key-value workload in a separate shell.
$ java -jar java/yb-sample-apps.jar \
--workload CassandraKeyValue \
--nodes 127.0.0.1:9042 \
--num_threads_read 1 \
--num_threads_write 1
3. Prepare Prometheus config file
Copy the following into a file called yugabytedb.yml
.
global:
scrape_interval: 5s # Set the scrape interval to every 5 seconds. Default is every 1 minute.
evaluation_interval: 5s # Evaluate rules every 5 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# YugabyteDB configuration to scrape Prometheus time-series metrics
scrape_configs:
- job_name: 'yugabytedb'
metrics_path: /prometheus-metrics
static_configs:
- targets: ['127.0.0.1:7000', '127.0.0.2:7000', '127.0.0.3:7000']
labels:
group: 'yb-master'
- targets: ['127.0.0.1:9000', '127.0.0.2:9000', '127.0.0.3:9000']
labels:
group: 'yb-tserver'
- targets: ['127.0.0.1:11000', '127.0.0.2:11000', '127.0.0.3:11000']
labels:
group: 'yedis'
- targets: ['127.0.0.1:12000', '127.0.0.2:12000', '127.0.0.3:12000']
labels:
group: 'ycql'
- targets: ['127.0.0.1:13000', '127.0.0.2:13000', '127.0.0.3:13000']
labels:
group: 'ypostgresql'
4. Start Prometheus server
Go to the directory where Prometheus is installed and start the Prometheus server as below.
$ ./prometheus --config.file=yugabytedb.yml
Open the Prometheus UI at http://localhost:9090 and then navigate to the Targets page under Status.
5. Analyze key metrics
On the Prometheus Graph UI, you can now plot the read IOPS and write IOPS for the CassandraKeyValue
sample app. As we can see from the source code of the app, it uses only SELECT statements for reads and INSERT statements for writes (aside from the initial CREATE TABLE). This means we can measure throughput and latency by simply using the metrics corresponding to the SELECT and INSERT statements.
Paste the following expressions into the Expression box and click Execute followed by Add Graph.
Throughput
Read IOPS
sum(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_count[1m]))
Write IOPS
sum(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_count[1m]))
Latency
Read Latency (in microseconds)
avg(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_sum[1m])) / avg(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_count[1m]))
Write Latency (in microseconds)
avg(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_sum[1m])) / avg(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_count[1m]))
6. Clean up (optional)
Optionally, you can shutdown the local cluster created in Step 1.
$ ./bin/yb-ctl destroy
1. Setup - create universe
If you have a previously running local universe, destroy it using the following.
$ ./yb-docker-ctl destroy
Start a new local universe with default replication factor 3.
$ ./yb-docker-ctl create
2. Run sample key-value app
Run a simple key-value workload in a separate shell.
$ docker cp yb-master-n1:/home/yugabyte/java/yb-sample-apps.jar .
$ java -jar ./yb-sample-apps.jar --workload CassandraKeyValue \
--nodes localhost:9042 \
--num_threads_write 1 \
--num_threads_read 4 \
--value_size 4096
3. Prepare Prometheus config file
Copy the following into a file called yugabytedb.yml
. Move this file to the /tmp
directory so that we can bind the file to the Prometheus container later on.
global:
scrape_interval: 5s # Set the scrape interval to every 5 seconds. Default is every 1 minute.
evaluation_interval: 5s # Evaluate rules every 5 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# YugabyteDB configuration to scrape Prometheus time-series metrics
scrape_configs:
- job_name: 'yugabytedb'
metrics_path: /prometheus-metrics
static_configs:
- targets: ['yb-master-n1:7000', 'yb-master-n2:7000', 'yb-master-n3:7000']
labels:
group: 'yb-master'
- targets: ['yb-tserver-n1:9000', 'yb-tserver-n2:9000', 'yb-tserver-n3:9000']
labels:
group: 'yb-tserver'
- targets: ['yb-tserver-n1:11000', 'yb-tserver-n2:11000', 'yb-tserver-n3:11000']
labels:
group: 'yedis'
- targets: ['yb-tserver-n1:12000', 'yb-tserver-n2:12000', 'yb-tserver-n3:12000']
labels:
group: 'ycql'
- targets: ['yb-tserver-n1:13000', 'yb-tserver-n2:13000', 'yb-tserver-n3:13000']
labels:
group: 'ypostgresql'
4. Start Prometheus server
Start the Prometheus server as below. The prom/prometheus
container image will be pulled from the Docker registry if not already present on the localhost.
$ docker run \
-p 9090:9090 \
-v /tmp/yugabytedb.yml:/etc/prometheus/prometheus.yml \
--net yb-net \
prom/prometheus
Open the Prometheus UI at http://localhost:9090 and then navigate to the Targets page under Status.
5. Analyze key metrics
On the Prometheus Graph UI, you can now plot the read/write throughput and latency for the CassandraKeyValue
sample app. As we can see from the source code of the app, it uses only SELECT statements for reads and INSERT statements for writes (aside from the initial CREATE TABLE). This means we can measure throughput and latency by simply using the metrics corresponding to the SELECT and INSERT statements.
Paste the following expressions into the Expression box and click Execute followed by Add Graph.
Throughput
Read IOPS
sum(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_count[1m]))
Write IOPS
sum(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_count[1m]))
Latency
Read Latency (in microseconds)
avg(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_sum[1m])) / avg(irate(handler_latency_yb_cqlserver_SQLProcessor_SelectStmt_count[1m]))
Write Latency (in microseconds)
avg(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_sum[1m])) / avg(irate(handler_latency_yb_cqlserver_SQLProcessor_InsertStmt_count[1m]))
6. Clean up (optional)
Optionally, you can shutdown the local cluster created in Step 1.
$ ./yb-docker-ctl destroy
<!—
1. Setup - create universe
If you have a previously running local universe, destroy it using the following.
$ kubectl delete -f yugabyte-statefulset.yaml
Start a new local cluster - by default, this will create a 3 node universe with a replication factor of 3.
$ kubectl apply -f yugabyte-statefulset.yaml
Step 6. Clean up (optional)
Optionally, you can shutdown the local cluster created in Step 1.
$ kubectl delete -f yugabyte-statefulset.yaml
—>