From 04f517ef4e68a005777c7a4ad532f6abbd73053d Mon Sep 17 00:00:00 2001 From: Roman Kostenko Date: Mon, 1 Dec 2025 13:00:10 +0200 Subject: [PATCH 01/31] Trendz 1.15.0 docs (1) --- .../installation-options-trendz.yml | 8 +- _data/trendz/installation.yml | 6 +- .../trendz/install/activate-trendz-license.md | 1 + .../trendz/install/authentication.md | 9 + .../install/docker-requirements-linux.md | 2 + .../install/docker-requirements-windows.md | 1 + .../trendz/install/hardware-requirements.md | 4 + .../trendz/install/https-configuration.md | 76 ++++ .../trendz/install/post-installation-steps.md | 4 + .../templates/trendz/install/sync-with-tb.md | 0 .../install/thingsboard-requirements.md | 1 + docs/trendz/getting-started.md | 12 +- docs/trendz/install/cloud.md | 40 +-- docs/trendz/install/docker-windows.md | 340 ++++++++++++++---- docs/trendz/install/docker.md | 290 +++++++++++---- docs/trendz/install/kubernetes.md | 86 ++--- .../python-executor-configuration-linux.md | 195 +++++++--- docs/trendz/install/rhel.md | 184 +++------- .../trndz-upgrade-instructions-kubernetes.md | 2 - .../install/trndz-upgrade-instructions.md | 4 +- docs/trendz/install/ubuntu.md | 190 +++------- docs/trendz/install/windows.md | 90 ++--- docs/trendz/post-installation-steps.md | 14 - docs/trendz/settings.md | 17 - docs/trendz/what-is-trendz.md | 8 +- images/trendz/cloud-1-preview.webp | Bin 63940 -> 0 bytes images/trendz/cloud-1.webp | Bin 63940 -> 0 bytes images/trendz/cloud-2-preview.webp | Bin 52792 -> 0 bytes images/trendz/cloud-2.webp | Bin 52792 -> 0 bytes images/trendz/cloud-3-preview.webp | Bin 61308 -> 0 bytes images/trendz/cloud-3.webp | Bin 61308 -> 0 bytes 31 files changed, 901 insertions(+), 683 deletions(-) create mode 100644 _includes/templates/trendz/install/activate-trendz-license.md create mode 100644 _includes/templates/trendz/install/authentication.md create mode 100644 _includes/templates/trendz/install/docker-requirements-linux.md create mode 100644 _includes/templates/trendz/install/docker-requirements-windows.md create mode 100644 _includes/templates/trendz/install/hardware-requirements.md create mode 100644 _includes/templates/trendz/install/https-configuration.md create mode 100644 _includes/templates/trendz/install/post-installation-steps.md create mode 100644 _includes/templates/trendz/install/sync-with-tb.md create mode 100644 _includes/templates/trendz/install/thingsboard-requirements.md delete mode 100644 images/trendz/cloud-1-preview.webp delete mode 100644 images/trendz/cloud-1.webp delete mode 100644 images/trendz/cloud-2-preview.webp delete mode 100644 images/trendz/cloud-2.webp delete mode 100644 images/trendz/cloud-3-preview.webp delete mode 100644 images/trendz/cloud-3.webp diff --git a/_data/installation-options/installation-options-trendz.yml b/_data/installation-options/installation-options-trendz.yml index 0f4013fbae..95308165b9 100644 --- a/_data/installation-options/installation-options-trendz.yml +++ b/_data/installation-options/installation-options-trendz.yml @@ -45,12 +45,12 @@ trendz: imageWidth: 35 imageHeight: 36 5: - title: Trendz Cloud - description: Activate Trendz Analytics Cloud with your account to explore powerful data visualization and analytics. + title: ThingsBoard Cloud + description: Activate Trendz Analytics with your ThingsBoard Cloud account. link: /docs/trendz/install/cloud/ icon: /images/install/platform/trendz-cloud.svg - alt: Trendz Cloud logo - imageTitleAttribute: Activate Trendz Analytics Cloud + alt: ThingsBoard Cloud logo + imageTitleAttribute: Activate Trendz Analytics on ThingsBoard Cloud imageWidth: 58 imageHeight: 36 6: diff --git a/_data/trendz/installation.yml b/_data/trendz/installation.yml index e9637c1c3e..d30c76262d 100644 --- a/_data/trendz/installation.yml +++ b/_data/trendz/installation.yml @@ -3,7 +3,7 @@ abstract: "Documentation for installation and configuration of Trendz Analytics. toc: - title: Installation options path: /docs/trendz/install/installation-options/ -- title: Trendz Cloud +- title: ThingsBoard Cloud path: /docs/trendz/install/cloud/ - title: On-premises section: @@ -31,9 +31,5 @@ toc: path: /docs/trendz/install/python-executor-configuration-windows/ - title: Linux or Mac OS path: /docs/trendz/install/python-executor-configuration-linux/ -- title: Connect Trendz to Thingsboard - path: /docs/trendz/connect-thingsboard/ - title: Configuration properties path: /docs/trendz/configuration-properties/ -- title: Post-installation steps - path: /docs/trendz/post-installation-steps/ diff --git a/_includes/templates/trendz/install/activate-trendz-license.md b/_includes/templates/trendz/install/activate-trendz-license.md new file mode 100644 index 0000000000..998d2578bf --- /dev/null +++ b/_includes/templates/trendz/install/activate-trendz-license.md @@ -0,0 +1 @@ +If you cannot see add-ons -> contact us. \ No newline at end of file diff --git a/_includes/templates/trendz/install/authentication.md b/_includes/templates/trendz/install/authentication.md new file mode 100644 index 0000000000..c9c52925da --- /dev/null +++ b/_includes/templates/trendz/install/authentication.md @@ -0,0 +1,9 @@ +You can access Trendz UI by default at http://localhost:8888 + +For first authentication, you need to use **Tenant Administrator** credentials from your **ThingsBoard**. + +Trendz uses ThingsBoard as an authentication service. During first sign in ThingsBoard service should be also available +to validate credentials. + +After the first login to Trendz, you need to discover topology to allow Trendz to know about assets, devices, their profiles and relations. +You could read more about how Trendz uses this topology [here](/docs/trendz/business-entities). \ No newline at end of file diff --git a/_includes/templates/trendz/install/docker-requirements-linux.md b/_includes/templates/trendz/install/docker-requirements-linux.md new file mode 100644 index 0000000000..51a63d1a35 --- /dev/null +++ b/_includes/templates/trendz/install/docker-requirements-linux.md @@ -0,0 +1,2 @@ +* Have Docker CE. You can find out how to install it [here](https://docs.docker.com/engine/installation/) +* Have Docker Compose. You can find out how to install it [here](https://docs.docker.com/compose/install/) diff --git a/_includes/templates/trendz/install/docker-requirements-windows.md b/_includes/templates/trendz/install/docker-requirements-windows.md new file mode 100644 index 0000000000..aa1e12259a --- /dev/null +++ b/_includes/templates/trendz/install/docker-requirements-windows.md @@ -0,0 +1 @@ +* Have Docker Desktop for Windows. You can find out how to install it [here]((https://docs.docker.com/desktop/setup/install/windows-install/)) diff --git a/_includes/templates/trendz/install/hardware-requirements.md b/_includes/templates/trendz/install/hardware-requirements.md new file mode 100644 index 0000000000..0fed29b8e5 --- /dev/null +++ b/_includes/templates/trendz/install/hardware-requirements.md @@ -0,0 +1,4 @@ +Depends on the amount of analyzed data and the number of devices connected to the system. +To run Trendz Analytics on a single machine, you will need at least 1Gb of free RAM. + +In small and medium installations, Trendz can be installed **on the same** server with ThingsBoard. diff --git a/_includes/templates/trendz/install/https-configuration.md b/_includes/templates/trendz/install/https-configuration.md new file mode 100644 index 0000000000..c9ee93648d --- /dev/null +++ b/_includes/templates/trendz/install/https-configuration.md @@ -0,0 +1,76 @@ +You may want to configure HTTPS access using HAProxy. +This is possible in case you are hosting Trendz in the cloud and have a valid DNS name assigned to your instance. + +### Trendz and ThingsBoard hosted on the same server + +Use this section if HAProxy/Let’s Encrypt already installed in the server and HTTPS enabled for ThingsBoard. + +Open HAProxy configuration file +```bash +sudo nano /etc/haproxy/haproxy.cfg +``` +{: .copy-code} + +Locate **frontend https_in** section, add new access list that will match traffic by domain name and redirect this traffic to Trendz backend: +```bash +acl trendz_http hdr(host) -i new-trendz-domain.com +use_backend tb-trendz if trendz_http +``` + +In the same file register Trendz backend: +```bash +backend tb-trendz + balance leastconn + option tcp-check + option log-health-checks + server tbTrendz1 127.0.0.1:8888 check inter 5s + http-request set-header X-Forwarded-Port %[dst_port] +``` + +Generate SSL certificates for new domain: +```bash +sudo certbot-certonly --domain new-trendz-domain.com --email some@email.io +``` + +Refresh HAProxy configuration: +```bash +sudo haproxy-refresh +``` + +That's it, HTTPS for Trendz UI configured and now you can access it via: +https://new-trendz-domain.com + + +### Fresh installation on new server + +Please follow this [guide](/docs/user-guide/install/pe/add-haproxy-ubuntu) to install HAProxy and generate valid SSL certificate using Let's Encrypt. + +### Host ThingsBoard and Trendz on the same domain + +ThingsBoard and Trendz can share same domain name. In this case ThingsBoard web page would be loaded using following link: + +```bash +https://{my-domain}/ +``` + +and Trendz web page would be loaded using following link + +```bash +https://{my-domain}/trendz +``` + +For enabling such configuration we have to update HAProxy config to route specific requests to Trendz service. +Open HAProxy configuration file +```bash +sudo nano /etc/haproxy/haproxy.cfg +``` +{: .copy-code} + +Locate **frontend https_in** section, add new access list that will match traffic by URL path and redirect this traffic to Trendz backend: + +```bash +... +acl trendz_acl path_beg /trendz path_beg /apiTrendz +.... +use_backend tb-trendz if trendz_acl +``` diff --git a/_includes/templates/trendz/install/post-installation-steps.md b/_includes/templates/trendz/install/post-installation-steps.md new file mode 100644 index 0000000000..e3fa3bf1a9 --- /dev/null +++ b/_includes/templates/trendz/install/post-installation-steps.md @@ -0,0 +1,4 @@ +If you have ThingsBoard version 4.3.0 or newer, you do not have any post installation steps. + +If you have ThingsBoard version 4.2.1 or older, it is essential to follow these [instructions](/docs/trendz/post-installation-steps) +to fully use all features, such as saving telemetry to ThingsBoard and adding Trendz views to dashboards. diff --git a/_includes/templates/trendz/install/sync-with-tb.md b/_includes/templates/trendz/install/sync-with-tb.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/_includes/templates/trendz/install/thingsboard-requirements.md b/_includes/templates/trendz/install/thingsboard-requirements.md new file mode 100644 index 0000000000..d92787f998 --- /dev/null +++ b/_includes/templates/trendz/install/thingsboard-requirements.md @@ -0,0 +1 @@ +* ThingsBoard version 4.3.0 or newer. In case you have ThingsBoard version 4.2.1, you could follow next guide. \ No newline at end of file diff --git a/docs/trendz/getting-started.md b/docs/trendz/getting-started.md index 14e8e8f8b9..9b5d9ae704 100644 --- a/docs/trendz/getting-started.md +++ b/docs/trendz/getting-started.md @@ -211,8 +211,8 @@ The goal of this tutorial is to demonstrate the basic usage of Trendz Analytics. ## Prerequisites -You will need to have a Trendz Analytics server up and running. -The easiest way is to use [Trendz Cloud](/docs/trendz/install/cloud/) SaaS. +You will need to have a Trendz Analytics up and running. +The easiest way is to use [Trendz Analytics add-on in ThingsBoard Cloud](/docs/trendz/install/cloud/) SaaS. Alternatively, you can install Trendz Analytics using the [Installation Guide](/docs/trendz/install/installation-options/). @@ -226,12 +226,12 @@ The full set of fields and relationships used in this guide is shown below: Once the Trendz Service is up and running, you can sign in to the Trendz UI using the following URL: -* Trendz Cloud (North America): [https://thingsboard.cloud/trendz](https://thingsboard.cloud/trendz) -* Trendz Cloud (Europe): [https://eu.thingsboard.cloud/trendz](https://eu.thingsboard.cloud/trendz) +* ThingsBoard Cloud (North America): [https://thingsboard.cloud/trendz](https://thingsboard.cloud/trendz) +* ThingsBoard Cloud (Europe): [https://eu.thingsboard.cloud/trendz](https://eu.thingsboard.cloud/trendz) * Self-hosted Trendz: [http://localhost:8888](http://localhost:8888) -You can log in using Tenant Administrator credentials from ThingsBoard. Trendz uses ThingsBoard as an authentication service. -Any Tenant Administrator or Customer User can sign in to the Trendz UI using the same login/password they use in ThingsBoard. +You can log in using Tenant Administrator credentials from ThingsBoard. Any Tenant Administrator or Customer User can +sign in to the Trendz UI using the same login/password they use in ThingsBoard. {% include images-gallery.html imageCollection="discover-topology" %} diff --git a/docs/trendz/install/cloud.md b/docs/trendz/install/cloud.md index 17b829ad5a..fbb7bc53ed 100644 --- a/docs/trendz/install/cloud.md +++ b/docs/trendz/install/cloud.md @@ -2,46 +2,36 @@ layout: docwithnav-trendz assignees: - vparomskiy -title: Enable Trendz Analytics in ThinsgBoard Cloud -description: Activate Trendz Analytics Cloud - -cloudPlan: - 0: - image: /images/trendz/cloud-1.webp - title: 'Log in to ThingsBoard Cloud account and select “Plan and Billing” menu option. Press “Update Plan” button' - 1: - image: /images/trendz/cloud-2.webp - title: 'Choose “ThingsBoard + Trendz” and select the most suitable plan for you' - 2: - image: /images/trendz/cloud-3.webp - title: 'Reload the page to see new “Trendz Analytics” option in your ThingsBoard Menu' +title: Enable Trendz Analytics in ThingsBoard Cloud +description: Activate Trendz Analytics add-on --- * TOC {:toc} -## What is Trendz Cloud +## Trendz Analytics in ThingsBoard Cloud -The Trendz Analytics Cloud is a fully managed, scalable and fault-tolerant version of [Trendz Analytics product](/products/trendz/). It is already integrated with ThingsBoard Cloud and can be used to analyze your data from ThingsBoard Cloud. +Trendz Analytics in ThingsBoard Cloud is a fully managed, scalable, and fault-tolerant version of the [Trendz Analytics add-on](/products/trendz/). +It is already integrated into ThingsBoard Cloud and can be used to analyze your data. -- **Improved time to market.** Save time on maintenance of the platform or configuration of the features. -- **Reduced costs.** The cost of the cluster infrastructure is shared between the users of the platform. -- **High availability.** Trendz Cloud uses microservices architecture and is deployed in multiple availability zones. -- **Data durability.** Platform uses data replication and backup procedures to make sure you don't lose the data. +* **Improved time to market.** Save time on maintaining the platform or configuring its features. +* **Reduced costs.** Infrastructure costs are shared between platform users. +* **High availability.** The Trendz Analytics add-on uses a microservices architecture and is deployed across multiple availability zones. +* **Data durability.** The platform uses data replication and backup procedures to ensure you don't lose data. ## Prerequisites -You need to have active ThingsBoard Cloud account to active Trendz Analytics Cloud. If you don't have ThingsBoard Cloud account yet, please [sign up](https://thingsboard.cloud/signup). +You need an active ThingsBoard Cloud account to activate the Trendz Analytics add-on. If you don't have a ThingsBoard Cloud account yet, please [sign up](https://thingsboard.cloud/signup). -## Activate Trendz Analytics Cloud +## Activate Trendz Analytics add-on -- Log in to ThingsBoard Cloud account and select [Plan and Billing (North America)](https://thingsboard.cloud/billing) / [Plan and Billing (Europe)](https://eu.thingsboard.cloud/billing) menu option. -- Press **Update Plan** button -- Choose **ThingsBoard + Trendz** and select the most suitable plan for you +* Log in to your ThingsBoard Cloud account and select the appropriate **Plan and Billing** option: + * [Plan and Billing (North America)](https://thingsboard.cloud/billing) + * [Plan and Billing (Europe)](https://eu.thingsboard.cloud/billing) -{% include images-gallery.html imageCollection="cloudPlan" %} +//TODO: Implement docs here ## Next steps diff --git a/docs/trendz/install/docker-windows.md b/docs/trendz/install/docker-windows.md index 10d9aa2923..263239d8f5 100644 --- a/docs/trendz/install/docker-windows.md +++ b/docs/trendz/install/docker-windows.md @@ -1,56 +1,50 @@ --- layout: docwithnav-trendz assignees: -- ashvayka + - ashvayka title: Installing ThingsBoard Trendz Analytics using Docker (Windows) description: Installing ThingsBoard Trendz Analytics using Docker (Windows) --- -* TOC +* TOC {:toc} -This guide will help you to install and start Trendz Analytics using Docker on Windows. +This guide will help you to install and start Trendz Analytics using Docker on Windows. ## Prerequisites -- [Install Docker Toolbox for Windows](https://docker-docs.uclv.cu/toolbox/toolbox_install_windows/) +{% include templates/trendz/install/docker-requirements-windows.md %} -## Step 1. Obtain the license key +## Installation Steps -We assume you have already chosen subscription plan for Trendz and have license key. If not, please get your [Free Trial license](/pricing/?section=trendz-options&product=trendz-self-managed&solution=trendz-pay-as-you-go) before you proceed. -See [How-to get pay-as-you-go subscription](https://www.youtube.com/watch?v=dK-QDFGxWek){:target="_blank"} for more details. +### Step 1. Activate Trendz Add-on on ThingsBoard -Note: We will reference the license key you have obtained during this step as PUT_YOUR_LICENSE_SECRET_HERE guide. +{% include templates/trendz/install/activate-trendz-license.md %} -## Step 2. Running Trendz service +### Step 2. Docker Compose setup -### Docker Compose setup - -Make sure your have [logged in](https://docs.docker.com/engine/reference/commandline/login/) to docker hub using command line. - -Create docker compose file for Trendz Analytics service: +Create a docker compose file for Trendz Analytics service: ```text docker-compose.yml ``` {: .copy-code} -Add the following line to the yml file. Don't forget to replace “PUT_YOUR_LICENSE_SECRET_HERE” with your **license secret obtained on the first step** +Add the following configuration to the YAML file. ```yml - -version: '3.0' services: mytrendz: + depends_on: + - postgres + - mypyexecutor restart: always image: "thingsboard/trendz:{{ site.release.trendz_ver }}" ports: - "8888:8888" environment: - TB_API_URL: http://10.0.0.101:8080 - TRENDZ_LICENSE_SECRET: PUT_YOUR_LICENSE_SECRET_HERE TRENDZ_LICENSE_INSTANCE_DATA_FILE: /data/license.data SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/trendz SPRING_DATASOURCE_USERNAME: postgres @@ -59,22 +53,24 @@ services: SCRIPT_ENGINE_DOCKER_PROVIDER_URL: mypyexecutor:8181 SCRIPT_ENGINE_TIMEOUT: 30000 volumes: - - mytrendz-data:/data - - mytrendz-logs:/var/log/trendz + - ./.mytrendz-conf:/trendz-config-files + - ./.mytrendz-data:/data + - ./.mytrendz-logs:/var/log/trendz mypyexecutor: restart: always image: "thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}" ports: - "8181:8181" environment: - SCRIPT_ENGINE_RUNTIME_TIMEOUT: 30000 EXECUTOR_MANAGER: 1 EXECUTOR_SCRIPT_ENGINE: 6 THROTTLING_QUEUE_CAPACITY: 10 THROTTLING_THREAD_POOL_SIZE: 6 - NETWORK_BUFFER_SIZE: 10485760 + NETWORK_BUFFER_SIZE: 5242880 volumes: - - mytrendz-data/python-executor:/python-executor + - ./.mytrendz-python-conf:/python-executor-config-files + - ./.mytrendz-python-data:/data + - ./.mytrendz-python-logs:/var/log/python-executor postgres: restart: always image: "postgres:15" @@ -84,65 +80,212 @@ services: POSTGRES_DB: trendz POSTGRES_PASSWORD: postgres volumes: - - mytrendz-data/db:/var/lib/postgresql/data -volumes: - mytrendz-data: - external: true - mytrendz-logs: - external: true - mytrendz-data-python-executor: - external: true - mytrendz-data-db: - external: true + - ./.mytrendz-data/db:/var/lib/postgresql/data ``` {: .copy-code} -Where: - -- `TB_API_URL` - url for connecting to ThingsBoard Rest API (for example http://10.5.0.11:8080). Note that ThingsBoard IP address should be resolvable from Trendz docker container -- `PUT_YOUR_LICENSE_SECRET_HERE` - placeholder for your license secret obtained on the first step -- `8888:8888` - connect local port 8888 to exposed internal HTTP port 8888 -- `mytrendz-data:/data` - mounts the volume `mytrendz-data` to Trendz data directory -- `mytrendz-data/db:/var/lib/postgresql/datad` - mounts the volume `mytrendz-data/db` to Postgres data directory -- `mytrendz-logs:/var/log/trendz` - mounts the volume `mytrendz-logs` to Trendz logs directory -- `mytrendz` - friendly local name of this machine -- `--restart always` - automatically start Trendz in case of system reboot and restart in case of failure. -- `thingsboard/trendz:{{ site.release.trendz_ver }}` - Trendz docker image -- `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Trendz python script executor docker image -- `SCRIPT_ENGINE_RUNTIME_TIMEOUT` - Python script execution timeout -- `mytrendz-data/python-executor:/python-executor` - mounts the volume `mytrendz-data/python-executor` to Trendz Python Executor additional data directory - -### Setup Docker volumes - -Windows users should use docker managed volume for Trendz DataBase. Create docker volume (for ex. `mytrendz-data`) before -executing docker run command: Open “Docker Quickstart Terminal”. Execute the following command to create docker volume: +Where: + +- `8888:8888` - connect local port 8888 to exposed internal HTTP port 8888 +- `./.mytrendz-conf:/trendz-config-files` - mounts the volume `./.mytrendz-conf` to Trendz directory with the configuration files +- `./.mytrendz-data:/data` - mounts the volume `./.mytrendz-data` to Trendz data directory +- `./.mytrendz-data/db:/var/lib/postgresql/data` - mounts the volume `./.mytrendz-data/db` to Postgres data directory +- `./.mytrendz-logs:/var/log/trendz` - mounts the volume `./.mytrendz-logs` to Trendz logs directory +- `mytrendz` - name of the Trendz Docker service +- `--restart always` - automatically start Trendz in case of system reboot and restart in case of failure. +- `thingsboard/trendz:{{ site.release.trendz_ver }}` - Trendz docker image +- `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Trendz python script executor docker image +- `SCRIPT_ENGINE_TIMEOUT` - Python script execution timeout + +### Step 3. Configuration files setup + +Before starting the services, you need to create the configuration directories and files. +Execute the following commands in `PowerShell` to create the necessary folders and write the configuration files: + +1. **Create directories** +```powershell +New-Item -ItemType Directory -Force -Path .\.mytrendz-conf +New-Item -ItemType Directory -Force -Path .\.mytrendz-data +New-Item -ItemType Directory -Force -Path .\.mytrendz-logs +New-Item -ItemType Directory -Force -Path .\.mytrendz-python-conf +New-Item -ItemType Directory -Force -Path .\.mytrendz-python-data +New-Item -ItemType Directory -Force -Path .\.mytrendz-python-logs +``` +{: .copy-code} -```yml -docker volume create mytrendz-data -docker volume create mytrendz-data-db -docker volume create mytrendz-data-python-executor -docker volume create mytrendz-logs +2. **Create Trendz configuration files**: + +* `.\.mytrendz-conf\trendz.conf` +```powershell +Set-Content -Path .\.mytrendz-conf\trendz.conf -Value @' +export LOG_FILENAME=trendz.out +export LOADER_PATH=/usr/share/trendz/conf + +export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb -Dinstall.data_dir=/usr/share/trendz/data" +export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/trendz/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" +export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" +export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" +export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" +export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" + +export JAVA_OPTS="$JAVA_OPTS -Xms2000m -Xmx2000m" +export JAVA_OPTS="$JAVA_OPTS -Xss1m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=256m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=256m" +export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" +'@ +``` +{: .copy-code} +* `.\.mytrendz-conf\logback.xml` +```powershell +Set-Content -Path .\.mytrendz-conf\logback.xml -Value @' + + + + + /var/log/trendz/trendz.log + + /var/log/trendz/trendz.%d{yyyy-MM-dd}.%i.log + 100MB + 30 + 3GB + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + + + + + +'@ +``` +{: .copy-code} + +3. **Create Python Executor configuration files**: +* `.\.mytrendz-python-conf\python-executor.conf` +```powershell +Set-Content -Path .\.mytrendz-python-conf\python-executor.conf -Value @' +export LOG_FILENAME=python-executor.out +export LOADER_PATH=/usr/share/python-executor/conf + +export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb" +export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/python-executor/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" +export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" +export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" +export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" +export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" + +export JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=128m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=128m" +export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" +'@ +``` +{: .copy-code} +* `.\.mytrendz-python-conf\logback.xml` +```powershell +Set-Content -Path .\.mytrendz-python-conf\logback.xml -Value @' + + + + + /var/log/python-executor/python-executor.log + + /var/log/python-executor/python-executor.%d{yyyy-MM-dd}.%i.log + 100MB + 30 + 3GB + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + + + + + + + +'@ +``` +{: .copy-code} +* `.\.mytrendz-python-conf\requirements.txt` +```powershell +Set-Content -Path .\.mytrendz-python-conf\requirements.txt -Value @' +# Mounted +pandas==2.0.3 +numpy==1.24.3 +scikit-learn==1.3.0 +matplotlib==3.7.2 +seaborn==0.12.2 +requests==2.31.0 +pytz==2023.3 +plotly==5.15.0 +statsmodels==0.14.0 +scipy==1.11.1 +joblib==1.3.2 +'@ ``` {: .copy-code} -**NOTE**: replace directory mytrendz-data and mytrendz-logs with directories you’re planning to used in docker-compose.yml. +### Step 4. Running service -### Running service +Set the terminal in the directory which contains the `docker-compose.yml` file and execute the following commands to up this docker compose directly: -{% assign serviceName = "trendz" %} -{% include templates/install/docker/docker-compose-up.md %} - -After executing this command you can open `http://{your-host-ip}:8888` in you browser (for ex. `http://localhost:8888`). You should see Trendz login page. - -### Authentication +```powershell +docker compose up -d +docker compose logs -f mytrendz +``` +{: .copy-code} -For first authentication you need to use **Tenant Administrator** credentials from your **ThingsBoard** +After executing this command you can open `http://{your-host-ip}:8888` in your browser (for ex. `http://localhost:8888`). You should see Trendz login page. -Trendz uses ThingsBoard as an authentication service. During first sign in ThingsBoard service should be also available -to validate credentials. +### Step 5. Sync ThingsBoard With Trendz -## Post-installation steps -It is essential to follow these [instructions](/docs/trendz/post-installation-steps) to fully use all features, such as saving telemetry to ThingsBoard and adding Trendz views to dashboards. +{% include templates/trendz/install/sync-with-tb.md %} + +## Authentication + +{% include templates/trendz/install/authentication.md %} ## Detaching, stop and start commands @@ -150,12 +293,65 @@ It is essential to follow these [instructions](/docs/trendz/post-installation-st {% assign serviceFullName = "Trendz" %} {% include templates/install/docker/detaching-stop-start-commands.md %} +## Upgrade Trendz Service + +Below is an example of how to upgrade from 1.14.0 to {{ site.release.trendz_ver }} + +* Create a dump of your database: + +```powershell +docker compose exec postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump" +``` +{: .copy-code} + +{% capture dockerComposeStandalone %} +If you still rely on Docker Compose as docker-compose (with a hyphen) execute next command: +
**docker-compose exec postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump"** +{% endcapture %} +{% include templates/info-banner.md content=dockerComposeStandalone %} + +* Set upgradeversion variable to your **previous** Trendz version. + +```powershell +docker compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion" +``` +{: .copy-code} + +{% capture dockerComposeStandalone %} +If you still rely on Docker Compose as docker-compose (with a hyphen) execute next command: +
**docker-compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion"** +{% endcapture %} +{% include templates/info-banner.md content=dockerComposeStandalone %} + +* After this you need to update docker-compose.yml as in [Step 2](#docker-compose-setup) but with {{ site.release.trendz_ver }} instead of 1.14.0: + +* Restart Trendz container + +```powershell +docker compose stop mytrendz +docker compose up -d +``` +{: .copy-code} + +{% capture dockerComposeStandalone %} +If you still rely on Docker Compose as docker-compose (with a hyphen) here is the list of the above commands: +
**docker-compose stop mytrendz** +
**docker-compose up -d** +{% endcapture %} +{% include templates/info-banner.md content=dockerComposeStandalone %} + +To upgrade Trendz to the latest version those steps can be done immediately from old version to the latest without doing it **for each intermediate version** (as opposed to ThingsBoard, where this is required). + ## Troubleshooting ### DNS issues {% include templates/troubleshooting/dns-issues-windows.md %} +## Post-installation steps + +{% include templates/trendz/install/post-installation-steps.md %} + ## Next steps -{% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} +{% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} \ No newline at end of file diff --git a/docs/trendz/install/docker.md b/docs/trendz/install/docker.md index 84dab2bd8d..5d43d64a1b 100644 --- a/docs/trendz/install/docker.md +++ b/docs/trendz/install/docker.md @@ -1,7 +1,7 @@ --- layout: docwithnav-trendz assignees: -- ashvayka + - ashvayka title: Installing ThingsBoard Trendz Analytics using Docker (Linux or Mac OS) description: Installing ThingsBoard Trendz Analytics using Docker (Linux or Mac OS) @@ -11,72 +11,65 @@ description: Installing ThingsBoard Trendz Analytics using Docker (Linux or Mac {:toc} -This guide will help you to install and start Trendz Analytics using Docker on Linux or Mac OS. +This guide will help you to install and start Trendz Analytics using Docker on Linux or Mac OS. ## Prerequisites -- [Install Docker CE](https://docs.docker.com/engine/installation/) -- [Install Docker Compose](https://docs.docker.com/compose/install/) +{% include templates/trendz/install/docker-requirements-linux.md %} -## Step 1. Obtain the license key +## Installation Steps -We assume you have already chosen subscription plan for Trendz and have license key. If not, please get your [Free Trial license](/pricing/?section=trendz-options&product=trendz-self-managed&solution=trendz-pay-as-you-go) before you proceed. -See [How-to get pay-as-you-go subscription](https://www.youtube.com/watch?v=dK-QDFGxWek){:target="_blank"} for more details. +### Step 1. Activate Trendz Add-on on ThingsBoard -Note: We will reference the license key you have obtained during this step as PUT_YOUR_LICENSE_SECRET_HERE later in this guide. +{% include templates/trendz/install/activate-trendz-license.md %} -## Step 2. Running Trendz service +### Step 2. Docker Compose setup -### Docker Compose setup - -Make sure your have [logged in](https://docs.docker.com/engine/reference/commandline/login/) to docker hub using command line. - -Create docker compose file for Trendz Analytics service: +Create a docker compose file for Trendz Analytics service: ```text sudo nano docker-compose.yml ``` {: .copy-code} -Add the following line to the yml file. Don't forget to replace “PUT_YOUR_LICENSE_SECRET_HERE” with your **license secret obtained on the first step** +Add the following configuration to the YAML file. ```yml - -version: '3.0' services: - mytrendz: + trendz: + depends_on: + - postgres restart: always image: "thingsboard/trendz:{{ site.release.trendz_ver }}" ports: - "8888:8888" environment: - TB_API_URL: http://10.0.0.101:8080 - TRENDZ_LICENSE_SECRET: PUT_YOUR_LICENSE_SECRET_HERE TRENDZ_LICENSE_INSTANCE_DATA_FILE: /data/license.data SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/trendz SPRING_DATASOURCE_USERNAME: postgres SPRING_DATASOURCE_PASSWORD: postgres SCRIPT_ENGINE_PROVIDER: DOCKER_CONTAINER - SCRIPT_ENGINE_DOCKER_PROVIDER_URL: mypyexecutor:8181 + SCRIPT_ENGINE_DOCKER_PROVIDER_URL: trendz-python-executor:8181 SCRIPT_ENGINE_TIMEOUT: 30000 volumes: + - ~/.mytrendz-conf:/trendz-config-files - ~/.mytrendz-data:/data - ~/.mytrendz-logs:/var/log/trendz - mypyexecutor: + trendz-python-executor: restart: always image: "thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}" ports: - "8181:8181" environment: - MAX_HEAP_SIZE: 750M - SCRIPT_ENGINE_RUNTIME_TIMEOUT: 30000 EXECUTOR_MANAGER: 1 EXECUTOR_SCRIPT_ENGINE: 6 THROTTLING_QUEUE_CAPACITY: 10 THROTTLING_THREAD_POOL_SIZE: 6 NETWORK_BUFFER_SIZE: 5242880 volumes: - - ~/.mytrendz-data/python-executor:/python-executor + - ~/.mytrendz-python-conf:/python-executor-config-files + - ~/.mytrendz-python-data:/data + - ~/.mytrendz-python-logs:/var/log/python-executor postgres: restart: always image: "postgres:15" @@ -90,53 +83,218 @@ services: ``` {: .copy-code} -Where: - -- `TB_API_URL` - url for connecting to ThingsBoard Rest API (for example http://10.5.0.11:8080). Note that ThingsBoard IP address should be resolvable from Trendz docker container -- `PUT_YOUR_LICENSE_SECRET_HERE` - placeholder for your license secret obtained on the first step -- `8888:8888` - connect local port 8888 to exposed internal HTTP port 8888 -- `~/.mytrendz-data:/data` - mounts the volume `~/.mytrendz-data` to Trendz data directory -- `~/.mytrendz-data/db:/var/lib/postgresql/datad` - mounts the volume `~/.mytrendz-data/db` to Postgres data directory -- `~/.mytrendz-logs:/var/log/thingsboard` - mounts the volume `~/.mytrendz-logs` to Trendz logs directory -- `mytrendz` - friendly local name of this machine -- `--restart always` - automatically start Trendz in case of system reboot and restart in case of failure. -- `thingsboard/trendz:{{ site.release.trendz_ver }}` - Trendz docker image -- `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Trendz python script executor docker image -- `SCRIPT_ENGINE_RUNTIME_TIMEOUT` - Python script execution timeout -- `~/.mytrendz-data/python-executor:/python-executor` - mounts the volume `~/.mytrendz-data/python-executor` to Trendz Python Executor additional data directory - - -Run following commands, before starting docker container(s), to create folders for storing data and logs. -These commands additionally will change owner of newly created folders to docker container user. -To do this (to change user) **chown** command is used, and this command requires *sudo* permissions (command will request password for a *sudo* access): +Where: + +- `8888:8888` - connect local port 8888 to exposed internal HTTP port 8888 +- `~/.mytrendz-conf:/trendz-config-files` - mounts the volume `~/.mytrendz-conf` to Trendz directory with the configuration files +- `~/.mytrendz-data:/data` - mounts the volume `~/.mytrendz-data` to Trendz data directory +- `~/.mytrendz-data/db:/var/lib/postgresql/data` - mounts the volume `~/.mytrendz-data/db` to Postgres data directory +- `~/.mytrendz-logs:/var/log/trendz` - mounts the volume `~/.mytrendz-logs` to Trendz logs directory +- `mytrendz` - name of the Trendz Docker service +- `--restart always` - automatically start Trendz in case of system reboot and restart in case of failure. +- `thingsboard/trendz:{{ site.release.trendz_ver }}` - Trendz docker image +- `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Trendz python script executor docker image +- `SCRIPT_ENGINE_TIMEOUT` - Python script execution timeout + +### Step 3. Configuration files setup +Before starting the services, you need to create the configuration directories and files. +Execute the following commands to create the necessary folders and write the configuration files: + +1. **Create directories** ```bash -mkdir -p ~/.mytrendz-data && sudo chown -R 799:799 ~/.mytrendz-data -mkdir -p ~/.mytrendz-data/python-executor && sudo chown -R 799:799 ~/.mytrendz-data/python-executor -mkdir -p ~/.mytrendz-logs && sudo chown -R 799:799 ~/.mytrendz-logs +mkdir -p ~/.mytrendz-conf +mkdir -p ~/.mytrendz-data +mkdir -p ~/.mytrendz-logs +mkdir -p ~/.mytrendz-python-conf +mkdir -p ~/.mytrendz-python-data +mkdir -p ~/.mytrendz-python-logs +mkdir -p ~/.mytrendz-logs/python-executor-logs ``` {: .copy-code} -**NOTE**: replace directory ~/.mytrendz-data and ~/.mytrendz-logs with directories you’re planning to used in docker-compose.yml. +2. **Create Trendz configuration files**: -### Running service +* `~/.mytrendz-conf/trendz.conf` +```bash +cat <<'EOF' > ~/.mytrendz-conf/trendz.conf +export LOG_FILENAME=trendz.out +export LOADER_PATH=/usr/share/trendz/conf + +export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb -Dinstall.data_dir=/usr/share/trendz/data" +export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/trendz/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" +export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" +export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" +export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" +export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" + +export JAVA_OPTS="$JAVA_OPTS -Xms2000m -Xmx2000m" +export JAVA_OPTS="$JAVA_OPTS -Xss1m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=256m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=256m" +export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" +EOF +``` +{: .copy-code} +* `~/.mytrendz-conf/logback.xml` +```bash +cat <<'EOF' > ~/.mytrendz-conf/logback.xml + + + + + /var/log/trendz/trendz.log + + /var/log/trendz/trendz.%d{yyyy-MM-dd}.%i.log + 100MB + 30 + 3GB + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + + + + + +EOF +``` +{: .copy-code} + +3. **Create Python Executor configuration files**: +* `~/.mytrendz-python-conf/python-executor.conf` +```bash +cat <<'EOF' > ~/.mytrendz-python-conf/python-executor.conf +export LOG_FILENAME=python-executor.out +export LOADER_PATH=/usr/share/python-executor/conf + +export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb" +export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/python-executor/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" +export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" +export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" +export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" +export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" + +export JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=128m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=128m" +export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" +EOF +``` +{: .copy-code} +* `~/.mytrendz-python-conf/logback.xml` +```bash +cat <<'EOF' > ~/.mytrendz-python-conf/logback.xml + + + + + /var/log/python-executor/python-executor.log + + /var/log/python-executor/python-executor.%d{yyyy-MM-dd}.%i.log + 100MB + 30 + 3GB + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + + + + + + + +EOF +``` +{: .copy-code} +* `~/.mytrendz-python-conf/requirements.txt` +```bash +cat <<'EOF' > ~/.mytrendz-python-conf/requirements.txt +# Mounted +pandas==2.0.3 +numpy==1.24.3 +scikit-learn==1.3.0 +matplotlib==3.7.2 +seaborn==0.12.2 +requests==2.31.0 +pytz==2023.3 +plotly==5.15.0 +statsmodels==0.14.0 +scipy==1.11.1 +joblib==1.3.2 +EOF +``` +{: .copy-code} + +4. **Set permissions:** + Once the files are created, execute the following commands to change the owner of the newly created folders to the docker container user (`799`). + Note: This command requires sudo permissions: +```bash +sudo chown -R 799:799 ~/.mytrendz-conf +sudo chown -R 799:799 ~/.mytrendz-data +sudo chown -R 799:799 ~/.mytrendz-logs +sudo chown -R 799:799 ~/.mytrendz-python-conf +sudo chown -R 799:799 ~/.mytrendz-python-data +sudo chown -R 799:799 ~/.mytrendz-python-logs +``` +{: .copy-code} + +### Step 4. Running service {% assign serviceName = "trendz" %} {% include templates/install/docker/docker-compose-up.md %} - -After executing this command you can open `http://{your-host-ip}:8888` in you browser (for ex. `http://localhost:8888`). -You should see Trendz login page. -### Authentication +After executing this command you can open `http://{your-host-ip}:8888` in your browser (for ex. `http://localhost:8888`). +You should see Trendz login page. -For first authentication you need to use **Tenant Administrator** credentials from your **ThingsBoard** +### Step 5. Sync ThingsBoard With Trendz -Trendz uses ThingsBoard as an authentication service. During first sign in ThingsBoard service should be also available -to validate credentials. +{% include templates/trendz/install/sync-with-tb.md %} -## Post-installation steps +## Authentication -It is essential to follow these [instructions](/docs/trendz/post-installation-steps) to fully use all features, such as saving telemetry to ThingsBoard and adding Trendz views to dashboards. +{% include templates/trendz/install/authentication.md %} ## Detaching, stop and start commands @@ -146,7 +304,7 @@ It is essential to follow these [instructions](/docs/trendz/post-installation-st ## Upgrade Trendz Service -Below is example on how to upgrade from 1.13.2 to {{ site.release.trendz_ver }} +Below is an example of how to upgrade from 1.14.0 to {{ site.release.trendz_ver }} * Create a dump of your database: @@ -164,17 +322,17 @@ If you still rely on Docker Compose as docker-compose (with a hyphen) execute ne * Set upgradeversion variable to your **previous** Trendz version. ```bash -docker compose exec mytrendz sh -c "echo '1.13.2' > /data/.upgradeversion" +docker compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion" ``` {: .copy-code} {% capture dockerComposeStandalone %} If you still rely on Docker Compose as docker-compose (with a hyphen) execute next command: -
**docker-compose exec mytrendz sh -c "echo '1.13.2' > /data/.upgradeversion"** +
**docker-compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion"** {% endcapture %} {% include templates/info-banner.md content=dockerComposeStandalone %} -* After this you need to update docker-compose.yml as in [Step 2](#docker-compose-setup) but with {{ site.release.trendz_ver }} instead of 1.13.2: +* After this you need to update docker-compose.yml as in [Step 2](#docker-compose-setup) but with {{ site.release.trendz_ver }} instead of 1.14.0: * Restart Trendz container @@ -191,7 +349,7 @@ If you still rely on Docker Compose as docker-compose (with a hyphen) here is th {% endcapture %} {% include templates/info-banner.md content=dockerComposeStandalone %} -To upgrade Trendz to the latest version those steps should be done **for each intermediate version**. +To upgrade Trendz to the latest version those steps can be done immediately from old version to the latest without doing it **for each intermediate version** (as opposed to ThingsBoard, where this is required). ## Troubleshooting @@ -199,6 +357,10 @@ To upgrade Trendz to the latest version those steps should be done **for each in {% include templates/troubleshooting/dns-issues.md %} +## Post-installation steps + +{% include templates/trendz/install/post-installation-steps.md %} + ## Next steps -{% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} +{% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} \ No newline at end of file diff --git a/docs/trendz/install/kubernetes.md b/docs/trendz/install/kubernetes.md index a697e473c1..55e0202282 100644 --- a/docs/trendz/install/kubernetes.md +++ b/docs/trendz/install/kubernetes.md @@ -12,58 +12,40 @@ description: Installing ThingsBoard Trendz Analytics on Kubernetes This guide describes how to setup Trendz Analytics cluster with Kubernetes and Minikube. ## Prerequisites - + You need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you don't have Minikube installed, please follow [these instructions](https://kubernetes.io/docs/setup/learning-environment/minikube/). -Configure your cluster by designating a node for the Trendz instance and labeling it with a custom label. Utilize affinity settings to instruct Kubernetes to deploy the Trendz instance on the specified node. +Configure your cluster by designating a node for the Trendz instance and labeling it with a custom label. Utilize affinity settings to instruct Kubernetes to deploy the Trendz instance on the specified node. Ensure that the node meets specific CPU and RAM requirements, with the typical usage being around 4 CPU and 8GB RAM. While you can set your own limits, we advise adhering to or exceeding the recommended specifications mentioned earlier. -## Step 1. Clone Trendz Kubernetes scripts - -```bash -git clone https://github.com/thingsboard/trendz-k8s.git --depth 1 -cd trendz-k8s -``` -{: .copy-code} - -## Step 2. Obtain the license key +## Installation Steps -We assume you have already chosen subscription plan for Trendz and have license key. If not, please get your [Free Trial license](/pricing/?section=trendz-options&product=trendz-self-managed&solution=trendz-pay-as-you-go) before you proceed. -See [How-to get pay-as-you-go subscription](https://www.youtube.com/watch?v=dK-QDFGxWek){:target="_blank"} for more details. +### Step 1. Activate Trendz Add-on on ThingsBoard -Note: We will reference the license key you have obtained during this step as PUT_YOUR_LICENSE_SECRET_HERE later in this guide. +{% include templates/trendz/install/activate-trendz-license.md %} -## Step 3. Configure your license key +### Step 2. Clone Trendz Kubernetes scripts ```bash -nano trendz-app-deployment.yml +git clone https://github.com/thingsboard/trendz-k8s.git --depth 1 +cd trendz-k8s ``` {: .copy-code} -and put the license secret parameter: - -``` -# tb-node StatefulSet configuration - -- name: TRENDZ_LICENSE_SECRET - value: "PUT_LICENSE_HERE" - -``` - -## Step 4. Configure Trendz database +### Step 3. Configure Trendz database -Set up an external Postgresql database instance with an empty database named "trendz." This instance can be hosted on services like RDS (AWS) or as your stateful deployment. +Set up an external Postgresql database instance with an empty database named "trendz." This instance can be hosted on services like RDS (AWS) or as your stateful deployment. Ensure you have the following information: - URL (Example: jdbc:postgresql://trendz-db-service:5432/trendz) - Username (Example: postgres) - Password (Example: postgres) -Now we can configure the Trendz database by editing the trendz-db-config.yml file: +Now we can configure the Trendz database by editing the trendz-secret.yml file: ```bash -nano trendz-app-db-config.yml +nano trendz-secret.yml ``` {: .copy-code} @@ -74,39 +56,20 @@ nano trendz-app-db-config.yml ``` -## Step 5. Connect Trendz to ThingsBoard service - -We must set an url for connecting to ThingsBoard Rest API (for example https://my-tb.com). Note that ThingsBoard IP address or domain name should be resolvable from Trendz docker container - -```bash -nano trendz-app-deployment.yml -``` -{: .copy-code} - -And update TB_API_URL and : - -``` -- name: TB_API_URL - value: "https://my-tb.com" -- name: JWT_TOKEN_SIGNING_KEY - value: "myTbSignKey" -``` - -## Step 6. Running +### Step 4. Running ```bash kubectl apply -f trendz-namespace.yml +kubectl apply -f trendz-secret.yml kubectl apply -f trendz-app-config.yml -kubectl apply -f trendz-app-db-config.yml -kubectl apply -f trendz-app-pvc.yml -kubectl apply -f trendz-app-deployment.yml +kubectl apply -f trendz-app-statefulset.yml kubectl apply -f trendz-python-executor-config.yml kubectl apply -f trendz-python-executor-deployment.yml ``` {: .copy-code} -## Step 7. Check the logs +### Step 5. Check the logs Now check the logs and be sure that the instance is started successfully. There should be a next line: @@ -121,15 +84,24 @@ Where: * `trendz-pod-name` - trendz pod name obtained from the list of the running trendz pods. -## Step 8. Set up a load balancer +### Step 6. Set up a load balancer The last thing is to set up a load balancer to route requests to the Trendz instance. Just update your current load balancer config using reference from the `trendz-ingress.yml` file. -**Do not apply this file, it is just an example.** +**Do not apply this file, it is just an example.** Different environments have different requirements for these configurations, so you need to adjust these settings to your environment. -## Post-installation steps -It is essential to follow these [instructions](/docs/trendz/post-installation-steps) to fully use all features, such as saving telemetry to ThingsBoard and adding Trendz views to dashboards. +### Step 7. Sync ThingsBoard With Trendz + +{% include templates/trendz/install/sync-with-tb.md %} + +## Authentication + +{% include templates/trendz/install/authentication.md %} + +## Post Installation Steps + +{% include templates/trendz/install/post-installation-steps.md %} ## Next steps diff --git a/docs/trendz/install/python-executor-configuration-linux.md b/docs/trendz/install/python-executor-configuration-linux.md index 2c7d38e98b..26e0e7512a 100644 --- a/docs/trendz/install/python-executor-configuration-linux.md +++ b/docs/trendz/install/python-executor-configuration-linux.md @@ -25,7 +25,6 @@ Starting from version 1.14.0, the only way to run these features is via Trendz P Create the Docker Compose file with the following configuration: ```yml -version: '3.0' services: mypyexecutor: restart: always @@ -33,14 +32,15 @@ services: ports: - "8181:8181" environment: - SCRIPT_ENGINE_RUNTIME_TIMEOUT: 30000 EXECUTOR_MANAGER: 1 EXECUTOR_SCRIPT_ENGINE: 6 THROTTLING_QUEUE_CAPACITY: 10 THROTTLING_THREAD_POOL_SIZE: 6 - NETWORK_BUFFER_SIZE: 10485760 + NETWORK_BUFFER_SIZE: 5242880 volumes: - - ~/.mytrendz-data/python-executor:/python-executor + - ~/.mytrendz-python-conf:/python-executor-config-files + - ~/.mytrendz-python-data:/data + - ~/.mytrendz-python-logs:/var/log/python-executor ``` {: .copy-code} @@ -49,21 +49,119 @@ Explanation of key fields: * `8181` - Python executor port for communication with Trendz service * `restart: always` - automatically restarts the executor on failure or system reboot * `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Docker image for Trendz Python Executor -* `SCRIPT_ENGINE_RUNTIME_TIMEOUT` - timeout for Python script execution -* `~/.mytrendz-data/python-executor:/python-executor` - mounts the volume `~/.mytrendz-data/python-executor` to Trendz Python Executor additional data directory +* `~/.mytrendz-python-conf:/python-executor-config-files` - mounts the volume `~/.mytrendz-python-conf` to Trendz Python Executor directory with configuration files +* `~/.mytrendz-python-data:/data` - mounts the volume `~/.mytrendz-python-data` to Trendz Python Executor additional data directory +* `~/.mytrendz-python-logs:/var/log/python-executor` - mounts the volume `~/.mytrendz-python-logs` to Trendz Python Executor logs directory -### Step 2: Create Volumes +### Step 2: Configuration files setup -Run the following commands before starting the Docker container. These commands also change the owner of the newly -created folders to the Docker container user. The `chown` command requires *sudo* permissions and will prompt for your password: +Before starting the service, you need to create the configuration directories and files. +Execute the following commands to create the necessary folders and write the configuration files: +1. **Create directories:** ```bash -mkdir -p ~/.mytrendz-data && sudo chown -R 799:799 ~/.mytrendz-data -mkdir -p ~/.mytrendz-data/python-executor && sudo chown -R 799:799 ~/.mytrendz-data/python-executor +mkdir -p ~/.mytrendz-python-conf +mkdir -p ~/.mytrendz-python-data +mkdir -p ~/.mytrendz-python-logs +``` +{: .copy-code} + +2. **Create configuration files**: +* `~/.mytrendz-python-conf/python-executor.conf` +```bash +cat <<'EOF' > ~/.mytrendz-python-conf/python-executor.conf +export LOG_FILENAME=python-executor.out +export LOADER_PATH=/usr/share/python-executor/conf + +export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb" +export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/python-executor/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" +export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" +export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" +export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" +export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" + +export JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=128m" +export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=128m" +export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" +export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" +EOF +``` +{: .copy-code} +* `~/.mytrendz-python-conf/logback.xml` +```bash +cat <<'EOF' > ~/.mytrendz-python-conf/logback.xml + + + + + /var/log/python-executor/python-executor.log + + /var/log/python-executor/python-executor.%d{yyyy-MM-dd}.%i.log + 100MB + 30 + 3GB + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable + + + + + + + + + + + + + + +EOF +``` +{: .copy-code} +* `~/.mytrendz-python-conf/requirements.txt` +```bash +cat <<'EOF' > ~/.mytrendz-python-conf/requirements.txt +# Mounted +pandas==2.0.3 +numpy==1.24.3 +scikit-learn==1.3.0 +matplotlib==3.7.2 +seaborn==0.12.2 +requests==2.31.0 +pytz==2023.3 +plotly==5.15.0 +statsmodels==0.14.0 +scipy==1.11.1 +joblib==1.3.2 +EOF +``` +{: .copy-code} + +3. **Set permissions:** + Once the files are created, execute the following commands to change the owner of the newly created folders to the docker container user (`799`). + Note: This command requires sudo permissions: +```bash +sudo chown -R 799:799 ~/.mytrendz-python-conf +sudo chown -R 799:799 ~/.mytrendz-python-data +sudo chown -R 799:799 ~/.mytrendz-python-logs ``` {: .copy-code} -**Note:** Replace the directory `~/.mytrendz-data` with the directories you plan to use in `docker-compose.yaml`. ### Step 3: Start Python Executor @@ -92,29 +190,15 @@ Replace `PYTHON_EXECUTOR_HOST` and `PYTHON_EXECUTOR_PORT` with actual host and p If you already have a Python Executor with a version earlier than 1.14.0 connected to Trendz, you should migrate it before updating Trendz to 1.14.0. -### Modify Docker Compose File - -Locate the `docker-compose.yaml` file from which the Python Executor was launched. - -Change the Python Executor image tag to version 1.14.0: - -```yml - image: "thingsboard/trendz-python-executor:1.14.0" -``` -{: .copy-code} +### Step 1. Modify Docker Compose File -Add the following lines at the end of the Python Executor configuration: +Locate the `docker-compose.yml` file from which the Python Executor was launched. -```yml - volumes: - - ~/.mytrendz-data/python-executor:/python-executor -``` -{: .copy-code} +Change the Python Executor image tag to version 1.14.0 and update the `volumes` section to include configuration, data, and log directories. -The final `docker-compose.yaml` should look like: +The final `docker-compose.yml` should look like this: ```yml -version: '3.0' services: mypyexecutor: restart: always @@ -122,36 +206,30 @@ services: ports: - "8181:8181" environment: - SCRIPT_ENGINE_RUNTIME_TIMEOUT: 30000 EXECUTOR_MANAGER: 1 EXECUTOR_SCRIPT_ENGINE: 6 THROTTLING_QUEUE_CAPACITY: 10 THROTTLING_THREAD_POOL_SIZE: 6 - NETWORK_BUFFER_SIZE: 10485760 + NETWORK_BUFFER_SIZE: 5242880 volumes: - - ~/.mytrendz-data/python-executor:/python-executor + - ~/.mytrendz-python-conf:/python-executor-config-files + - ~/.mytrendz-python-data:/data + - ~/.mytrendz-python-logs:/var/log/python-executor ``` {: .copy-code} -### Create Volumes for Python Executor - -Run the following commands before starting the Docker container. These commands also change the owner of the newly -created folders to the Docker container user. The `chown` command requires *sudo* permissions and will prompt for your password: +### Step 2: Create Configuration Files -```bash -mkdir -p ~/.mytrendz-data && sudo chown -R 799:799 ~/.mytrendz-data -mkdir -p ~/.mytrendz-data/python-executor && sudo chown -R 799:799 ~/.mytrendz-data/python-executor -``` -{: .copy-code} +Since version 1.14.0 requires mounted configuration files that did not exist in previous versions, you must create them before restarting the container. -**Note:** Replace the directory `~/.mytrendz-data` with the directories you plan to use in `docker-compose.yaml`. +Please follow the instructions in `Step 2: Configuration files setup` from the installation guide above to create the necessary config files and set permissions. -### Restart Python Executor +### Step 3. Restart Python Executor Restart the Python Executor to apply the changes: ```bash -docker compose restart -d +docker compose up -d docker compose logs -f mypyexecutor ``` {: .copy-code} @@ -162,38 +240,37 @@ If necessary, you can add additional Python libraries to the **Python Executor** For example, if you want to add the **`emoji`** library (specific version 2.2.0), follow these steps. -### Step 1. Locate the Volume +### Step 1. Add library to `requirements.txt` -The volume is usually at: +You need to append the library name and version to the `requirements.txt` file located in your configuration directory (`~/.mytrendz-python-conf`): ```bash -cd ~/.mytrendz-data/python-executor +echo 'emoji==2.2.0' >> ~/.mytrendz-python-conf/requirements.txt ``` +{: .copy-code} -### Step 2. Add a `requirements.txt` File - -Create the file with the library: - +**Note:** You may need sudo permissions if the file is owned by the docker user (`799`): ```bash -echo 'emoji==2.2.0' > requirements.txt +echo 'emoji==2.2.0' | sudo tee -a ~/.mytrendz-python-conf/requirements.txt ``` +{: .copy-code} -### Step 3. Restart the Docker Container +### Step 2. Restart the Docker Container Find the container name and restart it: - ```bash -docker compose ps docker compose restart mypyexecutor ``` +{: .copy-code} -### Step 4. Verify Installation +### Step 3. Verify Installation -Check the logs: +Check the logs to ensure the library was installed successfully: ```bash docker compose logs mypyexecutor ``` +{: .copy-code} You should see: @@ -206,4 +283,4 @@ After the container restarts, you can import and use the custom libraries in you ## Next steps -{% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} +{% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} \ No newline at end of file diff --git a/docs/trendz/install/rhel.md b/docs/trendz/install/rhel.md index ee65d2c38f..daff2e6463 100644 --- a/docs/trendz/install/rhel.md +++ b/docs/trendz/install/rhel.md @@ -16,19 +16,20 @@ This guide explains how to install **Trendz Analytics** on **RHEL/CentOS 8 or 9* Certain Trendz Analytics features like **predictions, metric explorations, and Python calculation fields** require a Python executor. -The python executor runs **only via Docker**. Even on RHEL/CentOS, Docker is essential to fully utilize all Trendz features. +The python executor runs **only via Docker**. Even on RHEL/CentOS, Docker is essential to fully utilize all Trendz features. We recommend following the [Docker (Linux or Mac OS) installation guide](/docs/trendz/install/docker) and using the Docker installation instead of RHEL/CentOS. Proceed here **only** if you have a compelling reason to use a combined RHEL/CentOS + Docker setup. ## Prerequisites -**Hardware requirements** depend on amount of analyzed data and amount of devices connected to the system. -To run Trendz Analytics on a single machine you will need at least 1Gb of free RAM. +### Hardware Requirements -In small and medium installations Trendz can be installed **on the same** server with ThingsBoard. +{% include templates/trendz/install/hardware-requirements.md %} -Before continue to installation execute the following commands in order to install necessary tools: +### Software Requirements + +{% include templates/trendz/install/docker-requirements-linux.md %} **For CentOS 7:** @@ -52,11 +53,17 @@ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8. ``` {: .copy-code} -## Step 1. Install Java 17 (OpenJDK) +## Installation Steps + +### Step 1. Activate Trendz Add-on on ThingsBoard + +{% include templates/trendz/install/activate-trendz-license.md %} + +### Step 2. Install Java 17 (OpenJDK) {% include templates/install/rhel-java-install.md %} -## Step 2. Trendz Analytics service installation +### Step 3. Trendz Analytics service installation Download installation package. @@ -72,56 +79,18 @@ sudo rpm -Uvh trendz-{{ site.release.trendz_ver }}.rpm ``` {: .copy-code} -## Step 3. Obtain and configure license key - -We assume you have already chosen subscription plan for Trendz and have license key. If not, please get your [Free Trial license](/pricing/?section=trendz-options&product=trendz-self-managed&solution=trendz-pay-as-you-go) before you proceed. -See [How-to get pay-as-you-go subscription](https://www.youtube.com/watch?v=dK-QDFGxWek){:target="_blank"} for more details. - -Once you get the license secret, you should put it to the trendz configuration file. -Open the file for editing using the following command: - -```bash -sudo nano /etc/trendz/conf/trendz.conf -``` -{: .copy-code} - -Add the following lines to the configuration file and put your license secret: - -```bash -# License secret obtained from ThingsBoard License Portal (https://license.thingsboard.io) -export TRENDZ_LICENSE_SECRET=YOUR_LICENSE_SECRET_HERE -``` - -## Step 4. Configure connection with ThingsBoard Platform - -You can connect Trendz Analytics to the ThingsBoard Community Edition or ThingsBoard Professional Edition. - -Edit ThingsBoard configuration file -```bash -sudo nano /etc/trendz/conf/trendz.conf -``` -{: .copy-code} +### Step 4. Configure Trendz database -Add ThingsBoard REST API URL that would be used for communicating with ThingsBoard Platform. In most cases, when Trendz installed -in the same server with ThingsBoard, API_URL would be **http://localhost:8080**. Otherwise you should use ThingsBoard domain name. - -```bash -# ThingsBoard URL that will be used by Trendz -export TB_API_URL=http://localhost:8080 -``` -{: .copy-code} - -## Step 5. Configure Trendz database Trendz uses PostgreSQL as a database. You can install PostgreSQL on the same serverfor Trendz or use managed PostgreSQL service from your cloud vendor. -### PostgreSQL Installation +* **PostgreSQL Installation** {% include templates/install/postgres-install-rhel.md %} After configuring the password, edit the **pg_hba.conf** to use MD5 authentication with the postgres user. -Edit the **pg_hba.conf** file: +Edit the **pg_hba.conf** file: ```bash sudo nano /var/lib/pgsql/16/data/pg_hba.conf @@ -148,7 +117,7 @@ sudo systemctl restart postgresql-16.service ``` {: .copy-code} -### Create Database for Trendz +* **Create Database for Trendz** Connect to the database to create trendz DB: @@ -167,26 +136,26 @@ CREATE DATABASE trendz; Then, press “Ctrl+D” to return to main user console. -### Configure database connection for Trendz +* **Configure database connection for Trendz** -Edit Trendz configuration file +Edit Trendz configuration file -```bash +```bash sudo nano /etc/trendz/conf/trendz.conf -``` +``` {: .copy-code} Add the following lines to the configuration file. Don't forget **to replace** "PUT_YOUR_POSTGRESQL_PASSWORD_HERE" with your **real postgres user password**: ```bash -# DB Configuration +# DB Configuration export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/trendz export SPRING_DATASOURCE_USERNAME=postgres export SPRING_DATASOURCE_PASSWORD=PUT_YOUR_POSTGRESQL_PASSWORD_HERE ``` {: .copy-code} -## Step 6. Run installation script +### Step 5. Run installation script Once Trendz service is installed and DB configuration is updated, you can execute the following script: @@ -194,7 +163,7 @@ Once Trendz service is installed and DB configuration is updated, you can execut sudo /usr/share/trendz/bin/install/install.sh ``` -## Step 7. Start Trendz service +### Step 6. Start Trendz service Execute the following command to start Trendz Analytics: @@ -202,124 +171,53 @@ Execute the following command to start Trendz Analytics: sudo service trendz start ``` {: .copy-code} - + Once started, you will be able to open Web UI using the following link: ```bash http://localhost:8888/trendz ``` -**Note**: If Trendz installed on a remote server, you have to replace localhost with the public IP address of +**Note**: If Trendz installed on a remote server, you have to replace localhost with the public IP address of the server or with a domain name. Also, check that port 8888 opened for public access. -### Authentication - -For first authentication you need to use **Tenant Administrator** credentials from your **ThingsBoard** +### Step 7. Sync ThingsBoard With Trendz -Trendz uses ThingsBoard as an authentication service. During first sign in ThingsBoard service should be also available -to validate credentials. +{% include templates/trendz/install/sync-with-tb.md %} -## Step 8. Install Trendz Python Executor +### Step 8. Install Trendz Python Executor To utilize all Trendz capabilities, such as Trendz Python Calculation Fields or Prediction Models, it is essential to install an additional service: the Trendz Python Executor, which can securely run Python code. You can learn more about how to install it [here](/docs/trendz/install/python-executor-configuration-linux). -## Step 9. HTTPS configuration +## Authentication -You may want to configure HTTPS access using HAProxy. -This is possible in case you are hosting Trendz in the cloud and have a valid DNS name assigned to your instance. +{% include templates/trendz/install/authentication.md %} -**Trendz and ThingsBoard hosted on same server** - -Use this section if HAProxy/Let’s Encrypt already installed in the server and HTTPS enabled for ThingsBoard. - -Open HAProxy configuration file -```bash -sudo nano /etc/haproxy/haproxy.cfg -``` -{: .copy-code} - -Locate **frontend https_in** section, add new access list that will match traffic by domain name and redirect this traffic to Trendz backend: -```bash -acl trendz_http hdr(host) -i new-trendz-domain.com -use_backend tb-trendz if trendz_http -``` - -In the same file register Trendz backend: -```bash -backend tb-trendz - balance leastconn - option tcp-check - option log-health-checks - server tbTrendz1 127.0.0.1:8888 check inter 5s - http-request set-header X-Forwarded-Port %[dst_port] -``` - -Generate SSL certificates for new domain: -```bash -sudo certbot-certonly --domain new-trendz-domain.com --email some@email.io -``` - -Refresh HAProxy configuration: -```bash -sudo haproxy-refresh -``` - -That's it, HTTPS for Trendz UI configured and now you can access it via: -https://new-trendz-domain.com - - -**Fresh installation on new server** - -Please follow this [guide](/docs/user-guide/install/pe/add-haproxy-ubuntu) to install HAProxy and generate valid SSL certificate using Let's Encrypt. +## Troubleshooting -## Step 10. Host ThingsBoard and Trendz on the same domain -ThingsBoard and Trendz can share same domain name. In this case ThingsBoard web page would be loaded using following link: +Trendz logs are stored in the following directory: ```bash -https://{my-domain}/ +/var/log/trendz ``` -and Trendz web page would be loaded using following link - -```bash -https://{my-domain}/trendz -``` +You can issue the following command in order to check if there are any errors on the backend side: -For enabling such configuration we have to update HAProxy config to route specific requests to Trendz service. -Open HAProxy configuration file ```bash -sudo nano /etc/haproxy/haproxy.cfg +cat /var/log/trendz/trendz.log | grep ERROR ``` -{: .copy-code} -Locate **frontend https_in** section, add new access list that will match traffic by URL path and redirect this traffic to Trendz backend: +## HTTPS configuration -```bash -... -acl trendz_acl path_beg /trendz path_beg /apiTrendz -.... -use_backend tb-trendz if trendz_acl -``` +{% include templates/trendz/install/https-configuration.md %} -## Post-installation steps -It is essential to follow these [instructions](/docs/trendz/post-installation-steps) to fully use all features, such as saving telemetry to ThingsBoard and adding Trendz views to dashboards. +## Post Installation Steps -## Troubleshooting +{% include templates/trendz/install/post-installation-steps.md %} -Trendz logs are stored in the following directory: - -```bash -/var/log/trendz -``` - -You can issue the following command in order to check if there are any errors on the backend side: - -```bash -cat /var/log/trendz/trendz.log | grep ERROR -``` ## Next steps {% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} diff --git a/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md b/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md index cdaf4aadda..e9aef77096 100644 --- a/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md +++ b/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md @@ -97,5 +97,3 @@ Use this command to set the pod count: ```text kubectl scale deployment trendz-app-deployment --replicas= ``` - - diff --git a/docs/trendz/install/trndz-upgrade-instructions.md b/docs/trendz/install/trndz-upgrade-instructions.md index f174feb2ba..448d094a29 100644 --- a/docs/trendz/install/trndz-upgrade-instructions.md +++ b/docs/trendz/install/trndz-upgrade-instructions.md @@ -275,7 +275,7 @@ From version 1.14.0, python calculation fields and prediction models could be ut service which can be used only inside the docker. If you are already using Trendz Python Executor via Docker, it's necessary to update it to version 1.14.0 before Trendz update. -You can find detailed instructions on how to do that [here](/docs/trendz/install/python-executor-configuration-linux/#how-to-migrate-trendz-python-executor-1133-to-trendz-python-executor-1140). +You can find detailed instructions on how to do that [here](/docs/trendz/install/python-executor-configuration-linux/#how-to-migrate-trendz-python-executor-1132-to-trendz-python-executor-1140). If you were not using Python Executor before, you need to install it via Docker. You can find detailed instructions on how to do that [here](/docs/trendz/install/python-executor-configuration-linux/#python-executor-standalone-installation). @@ -329,7 +329,7 @@ From version 1.14.0, python calculation fields and prediction models could be ut service which can be used only inside the docker. If you are already using Trendz Python Executor via Docker, it's necessary to update it to version 1.14.0 before Trendz update. -You can find detailed instructions on how to do that [here](/docs/trendz/install/python-executor-configuration-windows/#how-to-migrate-trendz-python-executor-1133-to-trendz-python-executor-1140). +You can find detailed instructions on how to do that [here](/docs/trendz/install/python-executor-configuration-windows/#how-to-migrate-trendz-python-executor-1132-to-trendz-python-executor-1140). If you were not using Python Executor before, you need to install it via Docker. You can find detailed instructions on how to do that [here](/docs/trendz/install/python-executor-configuration-windows/#python-executor-standalone-installation). diff --git a/docs/trendz/install/ubuntu.md b/docs/trendz/install/ubuntu.md index f079806e40..7b7490c816 100644 --- a/docs/trendz/install/ubuntu.md +++ b/docs/trendz/install/ubuntu.md @@ -16,23 +16,32 @@ This guide explains how to install **Trendz Analytics** on **Ubuntu 22.04 LTS** Certain Trendz Analytics features like **predictions, metric explorations, and Python calculation fields** require a Python executor. -The python executor runs **only via Docker**. Even on Ubuntu, Docker is essential to fully utilize all Trendz features. -We recommend following the [Docker (Linux or Mac OS) installation guide](/docs/trendz/install/docker) and using the Docker installation instead of Ubuntu. +The python executor runs **only via Docker**. Even on Ubuntu, Docker is essential to fully utilize all Trendz features. +We recommend following the [Docker (Linux or Mac OS) installation guide](/docs/trendz/install/docker) and using the Docker installation instead of Ubuntu. Proceed here **only** if you have a compelling reason to use a combined Ubuntu + Docker setup. ## Prerequisites -**Hardware requirements** depend on amount of analyzed data and amount of devices connected to the system. -To run Trendz Analytics on a single machine you will need at least 1Gb of free RAM. +### Hardware Requirements -In small and medium installations Trendz can be installed **on the same** server with ThingsBoard. +{% include templates/trendz/install/hardware-requirements.md %} -## Step 1. Install Java 17 (OpenJDK) +### Software Requirements + +{% include templates/trendz/install/docker-requirements-linux.md %} + +## Installation Steps + +### Step 1. Activate Trendz Add-on on ThingsBoard + +{% include templates/trendz/install/activate-trendz-license.md %} + +### Step 2. Install Java 17 (OpenJDK) {% include templates/install/ubuntu-java-install.md %} -## Step 2. Trendz Analytics service installation +### Step 3. Trendz Analytics service installation Download installation package. @@ -48,54 +57,16 @@ sudo dpkg -i trendz-{{ site.release.trendz_ver }}.deb ``` {: .copy-code} -## Step 3. Obtain and configure license key - -We assume you have already chosen subscription plan for Trendz and have license key. If not, please get your [Free Trial license](/pricing/?section=trendz-options&product=trendz-self-managed&solution=trendz-pay-as-you-go) before you proceed. -See [How-to get pay-as-you-go subscription](https://www.youtube.com/watch?v=dK-QDFGxWek){:target="_blank"} for more details. - -Once you get the license secret, you should put it to the trendz configuration file. -Open the file for editing using the following command: - -```bash -sudo nano /etc/trendz/conf/trendz.conf -``` -{: .copy-code} - -Add the following lines to the configuration file and put your license secret: - -```bash -# License secret obtained from ThingsBoard License Portal (https://license.thingsboard.io) -export TRENDZ_LICENSE_SECRET=YOUR_LICENSE_SECRET_HERE -``` - -## Step 4. Configure connection with ThingsBoard Platform - -You can connect Trendz Analytics to the ThingsBoard Community Edition or ThingsBoard Professional Edition. - -Edit ThingsBoard configuration file -```bash -sudo nano /etc/trendz/conf/trendz.conf -``` -{: .copy-code} +### Step 4. Configure Trendz database -Add ThingsBoard REST API URL that would be used for communicating with ThingsBoard Platform. In most cases, when Trendz installed -in the same server with ThingsBoard, API_URL would be **http://localhost:8080**. Otherwise, you should use ThingsBoard domain name. - -```bash -# ThingsBoard URL that will be used by Trendz -export TB_API_URL=http://localhost:8080 -``` -{: .copy-code} - -## Step 5. Configure Trendz database Trendz uses PostgreSQL as a database. You can install PostgreSQL on the same server for Trendz or use managed PostgreSQL service from your cloud vendor. -### PostgreSQL Installation +* **PostgreSQL Installation** {% include templates/install/postgres-install-ubuntu.md %} -### Create Database for Trendz +* **Create Database for Trendz** Connect to the database to create trendz DB: @@ -112,26 +83,26 @@ CREATE DATABASE trendz; Press “Ctrl+D” twice to logout. -### Configure database connection for Trendz +* **Configure database connection for Trendz** -Edit Trendz configuration file +Edit Trendz configuration file -```bash +```bash sudo nano /etc/trendz/conf/trendz.conf -``` +``` {: .copy-code} Add the following lines to the configuration file. Don't forget **to replace** "PUT_YOUR_POSTGRESQL_PASSWORD_HERE" with your **real postgres user password**: ```bash -# DB Configuration +# DB Configuration export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/trendz export SPRING_DATASOURCE_USERNAME=postgres export SPRING_DATASOURCE_PASSWORD=PUT_YOUR_POSTGRESQL_PASSWORD_HERE ``` {: .copy-code} -## Step 6. Run installation script +### Step 5. Run installation script Once Trendz service is installed and DB configuration is updated, you can execute the following script: @@ -140,7 +111,7 @@ sudo /usr/share/trendz/bin/install/install.sh ``` {: .copy-code} -## Step 7. Start Trendz service +### Step 6. Start Trendz service Execute the following command to start Trendz Analytics: @@ -148,124 +119,43 @@ Execute the following command to start Trendz Analytics: sudo service trendz start ``` {: .copy-code} - -Once started, you will be able to open Web UI using the following link: - -```bash -http://localhost:8888/trendz -``` -**Note**: If Trendz is installed on a remote server, you have to replace localhost with the public IP address of -the server or with a domain name. Also, check that port 8888 opened for public access. - - -### Authentication -For first authentication you need to use **Tenant Administrator** credentials from your **ThingsBoard** +### Step 7. Sync ThingsBoard With Trendz -Trendz uses ThingsBoard as an authentication service. During first sign in ThingsBoard service should be also available -to validate credentials. +{% include templates/trendz/install/sync-with-tb.md %} -## Step 8. Install Trendz Python Executor +### Step 8. Install Trendz Python Executor To utilize all Trendz capabilities, such as Trendz Python Calculation Fields or Prediction Models, it is essential to install an additional service: the Trendz Python Executor, which can securely run Python code. You can learn more about how to install it [here](/docs/trendz/install/python-executor-configuration-linux). -## Step 9. HTTPS configuration - -You may want to configure HTTPS access using HAProxy. -This is possible in case you are hosting Trendz in the cloud and have a valid DNS name assigned to your instance. - -**Trendz and ThingsBoard hosted on same server** - -Use this section if HAProxy/Let’s Encrypt already installed in the server and HTTPS enabled for ThingsBoard. - -Open HAProxy configuration file -```bash -sudo nano /etc/haproxy/haproxy.cfg -``` -{: .copy-code} - -Locate **frontend https_in** section, add new access list that will match traffic by domain name and redirect this traffic to Trendz backend: -```bash -acl trendz_http hdr(host) -i new-trendz-domain.com -use_backend tb-trendz if trendz_http -``` - -In the same file register Trendz backend: -```bash -backend tb-trendz - balance leastconn - option tcp-check - option log-health-checks - server tbTrendz1 127.0.0.1:8888 check inter 5s - http-request set-header X-Forwarded-Port %[dst_port] -``` +## Authentication -Generate SSL certificates for new domain: -```bash -sudo certbot-certonly --domain new-trendz-domain.com --email some@email.io -``` +{% include templates/trendz/install/authentication.md %} -Refresh HAProxy configuration: -```bash -sudo haproxy-refresh -``` - -That's it, HTTPS for Trendz UI configured and now you can access it via: -https://new-trendz-domain.com - - -**Fresh installation on new server** - -Please follow this [guide](/docs/user-guide/install/pe/add-haproxy-ubuntu) to install HAProxy and generate valid SSL certificate using Let's Encrypt. - -## Step 10. Host ThingsBoard and Trendz on the same domain -ThingsBoard and Trendz can share same domain name. In this case ThingsBoard web page would be loaded using following link: - -```bash -https://{my-domain}/ -``` - -and Trendz web page would be loaded using following link +## Troubleshooting -```bash -https://{my-domain}/trendz -``` +Trendz logs are stored in the following directory: -For enabling such configuration we have to update HAProxy config to route specific requests to Trendz service. -Open HAProxy configuration file ```bash -sudo nano /etc/haproxy/haproxy.cfg +/var/log/trendz ``` -{: .copy-code} -Locate **frontend https_in** section, add new access list that will match traffic by URL path and redirect this traffic to Trendz backend: +You can issue the following command in order to check if there are any errors on the backend side: ```bash -... -acl trendz_acl path_beg /trendz path_beg /apiTrendz -.... -use_backend tb-trendz if trendz_acl +cat /var/log/trendz/trendz.log | grep ERROR ``` -## Post-installation steps -It is essential to follow these [instructions](/docs/trendz/post-installation-steps) to fully use all features, such as saving telemetry to ThingsBoard and adding Trendz views to dashboards. +## HTTPS configuration -## Troubleshooting +{% include templates/trendz/install/https-configuration.md %} -Trendz logs are stored in the following directory: - -```bash -/var/log/trendz -``` +## Post Installation Steps -You can issue the following command in order to check if there are any errors on the backend side: - -```bash -cat /var/log/trendz/trendz.log | grep ERROR -``` +{% include templates/trendz/install/post-installation-steps.md %} ## Next steps diff --git a/docs/trendz/install/windows.md b/docs/trendz/install/windows.md index c888cd49e4..ee4c2da60e 100644 --- a/docs/trendz/install/windows.md +++ b/docs/trendz/install/windows.md @@ -23,85 +23,53 @@ Proceed here **only** if you have a compelling reason to use a combined Windows ## Prerequisites -**Hardware requirements** depend on amount of analyzed data and amount of devices connected to the system. -To run Trendz Analytics on a single machine you will need at least 1Gb of free RAM. +### Hardware Requirements -In small and medium installations Trendz can be installed **on the same** server with ThingsBoard. +{% include templates/trendz/install/hardware-requirements.md %} -## Step 1. Install Java 17 (OpenJDK) +### Software Requirements -{% include templates/install/windows-java-install.md %} +{% include templates/trendz/install/docker-requirements-linux.md %} -## Step 2. Trendz Analytics service installation +## Installation Steps -Download and extract the package. +### Step 1. Activate Trendz add-on on ThingsBoard -```bash -https://dist.thingsboard.io/trendz-windows-{{ site.release.trendz_ver }}.zip -``` -{: .copy-code} - -**Note:** We assume you have extracted Trendz package to default location: *C:\Program Files (x86)\trendz* +{% include templates/trendz/install/activate-trendz-license.md %} -## Step 3. Obtain and configure license key +### Step 2. Install Java 17 (OpenJDK) -We assume you have already chosen subscription plan for Trendz and have license key. If not, please get your [Free Trial license](/pricing/?section=trendz-options&product=trendz-self-managed&solution=trendz-pay-as-you-go) before you proceed. -See [How-to get pay-as-you-go subscription](https://www.youtube.com/watch?v=dK-QDFGxWek){:target="_blank"} for more details. - -Once you get the license secret, you should put it to the trendz configuration file. -Open the Notepad or other editor as administrator user (right click on the app icon and select "Run as administrator"). -Open the following file for editing (select "All Files" instead of "Text Documents" in file choosing dialog, the encoding is UTF-8): +{% include templates/install/windows-java-install.md %} -```text -C:\Program Files (x86)\trendz\conf\trendz.yml -``` -{: .copy-code} +### Step 3. Trendz Analytics service installation -Scroll to the bottom of the file and locate the following configuration block: +Download and extract the package. -```yml -license: - secret: "${TRENDZ_LICENSE_SECRET:YOUR_LICENSE_SECRET_HERE}" # license secret obtained from ThingsBoard License Portal (https://license.thingsboard.io) +```bash +https://dist.thingsboard.io/trendz-windows-{{ site.release.trendz_ver }}.zip ``` - -## Step 4. Configure connection with ThingsBoard Platform - -You can connect Trendz Analytics to the ThingsBoard Community Edition or ThingsBoard Professional Edition. - -Open the Notepad or other editor as administrator user (right click on the app icon and select "Run as administrator"). -Open the following file for editing (select "All Files" instead of "Text Documents" in file choosing dialog, the encoding is UTF-8): - -```text -C:\Program Files (x86)\trendz\conf\trendz.yml -``` {: .copy-code} -Add ThingsBoard REST API URL that would be used for communicating with ThingsBoard Platform. In most cases, when Trendz installed -in the same server with ThingsBoard, API_URL would be **http://localhost:8080**. Otherwise you should use ThingsBoard domain name. +**Note:** We assume you have extracted Trendz package to default location: *C:\Program Files (x86)\trendz* -```bash -tb.api.url: "${TB_API_URL:http://localhost:8080}" -``` -{: .copy-code} +### Step 4. Configure Trendz database -## Step 5. Configure Trendz database Trendz uses PostgreSQL as a database. You can install PostgreSQL on the same serverfor Trendz or use managed PostgreSQL service from your cloud vendor. -### PostgreSQL Installation +* **PostgreSQL Installation** Download the installation file (PostgreSQL 12.17 or newer releases) [here](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows) and follow the installation instructions. During PostgreSQL installation, you will be prompted for superuser (postgres) password. Don't forget this password. It will be used later. For simplicity, we will substitute it with "postgres". -### Create Database for Trendz +* **Create Database for Trendz** Once installed, launch the "pgAdmin" software and login as superuser (postgres). Open your server and create database "trendz" with owner "postgres". - -### Configure database connection for Trendz +* **Configure database connection for Trendz** Open the Notepad or other editor as administrator user (right click on the app icon and select "Run as administrator"). Open the following file for editing (select "All Files" instead of "Text Documents" in file choosing dialog, the encoding is UTF-8): @@ -125,7 +93,7 @@ datasource: ``` {: .copy-code} -## Step 6. Run installation script +### Step 5. Run installation script Launch windows shell (Command Prompt) as Administrator. Change directory to your Trendz installation directory. @@ -144,7 +112,7 @@ Installing Trendz Analytics... Trendz Analytics installed successfully! ``` -## Step 7. Start Trendz service +### Step 6. Start Trendz service Now let's start the Trendz service! Open the command prompt as an Administrator and execute the following command: @@ -177,22 +145,20 @@ http://localhost:8888/trendz **Note**: If Trendz installed on a remote server, you have to replace localhost with the public IP address of the server or with a domain name. Also, check that port 8888 opened for public access. -### Authentication +### Step 7. Sync ThingsBoard With Trendz -For first authentication you need to use **Tenant Administrator** credentials from your **ThingsBoard** +{% include templates/trendz/install/sync-with-tb.md %} -Trendz uses ThingsBoard as an authentication service. During first sign in ThingsBoard service should be also available -to validate credentials. - -## Step 8. Install Trendz Python Executor +### Step 8. Install Trendz Python Executor To utilize all Trendz capabilities, such as Trendz Python Calculation Fields or Prediction Models, it is essential to install an additional service: the Trendz Python Executor, which can securely run Python code. You can learn more about how to install it [here](/docs/trendz/install/python-executor-configuration-windows). -## Post-installation steps -It is essential to follow these [instructions](/docs/trendz/post-installation-steps) to fully use all features, such as saving telemetry to ThingsBoard and adding Trendz views to dashboards. +## Authentication + +{% include templates/trendz/install/authentication.md %} ## Troubleshooting @@ -243,6 +209,10 @@ you need to create a new inbound rule with Windows Firewall with Advanced Securi ![image](/images/user-guide/install/windows/windows7-firewall-8.png) +## Post Installation Steps + +{% include templates/trendz/install/post-installation-steps.md %} + ## Next steps {% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} diff --git a/docs/trendz/post-installation-steps.md b/docs/trendz/post-installation-steps.md index e2b0220f03..45c9568578 100644 --- a/docs/trendz/post-installation-steps.md +++ b/docs/trendz/post-installation-steps.md @@ -101,11 +101,6 @@ You need to complete the following actions to add all necessary add-ons to Thing - You will see *Latest version installed* afterward. - Read more about the Trendz JS Summary Module [here](/docs/trendz/settings#trendz-js-summary-module). -- **Trendz Settings:** - - Click the **Update Settings** button. - - You will see *Settings are up to date* afterward. - - Read more about Trendz Settings [here](/docs/trendz/settings#trendz-settings). - ## Link to ThingsBoard To simplify the process of adding Trendz views to ThingsBoard dashboards, we have introduced the ability to open the dashboard where the view was added in a new tab. @@ -121,12 +116,3 @@ Configure the link to your ThingsBoard instance in Settings to use this feature. After this, you can open your modified or newly created dashboard in a new tab by enabling the Open dashboard in a separate window field. ![image](/images/trendz/open-dashboard-in-separate-tab.png) - -## AI Assistant - -To use AI Assistant feature in Trendz, you need to configure it first. To enable your own AI model, go to **Settings → General → AI Assistant** in Trendz. -There, you can enable the **Use own model** option, select an AI provider (OpenAI, Amazon Bedrock, Google or Custom), and enter the required API credentials. - -For more details on configuring AI Assistant, you can read more [here](/docs/trendz/custom-ai-model-configuration.md). - -![image](/images/trendz/ai/settings/use-own-model-1.png) diff --git a/docs/trendz/settings.md b/docs/trendz/settings.md index 811672a147..22e8b12328 100644 --- a/docs/trendz/settings.md +++ b/docs/trendz/settings.md @@ -131,23 +131,6 @@ Check the status under the **Trendz JS Summary Module** section: - If not installed - uploads the module. - If outdated - updates it. -### Trendz Settings - -Needed for Trendz solution templates and AI Summary rule nodes. - -Check the status under the **Trendz Settings** section: - -- **Not installed** – Settings are missing. -- **Update required** – A newer version is available. -- **Settings are actual** – All up to date. - -**Action Steps:** - -- If status is **Settings are actual** – no changes needed. -- Otherwise, click the **Upload Settings** button: - - If not installed - uploads the settings. - - If outdated - updates them. - ### AI Settings Here it's possible to configure the AI Model for the next features: diff --git a/docs/trendz/what-is-trendz.md b/docs/trendz/what-is-trendz.md index 49e20269dd..d1064cc889 100644 --- a/docs/trendz/what-is-trendz.md +++ b/docs/trendz/what-is-trendz.md @@ -1,11 +1,13 @@ --- layout: docwithnav-trendz -title: What is Trendz Analytics -description: What is Trendz Analytics +title: What is Trendz Analytics? +description: Trendz key features and advantages for the advanced telemetry analytics. --- -The ThingsBoard **Trendz** is an Analytics Platform that converts the IoT dataset into insights and simplifies the decision-making process. +The **Trendz Analytics** is an add-on for ThingsBoard Platform that provides toolbox for advanced exploration, +analyzation, processing and prediction any device or asset specific information from ThingsBoard. With Trendz you can: +- Easily explore any metric from any device - Analyse behavior patterns, outliers and trends - Predict system behavior and react beforehand - Identify anomalies in time series data diff --git a/images/trendz/cloud-1-preview.webp b/images/trendz/cloud-1-preview.webp deleted file mode 100644 index a4260e2cd0d03faad2462bbb3dfe1369baf597d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63940 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%0D0R-yPbMA$%7I2RQAgZlqCqytZ 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

