Scope the OPC UA server before you configure
Before you deploy configuration files to production pipelines, follow these principles:- Prefer a connectivity gateway when you can: Determine whether the extractor connects through an OPC UA aggregation server or other industrial connectivity gateway, or directly to embedded hardware such as a PLC or DCS controller. Gateways generally provide caching and tolerate higher concurrency.
- Protect direct controller connections: Direct PLC or DCS connections have limited computing capacity and can crash if you overload them with large parallel queries.
- Scope root nodes: Avoid browsing the entire root namespace wildcard. Configure specific root nodes (
RootNode) to map only the asset subtrees, equipment hierarchies, and telemetry tags you need. - Defer chunk sizes to server specifications: To maintain compliance and prevent data truncation or timeout crashes, honor the server’s intrinsic chunk limits. Keep
limit-to-server-config: trueenabled in your configuration and avoid overriding individual chunk properties unless server defaults are demonstrably invalid. - Throttle historical backfill: Historical data ingestion operates concurrently with real-time streaming. Configure throttling limits (such as
history.throttling.max-per-minuteandhistory.throttling.max-parallelism) to ensure backfill operations do not degrade real-time telemetry streaming or saturate the source server.
Set up the extractor
Download installation files
Install the extractor
- Windows
- Linux
Run the configuration tool
config/config.yml. For more details, see The configuration tool steps.- Windows
- Linux
config. If you are running the extractor from the command line with the default installation, it should be run from the install folder: bin\OpcuaExtractor.exe ...Edit the configuration file
config/config.yml to fit your requirements.The most important elements are setting a suitable ID prefix and adding pushers, metrics, and logging. This might also involve disabling some features that the configuration tool discovered or adding ones that it didn’t.Optionally, edit the opc.ua.extractor.Config.xml file used for configuring the OPC UA SDK. For most users, the default settings are suitable, but in some cases, you may need to change memory limits or similar.Start the extractor
config/config.yml.- Windows
- Linux
The configuration tool steps
This section lists each action the configuration tool takes when testing the server. In general, the configuration tool is designed to build on the existing configuration and can update an existing configuration file. Usually, it’s ok to let it run with no configuration.Get endpoints
endpointUrl as a discovery server and look for endpoints there. If more secure options are available, it might suggest connecting to these. This should be cheap and quick.Identify Browse limits
RootNode.Read custom types
Identify Read limits
Read service, reading attributes for as many nodes as possible at a time. Typically, it starts at 1000, then 100 and 10 at a time.Identify data-type settings
Get Subscription chunk sizes
Get History Read config
Backfill.Get Event config
- Look through the event type hierarchy and try to find custom events.
- Look for
GeneratesEventreferences between nodes. - Look at the
EventNotifierproperty to supply information about which nodes are allowed to emit events. If bothGeneratesEventandEventNotifiersare used on the server, the intersection of the two are used to find emitters. - Check if the auditing property on the server is set. If it’s set, then enable auditing.
Get namespace map
Output a configuration file
Run as a Docker container
Use a Docker container to run the OPC UA extractor on Mac OS or Linux systems. The docker container is available on dockerhub ascognite/opcua-extractor-net.
The Docker container comes with three volumes:
configcontains the configuration file. This is optional if the extractor is set up with remote configuration.logscontains the log files, if enabled.certificatescontains the application and server certificates. This volume must be configured.
docker run statement example of how to run the extractor: