Get Started#

  • Time to Complete: 30 minutes

  • Programming Language: Python 3

Configure Docker#

To configure Docker:

  1. Run Docker as Non-Root: Follow the steps in Manage Docker as a non-root user.

  2. Configure Proxy (if required):

    • Set up proxy settings for Docker client and containers as described in Docker Proxy Configuration.

    • Example ~/.docker/config.json:

      {
        "proxies": {
          "default": {
            "httpProxy": "http://<proxy_server>:<proxy_port>",
            "httpsProxy": "http://<proxy_server>:<proxy_port>",
            "noProxy": "127.0.0.1,localhost"
          }
        }
      }
      
    • Configure the Docker daemon proxy as per Systemd Unit File.

  3. Enable Log Rotation:

    • Add the following configuration to /etc/docker/daemon.json:

      {
        "log-driver": "json-file",
        "log-opts": {
          "max-size": "10m",
          "max-file": "5"
        }
      }
      
    • Reload and restart Docker:

      sudo systemctl daemon-reload
      sudo systemctl restart docker
      

Clone source code#

git clone https://github.com/open-edge-platform/edge-ai-suites.git
git checkout release-2025.2.0
cd edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series

Deploy with Docker Compose#

  1. Update the following fields in .env:

    • INFLUXDB_USERNAME

    • INFLUXDB_PASSWORD

    • VISUALIZER_GRAFANA_USER

    • VISUALIZER_GRAFANA_PASSWORD

  2. Deploy the sample app, use only one of the following options:

NOTE:

  • The below make up_opcua_ingestion or make up_mqtt_ingestion fails if the above required fields are not populated as per the rules called out in .env file.

  • The sample app is deployed by pulling the pre-built container images of the sample app from the docker hub OR from the internal container registry (login to the docker registry from cli and configure DOCKER_REGISTRY env variable in .env file at edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series)

  • The CONTINUOUS_SIMULATOR_INGESTION variable in the .env file (for Docker Compose) and in helm/values.yaml (for Helm deployments) is set to true by default, enabling continuous looping of simulator data. To ingest the simulator data only once (without looping), set this variable to false.

  • If CONTINUOUS_SIMULATOR_INGESTION is set to false, you may see the [inputs.opcua] status not OK for node message in the telegraf logs for OPC-UA ingestion after a single data ingestion loop. This message can be ignored.

  • make up_opcua_ingestion is supported only for Wind Turbine Anomaly Detection sample app

:sync: tab1

  • Using OPC-UA ingestion:

    make up_opcua_ingestion app="wind-turbine-anomaly-detection"
    
  • Using MQTT ingestion:

    make up_mqtt_ingestion app="wind-turbine-anomaly-detection"
    

:sync: tab2

make up_mqtt_ingestion app="weld-anomaly-detection"

Multi-Stream Ingestion support#

Multi-stream ingestion enables the simultaneous processing of multiple data streams, improving throughput and scalability.

To activate multi-stream ingestion, set the num_of_streams parameter to the required number of parallel streams when deploying the application. <NUMBER_OF_STREAMS>: Specify the number of parallel streams to run (e.g., 3 for three concurrent streams).

:sync: tab1

# Deploy with OPC-UA Multi-Stream Ingestion
make up_opcua_ingestion app="wind-turbine-anomaly-detection" num_of_streams=<NUMBER_OF_STREAMS>

# Deploy with MQTT Multi-Stream Ingestion
make up_mqtt_ingestion app="wind-turbine-anomaly-detection" num_of_streams=<NUMBER_OF_STREAMS>

:sync: tab2

# Deploy with MQTT Multi-Stream Ingestion
make up_mqtt_ingestion app="weld-anomaly-detection" num_of_streams=<NUMBER_OF_STREAMS>

Notes#

  • Ensure system resources (CPU, memory) are sufficient to support the desired number of streams.

  • For troubleshooting or monitoring, use make status to verify container health and logs.

    Note: The command make status may show errors in containers like ia-grafana when user have not logged in for the first login OR due to session timeout. Just login again in Grafana and functionality wise if things are working, then ignore user token not found errors along with other minor errors which may show up in Grafana logs.

    make status
    

