.. _Visualize:
Visualize
=========
InfluxDB 2.0 built-in visualization tools.
------------------------------------------
If InfluxDB version 2.0 is used as TSDB, to visualize data stored in the TSDB you can use its built-in visualization tools. For details, refer to InfluxDB documentation at https://v2.docs.influxdata.com/v2.0/visualize-data/.
Visualization with Grafana.
---------------------------
The open source platform `Grafana `_ can be used to visualize data in different ways:
* via *ogamma* Visual Logger for OPC REST API endpoint at path ``/grafana/query``, with `SimpleJson `_ or `Infinity `_ data source plugin for Grafana. The ``SimpleJson`` can be used in Grafana versions up to version 9.x. In the later versions of Grafana (10.x or higer) it is not supported anymore. With those versions, the ``Infinity`` plugin can be used, via the same *ogamma* Visual Logger for OPC REST API endpoint.
In this case, *ogamma* Visual Logger for OPC can receive data from OPC UA Servers either directly via live connection, or data can be read from the TSDB.
* Getting data from the OPC UA Server directly
This is done when value in the column ``Get History from`` of the ``Logged Variables`` table for a variable is set to ``OPC UA server``. In turn can be done in 2 ways:
* using ``Read`` OPC UA service call. Applicable when the option in the ``Read Type`` column of the ``Logged Variables`` table for the variable is set to ``Read``.
* using ``HistoryRead`` OPC UA Service call. Applicable for variables, that have ``Historyzing`` attribute set to ``true``, and value of the column ``Read Type`` is set to ``HistoryReadRaw``.
* Data is read from the time-series database. Applicable when value in the column ``Log to TSDB`` for a variable is set to ``true`` (which is default value when variables are added to the ``Logged Variables`` table).
* Via native datasource plugins of Grafana. In this case data that is already stored in the TSDB by *ogamma* Visual Logger for OPC, is read by the plugin, without participation of the *ogamma* Visual Logger for OPC.
Grafana has following plugins that can read data from databases supported by the *ogamma* Visual Logger for OPC:
* `PostgreSQL/TimescaleDB plugin `_
* `MySQL plugin `_
* `MS SQL plugin `_
* `SQLite plugin `_
* For InfluxDB there are 2 plugins: `InfluxDB plugin `_ (currently active and recommended), and deprecated `FlightSQL plugin `_
* `Pluign for Kafka `_
* `MQTT plugin `_
Next sections describe how to install and use Grafana.
Install Grafana
---------------
The easiest way to install and run Grafana is running it as a Docker container, following instructions at this page: https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/.
Alternatively, Grafana can be installed in Linux or Windows machines following instructions from `Grafana web site `_.
Once Grafana is installed and runs, its GUI can be accessed from wbe browser via endpoint URL `http://localhost:3000 `_.
Setup Grafana data source plugins to get data via *ogamma* Visual Logger for OPC REST API endpoint
---------------------------------------------------------------------------------------------
Data from OPC UA Servers can be visualized in Grafana using 2 types of data sources: ``SimpleJson`` or ``Infinity``.
Installing of the ``Infinity`` plugin.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This section is applicable for Grafana version 11.
* In Grafana web GUI select menu ``Connections / Data Sources`` in the left side panel.
* Click on the button ``Add new data source``.
* In the opened ``Add data source panel``, enter name of the plugin ``Infinity``.
* Click on the found plugin ``yesoreyoram-infinity-datasource``. As a result, new data source will be created.
.. thumbnail:: images/Infinity-1.png
* Enter arbitrary name of the plugin instance, base URL (*ogamma* Visual Logger for OPC REST API endpoint, ``http://ogamma-logger:4880/grafana`` in case when both *ogamma* Visual Logger for OPC and Grafana are running in Docker), and click on the button ``Save & Test``. Ignore the warning that health checks were not performed.
.. thumbnail:: images/Infinity-2.png
Installing of the ``SimpleJson`` data source plugin.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Note that this plugin is deprecated and not supported in Grafana versions 10.x and later. Use the Infinity plugin instead iwth latest versions of Grafana.
* Install ``SimpleJson`` data source plugin (instructions are available at https://github.com/grafana/simple-json-datasource).
* Add data source of ``SimpleJson`` type, and configure it to connect to the Grafana endpoint of the *ogamma* Visual Logger for OPC. The REST API URL is http://localhost:3000/grafana in case when accessed from the local machine. Replace ``localhost`` by the host name when applicable.
* In Grafana from the left side menu bar, select icon ``Configuration``. Note that in the latest versions of Grafana data sources are organized diferently, under ``Connections`` menu.
* Click on ``Data Sources``;
* Click on button ``Add data source``;
.. thumbnail:: images/GrafanaDataSources.png
* From the list of data sources, select ``SimpleJson``;
* Configure settings:
* In the field HTTP/URL enter URL of the *ogamma* Visual Logger for OPC. If *ogamma* Visual Logger and Grafana are installed in the same machine, ``localhost`` can be used as a host name:
.. code-block:: console
http://localhost:4880/grafana
If both *ogamma* Visual Logger for OPC and Grafana are running within Docker container, using file docker-compose.yml and grafana.yml from GitHub project ``https://github.com/onewayautomation/ogamma-logger``, and field ``access`` is set to ``server``, then host name should be set to ``ogamma-logger``:
.. code-block:: console
http://ogamma-logger:4880/grafana
.. note:: Adjust host name according to your setup.
* Click on button ``Save and Test``. If settings are correct, message should appear saying that data source is working.
.. thumbnail:: images/GrafanaSimpleJsonSetup.png
Using Grafana data sources to read data from databases directly.
------------------------------------------------------------------
Refer to the documentation for the applicable data source.
As example, to install the ``PostgreSQL`` data source:
* Open ``Data Sources`` page in Grafana, and click on button ``Add Data Sources``.
* Select ``PostgreSQL`` and edit connection settings as shown in the screenshot:
.. thumbnail:: images/GrafanaPostgreSQLSetup.png
.. note:: Using the PostgreSQL data source plugin is applicable only when time-series database type in *ogamma* Visual Logger for OPC is ``PostgreSQL``.
Setup Grafana dashboards.
--------------------------
Create new dashboard.
^^^^^^^^^^^^^^^^^^^^^
To create new dashboard, from the left side menu bar click on icon with plus sign, select ``Dashboard``, and click on button ``Add Query`` (it suggests to add new panel into new dashboard right away):
.. thumbnail:: images/GarafanaCreateDashboard.png
Note that in the latest verions of the Grafana the GUI migh look differently.
Reading values from ``Infinity`` data source plugin.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In the dashboard edit panel:
* Select the data source by name: see the screenshot below.
.. thumbnail:: images/Infinity-3.png
* Enter query options as shown in the screenshoot:
.. thumbnail:: images/Infinity-4.png
In the field ``Body Content`` enter JSON formatted query payload. Change the value of the JSON member ``target`` (``9718`` in the example below) to the variable Id accordingly to the value of the ``id`` column of the variable line from the ``Logged Variables`` table:
.. code-block:: JSON
{
"range": {
"from": "${__from:date:iso}",
"to": "${__to:date:iso}"
},
"targets": [{"target": 9718}]
}
.. thumbnail:: images/Infinity-5.png
.. note:: If the column ``id`` is not visible in the ``Logged Variables`` table, use column selector to make it visible:
.. thumbnail:: images/Infinity-7.png
* Now we need to configure parsing options:
* Expand line ``Parsing options & Result fields``.
* In the field ``Rows/Root`` enter ``datapoints`` (this is name of the JSON member with data values in the http POST response).
* In the table ``Columns - optional`` add 2 lines instructing the plugin how to interpret data values entries:
* ``Selector``: 0, ``as``: Alias (label), ``format as``: Number
* ``Selector``: 1, ``as``: Time, ``format as``: Time (UNix ms)
.. thumbnail:: images/Infinity-6.png
Now the dashboard panel should have data values received from the *ogamma* Visual Logger for OPC REST API endpoint.
Reading values from ``SimpleJson`` data source plugin.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In this case requests to get data values sent to the *ogamma* Visual Logger for OPC through its REST endpoint by Grafana's SimpleJson plugin. Then, depending on settings in columns ``Get History From`` and ``Read Type``, data values are read by *ogamma* Visual Logger either from TSDB, or from OPC UA Server by calling Read or HistoryRead request.
Configure settings in the new panel selecting ``SimpleJson`` as data source:
.. image:: images/GrafanaPanelSettings-Json.png
Reading values stored in PostgreSQL database.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
It is possible also to read already logged data values from PostgreSQL database, using PostgreSQL data source plugin for Grafana (installation is not required, included into Grafana by default):
.. image:: images/GrafanaPanelSettings-PostgreSQL.png
Example of the SQL query can be found below:
.. code-block:: shell
SELECT
$__time(time),
value
FROM
values
WHERE
$__timeFilter(time) and sourceid='2'
Here ``time``, ``value`` and ``sourceid`` are column names in the ``values`` table. You can figure out corresponding to the OPC UA variable ``sourceid`` from Logged Variables data grid on the configuration GUI (column ``id``).
.. image:: images/SourceIdInGui.png
.. tip:: For details on how to configure Grafana dahsboards and panels please refer to its documentation `here `_
Typical Grafana dashboard is illustrated below:
.. thumbnail:: images/GrafanaExample.png