Skip to content

Commit

Permalink
docs: new monitoring and metrics docs (DOCS-3693) (#5808)
Browse files Browse the repository at this point in the history
* docs: first draft of new monitoring docs

* docs: delete old docs out of place

* docs: first set of metrics

* docs: fix text

* docs: fix text

* docs: fix copy

* docs: more metrics wip

* docs: full list of metrics

* docs: enable PQ metrics by default

* docs: update rates

* Apply suggestions from code review

Co-authored-by: Jim Galasyn <[email protected]>

* Apply suggestions from code review

Co-authored-by: Jim Galasyn <[email protected]>

* docs: fix link

Co-authored-by: Jim Galasyn <[email protected]>
  • Loading branch information
MichaelDrogalis and JimGalasyn authored Jul 22, 2020
1 parent 3cba869 commit 4238012
Show file tree
Hide file tree
Showing 5 changed files with 414 additions and 96 deletions.
40 changes: 0 additions & 40 deletions docs/operate-and-deploy/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,46 +51,6 @@ Troubleshooting
If ksqlDB isn't behaving as expected, see
[Troubleshoot ksqlDB issues](../troubleshoot-ksqldb.md)

Monitoring and Metrics
----------------------

ksqlDB includes JMX (Java Management Extensions) metrics which give
insights into what is happening inside your ksqlDB servers. These metrics
include the number of messages, the total throughput, throughput
distribution, error rate, and more.

To enable JMX metrics, set `JMX_PORT` before starting the ksqlDB server:

```bash
export JMX_PORT=1099 && \
<path-to-confluent>/bin/ksql-server-start <path-to-confluent>/etc/ksqldb/ksql-server.properties
```

The `ksql-print-metrics` command line utility collects these metrics and
prints them to the console. You can invoke this utility from your
terminal:

```bash
<path-to-confluent>/bin/ksql-print-metrics
```

Your output should resemble:

```
messages-consumed-avg: 96416.96196183885
messages-consumed-min: 88900.3329377909
error-rate: 0.0
num-persistent-queries: 2.0
messages-consumed-per-sec: 193024.78294586178
messages-produced-per-sec: 193025.4730374501
num-active-queries: 2.0
num-idle-queries: 0.0
messages-consumed-max: 103397.81191436431
```

For more information about {{ site.kstreams }} metrics, see
[Monitoring Streams Applications](https://docs.confluent.io/current/streams/monitoring.html).

Next Steps
----------

Expand Down
56 changes: 0 additions & 56 deletions docs/operate-and-deploy/installation/server-config/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,62 +171,6 @@ JAVA_HOME
export JAVA_HOME=<jdk-install-directory>
```

JMX Metrics
-----------

To enable JMX metrics, set `JMX_PORT` before starting the ksqlDB server:

```bash
export JMX_PORT=1099 && \
<path-to-confluent>/bin/ksql-server-start <path-to-confluent>/etc/ksqldb/ksql-server.properties
```

Run the `ksql-print-metrics` tool to see the available JMX metrics for
ksqlDB.

```bash
<path-to-confluent>/bin/ksql-print-metrics
```

Your output should resemble:

```
_confluent-ksql-default_bytes-consumed-total: 926543.0
_confluent-ksql-default_num-active-queries: 4.0
_confluent-ksql-default_ksql-engine-query-stats-RUNNING-queries: 4
_confluent-ksql-default_ksql-engine-query-stats-NOT_RUNNING-queries: 0
_confluent-ksql-default_messages-consumed-min: 0.0
_confluent-ksql-default_messages-consumed-avg: 29.48784732897881
_confluent-ksql-default_num-persistent-queries: 4.0
_confluent-ksql-default_ksql-engine-query-stats-ERROR-queries: 0
_confluent-ksql-default_num-idle-queries: 0.0
_confluent-ksql-default_messages-consumed-per-sec: 105.07699698626074
_confluent-ksql-default_messages-produced-per-sec: 11.256903025105757
_confluent-ksql-default_error-rate: 0.0
_confluent-ksql-default_ksql-engine-query-stats-PENDING_SHUTDOWN-queries: 0
_confluent-ksql-default_ksql-engine-query-stats-REBALANCING-queries: 0
_confluent-ksql-default_messages-consumed-total: 10503.0
_confluent-ksql-default_ksql-engine-query-stats-CREATED-queries: 0
_confluent-ksql-default_messages-consumed-max: 100.1243737430132
```

The following table describes the available ksqlDB metrics.

| JMX Metric | Description |
| ------------------------- | -------------------------------------------------------------------------------------------------- |
| bytes-consumed-total | Number of bytes consumed across all queries. |
| error-rate | Number of messages that have been consumed but not processed across all queries. |
| messages-consumed-avg | Average number of messages consumed by a query per second. |
| messages-consumed-per-sec | Number of messages consumed per second across all queries. |
| messages-consumed-min | Number of messages consumed per second for the query with the fewest messages consumed per second. |
| messages-consumed-max | Number of messages consumed per second for the query with the most messages consumed per second. |
| messages-consumed-total | Number of messages consumed across all queries. |
| messages-produced-per-sec | Number of messages produced per second across all queries. |
| num-persistent-queries | Number of persistent queries that are currently executing. |
| num-active-queries | Number of queries that are actively processing messages. |
| num-idle-queries | Number of queries with no messages available to process. |


Non-interactive (Headless) ksqlDB Usage
---------------------------------------

Expand Down
79 changes: 79 additions & 0 deletions docs/operate-and-deploy/monitoring.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Monitoring

## Context

ksqlDB publishes metrics via JMX ([Java Management
Extensions](https://www.oracle.com/java/technologies/javase/javamanagement.html))
which help you monitor what is happening inside of ksqlDB's servers. For a
comprehensive list of metrics, see [the reference section](../reference/metrics.md).

## Enable monitoring

You must enable monitoring explicitly on each ksqlDB server. To enable
it in a Docker-based deployment, export an environment variable named
`KSQL_JMX_OPTS` with your JMX configuration and expose the port that
JMX will communicate over.

The following Docker Compose example shows how you can configure
monitoring for ksqlDB server. The surrounding components, like the
broker and CLI, are omitted for brevity. You can see an example of a
complete setup in the [quickstart](https://ksqldb.io/quickstart.html).

```yaml
ksqldb-server:
image: confluentinc/ksqldb-server:0.10.1
hostname: ksqldb-server
container_name: ksqldb-server
depends_on:
- broker
- schema-registry
ports:
- "8088:8088"
- "1099:1099"
environment:
KSQL_LISTENERS: "http://0.0.0.0:8088"
KSQL_BOOTSTRAP_SERVERS: "broker:9092"
KSQL_KSQL_SCHEMA_REGISTRY_URL: "http://schema-registry:8081"
KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true"
KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true"
KSQL_KSQL_QUERY_PULL_METRICS_ENABLED: "true"
KSQL_JMX_OPTS: >
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.rmi.port=1099
```
With respect to monitoring, here it what this does:
- The environment variable `KSQL_JMX_OPTS` is supplied to the server
with various arguments. The `>` character lets you write a
multi-line string in Yaml, which makes this long argument easier to
read. The advertised hostname, port, and security settings are
configured. JMX has a wide range of [configuration
options](https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html),
and you can set these however you like.

- Port `1099` is exposed, which corresponds to the JMX port set in the
`KSQL_JMX_OPTS` configuration. This enables remote monitoring tools
to communicate into ksqlDB's process.

## Verifying your monitoring setup

An easy way to check that ksqlDB is properly emitting metrics is by
using `jconsole`. JConsole is a graphical monitoring tool to monitor
the JVM, and it ships with by default with Oracle JDK installations.

On your host machine, run the command:

```bash
jconsole
```

You will be prompted for a host and port. If you used the example
configuration, `localhost:1099` establishes the connection. You
should see a series of graphs showing resource utilization. If you
don't, make sure the networking between your machine and the Docker
container is configured correctly.
Loading

0 comments on commit 4238012

Please sign in to comment.