diff --git a/examples/oracle/demo/README.md b/examples/oracle/demo/README.md index b0e8a7a..392a93d 100644 --- a/examples/oracle/demo/README.md +++ b/examples/oracle/demo/README.md @@ -3,6 +3,8 @@ :white_check_mark: Setup and start Redis Enterprise database (Target)
:white_check_mark: Setup and start Redis Connect
:white_check_mark: Perform Initial load and CDC with Redis Connect
+:white_check_mark: Setup Grafana dashboard for Redis Connect metrics
+ # Prerequisites @@ -448,3 +450,24 @@ demo$ sudo docker exec -it re-node1 bash -c 'redis-cli -p 12000 ft.search idx_em

+ +------------------------------- + +### Dashboard + +#### Prerequisites +1. Redis Connect cluster timeseries metrics should be [enabled](../demo/config/jobmanager.properties#L9). +2. Redis Connect job metrics should be enabled [enabled](../demo/config/samples/payloads/cdc-custom-job.json#L23). + +###### Standalone Grafana +Use your existing Grafana install and add [redis-datasource](https://redisgrafana.github.io/redis-datasource/overview/) plugin. +1. Configure two Redis data sources, one with JobManager and another one with Target name using [redis-datasource](https://redisgrafana.github.io/redis-datasource/overview/) plugin. +2. Import [Sample Redis Connect Dashboard](../demo/config/samples/dashboard/redis-connnnect-dashboard.json) +3. Validate and fix dashboard variables if they don't load properly + +###### Containerized Grafana +If you used the demo script to set up Redis Enterprise in a docker container then, a containerized Grafana with [redis-datasource](https://redisgrafana.github.io/redis-datasource/overview/) plugin should already be installed and running. + +1. Open Grafana UI by going to http://localhost:13000 and login with `redisconnect/Redis@123` credentials. +2. Import [Sample Redis Connect Dashboard](../demo/config/samples/dashboard/redis-connnnect-dashboard.json) +3. Validate and fix dashboard variables if they don't load properly diff --git a/examples/oracle/demo/cleanup_re.sh b/examples/oracle/demo/cleanup_re.sh new file mode 100755 index 0000000..65a1334 --- /dev/null +++ b/examples/oracle/demo/cleanup_re.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +version="${1:-latest}" +cleanup="${2:-yes}" + +container_name="re-node1-$version-$(hostname)" + +# delete the existing container if it exist +if [ "${cleanup}" = "yes" ]; then + echo "Stopping and removing ${container_name} docker container from $(hostname)." + docker container stop "${container_name}"; docker container rm "${container_name}"; docker stop grafana; docker rm grafana; docker network rm redis-connect; +else + echo "Skipping removing ${container_name} docker container from $(hostname)." +fi + +echo "done" \ No newline at end of file diff --git a/examples/oracle/demo/config/jobmanager.properties b/examples/oracle/demo/config/jobmanager.properties index eaac4e8..b6ad404 100644 --- a/examples/oracle/demo/config/jobmanager.properties +++ b/examples/oracle/demo/config/jobmanager.properties @@ -6,7 +6,7 @@ #cluster.name=default #cluster.leader.heartbeat.lease.renewal.interval=5000 #cluster.election.attempt.interval=5000 -#cluster.timeseries.metrics.enabled=false +cluster.timeseries.metrics.enabled=true ##### Job Manager Services properties #job.manager.services.enabled=true diff --git a/examples/oracle/demo/config/samples/dashboard/datasource.yml b/examples/oracle/demo/config/samples/dashboard/datasource.yml index b9b71f5..c202056 100644 --- a/examples/oracle/demo/config/samples/dashboard/datasource.yml +++ b/examples/oracle/demo/config/samples/dashboard/datasource.yml @@ -3,7 +3,7 @@ apiVersion: 1 datasources: - name: JobManager type: redis-datasource - url: redis://: + url: redis://host.docker.internal:14001 jsonData: client: standalone poolSize: 5 @@ -11,17 +11,17 @@ datasources: pingInterval: 0 pipelineWindow: 0 acl: true - user: + user: redisconnect editable: true secureJsonData: - password: + password: Redis123 access: proxy orgId: 1 isDefault: false version: 1 - name: Target type: redis-datasource - url: redis://: + url: redis://host.docker.internal:14000 jsonData: client: standalone poolSize: 5 @@ -29,10 +29,10 @@ datasources: pingInterval: 0 pipelineWindow: 0 acl: true - user: + user: redisconnect editable: true secureJsonData: - password: + password: Redis123 access: proxy orgId: 1 isDefault: false diff --git a/examples/oracle/demo/load_c##rcuser_schema.sh b/examples/oracle/demo/load_c##rcuser_schema.sh index fc284a5..58d786c 100755 --- a/examples/oracle/demo/load_c##rcuser_schema.sh +++ b/examples/oracle/demo/load_c##rcuser_schema.sh @@ -11,8 +11,8 @@ sqlplus c##rcuser/rcpwd@ORCLPDB1 <<- EOF job varchar2(40), mgr number(4,0), hiredate date, - sal number(10,4), - comm number(10,4), + sal number(10,2), + comm number(10,2), dept number(4,0), constraint pk_emp primary key (empno) ); diff --git a/examples/oracle/demo/setup_re.sh b/examples/oracle/demo/setup_re.sh index 2ae38ee..66b87c5 100755 --- a/examples/oracle/demo/setup_re.sh +++ b/examples/oracle/demo/setup_re.sh @@ -1,91 +1,137 @@ #!/bin/bash -sudo docker kill re-node1;sudo docker rm re-node1; -sudo docker kill redisinsight;sudo docker rm redisinsight; -sudo docker kill grafana; sudo docker rm grafana; -# shellcheck disable=SC2046 -sudo docker rmi -f $(sudo docker images | grep redislabs | awk '{print $3}') -# Start 1 docker container since we can't do HA with vanilla docker instance. Use docker swarm, RE on VM's or RE's K8s operator to achieve HA, clustering etc. + +version="${1:-latest}" +platform="${2:-linux/amd64}" + +container_name="re-node1-$version-$(hostname)" + +# Start 1 docker container since we can't do HA with vanilla docker instance. Use docker swarm, RE on VM's or RE K8s operator to achieve HA, clustering etc. + echo "Starting Redis Enterprise as Docker containers..." -sudo docker run -d --cap-add sys_resource -h re-node1 --name re-node1 -p 18443:8443 -p 19443:9443 -p 14000-14005:12000-12005 -p 18070:8070 redislabs/redis:latest +IS_RUNNING=$(docker ps --filter name="${container_name}" --format '{{.ID}}') +if [ -n "${IS_RUNNING}" ]; then + echo "${container_name} is running. Stopping ${container_name} and removing container..." + docker container stop "${container_name}" + docker container rm "${container_name}" + docker container stop grafana + docker container rm grafana + docker network rm redis-connect +else + IS_STOPPED=$(docker ps -a --filter name="${container_name}" --format '{{.ID}}') + if [ -n "${IS_STOPPED}" ]; then + echo "${container_name} is stopped. Removing container..." + docker container rm "${container_name}" + docker container rm grafana + docker network rm redis-connect + fi +fi + +docker network create -d bridge redis-connect + +docker run -d \ + --init \ + --platform "${platform}" \ + --cap-add sys_resource \ + --name "${container_name}" \ + --network=redis-connect \ + -h "${container_name}" \ + -p 18443:8443 \ + -p 19443:9443 \ + -p 14000-14001:12000-12001 \ + -p 18070:8070 \ + redislabs/redis:"${version}" + +while ! nc -vz localhost 18443 < /dev/null +do + echo "$(date) - still trying" + sleep 2 +done +echo "$(date) - connected to admin ui port successfully" + +while ! nc -vz localhost 19443 < /dev/null +do + echo "$(date) - still trying" + sleep 2 +done +echo "$(date) - connected to rest api port successfully" + +while ! nc -vz localhost 18070 < /dev/null +do + echo "$(date) - still trying" + sleep 2 +done +echo "$(date) - connected to metrics exporter port successfully" + # Create Redis Enterprise cluster echo "Waiting for the servers to start..." sleep 60 echo "Creating Redis Enterprise cluster..." -sudo docker exec -it --privileged re-node1 "/opt/redislabs/bin/rladmin" cluster create name re-cluster.local username demo@redis.com password redislabs -echo "" -# Test the cluster -sudo docker exec -it re-node1 bash -c "/opt/redislabs/bin/rladmin info cluster" + +while [[ "$(curl -o ./cluster -w ''%{http_code}'' -X POST -H 'Content-Type:application/json' -d '{"action":"create_cluster","cluster":{"name":"re-cluster.local"},"node":{"paths":{"persistent_path":"/var/opt/redislabs/persist","ephemeral_path":"/var/opt/redislabs/tmp"}},"credentials":{"username":"demo@redis.com","password":"redislabs"}}' -k https://localhost:19443/v1/bootstrap/create_cluster)" != "200" ]]; do sleep 5; done +echo "Cluster.." && cat ./cluster + +# Test the cluster. cluster info and nodes +while [[ "$(curl -o ./bootstrap -w ''%{http_code}'' -u demo@redis.com:redislabs -k https://localhost:19443/v1/bootstrap)" != "200" ]]; do sleep 5; done +echo "Bootstrap.." && cat ./bootstrap +while [[ "$(curl -o ./nodes -w ''%{http_code}'' -u demo@redis.com:redislabs -k https://localhost:19443/v1/nodes)" != "200" ]]; do sleep 5; done +echo "Nodes.." && cat ./nodes # Get the module info to be used for database creation -tee -a list_modules.sh <