If you need RealLoad architecture components that are exclusively available to you, you can either use our pre-built AWS EC2 AMIs, or alternatively install these components manually.
The RealLoad components Measuring Agent(s), Cluster Controller(s) and Remote Proxy Recorder(s) can also installed/operated on your own hosted machines.
The OSHI Daemon can be installed on any system to monitor operating system performance metrics.
The installation and operation of an own dedicated Portal Server requires a contract with us and a special, commercial license.
Follow the links below to perform a manual installation.
1 - Ubuntu: Measuring Agent manual install
Ubuntu: Measuring Agent Install Instructions
Prerequisites
Supported Hardware
Amazon EC2 Cloud instances, or
Own hosted Servers with any Intel or AMD CPU, or
Own hosted Raspberry Pi 4 Model B / 8 GB (ARM CPU) / Ubuntu 20 only / for weak load tests up to max. 100 concurrent users (with loop iteration delay = 1000 ms)
Tests performed from ‘Measuring Agents’ which are virtualized or which run in a container environment measure often
incorrect results. Because additional CPU and Network delays occur at virtualization/container level.
It’s recommended that you use BARE-METAL-SERVERS to perform your tests. Alternatively you can also use Amazon EC2 Cloud instances.
You can place your ‘Measuring Agents’ at any location (anywhere at the internet or inside your local DMZ). Depending
on which kind of traffic you have to test. Measuring Agents can be operated in either ‘inbound’ or ‘outbound’ network connection mode (see image below).
Note that ‘inbound’ connected Measuring Agents - usually running on TCP/IP port 8080 (HTTPS) - must be
reachable form the ‘Portal Server’, and that you have to enable the corresponding inbound firewall rule.
Conversely, ‘outbound’ connected Measuring Agents do not require an inbound firewall rule, but must be able to connect to a ‘Measuring Agent Controller’.
Status: active
Logging: off
Default: deny (incoming), allow (outgoing), disabled (routed)New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
8080/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)8080/tcp (v6) ALLOW IN Anywhere (v6)
Install OpenJDK Java 8 and 11 / For Intel and AMD CPUs
Create the DKFQS account which is running the Measuring Agent
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Measuring Agent
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/agent (as dkfqs user):
cd /home/dkfqs
mkdir agent
Create the following sub-directories at /home/dkfqs/agent (as dkfqs user):
bin
config
internalData
log
scripts
usersData
cd /home/dkfqs/agent
mkdir bin config internalData log scripts usersData
Copy the following files to the bin directory /home/dkfqs/agent/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
DKFQSMeasuringAgent.jar
chromedriver (optional, for Selenium)
geckodriver (optional, for Selenium)
chmod 755 chromedriver
chmod 755 geckodriver
Copy the following files to the config directory /home/dkfqs/agent/config
datacollector.properties
measuringagent.properties
Modify the measuringagent.properties file. Set the following properties:
HttpsCertificateCN (set the public DNS name or the IP address for the automatically generated SSL/TLS server certificate)
HttpsCertificateIP (set the public IP address for the automatically generated SSL/TLS server certificate)
PowerShellCore6Path
OpenJDK8JavaPath
OpenJDK8JavaJobDefaultXmx (set around 20% of total OS memory - example: 1024m)
OpenJDK11JavaPath
OpenJDK11JavaJobDefaultXmx (set around 20% of total OS memory - example: 1024m)
Example: datacollector.properties
# local TCP/HTTPS data collector portsDataCollectorPortStartRange=44444DataCollectorPortEndRange=45000DataCollectorPortExcludeList=LogLevel=info
MaxLifeTimeMinutes=240MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=67108864MaxInboundWebSocketPayloadPerFrame=1048576MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000RealtimeStatisticsSamplingGranularityMillis=4000
Example: measuringagent.properties
HttpsPort=8080HttpsCertificateCN=agent2.realload.com
HttpsCertificateIP=83.150.39.43
LogLevel=info
# AuthTokenEnabled: true or false, if true = the AuthTokenValue must be configured at portal server measuring agent settingsAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log output# AuthTokenValue=# MeasuringAgentNetConnectMode: inbound, outbound or mixed | (mixed = inbound + outbound) | outbound or mixed requires that MeasuringAgentControllerHosts is configuredMeasuringAgentNetConnectMode=inbound
# The outbound connections to Measuring Agent Controller(s), multiple controllers are supported | MeasuringAgentControllerHosts is a list of <host>[<port>], separated by semicolons or commasMeasuringAgentControllerHosts=192.168.1.28[8095]# Settings for outbound or mixed connected Measuring AgentOutboundConnectionsStartNewConnectionIntervalSeconds=3600OutboundConnectionsStopOldConnectionsOlderThanSeconds=18000MeasuringAgentInternalDataDirectory=/home/dkfqs/agent/internalData
MeasuringAgentUsersDataRootDirectory=/home/dkfqs/agent/usersData
ApiV1MaxRequestSizeMB=256ApiV1WorkerThreadBusyTimeoutSeconds=330ApiV1WorkerThreadExecutionTimeoutSeconds=300MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=160000000MaxInboundWebSocketPayloadPerFrame=80000000MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000DataCollectorProcessJavaPath=java
DataCollectorProcessJavaXmx=512m
DataCollectorPropertiesPath=/home/dkfqs/agent/config/datacollector.properties
# Settings for Supported Scripts / Programming LanguagesPowerShellCore6Path=/snap/bin/pwsh
OpenJDK8JavaPath=/opt/OpenJDK/java-se-8u41-ri/bin/java
OpenJDK8JavaJobDefaultXmx=512m
OpenJDK11JavaPath=/opt/OpenJDK/jdk-11.0.1/bin/java
OpenJDK11JavaJobDefaultXmx=512m
# Limits# LimitMaxUsersPerJob=500# LimitMaxJobDurationSeconds=300# Settings for Synthetic MonitoringSyntheticMonitoringDataCollectorProcessJavaXmx=128m
SyntheticMonitoringOpenJDK8JavaJobXmx=256m
SyntheticMonitoringOpenJDK11JavaJobXmx=256m
SyntheticMonitoringLimitMaxUsersPerJob=5SyntheticMonitoringLimitMaxJobDurationSeconds=300SyntheticMonitoringLimitMaxLoopsPerUser=5# Settings for Tests Jobs which require a (virtual) display. If VirtualDisplayPerRemoteUserIdEnabled = false then the value of DebugDisplay is usedDebugDisplay=:0.0
VirtualDisplayPerRemoteUserIdEnabled=trueVirtualDisplayType=Xvfb
XvfbPath=Xvfb
SeleniumTestJobsEnabled=trueSeleniumLimitMaxUsersPerJob=20SeleniumWebBrowserTypesSupported=Chrome,Firefox
SeleniumChromeDriverPath=/home/dkfqs/agent/bin/chromedriver
SeleniumGeckoDriverPath=/home/dkfqs/agent/bin/geckodriver
SeleniumEdgeDriverPath=
First Test - Start the Measuring Agent manually (as dkfqs user)
cd /home/dkfqs/agent/bin
exportCLASSPATH=bcpkix-jdk15on-160.jar:bcprov-jdk15on-160.jar:bctls-jdk15on-160.jar:DKFQSMeasuringAgent.jar
java -Xmx512m -DdkfqsMeasuringAgentProperties=../config/measuringagent.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.measuringagent.internal.StartDKFQSMeasuringAgent
Data Collector service port range from 44444 to 45000LimitMaxUsersPerJob= unlimited
LimitMaxJobDurationSeconds= unlimited
X509 TLS server certificate generated forCN= 192.168.0.51
Internal RSA 2048 bit keypair generated in 373 ms
2021-03-11 18:20:27.947 | QAHTTPd | WARN | QAHTTPd V1.3-U started
2021-03-11 18:20:27.990 | QAHTTPd | INFO | HTTPS server starting at port 80802021-03-11 18:20:28.089 | QAHTTPd | INFO | HTTPS server ready at port 8080
Create the Measuring Agent Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi MeasuringAgent
Measuring Agent Controllers are required to connect outbound connected “Measuring Agents” to the Portal Server. Each Measuring Agent Controller can handle many “outbound” connected Measuring Agents.
The advantage of “outbound” connected Measuring Agents is that they do not require an inbound firewall rule. This makes them relatively easy to install without any administrative effort. However, they must be able to open an “outbound” connection to a “Measuring Agent Controller”.
Outbound connected Measuring Agents support all product features and functionalities as inbound connected Measuring Agents, with the only exception that they cannot be a member of a “Cluster Controller”.
Prerequisites
“Measuring Agent Controllers” can be placed at any network location. They can also run on the same machine where the RealLoad Portal Server is running.
“Measuring Agent Controllers” can be installed on any Linux and Windows system.
Copy the following file to the config directory /home/dkfqs/agentcontroller/config
agentcontroller.properties
Modify the agentcontroller.properties file. Set the following properties:
ServerName
ServerDNSName
HTTPSExternalServerPort
HTTPSInternalServerPort
AuthTokenValue
Copy the following file to the jks directory /home/dkfqs/agentcontroller/jks
dkfqscom.jks
Example: agentcontroller.properties
ServerName=192.168.0.54
ServerDNSName=192.168.0.54
HTTPSExternalServerPort=8095HTTPSInternalServerPort=8095HTTPSKeyStoreFile=/home/dkfqs/agentcontroller/jks/dkfqscom.jks
HTTPSKeyStorePassword=topsecret
LogLevel=info
# AuthTokenEnabled: true or falseAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log outputAuthTokenValue=aaa
# The internal data directory of the agent controllerInternalDataDirectory=/home/dkfqs/agentcontroller/internalData
# The SQLite DB directorySQLiteDBDirectory=/home/dkfqs/agentcontroller/db
# Security: IP black list block time in secondsSecurityIpBlacklistBlockTime=300# WebSockets security settings | inbound WebSocket connections are initiated by Measuring Agents and by the Portal ServerMaxWebSocketConnectTimeSeconds=43200MaxInboundWebSocketTrafficPerConnection=10000000000MaxInboundWebSocketPayloadPerFrame=20000000MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000MaxUnwantedWebSocketFramesPerIpTimeFrame=60MaxUnwantedWebSocketFramesPerIpLimit=10MaxUnauthorizedWebSocketAccessPerIpTimeFrame=60MaxUnauthorizedWebSocketAccessPerIpLimit=60# The max age in seconds for static HTML contentStaticContentMaxAgeTime=7200
Create the Agent Controller Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi AgentController
Register /etc/init.d/AgentController to be started at system boot (root at /etc/init.d):
update-rc.d AgentController defaults
Reboot the system. Login as dkfqs and check /home/dkfqs/agentcontroller/log/AgentController.log
Registration of Agent Controller(s) in the RealLoad Portal Server
Several agent controllers can be registered in the portal, but only one can be a “Default Agent Controller”. It is also possible to operate the portal without a Default Agent Controller.
Sign in to the Portal Server as Administrator and navigate to "Measuring Agents". Then click the "Add Measuring Agent Controller" button:
Enter the Measuring Agent Controller data:
Then "ping" the Agent Controller at application level:
Assigning a User Account to an Agent Controller
Each master (main-) user account can only be assigned to one Agent Controller.
On an Agent Controller click on the Number of "Assigned Users":
Click on the Assign-User icon for the corresponding user account:
In terms of network technology, the cluster controller should be as close as possible to the cluster members.
The simultaneous operation of a cluster controller together with one or more measuring agents on the same machine is possible, although not recommended.
This means that the cluster controller should be operated on its own machine - especially if a cluster contains more than 100 members.
The time difference of the operating system time between the cluster controller and the cluster members must not be greater than one second (1000 ms).
It is recommended to use the same time server for the cluster controller and the cluster members.
The Portal Server supports the use of multiple cluster controllers. Each cluster controller can manage multiple clusters. And each measuring agent can be a member of multiple clusters.
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Install the Cluster Controller
Create the DKFQS account which is running the Cluster Controller
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Cluster Controller
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/controller (as dkfqs user):
cd /home/dkfqs
mkdir controller
Create the following sub-directories at /home/dkfqs/controller (as dkfqs user):
bin
config
internalData
log
scripts
usersData
cd /home/dkfqs/controller
mkdir bin config internalData log scripts usersData
Copy the following files to the bin directory /home/dkfqs/controller/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
DKFQSMeasuringAgent.jar
Copy the following files to the config directory /home/dkfqs/controller/config
clustercontroller.properties
Modify the clustercontroller.properties file. Set the following properties:
HttpsCertificateCN (set the public DNS name or the IP address for the automatically generated SSL/TLS server certificate)
HttpsCertificateIP (set the public IP address for the automatically generated SSL/TLS server certificate)
AuthTokenValue
Example: clustercontroller.properties
HttpsPort=8083HttpsCertificateCN=192.168.0.50
HttpsCertificateIP=192.168.0.50
LogLevel=info
# AuthTokenEnabled: true or false, if true = the AuthTokenValue must be configured at portal server measuring agent cluster settingsAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log outputAuthTokenValue=aberaber
ClusterControllerLogFile=/home/dkfqs/controller/log/ClusterController.log
ClusterControllerInternalDataDirectory=/home/dkfqs/controller/internalData
ClusterControllerUsersDataRootDirectory=/home/dkfqs/controller/usersData
ApiMaxRequestSizeMB=256ApiWorkerThreadBusyTimeoutSeconds=330ApiWorkerThreadExecutionTimeoutSeconds=300MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=83886080MaxInboundWebSocketPayloadPerFrame=20971520MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000
First Test - Start the Cluster Controller manually (as dkfqs user)
cd /home/dkfqs/controller/bin
exportCLASSPATH=bcpkix-jdk15on-160.jar:bcprov-jdk15on-160.jar:bctls-jdk15on-160.jar:DKFQSMeasuringAgent.jar
java -Xmx512m -DdkfqsClusterControllerProperties=../config/clustercontroller.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.measuringagent.clustercontroller.StartDKFQSClusterController
Cluster Controller V4.0.4
Max. Memory=512 MB
AuthTokenEnabled=trueAuthTokenValue= ********
X509 TLS server certificate generated forCN= 192.168.0.50
Internal RSA 2048 bit keypair generated in 305 ms
2022-01-29 20:45:20.118 | QAHTTPd | WARN | QAHTTPd V1.3-Y started
2022-01-29 20:45:20.219 | QAHTTPd | INFO | HTTPS server starting at port 80832022-01-29 20:45:20.278 | QAHTTPd | INFO | HTTPS server ready at port 8083
Create the Cluster Controller Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi ClusterController
Register /etc/init.d/ClusterController to be started at system boot (root at /etc/init.d):
update-rc.d ClusterController defaults
Reboot the system. Login as dkfqs and check /home/dkfqs/controller/log/ClusterController.log
Define a Cluster and Verify the Cluster Controller
Sign-in at the ‘Portal Server’
Select at Top Navigation ‘Measuring Agents & Cluster Controllers’
Add the Cluster
Ping the Cluster Controller at application level
Add the Cluster Members
Ping the Cluster Members by the Cluster Controller, and verify that the absolute value of OS Δ Time for each cluster member is not greater than 1000 ms
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Generate the Certificate Authority (CA) Root Certificate
For technical reasons, the Remote Proxy Recorder generates “fake” web server certificates during operation in order to break the encryption between the web browser and the web servers and to record the data exchanged.
In order for this to work, the Remote Proxy Recorder needs its own CA root certificate, which you then have to import into your browser.
Thus for security reasons, never use a CA root certificate from us or someone else for the Remote Proxy Recorder root certificate. Always create your own CA root certificate.
Example:
C:\Scratch2>openssl genrsa -des3 -out myCAPrivate.key 2048Generating RSA private key, 2048 bit long modulus
.......................+++
.............................+++
unable to write 'random state'e is 65537(0x10001)Enter pass phrase for myCAPrivate.key:
Verifying - Enter pass phrase for myCAPrivate.key:
C:\Scratch2>openssl pkcs8 -topk8 -inform PEM -outform PEM -in myCAPrivate.key -out myCAPrivateKey.pem -nocrypt
Enter pass phrase for myCAPrivate.key:
C:\Scratch2>openssl req -x509 -new -nodes -key myCAPrivate.key -sha256 -days 3700 -out myCARootCert.pem
Enter pass phrase for myCAPrivate.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code)[AU]:CH
State or Province Name (full name)[Some-State]:Bern
Locality Name (eg, city)[]:Bern
Organization Name (eg, company)[Internet Widgits Pty Ltd]:My Pty Ltd
Organizational Unit Name (eg, section)[]:QA
Common Name (e.g. server FQDN or YOUR name)[]:DKFQS Proxy Recorder Root
Email Address []:
C:\Scratch2>dir
Volume in drive C is OS
Volume Serial Number is AEF7-CFB1
Directory of C:\Scratch2
06 Feb 2022 20:44 <DIR> .
06 Feb 2022 20:44 <DIR> ..
06 Feb 2022 20:40 1.743 myCAPrivate.key
06 Feb 2022 20:41 1.704 myCAPrivateKey.pem
06 Feb 2022 20:44 1.350 myCARootCert.pem
3 File(s) 4.797 bytes
2 Dir(s) 310.772.580.352 bytes free
Install the Remote Proxy Recorder
Create the DKFQS account which is running the Remote Proxy Recorder
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Remote Proxy Recorder
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/proxy (as dkfqs user):
cd /home/dkfqs
mkdir proxy
Create the following sub-directories at /home/dkfqs/proxy (as dkfqs user):
bin
config
log
cd /home/dkfqs/proxy
mkdir bin config log
Copy the following files to the bin directory /home/dkfqs/proxy/bin
bcmail-jdk15on-168.jar
bcpg-jdk15on-168.jar
bcpkix-jdk15on-168.jar
bcprov-jdk15on-168.jar
bctls-jdk15on-168.jar
com.dkfqs.remoteproxyrecorder.jar
Copy the following files to the config directory /home/dkfqs/proxy/config
config.properties
myCAPrivateKey.pem (the private key of your self generated CA root certificate)
myCARootCert.pem (your self generated CA root certificate)
Modify the config.properties file. Set (modify) the following properties:
ControlServerHttpsCertificateCN (set the public DNS name or the IP address of the Remote Proxy Recorder)
ControlServerHttpsCertificateIP (set the public IP address of the Remote Proxy Recorder)
ControlServerAuthToken
ProxyServerDefaultCaRootCertFilePath (set the CA root certificate of the proxy)
ProxyServerDefaultCaRootPrivateKeyFilePath (set the private key of the CA root certificate)
Example: config.properties
ControlServerLogLevel=info
ControlServerHttpsPort=8081ControlServerHttpsCertificateCN=proxy2.realload.com
ControlServerHttpsCertificateIP=83.150.39.45
#Note: the control server authentication token is required to connect to the control serverControlServerAuthToken=krungthep
ProxyServerLogLevel=warn
ProxyServerPort=8082ProxyServerDefaultCaRootCertFilePath=/home/dkfqs/proxy/config/myCARootCert.pem
ProxyServerDefaultCaRootPrivateKeyFilePath=/home/dkfqs/proxy/config/myCAPrivateKey.pem
#Note: the proxy authentication credentials are replaced on the fly when the portal user connects via the control interface to the control serverProxyServerDefaultAuthenticationUsername=max
ProxyServerDefaultAuthenticationPassword=meier
First Test - Start the Remote Proxy Recorder manually (as dkfqs user)
cd /home/dkfqs/proxy/bin
exportCLASSPATH=bcmail-jdk15on-168.jar:bcpg-jdk15on-168.jar:bcpkix-jdk15on-168.jar:bcprov-jdk15on-168.jar:bctls-jdk15on-168.jar:com.dkfqs.remoteproxyrecorder.jar
java -Xmx2048m -DconfigProperties=../config/config.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.remoteproxyrecorder.main.StartRemoteProxyRecorder
> Remote Proxy Recorder V0.2.0
> Max. Memory=2048 MB
> Internal RSA 2048 bit keypair generated in 85 ms
> 2021-06-05 23:24:37.710 | QAHTTPd | WARN | QAHTTPd V1.3-V started
> 2021-06-05 23:24:37.710 | QAHTTPd | INFO | HTTPS server starting at port 8081> 2021-06-05 23:24:37.726 | QAHTTPd | INFO | HTTPS server ready at port 8081> 2021-06-05 23:24:38.722 | Proxy | WARN | ProxyRecorder V1.1.0 started at port 8082
Create the Remote Proxy Recorder Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi RemoteProxyRecorder
After that delete CreateNewSystemMonitoringDB.sql and CreateNewUserReplicationDB.sql
Copy the following files to the config directory /home/dkfqs/alertprocessor/config
alertprocessor.properties
twilio.properties
Modify the alertprocessor.properties file. Set the following properties:
ServerName
ServerDNSName
HTTPSExternalServerPort
HTTPSInternalServerPort
AuthTokenValue
JavaScriptProcessorAuthToken
The properties at [#The email server configuration]
Modify the twilio.properties file. Set the following properties:
sid
authToken
fromTwilioPhoneNumber
fromTwilioAlphanumericSenderID
Copy the following file to the jks directory /home/dkfqs/alertprocessor/jks
dkfqscom.jks
Example: alertprocessor.properties
ServerName=alertprocessor.realload.com
ServerDNSName=192.168.0.54
HTTPSExternalServerPort=8099HTTPSInternalServerPort=8099HTTPSKeyStoreFile=/home/dkfqs/alertprocessor/jks/dkfqscom.jks
HTTPSKeyStorePassword=topsecret
LogLevel=info
# AuthTokenEnabled: true or falseAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log outputAuthTokenValue=c***********
# The max time in minutes where the measured data of the OSHI daemons are cachedAlertProcessorDataCacheMaxStorageTimeMinutes=60# The internal data directory of the alert processorInternalDataDirectory=/home/dkfqs/alertprocessor/internalData
# The SQLite DB directorySQLiteDBDirectory=/home/dkfqs/alertprocessor/db
# The users data root directoryUsersDataRootDirectory=/home/dkfqs/alertprocessor/usersData
# Security: IP black list block time in secondsSecurityIpBlacklistBlockTime=300# WebSockets security settings | inbound WebSocket connections are initiated by OSHI daemons and by the portal serverMaxWebSocketConnectTimeSeconds=43200MaxInboundWebSocketTrafficPerConnection=10000000000MaxInboundWebSocketPayloadPerFrame=10000000MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000MaxUnwantedWebSocketFramesPerIpTimeFrame=60MaxUnwantedWebSocketFramesPerIpLimit=20# The max age in seconds for static HTML contentStaticContentMaxAgeTime=7200# The JavaScript Processor configurationConnectToJavaScriptProcessor=trueJavaScriptProcessorHost=127.0.0.1
JavaScriptProcessorPort=8098JavaScriptProcessorAuthToken=b***********
# The supported alert device typesSupportEmailAlertDevices=trueSupportMobileCompanionAlertDevices=trueSupportSmsAlertDevices=true# The email server configurationUsersMailServerHost=192.168.1.4
UsersMailFrom=**********
UsersMailServerAuthUser=**********
UsersMailServerAuthPassword=**********
UsersMailTransmitterThreads=2UsersMailDebugSMTP=false# UsersMailServerPort=587# UsersMailServerStartTLS=true# The class to support the SMS gatewaysmsGatewaysClassNames=com.dkfqs.oshialertprocessor.sms.twilio.TwilioSMSGateway
Create the Alert Processor Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi AlertProcessor
Register /etc/init.d/AlertProcessor to be started at system boot (root at /etc/init.d):
update-rc.d AlertProcessor defaults
Reboot the system. Login as dkfqs and check /home/dkfqs/alertprocessor/log/AlertProcessor.log
Registration of the Alert Processor in the RealLoad Portal Server
Sign in to the Portal Server as Administrator and navigate to "OSHI Alert Processors":
Click the "Add OSHI Alert Processors" button and enter the Alert Processor data:
Ping the Alert Processor at application level:
Then click "Replicate Portal Server Settings to Alert Processor":
Switch on the options "Replicate Portal Server ID" and "Replicate Mobile Companion API Settings" and submit the form:
Testing the Alert Processor
You now need a Portal Server user account and one or more OSHI daemons that are configured to connect to the Alert Processor.
First adjust the oshi-daemon.properties of the OSHI daemons and then restart them:
# The outbound connections to OSHI alert processor(s), multiple alert processors are supported | OshiAlertProcessorHosts is a list of <host>[<port>], separated by semicolons or commasConnectToOshiAlertProcessors=trueOshiAlertProcessorHosts=192.168.0.54[8099]
In the log files of the OSHI daemons you can see that they are trying to establish a connection to the Alert Processor, but this is not possible at this point because there is no authorization to do so.
In the first lines of the log file you can also see the Unique Daemon ID
Now assign a Portal Server user to the Alert Processor in the administrator menu.
Now sign in to the Portal Server with the user account:
Click on "System Monitoring" in the navigation bar at the top:
Click the "OSHI Systems" tab and then click "Add OSHI System":
Enter the description of the system on which the OSHI Daemon is installed and enter the OSHI Daemon Unique ID. All other input fields can be left empty.
Wait 15 seconds and then click on the Refresh Icon:
The OSHI Daemon is now connected to the Alert Processor. Switch it to active and then click the Dashboard tab.
Testing the Alert Devices (Email, Mobile Companion App, SMS)
The OSHI Daemon is now connected to the Alert Processor. Switch it to active and then click the Dashboard tab.
Add an Email alert device
Test the Email alert device
>Check if you received the email. Then also test a Mobile Companion alert device and an SMS alert device. Also check the Alert Notifications Log
Testing the JavaScript Processors
The JavaScript Processors are always/only called indirectly via the Alert Processor. For this purpose, a system monitoring rule is created and its execution is tested.
6 - Ubuntu: OSHI Daemon manual install
Ubuntu: OSHI Daemon Install Instructions
Prerequisites
The OSHI Daemon can be installed on any Linux (and Windows) system and requires about 300 MB of physical memory.
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Install the OSHI Daemon
Create the DKFQS account which is running the OSHI Daemon
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the OSHI Daemon
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/oshi (as dkfqs user):
cd /home/dkfqs
mkdir oshi
Create the following sub-directories at /home/dkfqs/oshi (as dkfqs user):
bin
config
internalData
log
cd /home/dkfqs/oshi
mkdir bin config internalData log
Copy the following files to the bin directory /home/dkfqs/oshi/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
com.dkfqs.oshidaemon.jar
Copy the following files to the config directory /home/dkfqs/oshi/config
oshi-daemon.properties
Modify the oshi-daemon.properties file. Set the following properties:
HttpsPort (the OSHI Daemon port)
HttpsCertificateCN (set the public DNS name or the IP address for the automatically generated SSL/TLS server certificate)
HttpsCertificateIP (set the public IP address for the automatically generated SSL/TLS server certificate)
AuthTokenValue (the value of the OSHI Daemon authentication token)
OshiAlertProcessorHosts (the Alert Processor hosts and ports to which the OSHI daemon connects)
LocalJavaScriptProcessorPort (the locally installed JavaScript processor port)
LocalJavaScriptProcessorAuthTokenValue (the value of the JavaScript Processor authentication token)
Example: oshi-daemon.properties
# The OSHI daemon server settings - for inbound IP connections (normally disabled, EnableOshiDaemonServer=false)# If EnableOshiDaemonServer=false then HttpsPort, HttpsCertificateCN, HttpsCertificateIP, AuthTokenEnabled and AuthTokenValue are not considered/take no effectEnableOshiDaemonServer=falseHttpsPort=8087HttpsCertificateCN=192.168.0.50
HttpsCertificateIP=192.168.0.50
# Authentication Token enabled for inbound IP connections: true or falseAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log outputAuthTokenValue=a*********
# The OSHI daemon log levelLogLevel=info
# The internal data directory of the OSHI daemonOshiDaemonInternalDataDirectory=/home/dkfqs/oshi/internalData
# WebSockets security settingsMaxWebSocketConnectTimeSeconds=43200MaxInboundWebSocketTrafficPerConnection=1000000MaxInboundWebSocketPayloadPerFrame=10000MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000# The OSHI subjects to collect periodically - meaning that historical data are available - don't confuse with OSHI subjects snapshots which can be made at any time# Possible values are: OPERATING_SYSTEM,CPU,MEMORY,NETWORK,NETWORK_CONNECTIONS_LIST,DISK,FILE_SYSTEM,PROCESS_LIST# The CollectOshiSubjectsMaxStorageTimeSeconds should be between 2 and 8 hours (7200 .. 28800 seconds)CollectOshiSubjectsList=CPU,MEMORY,NETWORK
CollectOshiSubjectsIntervalSeconds=5CollectOshiSubjectsMaxStorageTimeSeconds=14400# The (optional) plain text that is displayed in the 'About' tabAboutThisOshiDaemonText=This daemon runs in unprivileged mode, so some detailed values may not be captured or displayed.
# The (optional) support email address in the 'About' tabAboutThisOshiDaemonSupportEmailAddress=support@realload.com
# The outbound connections to OSHI alert processor(s), multiple alert processors are supported | OshiAlertProcessorHosts is a list of <host>[<port>], separated by semicolons or commasConnectToOshiAlertProcessors=trueOshiAlertProcessorHosts=192.168.0.100[8099]# Windows systems only: do not collect PROCESS_LIST (needs too much system resources)# OshiAlertProcessorExcludeOshiSubjectsList=PROCESS_LIST# The local JavaScript processor settings. The JavaScript processor supports to execute monitoring rules of the OSHI alert processor on this OSHI systemLocalJavaScriptProcessorEnabled=trueLocalJavaScriptProcessorPort=8098LocalJavaScriptProcessorAuthTokenValue=b************
Create the OSHI Daemon Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi OshiDaemon
Register /etc/init.d/OshiDaemon to be started at system boot (root at /etc/init.d):
update-rc.d OshiDaemon defaults
Reboot the system. Login as dkfqs and check /home/dkfqs/oshi/log/OshiDaemon.log
Verify the OSHI Daemon installation
In oshi-daemon.properties set EnableOshiDaemonServer=true and restart the OSHI daemon.
Start a Firefox web browser and connect to the OSHI Daemon at HTTPS port.
Check in the Web browser if the OS data are shown.
In oshi-daemon.properties set EnableOshiDaemonServer=false and restart the OSHI daemon.
Ignore the SSL certificate waring:
Enter the OSHI Daemon authentication token:
The main page of the OSHI daemon is then displayed. In the top navigation you can select additional system performance metrics:
7 - Windows: OSHI Daemon installation
Windows: OSHI Daemon Install Instructions
Overview
If you have to monitor a Windows based system using the RealLoad OSHI Daemon follow the instructions on this page to install the agent as a service and have it started on boot.
Requirements
The software can be installed on any recent x64 and ARM Windows system.
It requires about 300 MB of physical memory.
You’ll need to execute the installation script mentioned on this page using a Windows privileged account (Administrator).
You’ll need some familiarity with Powershell.
The installation script will:
Install the Microsoft build of OpenJRE 11, without setting any Java environment variables.
Deploy the ReaLoad OSHI Daemon as a Windows service and start it.
Optionally install the RealLoad JavaScript Processor.
Print the Unique Daemon ID at the end of the process.
Set a random AuthTokenValue for the OSHI Daemon.
If the JavaScript Processor is also to be installed, then a random LocalJavaScriptProcessorAuthTokenValue is generated and configured.
The uninstallation script will:
Stop the OSHI and JSP services.
Remove the base installation folder. This will remove all software (including JRE) and config files.
Set the environment variables uniqueDaemonId, installLocalJSP and oshiAlertProcessorHosts. This allows for a simple re-installation.
Configure optional environment variables used by the installer
Optionally, you can configure the following environment variables which will be used by the installation script:
Env Variable
Description
Default value
installLocalJSP
A boolean value (true/false) indicating whether a local copy of the JavaScript Processor is to be installed.
false
targetDir
The root folder of the OSHI agent installation.
c:\realload
uniqueDaemonId
The OSHI daemon ID. To be used in order to retain an OSHI instance ID when re-installing the agent.
None - A new ID will be generated on startup
oshiAlertProcessorHosts
The Alert Processor Host the agent should connect to.
services-ch1.realload.com[8099]
Examples:
$env:installLocalJSP=$true
Run the installer
Open a powershell window with administrative privileges and change to the location where the installer was unzipped.
If required, set any of the above mentioned environment variables.
You might have to run this powershell command first to give yourself rights to execute unsigned powershell scripts:
Set-ExecutionPolicyBypass-ScopeProcess
Run the installer:
.\install.ps1
Summmarizing, you can automate the installation of the OSHI agent by running these commands in PowerShell (with admin rights):
cd tempfolderSet-ExecutionPolicyBypass-ScopeProcessInvoke-WebRequest-Urihttps://download.realload.com/oshi-win-installer-OutFileoshi-installer.zipExpand-Archive-Path.\oshi-installer.zip-DestinationPath..\install.ps1
The OSHI Daemon and JSP Processor services will be automatically started. The OSHI agent Unique ID will be displayed, so that it can then be configured in the RealLoad Portal.
Operations
Startup
The OSHI Deamon and the optional JavaScript Processor services are configured to automatically start on boot.
Logfiles
You’ll find logfiles in the logs folders:
OSHI daemon: c:\realload\oshi\log
JS Processor: c:\realload\javascript\log
Deinstallation
To remove the OSHI daemon and the JavaScript Processor run the uninstaller script. If you’ve installed the software in a location other than the default folder (C:\realload) then set the targetDir environment variable accordingly.
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Install the JavaScript Processor
Create the DKFQS account which is running the JavaScript Processor
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the JavaScript Processor
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/javascript (as dkfqs user):
cd /home/dkfqs
mkdir javascript
Create the following sub-directories at /home/dkfqs/javascript (as dkfqs user):
bin
config
internalData
log
cd /home/dkfqs/javascript
mkdir bin config internalData log
Copy the following files to the bin directory /home/dkfqs/javascript/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
com.dkfqs.javascriptprocessor.jar
Copy the following files to the config directory /home/dkfqs/javascript/config
javascript-processor.properties
Modify the javascript-processor.properties file. Set the following properties:
HttpsPort (the JavaScript Processor port)
HttpsCertificateCN (set the public DNS name or the IP address for the automatically generated SSL/TLS server certificate)
HttpsCertificateIP (set the public IP address for the automatically generated SSL/TLS server certificate)
AuthTokenValue (the value of the JavaScript Processor authentication token)
JavaScriptHTTPClientEnabled (true or false), this controls whether HTTP requests can be made from JavaScripts.
JavaScriptStartOsProcessesEnabled (true or false), this controls whether OS processes can be started from JavaScripts. OS processes that were not started as daemons are automatically killed after the end of the stript execution (if they still exist then).
JavaScriptStartOsProcessesAsDaemonEnabled (true or false), this controls whether OS processes can be started as daemon from JavaScripts.
Example: javascript-processor.properties
# The JavaScript processor server settingsHttpsPort=8098HttpsCertificateCN=192.168.0.50
HttpsCertificateIP=192.168.0.50
# Authentication Token enabled for inbound IP connections: true or falseAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log outputAuthTokenValue=b***********
# The JavaScript processor log levelLogLevel=info
# The internal data directory of the JavaScript processorInternalDataDirectory=/home/dkfqs/javascript/internalData
# The default abort timeout for processing a JavaScriptJavaScriptAbortProcessingTimeoutSeconds=10# The JavaScript processor featuresJavaScriptHTTPClientEnabled=trueJavaScriptHTTPClientMaxConcurrentInstances=4JavaScriptHTTPClientMaxStoredResponseContentSize=10000000JavaScriptStartOsProcessesEnabled=trueJavaScriptStartOsProcessesMaxInstances=3JavaScriptStartOsProcessesAsDaemonEnabled=true# Network security: the IP black list block time in secondsSecurityIpBlacklistBlockTime=300# Network security: the max. HTTP request sizeMaxHttpRequestSize=2000000# WebSockets security settingsMaxWebSocketConnectTimeSeconds=3600MaxInboundWebSocketTrafficPerConnection=20000000000MaxInboundWebSocketPayloadPerFrame=10000000MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000# The max age in seconds for static HTML contentStaticContentMaxAgeTime=7200
Create the JavaScript Processor Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi JavaScriptProcessor
Register /etc/init.d/JavaScriptProcessor to be started at system boot (root at /etc/init.d):
update-rc.d JavaScriptProcessor defaults
Reboot the system. Login as dkfqs and check /home/dkfqs/javascript/log/JavaScriptProcessor.log
Verify the JavaScript Processor installation
Start a Firefox web browser and connect to the JavaScript Processor at HTTPS port.
Enter and execute a JavaScript.
Ignore the SSL certificate waring:
Enter the JavaScript Processor authentication token:
Click the "Test Processor" tab:
Enter and execute a JavaScript:
9 - Ubuntu: Portal Server manual install
Ubuntu: Portal Server Install Instructions
Prerequisites
Supported Hardware
Amazon EC2 Cloud instances
Own hosted Servers with any Intel or AMD CPU
Minimum Hardware Requirements
Minimum required CPU Cores of Processor: 4
Minimum required RAM: 16 GB
Minimum required Disk: 512 GB
Minimum required Network Speed: 1000 Mbps
Email Server
The Portal Server sends its emails via SMTP. You need an email server which receive and forward these SMTP messages.
Twilio SMS Gateway
If the Portal Server will be operated/configured in such a way that any person can “sign up”
(= self registration) you need a customer account for the Twilio SMS Gateway www.twilio.com/docs/sms
Note
You can add new portal users also directly from the Administrator Menu. In such a case an SMS gateway is not required.
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Install the Portal Server
Create the DKFQS account which is running the Portal Server
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Portal Server
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/portal (as dkfqs user):
cd /home/dkfqs
mkdir portal
Create the following sub-directories at /home/dkfqs/agent (as dkfqs user):
backup
bin
config
db
developerExamples
htdocs
javaUsersLib
jks
log
reportTemplate
scripts
temp
usersLib
usersData
cd /home/dkfqs/portal
mkdir backup bin config db developerExamples htdocs javaUsersLib jks log reportTemplate scripts temp usersLib usersData
Copy the following files to the bin directory /home/dkfqs/portal/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
DKFQS.jar
jasperreports-fonts-6.20.5.jar
Copy the following files to the db directory /home/dkfqs/portal/db
CreateNewAdminDB.sql
CreateNewMonitoringDB.sql
CreateNewOperationsDB.sql
CreateNewUsersDB.sql
Edit the file CreateNewUsersDB.sql and modify the following line to set the nickname, the email, the
phone number and the temporary password of the Admin account. Note: The nickname must always start with “Admin-”
Copy the following file to the htdocs directory /home/dkfqs/portal/htdocs
htdocs.jar
Navigate to /home/dkfqs/portal/htdocs and execute (as dkfqs user):
jar -xvf htdocs.jar
rm htdocs.jar # delete the jar)rm -R META-INF # delete the META-INF directory)
Copy the following files to the javaUsersLib directory /home/dkfqs/portal/javaUsersLib
com.dkfqs.selenium.jar
commons-io-2.13.0.jar
hamcrest-core-1.3.jar
junit-4.13.2.jar
selenium_bundle-4.10.0.jar
selenium_bundle-4.12.1.jar
Copy the following file to the jks directory /home/dkfqs/portal/jks
dkfqscom.jks
Note
The file dkfqscom.jks is an expired SSL server certificate which is needed only temporary in order that you can test the start of the portal server. You should replace this file by an own one as soon as possible.
Copy the following files to the usersLib directory /home/dkfqs/portal/usersLib
com.dkfqs.tools.jar
DKFQSLibrary2.psm1 (optional)
Copy the following files to the bin directory /home/dkfqs/portal/reportTemplate
AnnotationEvent.jasper
Annotations.jasper
ErrorCharts.jasper
ErrorTypeDistribution.jrxml
ErrorTypes.jasper
JobProperties.jasper
MonitoringGroup.jasper
MonitoringGroupAvailability.jasper
MonitoringJob.jasper
MonitoringJobAvailability.jasper
MonitoringJobPerformance.jasper
OverviewStatistics.jasper
SamplesThroughputPerSecond.jasper
SummaryStatistic.jasper
TestResults.jasper
TestSpecificData.jasper
Copy the following files to the bin directory /home/dkfqs/portal/config
dkfqs.properties
rewrite.properties
twilio.properties
Modify the dkfqs.properties file. Set the following properties:
ServerName
ServerDNSName
DNSJavaDefaultDNSServers
UsersMailServerHost
UsersMailFrom
UsersMailServerAuthUser
UsersMailServerAuthPassword
ServerStatusPageEnabledIPList
AlertMailServerHost
AlertMailFrom
AlertMailToList
AlertMailBounceAddress
AlertMailServerAuthUser
AlertMailServerAuthPassword
Example: dkfqs.properties
IsProduction=trueServerName=192.168.0.50
ServerDNSName=192.168.0.50
DiskDocumentRootDirectory=/home/dkfqs/portal/htdocs
SQLiteDBDirectory=/home/dkfqs/portal/db
ReportTemplateDirectory=/home/dkfqs/portal/reportTemplate/
JasperReportsTemporaryDirectory=/home/dkfqs/portal/temp/
UsersDataRootDirectory=/home/dkfqs/portal/usersData
OSProcessLogFile=/home/dkfqs/portal/log/DKFQS.log
LogLevel=info
StaticContentMaxAgeTime=7200MaxHTTPRequestSize=20240000MaxInvalidAnonymousSessionsPerIPLimit=32AnonymousSessionTimeout=1200MaxAnonymousSessionTime=21600MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=67108864MaxInboundWebSocketPayloadPerFrame=1048576MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000HTTPExternalServerPort=80HTTPInternalServerPort=8000HTTPSExternalServerPort=443HTTPSInternalServerPort=8001HTTPSKeyStoreFile=/home/dkfqs/portal/jks/dkfqscom.jks
HTTPSKeyStorePassword=topsecret
#FileTreeApiMaxRequestSizeMB=256FileTreeApiWorkerThreadBusyTimeoutSeconds=330FileTreeApiWorkerThreadExecutionTimeoutSeconds=300TestjobsApiMaxRequestSizeMB=256TestjobsApiWorkerThreadBusyTimeoutSeconds=330TestjobsApiWorkerThreadExecutionTimeoutSeconds=300#DNSJavaDefaultDNSServers=8.8.8.8,8.8.4.4
#JavaSDK8BinaryPath=/opt/OpenJDK/java-se-8u41-ri/bin
JavaSDK11BinaryPath=/opt/OpenJDK/jdk-11.0.1/bin
HTTPTestWizardJavaCodeLibraries=/home/dkfqs/portal/usersLib/com.dkfqs.tools.jar
#UserSignInURL=/SignIn
UsersMailServerHost=192.168.1.4
UsersMailFrom=xxxxxxxxx@xxxxxxx.com
UsersMailServerAuthUser=xxxxxxxxx@xxxxxxx.com
UsersMailServerAuthPassword=*********
UsersMailTransmitterThreads=2UsersMailDebugSMTP=false#smsGatewaysClassNames=com.dkfqs.server.sms.twilio.TwilioSMSGateway
## ServerStatusPageEnabledIPList=127.0.0.1,192.168.0.99ServerStatusPageEnabledIPList=*.*.*.*
AdminSignInURL=/AdminSignIn
AlertMailEnabled=trueAlertMailServerHost=192.168.1.4
AlertMailFrom=xxxxxxxxx@xxxxxxx.com
AlertMailToList=yyyyyyyyy@xxxxxxx.com,zzzzzzzzz@xxxxxxx.com
AlertMailBounceAddress=bbbbbbb@xxxxxxx.com
AlertMailServerAuthUser=xxxxxxxxx@xxxxxxx.com
AlertMailServerAuthPassword=*******
AlertMailDebugSMTP=falseAlertMailNotifyStartup=false#SecurityIpBlacklistBlockTime=900SecurityMaxRequestsPerIpLimit=200SecurityMaxRequestsPerIpTimeFrame=10SecurityMaxInvalidRequestsPerIpLimit=12SecurityMaxInvalidRequestsPerIpTimeFrame=60SecurityMaxAnonymousFormSubmitPerIpLimit=8SecurityMaxAnonymousFormSubmitPerIpTimeFrame=60SecurityMaxAuthenticationFailuresPerIpLimit=5SecurityMaxAuthenticationFailuresPerIpTimeFrame=60#MeasuringAgentConnectTimeout=10# Support of license provider 'Real Load Pty Ltd / nopCommerce', if enabled then the LicenseProviderRealLoadPtyLtdNopCommerceCARootFileName is located in the config directory of the portal serverLicenseProviderRealLoadPtyLtdNopCommerceEnabled=trueLicenseProviderRealLoadPtyLtdNopCommerceCARootFileName=nopCommerceCARoot.pem
# Synthetic Monitoring settingsMonitoringJobSchedulerMainThreadIntervalSeconds=10MonitoringJobSchedulerInitialDBLogLevel=warn
MonitoringJobSchedulerInitialStdoutLogLevel=info
MonitoringJobSchedulerInitialUserFileLogLevel=info
MonitoringGroupThreadsStartDelayMillis=1000# Support for compiling Junit and Selenium TestsJavaUsersLibDirectory=/home/dkfqs/portal/javaUsersLib
JavaJUnit4CompilerLibraries=hamcrest-core-1.3.jar,junit-4.13.2.jar
JavaJUnit4TestExecutionLibraries=com.dkfqs.selenium.jar,com.dkfqs.tools.jar,commons-io-2.13.0.jar,hamcrest-core-1.3.jar,junit-4.13.2.jar
JavaSelenium4CompilerLibraries=hamcrest-core-1.3.jar,junit-4.13.2.jar,selenium_bundle-4.12.1.jar,com.dkfqs.selenium.jar
JavaSelenium4TestExecutionLibraries=selenium_bundle-4.12.1.jar,com.dkfqs.selenium.jar,com.dkfqs.tools.jar,commons-io-2.13.0.jar,hamcrest-core-1.3.jar,junit-4.13.2.jar
Modify the twilio.properties file. Set the following properties:
First Test - Start the Portal Server manually (as dkfqs user)
cd /home/dkfqs/portal/bin
exportCLASSPATH=bcpkix-jdk15on-160.jar:bcprov-jdk15on-160.jar:bctls-jdk15on-160.jar:DKFQS.jar
java -Xmx2048m -DdkfqsProperties=../config/dkfqs.properties -DrewriteProperties=../config/rewrite.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.server.internal.StartDKFQSserver
Internal RSA 2048 bit keypair generated in 1220 ms
2021-03-10 22:27:25.040 | QAHTTPd | INFO | SQL connection pool for DB "UsersDB" initialized
2021-03-10 22:27:25.062 | QAHTTPd | INFO | SQL connection pool for DB "AdminAccountsDB" initialized
2021-03-10 22:27:25.068 | QAHTTPd | INFO | Alarm adapter "IP Blacklist Alarm Adapter" started
2021-03-10 22:27:25.069 | QAHTTPd | WARN | QAHTTPd V1.3-U started
2021-03-10 22:27:25.071 | QAHTTPd | INFO | Execute PreUpStartupLoadIPRangeBlacklist
2021-03-10 22:27:25.082 | QAHTTPd | INFO | HTTP server starting at port 80002021-03-10 22:27:25.109 | QAHTTPd | INFO | HTTP server ready at port 80002021-03-10 22:27:25.110 | QAHTTPd | INFO | HTTPS server starting at port 80012021-03-10 22:27:25.124 | QAHTTPd | INFO | HTTPS server ready at port 80012021-03-10 22:27:25.821 | EMAIL-1 | INFO | Email transmitter thread started
2021-03-10 22:27:25.822 | EMAIL-2 | INFO | Email transmitter thread started
2021-03-10 22:27:25.828 | main | INFO | Twilio SMS Gateway registered
2021-03-10 22:27:25.853 | main | INFO | Twilio SMS Gateway initialized
2021-03-10 22:27:25.857 | SMS-Dispatcher | INFO | Thread started
Change owner and file protection of /etc/init.d/DKFQS (root at /etc/init.d):
chown root DKFQS
chgrp root DKFQS
chmod 755 DKFQS
Register /etc/init.d/DKFQS to be started at system boot (root at /etc/init.d):
update-rc.d DKFQS defaults
Reboot the system. Then check /home/dkfqs/portal/log/DKFQS.log
Administrator Sign In
Enter in your browser https://admin-portal-host/admin .
You will get a browser warning because the SSL server certificate is expired. Ignore the warning and enter
in the Sign In the email address and the password as you have set in CreateNewAdminDB.sql.
You will now asked to set a new password. Then you are signed in.
Disable Sign Up if you don’t have an SMS gateway:
User accounts can be added directly:
Replace the SSL Server Certificate
If you or your company can already issue SSL server certificates you can skip the next sub-chapter.
Continue in such a case with “Convert and Install the SSL Server Certificate”.
Get a Let's Encrypt SSL Server Certificate | Ubuntu 20
Make sure that your portal server has a public, valid DNS name.
Create a Cron Job to Renew the Let's Encrypt SSL Certificate
Create at your home directory the sub-directory system_cronjobs_scripts and add/edit the file “DKFQS_certbot_renew” in this directory. Replace the ********* placeholders with your real values.
#!/bin/sh
## renew the letsencrypt DKFQS certificate# =======================================certbot renew
## set the default working directorycd /home/*********/system_cronjobs_scripts
## cleanup in any caserm -f *.jks
rm -f *.p12
## convert the letsencrypt certificate to PKCS12 and place it in the default directoryopenssl pkcs12 -export -in /etc/letsencrypt/live/*********/fullchain.pem -inkey /etc/letsencrypt/live/*********/privkey.pem -out ./*********.p12 -passin pass:******** -passout pass:********
## convert the PKCS12 certificate to a Java keystoreecho ******** | keytool -importkeystore -srckeystore *********.p12 -srcstoretype PKCS12 -destkeystore *********.jks -deststoretype JKS -storepass ********
## update DKFQS keystore filecp *********.jks /home/dkfqs/portal/jks
chown dkfqs /home/dkfqs/portal/jks/*********.jks
chgrp dkfqs /home/dkfqs/portal/jks/*********.jks
chmod 600 /home/dkfqs/portal/jks/*********.jks
## restart DKFQS server/etc/init.d/DKFQS stop
sleep 5sudo /etc/init.d/DKFQS start
## cleanup again in any caserm -f *.jks
rm -f *.p12
## display DKFQS log filesleep 5cat /home/dkfqs/portal/log/DKFQS.log
## all doneexit0
sudo bash # become rootchmod 700 DKFQS_certbot_renew # change file protection and set execute bit./DKFQS_certbot_renew # try out manually
Add the file to crontab. Important: The last line in crontab must be an empty line!