> ## Documentation Index
> Fetch the complete documentation index at: https://docs.germainux.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GermainUX Services

> GermainUX Services process telemetry in real time to support alerting, analytics, session tracking, data aggregation, storage, insights, and automated actions.

Service
`Enterprise`

Availability
2024.1

> [card] [Install the services on Windows](#install-the-services-on-windows)
>
> Setup with WinSW

> [card] [Configure the services](#configure-the-services)
>
> Edit YAML config files

> [card] [Validate the deployment](#validate-the-deployment)
>
> Check services are running

> [card] [Troubleshooting](#troubleshooting)
>
> Resolve service startup problems

**GermainUX Services**

GermainUX Services process telemetry in real time to support alerting, analytics, session tracking, data aggregation, storage, insights, and automated actions.

This guide explains how to install and configure these services from the GermainUX Service distribution.

## Prerequisites

Before installing the services, confirm that:

* The GermainUX datastore is installed and accessible.
* Germain Enterprise and its required infrastructure components are installed.
* A compatible Java runtime is available.
* The required .NET Framework is installed when deploying the services on Windows.
* The service account can access the installation, configuration, and log directories.
* Required network connections are allowed.
* The GermainUX license has been deployed.

## Extract the service distribution

Extract the GermainUX Service distribution to the desired installation directory.

Example:

```text theme={null}
Linux:   /opt/germainapm
Windows: C:\germainapm
```

In this guide, `SERVICES_HOME` refers to that directory.

If the supplied scripts require the `APM_HOME` environment variable, set it to the same location.

### Linux

```text theme={null}
export APM_HOME=/opt/germainapm
export SERVICES_HOME=/opt/germainapm
```

To make these variables persistent, configure them for the account under which the GermainUX services run.

### Windows

Set:

```text theme={null}
APM_HOME=C:\germainapm
SERVICES_HOME=C:\germainapm
```

You can configure these variables through Windows System Properties or your organization’s service-deployment process.

## GermainUX services

The distribution includes the following services:

| Service | Configuration file | Purpose |
| - | - | - |
| Action | `action-services.yml` | Executes alert consequences and automated actions |
| Aggregation | `aggregator-services.yml` | Aggregates collected data for analysis and reporting |
| Analytics | `analytics-services.yml` | Processes analytics, insights, and related calculations |
| Session Tracking | `session-services.yml` | Processes and correlates user-session activity |
| Storage | `storage-services.yml` | Processes and stores incoming telemetry |
| Real-Time Metrics | `rtm-services.yml` | Calculates and processes metrics in real time |

The configuration files are located under:

```text theme={null}
SERVICES_HOME/config
```

## Install the services on Windows

The GermainUX Service distribution uses WinSW to install and manage the services on Windows.

### 1 Select the correct .NET Framework version

Open:

```text theme={null}
SERVICES_HOME\bin\WinSW
```

Run the script corresponding to the highest applicable .NET Framework version installed on the server:

| Installed .NET Framework | Script |
| - | - |
| Earlier than version 4 | `set-dotnet-2.bat` |
| Version 4 through 4.6 | `set-dotnet-4.bat` |
| Version 4.6.1 or later | `set-dotnet-461.bat` |

If necessary, use Microsoft’s instructions to [determine the installed .NET Framework version](https://learn.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed).

Open Command Prompt as an administrator before running the selected script.

### 2. Review the service definitions

The `SERVICES_HOME\bin` directory contains an XML definition for each service.

Before installation, verify:

* Java executable or Java home
* Service installation directory
* YAML configuration-file path
* JVM memory settings
* Log directory
* Startup arguments
* Service name and display name
* Windows service account, when applicable

### 3. Install each service

From an administrative Command Prompt, navigate to:

```text theme={null}
cd C:\germainapm\bin
```

Install each required service:

```text theme={null}
<service-name>.exe install
```

Replace `<service-name>` with the executable name provided for the service.

Repeat the command for every GermainUX service required by the deployment.

### 4. Confirm that the services were installed

Open the Windows Services console:

```text theme={null}
services.msc
```

Verify that each installed GermainUX service appears in the service list.

Configure the startup type according to your deployment requirements. Production services are normally configured to start automatically.

## Configure the services

Each service is configured through its YAML file under:

```text theme={null}
SERVICES_HOME/config
```

Before starting a service, review its configuration and verify:

* ZooKeeper connection
* Kafka or legacy ActiveMQ connection, depending on the GermainUX release
* Hazelcast connection
* Datastore connection
* Environment or configuration-root name
* Network ports and advertised hostnames

> [accordion] Show all 9
>
> * Authentication and TLS settings
> * Log level and output directory
> * Service-specific processing settings

Use spaces—not tabs—for YAML indentation. Incorrect indentation can prevent a service from starting or cause settings to be interpreted incorrectly.

Back up each configuration file before modifying it.

## Configure JVM memory

Java runtime options, including minimum and maximum heap sizes, can be adjusted in the corresponding service XML file under:

```text theme={null}
SERVICES_HOME/bin
```

Typical JVM memory options include:

```text theme={null}
-Xms<size>
-Xmx<size>
```

For example:

```text theme={null}
-Xms1g
-Xmx4g
```

Choose values according to the service workload and available server memory. Do not allocate the entire host memory to the Java services; reserve sufficient capacity for the operating system, Tomcat, infrastructure components, and the datastore when colocated.

Restart the affected service after changing its XML definition or JVM settings.

## Startup order

Start the GermainUX environment in the following order:

**1. Start the datastore**

**2. Start ZooKeeper**

**3. Start Kafka—or ActiveMQ for legacy GermainUX releases**

**4. Start Hazelcast**

**5. Start Germain Enterprise on Tomcat**

**6. Start the GermainUX services**

**7. Start the Germain nodes and other monitoring components**

**8. Verify that data is being collected and processed**

Wait for each infrastructure component to become available before starting the services that depend on it.

## Shutdown order

Use the reverse order when shutting down the environment:

**1. Stop monitoring components and Germain nodes**

**2. Stop the GermainUX services**

**3. Stop Germain Enterprise**

**4. Stop Hazelcast**

**5. Stop Kafka or legacy ActiveMQ**

**6. Stop ZooKeeper**

**7. Stop the datastore, when required**

A controlled shutdown reduces the risk of interrupted processing or incomplete writes.

## Validate the deployment

After starting the services, confirm that:

* Every required Windows service is running.
* No service enters a repeated restart cycle.
* The service logs contain no configuration or connection errors.
* Each service connects to ZooKeeper, Hazelcast, Kafka or ActiveMQ, and the datastore as required.
* Incoming telemetry is stored successfully.
* Real-time metrics and aggregations are generated.

> [accordion] Show all 9
>
> * User sessions are processed.
> * Alerts and automated actions execute as expected.
> * Data appears in the GermainUX Workspace.

Check a Windows service from the command line:

```text theme={null}
sc query "<service-name>"
```

You can also review its state through `services.msc`.

## Troubleshooting

### A service does not start

Check for:

* Missing or incompatible Java or .NET Framework
* Incorrect paths in the service XML definition
* Invalid YAML syntax
* Insufficient JVM memory
* A port conflict
* Incorrect file permissions
* An unavailable infrastructure dependency
* An invalid service account or password

Review the service log and Windows Event Viewer for the first relevant error.

### A service starts and then stops

This usually indicates an application-level startup failure. Verify:

* Configuration-file paths
* YAML formatting
* ZooKeeper configuration root
* Datastore connectivity
* Kafka or ActiveMQ connectivity
* Hazelcast availability
* Authentication credentials
* TLS certificates and truststores

Running the underlying Java process interactively may provide a more detailed startup error than the Windows service wrapper.

### Configuration changes are not applied

After changing a YAML file or service XML definition:

**1. Confirm that you edited the file used by the installed service**

**2. Validate the YAML syntax**

**3. Restart the affected service**

**4. Review the startup log to confirm that the expected configuration was loaded**

### A service cannot write logs

Confirm that:

* The log directory exists.
* The Windows service account has write permission.
* The disk has sufficient free space.
* Antivirus or endpoint-security software is not blocking file creation.
* Log rotation is configured to prevent unbounded disk usage.

## Next step

After all required services are installed and running, initialize the GermainUX configuration using the [GermainUX Initial Configuration](https://docs.germainux.com/main/germain-ux-init-configuration.md) procedure.

Source: GermainUX Services.

## Get Help

> [card] [Contact GermainUX Support](https://docs.germainux.com/main/support.md)
>
> The GermainUX team helps you get up and running faster, empower your team, turn data into actionable insights, and optimize performance to deliver measurable business outcomes.

> [card] Can't find what you need?
>
> Search all GermainUX docs with **Ctrl + K**, or use the feedback buttons at the bottom of this page to tell us what is missing.

The content of this document is proprietary to GERMAIN SOFTWARE.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.