&r=5jD 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�o^rE4d+$w`lN8OR%~Wx>*#NyrDgr*gb;;#HonZ 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%0D0R-yPbMA$%7I2RQAgZlqCqytZ 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

&r=5jD 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�o^rE4d+$w`lN8OR%~Wx>*#NyrDgr*gb;;#HonZ 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 z Date: Tue, 9 Dec 2025 17:04:13 +0200 Subject: [PATCH 02/31] Trendz 1.15.0 docs (2) --- _config.yml | 2 +- .../installation-options-trendz.yml | 2 +- _data/pages_info.yml | 7 +- _data/trendz/installation.yml | 8 +- .../install/thingsboard-requirements.md | 2 +- docs/trendz/connect-thingsboard.md | 93 ++---- docs/trendz/install/docker-windows.md | 302 ++++-------------- docs/trendz/install/docker.md | 292 +++-------------- docs/trendz/install/kubernetes.md | 4 +- .../install/old-docker-migrate-windows.md | 8 + docs/trendz/install/old-docker-migrate.md | 101 ++++++ .../python-executor-configuration-linux.md | 286 ----------------- ...ws.md => python-executor-configuration.md} | 157 ++++----- .../1.15.0/trendz-centos-download.sh | 1 + .../1.15.0/trendz-centos-installation.sh | 1 + .../1.15.0/trendz-ubuntu-download.sh | 1 + .../1.15.0/trendz-ubuntu-installation.sh | 1 + docs/trendz/install/rhel.md | 5 +- .../trndz-upgrade-instructions-kubernetes.md | 28 +- .../install/trndz-upgrade-instructions.md | 121 ++++++- docs/trendz/install/ubuntu.md | 5 +- docs/trendz/install/windows.md | 5 +- docs/trendz/what-is-trendz.md | 3 +- 23 files changed, 479 insertions(+), 956 deletions(-) create mode 100644 docs/trendz/install/old-docker-migrate-windows.md create mode 100644 docs/trendz/install/old-docker-migrate.md delete mode 100644 docs/trendz/install/python-executor-configuration-linux.md rename docs/trendz/install/{python-executor-configuration-windows.md => python-executor-configuration.md} (53%) create mode 100644 docs/trendz/install/resources/1.15.0/trendz-centos-download.sh create mode 100644 docs/trendz/install/resources/1.15.0/trendz-centos-installation.sh create mode 100644 docs/trendz/install/resources/1.15.0/trendz-ubuntu-download.sh create mode 100644 docs/trendz/install/resources/1.15.0/trendz-ubuntu-installation.sh diff --git a/_config.yml b/_config.yml index cf04a291d2..4fa189661f 100644 --- a/_config.yml +++ b/_config.yml @@ -102,4 +102,4 @@ release: pe_dart_client_ver: 4.0.0 broker_full_ver: 2.2.0 broker_branch: release-2.2.0 - trendz_ver: 1.14.0 + trendz_ver: 1.15.0 diff --git a/_data/installation-options/installation-options-trendz.yml b/_data/installation-options/installation-options-trendz.yml index 95308165b9..996119de2b 100644 --- a/_data/installation-options/installation-options-trendz.yml +++ b/_data/installation-options/installation-options-trendz.yml @@ -45,7 +45,7 @@ trendz: imageWidth: 35 imageHeight: 36 5: - title: ThingsBoard Cloud + title: Cloud description: Activate Trendz Analytics with your ThingsBoard Cloud account. link: /docs/trendz/install/cloud/ icon: /images/install/platform/trendz-cloud.svg diff --git a/_data/pages_info.yml b/_data/pages_info.yml index 9ddcf02a4d..b6cad5234f 100644 --- a/_data/pages_info.yml +++ b/_data/pages_info.yml @@ -4552,11 +4552,8 @@ "/docs/trendz/install/kubernetes/": url: "/docs/trendz/install/kubernetes/" redirect_from: [] -"/docs/trendz/install/python-executor-configuration-linux/": - url: "/docs/trendz/install/python-executor-configuration-linux/" - redirect_from: [] -"/docs/trendz/install/python-executor-configuration-windows/": - url: "/docs/trendz/install/python-executor-configuration-windows/" +"/docs/trendz/install/python-executor-configuration/": + url: "/docs/trendz/install/python-executor-configuration/" redirect_from: [] "/docs/trendz/install/rhel/": url: "/docs/trendz/install/rhel/" diff --git a/_data/trendz/installation.yml b/_data/trendz/installation.yml index d30c76262d..32f443a365 100644 --- a/_data/trendz/installation.yml +++ b/_data/trendz/installation.yml @@ -3,7 +3,7 @@ abstract: "Documentation for installation and configuration of Trendz Analytics. toc: - title: Installation options path: /docs/trendz/install/installation-options/ -- title: ThingsBoard Cloud +- title: Cloud path: /docs/trendz/install/cloud/ - title: On-premises section: @@ -26,10 +26,6 @@ toc: - title: Kubernetes path: /docs/trendz/install/trndz-upgrade-instructions-kubernetes/ - title: Python Executor Configuration - section: - - title: Windows - path: /docs/trendz/install/python-executor-configuration-windows/ - - title: Linux or Mac OS - path: /docs/trendz/install/python-executor-configuration-linux/ + path: /docs/trendz/install/python-executor-configuration/ - title: Configuration properties path: /docs/trendz/configuration-properties/ diff --git a/_includes/templates/trendz/install/thingsboard-requirements.md b/_includes/templates/trendz/install/thingsboard-requirements.md index d92787f998..a227b34189 100644 --- a/_includes/templates/trendz/install/thingsboard-requirements.md +++ b/_includes/templates/trendz/install/thingsboard-requirements.md @@ -1 +1 @@ -* ThingsBoard version 4.3.0 or newer. In case you have ThingsBoard version 4.2.1, you could follow next guide. \ No newline at end of file +* ThingsBoard version 4.3.0 or newer. In case you have ThingsBoard version 4.2.1 or older, you could connect Trendz to ThingsBoard following the next [guide](/docs/trendz/connect-thingsboard). diff --git a/docs/trendz/connect-thingsboard.md b/docs/trendz/connect-thingsboard.md index 1346624c92..0e367fb7cc 100644 --- a/docs/trendz/connect-thingsboard.md +++ b/docs/trendz/connect-thingsboard.md @@ -9,84 +9,57 @@ description: Connect Trendz Analytics platform to the ThingsBoard * TOC {:toc} +## Trendz with ThingsBoard 4.2.1 or Older -## Connect to ThingsBoard -You can connect Trendz Analytics to the ThingsBoard Community Edition or ThingsBoard Professional Edition. +This guide explains how to connect Trendz with ThingsBoard 4.2.1 or older. We strongly recommend updating ThingsBoard +to the latest version to access all Trendz and ThingsBoard features. -
+To install Trendz for ThingsBoard 4.2.1 or older: -By default, Trendz expects that ThingsBoard is hosted on the same instance and accessible via an URL: - - - http://localhost:9090 - -If your ThingsBoard installation is hosted on another instance/port - you have to update config with correct value: +1. Start from step 2 of the installation guide. +2. Before the `Start Trendz service` step, configure `TRENDZ_LICENSE_SECRET` and `TB_API_URL`. +3. Complete all other steps, except for `Sync ThingsBoard With Trendz`. +4. Perform [post-installation steps](/docs/trendz/post-installation-steps). -Open Trendz configuration file: - -``` -sudo nano /usr/share/trendz/conf/trendz.conf -``` - -And update this property to the correct value: - -```yml -export TB_API_URL=http://localhost:9090 -``` - -For docker installations - update environment variable ``TB_API_URL`` with the correct value. - -## Authentication and Security -Trendz uses ThingsBoard as an authentication service. Any Tenant Administrator or Customer User can sign in into Trendz UI using their login\password that they use for authentication in the ThingsBoard. - -Same security restrictions that are configured on the ThingsBoard works in the Trendz Analytics. - -- **Tenant Administrator** has access to all Devices/Assets -- **Customer user** has access only to those Devices/Assets that they have permissions to view +### Configure License Secret +To interact with ThingsBoard 4.2.1 or older, you need a Trendz license secret. If you do not have one, obtain it from the [ThingsBoard support team](//TODO find out where we have ThingsBoard support team). -## Topology Discovery -Trendz Topology represents the business model of Devices/Assets that was created in ThingsBoard. -Topology defines dimensions/fields that used for building visualizations and relation between Devices/Assets. -Here are the core components of Trendz Topology: +Edit the Trendz configuration file: +```bash +sudo nano /etc/trendz/conf/trendz.conf +``` -**Business Entity** - Definition of a group of Devices or Assets with same Device Type/Asset Type. Each Business Entity has: - -- **Criteria** - General properties that define how Devices/Assets fetched from the ThingsBoard -- **Business Entity Field** - Represent field that is used during building visualizations. Field contains data type, label and query parameters used during fetching data from The thingsBoard. -Here is a list of supported fields: - - Entity Name - the name of the Device or Asset - - Owner - who own device (administrator/customer) - - Attribute - - Telemetry -- **Relations** - configured relations between Business Entities and their properties. Trendz Relations represent ThingsBoard relations between Devices and Assets +Add the following line and replace `YOUR_LICENSE_SECRET_HERE` with your license key: -### First Topology discovery +```bash +export TRENDZ_LICENSE_SECRET=YOUR_LICENSE_SECRET_HERE +``` +For Docker installations, update the `TRENDZ_LICENSE_SECRET` environment variable with the correct value. -After the first sign-in user should perform initial Topology Discovery. During this process, Trendz will analyze all Devices/Assets available in the ThingsBoard, their attributes/telemetry and all relations between them. -As a result, Trendz will extract and save the collection of Business Entities. You can view and modify them on the `Settings` page. +### Configure TB_API_URL -![image](/images/trendz/first-discovery.png) +By default, Trendz assumes ThingsBoard is hosted on the same instance and accessible at: -
+``` +http://localhost:9090 +``` -![image](/images/trendz/discover-results.png) - -### Manual Topology rediscovery -Business Entity does not represent a single Device or Asset, but the query that used for fetching Device/Asset from the ThingsBoard. It means that you do not need to update topology if new Devices Assets with the same type were added on the ThingsBoard. +If ThingsBoard is hosted on a different instance or port, update the configuration accordingly: -When new Device/Asset types were added or attribute/telemetry with a new key was created in the ThingsBoard - you should update Topology. +```bash +sudo nano /usr/share/trendz/conf/trendz.conf +``` +Set the correct URL: -Manual Topology Rediscovery will scan ThingsBoard again, detect modifications and update collection of Business Entities with required settings. -You can trigger this process on the `Settings` page by pressing `Refresh Topology`. +```yml +export TB_API_URL=http://localhost:9090 +``` - -### Manual Modification -Another option for updating topology is a manual modification of Business Entity properties. You can have as many Business Entities with similar properties as you want. -It may be useful in case when the same devices/assets represent different aspects of business solution. For example, single devices can monitor the environment and submit debug events for troubleshooting. -By separating debug events from environment measurements into isolated Business Entities it becomes easier to build visualizations focused on a single aspect of your solution. +For Docker installations, update the `TB_API_URL` environment variable with the correct value. ## Next Steps diff --git a/docs/trendz/install/docker-windows.md b/docs/trendz/install/docker-windows.md index 263239d8f5..2169b7bc62 100644 --- a/docs/trendz/install/docker-windows.md +++ b/docs/trendz/install/docker-windows.md @@ -10,16 +10,16 @@ description: Installing ThingsBoard Trendz Analytics using Docker (Windows) * TOC {:toc} - This guide will help you to install and start Trendz Analytics using Docker on Windows. ## Prerequisites {% include templates/trendz/install/docker-requirements-windows.md %} +{% include templates/trendz/install/thingsboard-requirements.md %} ## Installation Steps -### Step 1. Activate Trendz Add-on on ThingsBoard +### Step 1. Activate Trendz Analytics {% include templates/trendz/install/activate-trendz-license.md %} @@ -36,29 +36,25 @@ Add the following configuration to the YAML file. ```yml services: - mytrendz: - depends_on: - - postgres - - mypyexecutor + trendz: restart: always - image: "thingsboard/trendz:{{ site.release.trendz_ver }}" + image: "thingsboard/trendz:1.14.0" ports: - "8888:8888" environment: - TRENDZ_LICENSE_INSTANCE_DATA_FILE: /data/license.data - SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/trendz + SPRING_DATASOURCE_URL: jdbc:postgresql://trendz-postgres:5432/trendz SPRING_DATASOURCE_USERNAME: postgres SPRING_DATASOURCE_PASSWORD: postgres - SCRIPT_ENGINE_PROVIDER: DOCKER_CONTAINER - SCRIPT_ENGINE_DOCKER_PROVIDER_URL: mypyexecutor:8181 + SCRIPT_ENGINE_DOCKER_PROVIDER_URL: trendz-python-executor:8181 SCRIPT_ENGINE_TIMEOUT: 30000 volumes: - - ./.mytrendz-conf:/trendz-config-files - - ./.mytrendz-data:/data - - ./.mytrendz-logs:/var/log/trendz - mypyexecutor: + - trendz-conf:/trendz-config-files + - trendz-data:/data + depends_on: + - trendz-postgres + trendz-python-executor: restart: always - image: "thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}" + image: "thingsboard/trendz-python-executor:1.14.0" ports: - "8181:8181" environment: @@ -68,218 +64,58 @@ services: THROTTLING_THREAD_POOL_SIZE: 6 NETWORK_BUFFER_SIZE: 5242880 volumes: - - ./.mytrendz-python-conf:/python-executor-config-files - - ./.mytrendz-python-data:/data - - ./.mytrendz-python-logs:/var/log/python-executor - postgres: + - trendz-python-executor-conf:/python-executor-config-files + - trendz-python-executor-data:/data + trendz-postgres: restart: always - image: "postgres:15" + image: "postgres:16" ports: - - "5432" + - "5432:5432" environment: POSTGRES_DB: trendz POSTGRES_PASSWORD: postgres volumes: - - ./.mytrendz-data/db:/var/lib/postgresql/data + - trendz-postgres-data:/var/lib/postgresql/data +volumes: + trendz-conf: + name: tb-trendz-conf + driver: local + trendz-data: + name: tb-trendz-data + driver: local + trendz-python-executor-conf: + name: tb-python-executor-conf + driver: local + trendz-python-executor-data: + name: tb-python-executor-data + driver: local + trendz-postgres-data: + name: tb-trendz-postgres-data + driver: local ``` {: .copy-code} Where: - `8888:8888` - connect local port 8888 to exposed internal HTTP port 8888 -- `./.mytrendz-conf:/trendz-config-files` - mounts the volume `./.mytrendz-conf` to Trendz directory with the configuration files -- `./.mytrendz-data:/data` - mounts the volume `./.mytrendz-data` to Trendz data directory -- `./.mytrendz-data/db:/var/lib/postgresql/data` - mounts the volume `./.mytrendz-data/db` to Postgres data directory -- `./.mytrendz-logs:/var/log/trendz` - mounts the volume `./.mytrendz-logs` to Trendz logs directory -- `mytrendz` - name of the Trendz Docker service +- `trendz-conf:/trendz-config-files` - mounts the volume `trendz-conf` to Trendz directory with the configuration files +- `trendz-data:/data` - mounts the volume `trendz-data` to Trendz data directory +- `trendz-postgres-data:/var/lib/postgresql/data` - mounts the volume `trendz-postgres-data` to Postgres data directory +- `trendz` - name of the Trendz Docker service - `--restart always` - automatically start Trendz in case of system reboot and restart in case of failure. - `thingsboard/trendz:{{ site.release.trendz_ver }}` - Trendz docker image - `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Trendz python script executor docker image - `SCRIPT_ENGINE_TIMEOUT` - Python script execution timeout -### Step 3. Configuration files setup - -Before starting the services, you need to create the configuration directories and files. -Execute the following commands in `PowerShell` to create the necessary folders and write the configuration files: - -1. **Create directories** -```powershell -New-Item -ItemType Directory -Force -Path .\.mytrendz-conf -New-Item -ItemType Directory -Force -Path .\.mytrendz-data -New-Item -ItemType Directory -Force -Path .\.mytrendz-logs -New-Item -ItemType Directory -Force -Path .\.mytrendz-python-conf -New-Item -ItemType Directory -Force -Path .\.mytrendz-python-data -New-Item -ItemType Directory -Force -Path .\.mytrendz-python-logs -``` -{: .copy-code} - -2. **Create Trendz configuration files**: - -* `.\.mytrendz-conf\trendz.conf` -```powershell -Set-Content -Path .\.mytrendz-conf\trendz.conf -Value @' -export LOG_FILENAME=trendz.out -export LOADER_PATH=/usr/share/trendz/conf - -export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb -Dinstall.data_dir=/usr/share/trendz/data" -export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/trendz/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" -export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" -export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" -export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" -export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" - -export JAVA_OPTS="$JAVA_OPTS -Xms2000m -Xmx2000m" -export JAVA_OPTS="$JAVA_OPTS -Xss1m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=256m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=256m" -export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" -'@ -``` -{: .copy-code} -* `.\.mytrendz-conf\logback.xml` -```powershell -Set-Content -Path .\.mytrendz-conf\logback.xml -Value @' - - - - - /var/log/trendz/trendz.log - - /var/log/trendz/trendz.%d{yyyy-MM-dd}.%i.log - 100MB - 30 - 3GB - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - - - - - -'@ -``` -{: .copy-code} +### Step 3. Start Trendz service -3. **Create Python Executor configuration files**: -* `.\.mytrendz-python-conf\python-executor.conf` -```powershell -Set-Content -Path .\.mytrendz-python-conf\python-executor.conf -Value @' -export LOG_FILENAME=python-executor.out -export LOADER_PATH=/usr/share/python-executor/conf - -export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb" -export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/python-executor/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" -export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" -export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" -export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" -export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" - -export JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=128m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=128m" -export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" -'@ -``` -{: .copy-code} -* `.\.mytrendz-python-conf\logback.xml` -```powershell -Set-Content -Path .\.mytrendz-python-conf\logback.xml -Value @' - - - - - /var/log/python-executor/python-executor.log - - /var/log/python-executor/python-executor.%d{yyyy-MM-dd}.%i.log - 100MB - 30 - 3GB - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - - - - - - - -'@ -``` -{: .copy-code} -* `.\.mytrendz-python-conf\requirements.txt` -```powershell -Set-Content -Path .\.mytrendz-python-conf\requirements.txt -Value @' -# Mounted -pandas==2.0.3 -numpy==1.24.3 -scikit-learn==1.3.0 -matplotlib==3.7.2 -seaborn==0.12.2 -requests==2.31.0 -pytz==2023.3 -plotly==5.15.0 -statsmodels==0.14.0 -scipy==1.11.1 -joblib==1.3.2 -'@ -``` -{: .copy-code} - -### Step 4. Running service - -Set the terminal in the directory which contains the `docker-compose.yml` file and execute the following commands to up this docker compose directly: - -```powershell -docker compose up -d -docker compose logs -f mytrendz -``` -{: .copy-code} +{% assign serviceName = "trendz" %} +{% include templates/install/docker/docker-compose-up.md %} -After executing this command you can open `http://{your-host-ip}:8888` in your browser (for ex. `http://localhost:8888`). You should see Trendz login page. +After executing this command you can open `http://{your-host-ip}:8888` in your browser (for ex. `http://localhost:8888`). +You should see Trendz login page. -### Step 5. Sync ThingsBoard With Trendz +### Step 4. Sync ThingsBoard With Trendz {% include templates/trendz/install/sync-with-tb.md %} @@ -295,53 +131,39 @@ After executing this command you can open `http://{your-host-ip}:8888` in your b ## Upgrade Trendz Service -Below is an example of how to upgrade from 1.14.0 to {{ site.release.trendz_ver }} +{% capture upgrade_version_by_version%} +**Note, that you can upgrade Trendz from any version to the latest at once (for example, 1.2.0 -> {{ site.release.trendz_ver }} ,etc).** +{% endcapture %} +{% include templates/info-banner.md content=upgrade_version_by_version %} + +Below is an example of how to upgrade from any Trendz version to {{ site.release.trendz_ver }} * Create a dump of your database: -```powershell -docker compose exec postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump" +```bash +docker compose exec trendz-postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump" ``` {: .copy-code} -{% capture dockerComposeStandalone %} -If you still rely on Docker Compose as docker-compose (with a hyphen) execute next command: -
**docker-compose exec postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump"** -{% endcapture %} -{% include templates/info-banner.md content=dockerComposeStandalone %} - -* Set upgradeversion variable to your **previous** Trendz version. - -```powershell -docker compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion" -``` -{: .copy-code} +When a new Trendz release is available, follow these steps to update your installation without losing data: -{% capture dockerComposeStandalone %} -If you still rely on Docker Compose as docker-compose (with a hyphen) execute next command: -
**docker-compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion"** +{% capture old_manifests_info %} +**If you are upgrading using previous version of deployment files, make sure to follow steps described in this [instruction](/docs/trendz/install/old-docker-migrate-windows/) first.** {% endcapture %} -{% include templates/info-banner.md content=dockerComposeStandalone %} +{% include templates/warn-banner.md content=old_manifests_info %} -* After this you need to update docker-compose.yml as in [Step 2](#docker-compose-setup) but with {{ site.release.trendz_ver }} instead of 1.14.0: +1. Change the version of the `thingsboard/trendz` and `thingsboard/trendz-python-executor` in the `docker-compose.yml` file to the {{ site.release.trendz_ver }}. -* Restart Trendz container +2. Execute the following commands: -```powershell -docker compose stop mytrendz +```bash +docker pull thingsboard/trendz:{{ site.release.trendz_ver }} +docker compose stop trendz +docker compose run --rm -e UPGRADE_TRENDZ=true trendz docker compose up -d ``` {: .copy-code} -{% capture dockerComposeStandalone %} -If you still rely on Docker Compose as docker-compose (with a hyphen) here is the list of the above commands: -
**docker-compose stop mytrendz** -
**docker-compose up -d** -{% endcapture %} -{% include templates/info-banner.md content=dockerComposeStandalone %} - -To upgrade Trendz to the latest version those steps can be done immediately from old version to the latest without doing it **for each intermediate version** (as opposed to ThingsBoard, where this is required). - ## Troubleshooting ### DNS issues diff --git a/docs/trendz/install/docker.md b/docs/trendz/install/docker.md index 5d43d64a1b..82e2511a48 100644 --- a/docs/trendz/install/docker.md +++ b/docs/trendz/install/docker.md @@ -16,10 +16,11 @@ This guide will help you to install and start Trendz Analytics using Docker on L ## Prerequisites {% include templates/trendz/install/docker-requirements-linux.md %} +{% include templates/trendz/install/thingsboard-requirements.md %} ## Installation Steps -### Step 1. Activate Trendz Add-on on ThingsBoard +### Step 1. Activate Trendz Analytics {% include templates/trendz/install/activate-trendz-license.md %} @@ -37,27 +38,24 @@ Add the following configuration to the YAML file. ```yml services: trendz: - depends_on: - - postgres restart: always - image: "thingsboard/trendz:{{ site.release.trendz_ver }}" + image: "thingsboard/trendz:1.14.0" ports: - "8888:8888" environment: - TRENDZ_LICENSE_INSTANCE_DATA_FILE: /data/license.data - SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/trendz + SPRING_DATASOURCE_URL: jdbc:postgresql://trendz-postgres:5432/trendz SPRING_DATASOURCE_USERNAME: postgres SPRING_DATASOURCE_PASSWORD: postgres - SCRIPT_ENGINE_PROVIDER: DOCKER_CONTAINER SCRIPT_ENGINE_DOCKER_PROVIDER_URL: trendz-python-executor:8181 SCRIPT_ENGINE_TIMEOUT: 30000 volumes: - - ~/.mytrendz-conf:/trendz-config-files - - ~/.mytrendz-data:/data - - ~/.mytrendz-logs:/var/log/trendz + - trendz-conf:/trendz-config-files + - trendz-data:/data + depends_on: + - trendz-postgres trendz-python-executor: restart: always - image: "thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}" + image: "thingsboard/trendz-python-executor:1.14.0" ports: - "8181:8181" environment: @@ -67,220 +65,50 @@ services: THROTTLING_THREAD_POOL_SIZE: 6 NETWORK_BUFFER_SIZE: 5242880 volumes: - - ~/.mytrendz-python-conf:/python-executor-config-files - - ~/.mytrendz-python-data:/data - - ~/.mytrendz-python-logs:/var/log/python-executor - postgres: + - trendz-python-executor-conf:/python-executor-config-files + - trendz-python-executor-data:/data + trendz-postgres: restart: always - image: "postgres:15" + image: "postgres:16" ports: - - "5432" + - "5432:5432" environment: POSTGRES_DB: trendz POSTGRES_PASSWORD: postgres volumes: - - ~/.mytrendz-data/db:/var/lib/postgresql/data + - trendz-postgres-data:/var/lib/postgresql/data +volumes: + trendz-conf: + name: trendz-conf + driver: local + trendz-data: + name: trendz-data + driver: local + trendz-python-executor-conf: + name: trendz-python-executor-conf + driver: local + trendz-python-executor-data: + name: trendz-python-executor-data + driver: local + trendz-postgres-data: + name: trendz-postgres-data + driver: local ``` {: .copy-code} Where: - `8888:8888` - connect local port 8888 to exposed internal HTTP port 8888 -- `~/.mytrendz-conf:/trendz-config-files` - mounts the volume `~/.mytrendz-conf` to Trendz directory with the configuration files -- `~/.mytrendz-data:/data` - mounts the volume `~/.mytrendz-data` to Trendz data directory -- `~/.mytrendz-data/db:/var/lib/postgresql/data` - mounts the volume `~/.mytrendz-data/db` to Postgres data directory -- `~/.mytrendz-logs:/var/log/trendz` - mounts the volume `~/.mytrendz-logs` to Trendz logs directory -- `mytrendz` - name of the Trendz Docker service +- `trendz-conf:/trendz-config-files` - mounts the volume `trendz-conf` to Trendz directory with the configuration files +- `trendz-data:/data` - mounts the volume `trendz-data` to Trendz data directory +- `trendz-postgres-data:/var/lib/postgresql/data` - mounts the volume `trendz-postgres-data` to Postgres data directory +- `trendz` - name of the Trendz Docker service - `--restart always` - automatically start Trendz in case of system reboot and restart in case of failure. - `thingsboard/trendz:{{ site.release.trendz_ver }}` - Trendz docker image - `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Trendz python script executor docker image - `SCRIPT_ENGINE_TIMEOUT` - Python script execution timeout -### Step 3. Configuration files setup - -Before starting the services, you need to create the configuration directories and files. -Execute the following commands to create the necessary folders and write the configuration files: - -1. **Create directories** -```bash -mkdir -p ~/.mytrendz-conf -mkdir -p ~/.mytrendz-data -mkdir -p ~/.mytrendz-logs -mkdir -p ~/.mytrendz-python-conf -mkdir -p ~/.mytrendz-python-data -mkdir -p ~/.mytrendz-python-logs -mkdir -p ~/.mytrendz-logs/python-executor-logs -``` -{: .copy-code} - -2. **Create Trendz configuration files**: - -* `~/.mytrendz-conf/trendz.conf` -```bash -cat <<'EOF' > ~/.mytrendz-conf/trendz.conf -export LOG_FILENAME=trendz.out -export LOADER_PATH=/usr/share/trendz/conf - -export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb -Dinstall.data_dir=/usr/share/trendz/data" -export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/trendz/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" -export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" -export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" -export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" -export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" - -export JAVA_OPTS="$JAVA_OPTS -Xms2000m -Xmx2000m" -export JAVA_OPTS="$JAVA_OPTS -Xss1m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=256m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=256m" -export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" -EOF -``` -{: .copy-code} -* `~/.mytrendz-conf/logback.xml` -```bash -cat <<'EOF' > ~/.mytrendz-conf/logback.xml - - - - - /var/log/trendz/trendz.log - - /var/log/trendz/trendz.%d{yyyy-MM-dd}.%i.log - 100MB - 30 - 3GB - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - - - - - -EOF -``` -{: .copy-code} - -3. **Create Python Executor configuration files**: -* `~/.mytrendz-python-conf/python-executor.conf` -```bash -cat <<'EOF' > ~/.mytrendz-python-conf/python-executor.conf -export LOG_FILENAME=python-executor.out -export LOADER_PATH=/usr/share/python-executor/conf - -export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb" -export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/python-executor/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" -export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" -export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" -export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" -export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" - -export JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=128m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=128m" -export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" -EOF -``` -{: .copy-code} -* `~/.mytrendz-python-conf/logback.xml` -```bash -cat <<'EOF' > ~/.mytrendz-python-conf/logback.xml - - - - - /var/log/python-executor/python-executor.log - - /var/log/python-executor/python-executor.%d{yyyy-MM-dd}.%i.log - 100MB - 30 - 3GB - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - - - - - - - -EOF -``` -{: .copy-code} -* `~/.mytrendz-python-conf/requirements.txt` -```bash -cat <<'EOF' > ~/.mytrendz-python-conf/requirements.txt -# Mounted -pandas==2.0.3 -numpy==1.24.3 -scikit-learn==1.3.0 -matplotlib==3.7.2 -seaborn==0.12.2 -requests==2.31.0 -pytz==2023.3 -plotly==5.15.0 -statsmodels==0.14.0 -scipy==1.11.1 -joblib==1.3.2 -EOF -``` -{: .copy-code} - -4. **Set permissions:** - Once the files are created, execute the following commands to change the owner of the newly created folders to the docker container user (`799`). - Note: This command requires sudo permissions: -```bash -sudo chown -R 799:799 ~/.mytrendz-conf -sudo chown -R 799:799 ~/.mytrendz-data -sudo chown -R 799:799 ~/.mytrendz-logs -sudo chown -R 799:799 ~/.mytrendz-python-conf -sudo chown -R 799:799 ~/.mytrendz-python-data -sudo chown -R 799:799 ~/.mytrendz-python-logs -``` -{: .copy-code} - -### Step 4. Running service +### Step 3. Start Trendz service {% assign serviceName = "trendz" %} {% include templates/install/docker/docker-compose-up.md %} @@ -288,7 +116,7 @@ sudo chown -R 799:799 ~/.mytrendz-python-logs After executing this command you can open `http://{your-host-ip}:8888` in your browser (for ex. `http://localhost:8888`). You should see Trendz login page. -### Step 5. Sync ThingsBoard With Trendz +### Step 4. Sync ThingsBoard With Trendz {% include templates/trendz/install/sync-with-tb.md %} @@ -304,53 +132,39 @@ You should see Trendz login page. ## Upgrade Trendz Service -Below is an example of how to upgrade from 1.14.0 to {{ site.release.trendz_ver }} +{% capture upgrade_version_by_version%} +**Note, that you can upgrade Trendz from any version to the latest at once (for example, 1.2.0 -> {{ site.release.trendz_ver }} ,etc).** +{% endcapture %} +{% include templates/info-banner.md content=upgrade_version_by_version %} + +Below is an example of how to upgrade from any Trendz version to {{ site.release.trendz_ver }} * Create a dump of your database: ```bash -docker compose exec postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump" +docker compose exec trendz-postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump" ``` {: .copy-code} -{% capture dockerComposeStandalone %} -If you still rely on Docker Compose as docker-compose (with a hyphen) execute next command: -
**docker-compose exec postgres sh -c "pg_dump -U postgres trendz > /var/lib/postgresql/data/trendz_dump"** -{% endcapture %} -{% include templates/info-banner.md content=dockerComposeStandalone %} - -* Set upgradeversion variable to your **previous** Trendz version. - -```bash -docker compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion" -``` -{: .copy-code} +When a new Trendz release is available, follow these steps to update your installation without losing data: -{% capture dockerComposeStandalone %} -If you still rely on Docker Compose as docker-compose (with a hyphen) execute next command: -
**docker-compose exec mytrendz sh -c "echo '1.14.0' > /data/.upgradeversion"** +{% capture old_manifests_info %} +**If you are upgrading using previous version of deployment files, make sure to follow steps described in this [instruction](/docs/trendz/install/old-docker-migrate/) first.** {% endcapture %} -{% include templates/info-banner.md content=dockerComposeStandalone %} +{% include templates/warn-banner.md content=old_manifests_info %} -* After this you need to update docker-compose.yml as in [Step 2](#docker-compose-setup) but with {{ site.release.trendz_ver }} instead of 1.14.0: +1. Change the version of the `thingsboard/trendz` and `thingsboard/trendz-python-executor` in the `docker-compose.yml` file to the {{ site.release.trendz_ver }}. -* Restart Trendz container +2. Execute the following commands: ```bash -docker compose stop mytrendz +docker pull thingsboard/trendz:{{ site.release.trendz_ver }} +docker compose stop trendz +docker compose run --rm -e UPGRADE_TRENDZ=true trendz docker compose up -d ``` {: .copy-code} -{% capture dockerComposeStandalone %} -If you still rely on Docker Compose as docker-compose (with a hyphen) here is the list of the above commands: -
**docker-compose stop mytrendz** -
**docker-compose up -d** -{% endcapture %} -{% include templates/info-banner.md content=dockerComposeStandalone %} - -To upgrade Trendz to the latest version those steps can be done immediately from old version to the latest without doing it **for each intermediate version** (as opposed to ThingsBoard, where this is required). - ## Troubleshooting ### DNS issues diff --git a/docs/trendz/install/kubernetes.md b/docs/trendz/install/kubernetes.md index 55e0202282..d6340f4cd2 100644 --- a/docs/trendz/install/kubernetes.md +++ b/docs/trendz/install/kubernetes.md @@ -13,6 +13,8 @@ This guide describes how to setup Trendz Analytics cluster with Kubernetes and M ## Prerequisites +{% include templates/trendz/install/thingsboard-requirements.md %} + You need to have a Kubernetes cluster, and the `kubectl` command-line tool must be configured to communicate with your cluster. If you don't have Minikube installed, please follow [these instructions](https://kubernetes.io/docs/setup/learning-environment/minikube/). @@ -21,7 +23,7 @@ Ensure that the node meets specific CPU and RAM requirements, with the typical u ## Installation Steps -### Step 1. Activate Trendz Add-on on ThingsBoard +### Step 1. Activate Trendz Analytics {% include templates/trendz/install/activate-trendz-license.md %} diff --git a/docs/trendz/install/old-docker-migrate-windows.md b/docs/trendz/install/old-docker-migrate-windows.md new file mode 100644 index 0000000000..0c6612f4d7 --- /dev/null +++ b/docs/trendz/install/old-docker-migrate-windows.md @@ -0,0 +1,8 @@ +--- +layout: docwithnav-pe +title: Migrate from old Docker deployment files +description: Migrate from old Docker deployment files +--- + +* TOC +{:toc} diff --git a/docs/trendz/install/old-docker-migrate.md b/docs/trendz/install/old-docker-migrate.md new file mode 100644 index 0000000000..28dc59b6ed --- /dev/null +++ b/docs/trendz/install/old-docker-migrate.md @@ -0,0 +1,101 @@ +--- +layout: docwithnav-pe +title: Migrate from old Docker deployment files +description: Migrate from old Docker deployment files +--- + +* TOC +{:toc} + +This guide will help you to move from the old deployment files for Docker installation using volume bindings instead of local volumes. +This guide covers standalone Trendz installation. + +## Why deployment files were changed? + +- data was persisted in local folders with specific ownerships instead of Docker volumes mechanism + +## Who needs this guide? + +Customers who have docker compose file as below or similar: + +```yml +version: '3.0' +services: + mytrendz: + restart: always + image: "thingsboard/trendz:1.14.0" + ports: + - "8888:8888" + environment: + TB_API_URL: http://10.0.0.101:8080 + TRENDZ_LICENSE_INSTANCE_DATA_FILE: /data/license.data + SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/trendz + SPRING_DATASOURCE_USERNAME: postgres + SPRING_DATASOURCE_PASSWORD: postgres + SCRIPT_ENGINE_TIMEOUT: 30000 + volumes: + - ~/.mytrendz-data:/data + - ~/.mytrendz-logs:/var/log/trendz + postgres: + restart: always + image: "postgres:15" + ports: + - "5432" + environment: + POSTGRES_DB: trendz + POSTGRES_PASSWORD: postgres + volumes: + - ~/.mytrendz-data/db:/var/lib/postgresql/data +``` +{: .copy-code} + +## Move Postgres data to Docker volume + +Create a named Docker volume: + +```bash +docker volume create --name trendz-postgres-data +``` +{: .copy-code} + +Run container with attached volumes to copy data from folder to newly created volume + +```bash +docker run --rm -v ~/.mytrendz-data/db:/source -v trendz-postgres-data:/destination alpine sh -c "cp -rp /source/* /destination/" +``` +{: .copy-code} + +{% capture old_postgres_info %} +**Note that previously we have PostgreSQL 15 image in our docker compose, which is replaced with PostgreSQL 16 now.** +**In order to start Postgres DB container you need either use `postgres:15` image in new deployment files or upgrade database files** +{% endcapture %} +{% include templates/info-banner.md content=old_postgres_info %} + +## Move Trendz data to Docker volume + +Create a named Docker volume: + +```bash +docker volume create --name trendz-data +``` +{: .copy-code} + +Run container with attached volumes to copy data from folder to newly created volume: + +```bash +docker run --rm -v ~/.mytrendz-data/:/source -v tb-pe-license-data:/destination alpine sh -c "cp -rp /source/* /destination/ && chown 799:799 /destination/license.data" +``` +{: .copy-code} + +## Move to new deployment files + +Open `docker-compose.yml` file with text editor: + +```bash +nano docker-compose.yml +``` +{: .copy-code} + +Copy current Docker Compose [manifest](/docs/trendz/install/docker/#step-2-docker-compose-setup) and replace the old one with current manifest. Replace Postgres docker image if needed. + +After data is moved to the docker volumes and `docker-compose.yml` file have the same structure as the installation example - you can proceed with [upgrade](/docs/trendz/install/docker/#upgrade-trendz-service) of the Trendz. diff --git a/docs/trendz/install/python-executor-configuration-linux.md b/docs/trendz/install/python-executor-configuration-linux.md deleted file mode 100644 index 26e0e7512a..0000000000 --- a/docs/trendz/install/python-executor-configuration-linux.md +++ /dev/null @@ -1,286 +0,0 @@ ---- -layout: docwithnav-trendz -title: Trendz Python Executor Configuration -description: How to configure Trendz Python Executor on Linux or Mac OS - ---- - -* TOC -{:toc} - -## Overview - -Trendz Python Executor is required to run: - -* Python Calculation fields -* All prediction models (except Fourier Transformation) -* Code generation for Metric Explorer - -Starting from version 1.14.0, the only way to run these features is via Trendz Python Executor using Docker (or Kubernetes). - -## Python Executor Standalone Installation - -### Step 1: Create Docker Compose File - -Create the Docker Compose file with the following configuration: - -```yml -services: - mypyexecutor: - restart: always - image: "thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}" - ports: - - "8181:8181" - environment: - EXECUTOR_MANAGER: 1 - EXECUTOR_SCRIPT_ENGINE: 6 - THROTTLING_QUEUE_CAPACITY: 10 - THROTTLING_THREAD_POOL_SIZE: 6 - NETWORK_BUFFER_SIZE: 5242880 - volumes: - - ~/.mytrendz-python-conf:/python-executor-config-files - - ~/.mytrendz-python-data:/data - - ~/.mytrendz-python-logs:/var/log/python-executor -``` -{: .copy-code} - -Explanation of key fields: - -* `8181` - Python executor port for communication with Trendz service -* `restart: always` - automatically restarts the executor on failure or system reboot -* `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Docker image for Trendz Python Executor -* `~/.mytrendz-python-conf:/python-executor-config-files` - mounts the volume `~/.mytrendz-python-conf` to Trendz Python Executor directory with configuration files -* `~/.mytrendz-python-data:/data` - mounts the volume `~/.mytrendz-python-data` to Trendz Python Executor additional data directory -* `~/.mytrendz-python-logs:/var/log/python-executor` - mounts the volume `~/.mytrendz-python-logs` to Trendz Python Executor logs directory - -### Step 2: Configuration files setup - -Before starting the service, you need to create the configuration directories and files. -Execute the following commands to create the necessary folders and write the configuration files: - -1. **Create directories:** -```bash -mkdir -p ~/.mytrendz-python-conf -mkdir -p ~/.mytrendz-python-data -mkdir -p ~/.mytrendz-python-logs -``` -{: .copy-code} - -2. **Create configuration files**: -* `~/.mytrendz-python-conf/python-executor.conf` -```bash -cat <<'EOF' > ~/.mytrendz-python-conf/python-executor.conf -export LOG_FILENAME=python-executor.out -export LOADER_PATH=/usr/share/python-executor/conf - -export JAVA_OPTS="$JAVA_OPTS -Dplatform=deb" -export JAVA_OPTS="$JAVA_OPTS -Xlog:gc=debug:file=/var/log/python-executor/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDateStamps" -export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" -export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" -export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" -export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" - -export JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx512m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxMetaspaceSize=128m" -export JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=128m" -export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+ExitOnOutOfMemoryError" -export JAVA_OPTS="$JAVA_OPTS -XX:+AlwaysPreTouch" -EOF -``` -{: .copy-code} -* `~/.mytrendz-python-conf/logback.xml` -```bash -cat <<'EOF' > ~/.mytrendz-python-conf/logback.xml - - - - - /var/log/python-executor/python-executor.log - - /var/log/python-executor/python-executor.%d{yyyy-MM-dd}.%i.log - 100MB - 30 - 3GB - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-35thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - %green(%d{yyyy-MM-dd} | %d{HH:mm:ss.SSS}) | %highlight(%-5level) [%cyan(%-40thread)] %-60yellow(%C{1}): %msg %n%throwable - - - - - - - - - - - - - - -EOF -``` -{: .copy-code} -* `~/.mytrendz-python-conf/requirements.txt` -```bash -cat <<'EOF' > ~/.mytrendz-python-conf/requirements.txt -# Mounted -pandas==2.0.3 -numpy==1.24.3 -scikit-learn==1.3.0 -matplotlib==3.7.2 -seaborn==0.12.2 -requests==2.31.0 -pytz==2023.3 -plotly==5.15.0 -statsmodels==0.14.0 -scipy==1.11.1 -joblib==1.3.2 -EOF -``` -{: .copy-code} - -3. **Set permissions:** - Once the files are created, execute the following commands to change the owner of the newly created folders to the docker container user (`799`). - Note: This command requires sudo permissions: -```bash -sudo chown -R 799:799 ~/.mytrendz-python-conf -sudo chown -R 799:799 ~/.mytrendz-python-data -sudo chown -R 799:799 ~/.mytrendz-python-logs -``` -{: .copy-code} - - -### Step 3: Start Python Executor - -```bash -docker compose up -d -docker compose logs -f mypyexecutor -``` -{: .copy-code} - -### Step 4: Connect Trendz to Python Executor - -Configure Trendz to communicate with the Python Executor. - -Edit `/usr/share/trendz/conf/trendz.conf` and add: - -```bash -export SCRIPT_ENGINE_TIMEOUT=30000 -export SCRIPT_ENGINE_PROVIDER=DOCKER_CONTAINER -export SCRIPT_ENGINE_DOCKER_PROVIDER_URL=PYTHON_EXECUTOR_HOST:PYTHON_EXECUTOR_PORT -``` -{: .copy-code} - -Replace `PYTHON_EXECUTOR_HOST` and `PYTHON_EXECUTOR_PORT` with actual host and port values. - -## How to Migrate Trendz Python Executor 1.13.2 to Trendz Python Executor 1.14.0 - -If you already have a Python Executor with a version earlier than 1.14.0 connected to Trendz, you should migrate it before updating Trendz to 1.14.0. - -### Step 1. Modify Docker Compose File - -Locate the `docker-compose.yml` file from which the Python Executor was launched. - -Change the Python Executor image tag to version 1.14.0 and update the `volumes` section to include configuration, data, and log directories. - -The final `docker-compose.yml` should look like this: - -```yml -services: - mypyexecutor: - restart: always - image: "thingsboard/trendz-python-executor:1.14.0" - ports: - - "8181:8181" - environment: - EXECUTOR_MANAGER: 1 - EXECUTOR_SCRIPT_ENGINE: 6 - THROTTLING_QUEUE_CAPACITY: 10 - THROTTLING_THREAD_POOL_SIZE: 6 - NETWORK_BUFFER_SIZE: 5242880 - volumes: - - ~/.mytrendz-python-conf:/python-executor-config-files - - ~/.mytrendz-python-data:/data - - ~/.mytrendz-python-logs:/var/log/python-executor -``` -{: .copy-code} - -### Step 2: Create Configuration Files - -Since version 1.14.0 requires mounted configuration files that did not exist in previous versions, you must create them before restarting the container. - -Please follow the instructions in `Step 2: Configuration files setup` from the installation guide above to create the necessary config files and set permissions. - -### Step 3. Restart Python Executor - -Restart the Python Executor to apply the changes: - -```bash -docker compose up -d -docker compose logs -f mypyexecutor -``` -{: .copy-code} - -## How to Connect Additional Libraries to the Python Executor - -If necessary, you can add additional Python libraries to the **Python Executor** and use them in your Trendz Calculation Fields or Trendz Custom Prediction Models. - -For example, if you want to add the **`emoji`** library (specific version 2.2.0), follow these steps. - -### Step 1. Add library to `requirements.txt` - -You need to append the library name and version to the `requirements.txt` file located in your configuration directory (`~/.mytrendz-python-conf`): - -```bash -echo 'emoji==2.2.0' >> ~/.mytrendz-python-conf/requirements.txt -``` -{: .copy-code} - -**Note:** You may need sudo permissions if the file is owned by the docker user (`799`): -```bash -echo 'emoji==2.2.0' | sudo tee -a ~/.mytrendz-python-conf/requirements.txt -``` -{: .copy-code} - -### Step 2. Restart the Docker Container - -Find the container name and restart it: -```bash -docker compose restart mypyexecutor -``` -{: .copy-code} - -### Step 3. Verify Installation - -Check the logs to ensure the library was installed successfully: - -```bash -docker compose logs mypyexecutor -``` -{: .copy-code} - -You should see: - -```text -Installing custom Python requirements... -Requirement already satisfied: emoji==2.2.0 in /usr/local/lib/python3.9/site-packages -``` - -After the container restarts, you can import and use the custom libraries in your Trendz Calculation Fields or Trendz Custom Prediction Models. - -## Next steps - -{% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} \ No newline at end of file diff --git a/docs/trendz/install/python-executor-configuration-windows.md b/docs/trendz/install/python-executor-configuration.md similarity index 53% rename from docs/trendz/install/python-executor-configuration-windows.md rename to docs/trendz/install/python-executor-configuration.md index 8d6f29f2d9..5f9163bf57 100644 --- a/docs/trendz/install/python-executor-configuration-windows.md +++ b/docs/trendz/install/python-executor-configuration.md @@ -1,7 +1,7 @@ --- layout: docwithnav-trendz title: Trendz Python Executor Configuration -description: How to configure Trendz Python Executor on Windows +description: How to configure Trendz Python Executor on Linux or Mac OS --- @@ -18,6 +18,16 @@ Trendz Python Executor is required to run: Starting from version 1.14.0, the only way to run these features is via Trendz Python Executor using Docker (or Kubernetes). +## Prerequisites + +### Windows + +{% include templates/trendz/install/docker-requirements-windows.md %} + +### Linux + +{% include templates/trendz/install/docker-requirements-linux.md %} + ## Python Executor Standalone Installation ### Step 1: Create Docker Compose File @@ -25,23 +35,21 @@ Starting from version 1.14.0, the only way to run these features is via Trendz P Create the Docker Compose file with the following configuration: ```yml -version: '3.0' services: - mypyexecutor: + trendz-python-executor: restart: always image: "thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}" ports: - "8181:8181" environment: - SCRIPT_ENGINE_RUNTIME_TIMEOUT: 30000 EXECUTOR_MANAGER: 1 EXECUTOR_SCRIPT_ENGINE: 6 THROTTLING_QUEUE_CAPACITY: 10 THROTTLING_THREAD_POOL_SIZE: 6 - NETWORK_BUFFER_SIZE: 10485760 + NETWORK_BUFFER_SIZE: 5242880 volumes: - - mytrendz-data/python-executor:/python-executor - + - trendz-python-executor-conf:/python-executor-config-files + - trendz-python-executor-data:/data ``` {: .copy-code} @@ -50,40 +58,42 @@ Explanation of key fields: * `8181` - Python executor port for communication with Trendz service * `restart: always` - automatically restarts the executor on failure or system reboot * `thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}` - Docker image for Trendz Python Executor -* `SCRIPT_ENGINE_RUNTIME_TIMEOUT` - timeout for Python script execution -* `mytrendz-data/python-executor:/python-executor` - mounts the volume `mytrendz-data/python-executor` to Trendz Python Executor additional data directory - +* `trendz-python-executor-conf:/python-executor-config-files` - mounts the volume ``trendz-python-executor-conf` to Trendz Python Executor directory with configuration files +* `trendz-python-executor-data:/data` - mounts the volume `trendz-python-executor-data` to Trendz Python Executor additional data directory -### Step 2: Create Volumes - -Windows users should use Docker-managed volumes for Trendz data. -Create a Docker volume before executing the Docker run command. -Open “Docker Quickstart Terminal” and run: +### Step 2: Start Python Executor ```bash -docker volume create mytrendz-data-python-executor +docker compose up -d +docker compose logs -f trendz-python-executor ``` {: .copy-code} -**Note:** Replace the volume name `mytrendz-data-python-executor` with the name you plan to use in `docker-compose.yaml`. +### Step 3: Connect Trendz to Python Executor + +* **Linux or Mac OS** -### Step 3: Start Python Executor +Configure Trendz to communicate with the Python Executor. + +Edit `/usr/share/trendz/conf/trendz.conf` and add: ```bash -docker compose up -d -docker compose logs -f mypyexecutor +export SCRIPT_ENGINE_TIMEOUT=30000 +export SCRIPT_ENGINE_PROVIDER=DOCKER_CONTAINER +export SCRIPT_ENGINE_DOCKER_PROVIDER_URL=PYTHON_EXECUTOR_HOST:PYTHON_EXECUTOR_PORT ``` {: .copy-code} -### Step 4: Connect Trendz to Python Executor +Replace `PYTHON_EXECUTOR_HOST` and `PYTHON_EXECUTOR_PORT` with your Python Executor service values and ensure Trendz can reach this network destination. -Configure Trendz to communicate with the Python Executor. +* **Windows** Open Notepad as Administrator and edit: ```text C:\Program Files (x86)\trendz\conf\trendz.yml ``` +{: .copy-code} Locate the `script-engine` block and configure: @@ -103,79 +113,40 @@ Replace `PYTHON_EXECUTOR_HOST` and `PYTHON_EXECUTOR_PORT` with your Python Execu If you already have a Python Executor with a version earlier than 1.14.0 connected to Trendz, you should migrate it before updating Trendz to 1.14.0. -### Modify Docker Compose File - -Locate the `docker-compose.yaml` file from which the Python Executor was launched. +### Step 1. Modify Docker Compose File -Change the Python Executor image tag to version 1.14.0: +Locate the `docker-compose.yml` file from which the Python Executor was launched. -```yml - image: "thingsboard/trendz-python-executor:1.14.0" -``` -{: .copy-code} +Change the Python Executor image tag to version 1.14.0 and update the `volumes` section to include configuration and data directories. -Add the following lines at the end of the Python Executor configuration: +The final `docker-compose.yml` should look like this: ```yml - volumes: - - mytrendz-data/python-executor:/python-executor -``` -{: .copy-code} - -Add the following lines at the end of the Docker Compose file: - -```yml -volumes: - mytrendz-data-python-executor: - external: true -``` -{: .copy-code} - -The final `docker-compose.yaml` should look like: - -```yml -version: '3.0' services: - mypyexecutor: + trendz-python-executor: restart: always - image: "thingsboard/trendz-python-executor:1.14.0" + image: "thingsboard/trendz-python-executor:{{ site.release.trendz_ver }}" ports: - "8181:8181" environment: - SCRIPT_ENGINE_RUNTIME_TIMEOUT: 30000 EXECUTOR_MANAGER: 1 EXECUTOR_SCRIPT_ENGINE: 6 THROTTLING_QUEUE_CAPACITY: 10 THROTTLING_THREAD_POOL_SIZE: 6 - NETWORK_BUFFER_SIZE: 10485760 + NETWORK_BUFFER_SIZE: 5242880 volumes: - - mytrendz-data/python-executor:/python-executor -volumes: - mytrendz-data-python-executor: - external: true + - trendz-python-executor-conf:/python-executor-config-files + - trendz-python-executor-data:/data ``` {: .copy-code} -### Create Volumes for Python Executor - -Windows users should use Docker-managed volumes for Trendz data. -Create a Docker volume before executing the Docker run command. -Open “Docker Quickstart Terminal” and run: - -```bash -docker volume create mytrendz-data-python-executor -``` -{: .copy-code} - -**Note:** Replace the volume name `mytrendz-data-python-executor` with the name you plan to use in `docker-compose.yaml`. - -### Restart Python Executor +### Step 2. Restart Python Executor Restart the Python Executor to apply the changes: ```bash -docker compose restart -d -docker compose logs -f mypyexecutor +docker compose up -d +docker compose logs -f trendz-python-executor ``` {: .copy-code} @@ -185,47 +156,49 @@ If necessary, you can add additional Python libraries to the **Python Executor** For example, if you want to add the **`emoji`** library (specific version 2.2.0), follow these steps. -### Step 1. Locate the Volume +### Step 1. Open a shell in the running container -The Python Executor data is mapped to a local folder via Docker volumes. By default: - -```powershell -cd %USERPROFILE%\mytrendz-data\python-executor +```bash +docker compose exec trendz-python-executor bash ``` -{: .copy-code} -### Step 2. Add a `requirements.txt` File +### Step 2. Add library to `requirements.txt` -Create a file named `requirements.txt` in this folder with the library you need. For example: +You need to append the library name and version to the `requirements.txt` file located in your configuration directory (`/python-executor-config-files`): -```powershell -echo emoji==2.2.0 > requirements.txt +```bash +echo 'emoji==2.2.0' >> /python-executor-config-files/requirements.txt ``` +{: .copy-code} -### Step 3. Restart the Docker Container +After append all necessary dependencies type `exit` to exit from a shell. -After updating `requirements.txt`, restart the Python Executor container: +### Step 3. Restart the Docker Container -```powershell -docker compose ps -docker compose restart mypyexecutor +Find the container name and restart it: +```bash +docker compose restart trendz-python-executor ``` +{: .copy-code} ### Step 4. Verify Installation -Check the logs to ensure the library installed successfully: +Check the logs to ensure the library was installed successfully: -```powershell -docker compose logs mypyexecutor +```bash +docker compose logs trendz-python-executor ``` +{: .copy-code} -You should see something like: +You should see: ```text Installing custom Python requirements... Requirement already satisfied: emoji==2.2.0 in /usr/local/lib/python3.9/site-packages ``` +After the container restarts, you can import and use the custom libraries in your Trendz Calculation Fields or Trendz Custom Prediction Models. + ## Next steps {% assign currentGuide = "InstallationOptions" %}{% include templates/trndz-guides-banner.md %} diff --git a/docs/trendz/install/resources/1.15.0/trendz-centos-download.sh b/docs/trendz/install/resources/1.15.0/trendz-centos-download.sh new file mode 100644 index 0000000000..6a34c1aa7a --- /dev/null +++ b/docs/trendz/install/resources/1.15.0/trendz-centos-download.sh @@ -0,0 +1 @@ +wget https://dist.thingsboard.io/trendz-1.15.0.rpm \ No newline at end of file diff --git a/docs/trendz/install/resources/1.15.0/trendz-centos-installation.sh b/docs/trendz/install/resources/1.15.0/trendz-centos-installation.sh new file mode 100644 index 0000000000..5528acc59a --- /dev/null +++ b/docs/trendz/install/resources/1.15.0/trendz-centos-installation.sh @@ -0,0 +1 @@ +sudo rpm -Uvh trendz-1.15.0.rpm \ No newline at end of file diff --git a/docs/trendz/install/resources/1.15.0/trendz-ubuntu-download.sh b/docs/trendz/install/resources/1.15.0/trendz-ubuntu-download.sh new file mode 100644 index 0000000000..1694b7e326 --- /dev/null +++ b/docs/trendz/install/resources/1.15.0/trendz-ubuntu-download.sh @@ -0,0 +1 @@ +wget https://dist.thingsboard.io/trendz-1.15.0.deb \ No newline at end of file diff --git a/docs/trendz/install/resources/1.15.0/trendz-ubuntu-installation.sh b/docs/trendz/install/resources/1.15.0/trendz-ubuntu-installation.sh new file mode 100644 index 0000000000..b5f0bd2ae0 --- /dev/null +++ b/docs/trendz/install/resources/1.15.0/trendz-ubuntu-installation.sh @@ -0,0 +1 @@ +sudo dpkg -i trendz-1.15.0.deb \ No newline at end of file diff --git a/docs/trendz/install/rhel.md b/docs/trendz/install/rhel.md index daff2e6463..280facf425 100644 --- a/docs/trendz/install/rhel.md +++ b/docs/trendz/install/rhel.md @@ -30,6 +30,7 @@ Proceed here **only** if you have a compelling reason to use a combined RHEL/Cen ### Software Requirements {% include templates/trendz/install/docker-requirements-linux.md %} +{% include templates/trendz/install/thingsboard-requirements.md %} **For CentOS 7:** @@ -55,7 +56,7 @@ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8. ## Installation Steps -### Step 1. Activate Trendz Add-on on ThingsBoard +### Step 1. Activate Trendz Analytics {% include templates/trendz/install/activate-trendz-license.md %} @@ -190,7 +191,7 @@ the server or with a domain name. Also, check that port 8888 opened for public a To utilize all Trendz capabilities, such as Trendz Python Calculation Fields or Prediction Models, it is essential to install an additional service: the Trendz Python Executor, which can securely run Python code. -You can learn more about how to install it [here](/docs/trendz/install/python-executor-configuration-linux). +You can learn more about how to install it [here](/docs/trendz/install/python-executor-configuration). ## Authentication diff --git a/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md b/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md index e9aef77096..1ca9d37c38 100644 --- a/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md +++ b/docs/trendz/install/trndz-upgrade-instructions-kubernetes.md @@ -8,11 +8,11 @@ description: ThingsBoard Trendz Analytics upgrade instructions kubernetes * TOC {:toc} -## Upgrading to 1.14.0 +## Upgrading to 1.15.0 -These steps are applicable for 1.13.2 Trendz Analytics version. +These steps are applicable for 1.14.0 Trendz Analytics version. -### Obtain Trendz Kubernetes scripts +### Step 1. Obtain Trendz Kubernetes scripts Use the Kubernetes configuration files used for installation. If you did not save the files you need to download them again by the next link and fill in by necessary data as in the installation guide: @@ -21,7 +21,7 @@ If you did not save the files you need to download them again by the next link a git clone https://github.com/thingsboard/trendz-k8s.git --depth 1 ``` -### Connect to your Kubernetes cluster +### Step 2. Connect to your Kubernetes cluster You need to connect to the dedicated kube-config configuration Use the next commands: @@ -31,7 +31,7 @@ kubectl config get-contexts kubectl config use-context ``` -### Reduce pods count +### Step 3. Reduce pods count The deployment must have only one pod for the next steps of a successful upgrade. Use this command to set the pod count: @@ -40,20 +40,20 @@ Use this command to set the pod count: kubectl scale deployment trendz-app-deployment --replicas=1 ``` -### Create flag-file +### Step 4. Create flag-file Create a file “.upgradeversion” inside the directory by calling the command that must be executed by Trendz pod. Run the command: ```text -kubectl exec -- sh -c "echo '1.13.2' > /data/.upgradeversion" +kubectl exec -- sh -c "echo '1.14.0' > /data/.upgradeversion" ``` You can get the pod name by the command: ```text kubectl get pods -l app=trendz-app-pod-label ``` -Use another version instead of '1.13.2 if another is needed +Use another version instead of '1.14.0 if another is needed -### Change image version +### Step 5. Change image version Open the **trendz-app-deployment.yml** file with the command ```text @@ -63,7 +63,7 @@ and change the image version: ![image](/images/trendz/image-version-kuber.png) -### Apply the deployment file +### Step 6. Apply the deployment file Use the command to apply the new configuration of the deployment and wait until the pods are ready: @@ -71,7 +71,7 @@ Use the command to apply the new configuration of the deployment and wait until kubectl apply -f trendz-app-deployment.yml ``` -### Check the logs +### Step 7. Check the logs Now check the logs and be sure that the instance is started successfully and the upgrade was performed. The logs can be opened by the command: @@ -89,7 +89,7 @@ Current version is …, upgrade is not needed Started TrendzApplication in … ``` -### Increase pods count +### Step 8. Increase pods count Now you can return your preferred pod count to the deployment. Use this command to set the pod count: @@ -97,3 +97,7 @@ Use this command to set the pod count: ```text kubectl scale deployment trendz-app-deployment --replicas= ``` + +### Step 9. Check synchronization status in ThingsBoard + +//TODO find out how to describe diff --git a/docs/trendz/install/trndz-upgrade-instructions.md b/docs/trendz/install/trndz-upgrade-instructions.md index 448d094a29..87a93fc0c7 100644 --- a/docs/trendz/install/trndz-upgrade-instructions.md +++ b/docs/trendz/install/trndz-upgrade-instructions.md @@ -7,6 +7,17 @@ description: ThingsBoard Trendz Analytics upgrade instructions