Running User Defined Function(UDF) inference on GPU#

By default, UDF for both the sample apps is configured to run on CPU. The Wind Turbine Anomaly Detection sample app ML model can run on GPU while the Weld Anomaly Detection sample app ML model can only run on CPU.

To trigger the UDF inference on GPU in Time Series Analytics Microservice, run the following command:

 curl -k -X 'POST' \
 'https://<HOST_IP>:3000/ts-api/config' \
 -H 'accept: application/json' \
 -H 'Content-Type: application/json' \
 -d '<Add contents of edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series/apps/wind-turbine-anomaly-detection/time-series-analytics-config/config.json with device
     value updated to gpu from cpu>'

Verify the Output Results#

:sync: tab1

  1. Get into the InfluxDB* container:

    Note: Use kubectl exec -it <influxdb-pod-name> -n <namespace> -- /bin/bash for the helm deployment where for replace with namespace name where the application was deployed and for replace with InfluxDB pod name.

     docker exec -it ia-influxdb bash
    
  2. Run following commands to see the data in InfluxDB*:

    NOTE: Please ignore the error message There was an error writing history file: open /.influx_history: read-only file system happening in the InfluxDB shell. This does not affect any functionality while working with the InfluxDB commands

    # For below command, the INFLUXDB_USERNAME and INFLUXDB_PASSWORD needs to be fetched from `.env` file
    # for docker compose deployment and `values.yml` for helm deployment
    influx -username <username> -password <passwd>
    use datain # database access
    show measurements
    # Run below query to check and output measurement processed
    # by Time Series Analytics microservice
    select * from "wind-turbine-anomaly-data"
    
  3. To check the output in Grafana:

    • Use link https://<host_ip>:3000/ to launch Grafana from browser (preferably, chrome browser)

      Note: Use link https://<host_ip>:30001 to launch Grafana from browser (preferably, chrome browser) for the helm deployment

    • Login to the Grafana with values set for VISUALIZER_GRAFANA_USER and VISUALIZER_GRAFANA_PASSWORD in .env file.

      Grafana login

    • After login, click on Dashboard Menu view

    • Select the Wind Turbine Dashboard. Windturbine dashboard

    • You will see the below output.

      Anomaly prediction in grid active power

:sync: tab2

  1. Get into the InfluxDB* container:

    Note: Use kubectl exec -it <influxdb-pod-name> -n <namespace> -- /bin/bash for the helm deployment where for replace with namespace name where the application was deployed and for replace with InfluxDB pod name.

     docker exec -it ia-influxdb bash
    
  2. Run following commands to see the data in InfluxDB*:

    NOTE: Please ignore the error message There was an error writing history file: open /.influx_history: read-only file system happening in the InfluxDB shell. This does not affect any functionality while working with the InfluxDB commands

    # For below command, the INFLUXDB_USERNAME and INFLUXDB_PASSWORD needs to be fetched from `.env` file
    # for docker compose deployment and `values.yml` for helm deployment
    influx -username <username> -password <passwd>
    use datain # database access
    show measurements
    # Run below query to check and output measurement processed
    # by Time Series Analytics microservice
    select * from "weld-sensor-anomaly-data"
    
  3. To check the output in Grafana:

    • Use link https://<host_ip>:3000/ to launch Grafana from browser (preferably, chrome browser)

      Note: Use link https://<host_ip>:30001 to launch Grafana from browser (preferably, chrome browser) for the helm deployment

    • Login to the Grafana with values set for VISUALIZER_GRAFANA_USER and VISUALIZER_GRAFANA_PASSWORD in .env file.

      Grafana login

    • After login, click on Dashboard Menu view

    • Select the Weld Anomaly Detection Dashboard. Weld Anomaly Detection dashboard

    • One will see the below output.

      Anomaly prediction in weld sensor data

Bring down the sample app#

make down

Check logs - troubleshooting#

Check container logs to catch any failures:

docker ps
docker logs -f <container_name>
docker logs -f <container_name> | grep -i error

Other Deployment options#

See How to Deploy with Helm guide to learn how to deploy the sample application on a k8s cluster using Helm.

Advanced setup#