Remote Management (xm_admin)
This module provides secure remote administration capabilities for NXLog Agent installations via JSON or SOAP over HTTP(S), making it easy to implement administrative scripts or create plugins for system monitoring tools such as Nagios, Munin, or Zabbix. With this module, NXLog Agent can accept or initiate connections over TCP, SSL, and Unix domain sockets.
Although the module can both initiate and accept connections, the direction of HTTP(S) requests is always the same: the module receives requests and returns an HTTP(S) response.
NXLog Platform uses this module to manage agents and requires that agent configurations contain certain elements. For more information, see NXLog Agent connectivity in the NXLog Platform User Guide.
| To examine the supported platforms, see the list of installation packages. |
Configuration
The xm_admin module accepts the following directives in addition to the common module directives.
Required directives
One of the following mutually exclusive directives is required for the module to start.
The module connects to this IP address or hostname. If using a hostname, the module resolves the hostname to an IP address on each new connection. You can define the port number by appending it to the IP address or hostname using a colon as a separator ( IPv6 addresses must be enclosed in square brackets ( |
|
The module listens for connections on this IP address or DNS hostname.
The default is You can define the port number by appending it to the IP address or hostname using a colon as a separator ( |
TLS/SSL directives
The following directives configure secure data transfer via TLS/SSL.
Set this directive to |
||||||||||||||||
Set this directive to |
||||||||||||||||
Set this directive to |
||||||||||||||||
Set this directive to the path of a directory containing Certificate Authority (CA) certificates.
The module uses these certificates to verify the certificate presented by the remote host.
Name the certificate files using the OpenSSL hashed format: the hash of the certificate followed by
For example, if the certificate hash is To trust a remote host’s self-signed certificate, include a copy of it in this directory. |
||||||||||||||||
Set this directive to the path of the Certificate Authority (CA) certificate used to verify the certificate presented by the remote host. To trust a remote host’s self-signed certificate, specify the remote host’s certificate itself. For certificates signed by an intermediate CA, the specified certificate must contain the complete certificate chain (certificate bundle). |
||||||||||||||||
Set this directive to a PCRE2-compliant regular expression to locate a suitable Certificate Authority (CA) certificate. This directive is supported on Windows and macOS. On Windows, the certificate must be in the Windows Certificate Store. On macOS, the certificate must be in the system keychain. The pattern must be in the format
This produces the following output in the NXLog Agent log file:
If the pattern matches multiple certificates, NXLog Agent uses the first match. If the certificate changes, restart NXLog Agent to apply the new certificate. This directive is mutually exclusive with the CAThumbprint, CADir, and CAFile directives.
|
||||||||||||||||
Set this directive to the thumbprint of the Certificate Authority (CA) certificate used to verify the certificate presented by the remote host. This directive is supported on Windows and macOS. On Windows, copy the hexadecimal fingerprint string from Windows Certificate Manager (certmgr.msc). The certificate must be in a Windows certificate store accessible by NXLog Agent. On macOS, obtain the hexadecimal fingerprint string from the Keychain Access application. The certificate must be accessible in the system keychain. Whitespaces and colons are automatically removed.
|
||||||||||||||||
Set this directive to the path of the certificate file to present to the remote host during the TLS/SSL handshake. |
||||||||||||||||
Set this directive to the path of the private key file corresponding to the certificate specified by CertFile. |
||||||||||||||||
Set this directive to a PCRE2-compliant pattern to identify the certificate and its corresponding private key.
The pattern must use the format On Windows, import the certificate in PFX format into the On macOS, ensure the certificate and its private key are present in the System Keychain ( If the pattern matches multiple certificates, NXLog Agent uses the first match. If the certificate changes, restart NXLog Agent to apply the new certificate. This directive is mutually exclusive with the CertThumbprint, CertFile and CertKeyFile directives. For example:
or
This produces the following output in the NXLog Agent log file:
|
||||||||||||||||
Set this directive to the thumbprint of the certificate to present to the remote server during the TLS/SSL handshake. Whitespaces and colons are automatically removed. This directive is supported on Windows and macOS.
On Windows, copy the hexadecimal fingerprint string from Windows Certificate Manager (certmgr.msc).
Import the certificate to the
When the global directive UseCNGCertificates is set to
When UseCNGCertificates is set to On macOS, obtain the hexadecimal fingerprint string from the Keychain Access application.
The certificate and its associated private key must be present in the System Keychain ( For example:
This directive is mutually exclusive with the CertFile and CertKeyFile directives.
|
||||||||||||||||
Set this directive to the path of a directory containing certificate revocation list (CRL) files.
The module uses these files to reject connections from hosts presenting a revoked certificate.
Name the files using the OpenSSL hashed format: the hash of the issuer followed by
For example, if the hash is |
||||||||||||||||
Set this directive to the path of the certificate revocation list (CRL) file used to reject connections from hosts presenting a revoked certificate. To generate a CRL file using OpenSSL:
|
||||||||||||||||
Set this directive to the path of a file containing Diffie-Hellman parameters for key exchange. Generate the parameters using dhparam(1ssl). If this directive is not set, the module uses default parameters. See the OpenSSL Wiki for further details. |
||||||||||||||||
Set this directive to the passphrase of the private key specified by CertKeyFile. This directive applies only to encrypted private keys. To generate a private key with Triple DES encryption using OpenSSL:
|
||||||||||||||||
Set this directive to This directive is only supported on Windows. |
||||||||||||||||
Set this directive to |
||||||||||||||||
Set this directive to |
||||||||||||||||
Set this directive to the signature algorithm parameter to pass to the Windows SSL library. Accepted values depend on the available encryption providers. This directive is only supported on Windows. |
||||||||||||||||
Set this directive to the hostname to use for Server Name Indication (SNI). |
||||||||||||||||
Set this directive to override the permitted cipher list for TLSv1.2 and below.
Use the format described in the ciphers(1ssl) man page.
For example, specify
|
||||||||||||||||
Set this directive to override the permitted cipher list for TLSv1.3. Use the same format as SSLCipher. Refer to the OpenSSL documentation for a list of valid TLS v1.3 cipher suites. The default is:
|
||||||||||||||||
Set this directive to
|
||||||||||||||||
Set this directive to restrict the TLS/SSL protocols the module accepts.
Specify a comma-separated list of the following values: |
||||||||||||||||
Set this directive to |
||||||||||||||||
Set this directive to This directive depends on the values of the AllowUntrusted and RequireCert directives:
|
||||||||||||||||
Set this directive to |
Optional directives
This block directive makes a directory accessible via the GetFile and PutFile requests. These requests use the ACL name along with the filename. You can specify this directive multiple times for different directories.
|
|||
Set this directive to restrict incoming connections to specific IP addresses or networks.
You can specify this directive multiple times to allow multiple IPs or networks.
If The following IP address formats may be used:
|
|||
Set this directive to deny incoming connections from specific IP addresses or networks.
You can specify this directive multiple times to deny multiple IPs or networks.
If The following IP address formats may be used:
|
|||
Set this directive to limit the number of concurrent active connections for a listening TCP socket.
The default is
|
|||
Set this directive to close TCP connections that have been idle for longer than the specified number of seconds. The minimum value is 15 seconds. If this directive is not set, the module keeps idle TCP connections open indefinitely. |
|||
Set this directive to The default is This directive is only supported on Windows. |
|||
Set this directive to The default is |
|||
Set this directive to The default is This directive is not supported on Windows. |
|||
This directive sets the number of seconds that the module waits for an incoming request.
If a valid request does not arrive before the timer expires, the module resets the connection.
It accepts values between |
|||
Block directive to define custom key-value pairs to add metadata to an agent, such as the FQDN, geo-location, department, admin contact information, and so on. The module returns labels as part of the response to a ServerInfo API request. You can set label values statically by specifying a string, a constant, or an environment variable. You can also set values by calling functions or using the include_stdout directive to execute a script. Label values are resolved only once during agent startup. Event fields and module variables result in an Undef value since these are not available when processing labels during agent startup. Labels should adhere to the POSIX.1-2017 standard for environment variables. Label names can only contain underscores and alphanumeric characters. The first character of a label name cannot be a digit. Symbols in label values should belong to the portable character set. See Setting agent labels below for an example. |
|||
This optional directive sets the reconnect interval in seconds. If it is set, the module attempts to reconnect in every defined second. If it is not set, the reconnect interval will start at 1 second and double with every attempt. In the latter case, when the system decides that the reconnection is successful, the reconnect interval is immediately reset to 1 sec.
|
|||
This optional directive defines the behavior when the connection with the remote host is lost.
When set to NOTE: The Reconnect directive only works when used in conjunction with the Host directive. |
|||
This directive specifies how much time, in seconds, the module should wait to acquire a connection before it reverts the managed configuration file to the previous version.
It accepts values between See PutFile for more information on configuration reversion. |
|||
This directive sets the connection type. It can be one of the following:
|
Functions
The following functions are exported by xm_admin.
To use these functions you must use the module instance name.
For example, for a module instance named admin1 you must use admin1->get_label().
|
Remote Management API
The way you request information from the API depends on whether you’re using JSON or SOAP.
-
JSON
-
SOAP
When using JSON, the HTTP POST request must include the Content-Type HTTP header with the value set to application/json.
The following is an example header:
POST / HTTP/1.1
Host: 192.168.1.123:8080
Content-Type: application/json; charset=utf-8
Content-Length: nnn
Include the request details in a JSON object with the key name msg.
This object should contain the following key/values:
-
command - A string value specifying the name of the method you’re requesting. This value is required.
-
params - A JSON object containing the required parameters. May be omitted for methods that do not require additional parameters.
You must send the JSON object in the body of the POST request as raw data. The following is a JSON request for ServerInfo.
{
"msg": {
"command": "serverInfo",
"params": {
"with-extensioninfo": true,
"with-routeinfo": false
}
}
}
Below is an example response header to the above request.
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: nnnn
When using SOAP, the HTTP POST request must include the Content-Type HTTP header with the value set to text/xml.
The following is an example header:
POST / HTTP/1.1
Host: 192.168.1.123:8080
Content-Type: text/xml; charset=utf-8
Content-Length: nnn
Add the request details to the Body element.
You must send the XML data in the body of the POST request as raw data.
The following is a SOAP request for ServerInfo.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<adm:serverInfo xmlns:adm="http://log4ensics.com/2010/AdminInterface">
<with-extensioninfo>true</with-extensioninfo>
<with-routeinfo>false</with-routeinfo>
</adm:serverInfo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Below is an example response header to the above request.
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: nnnn
Agent UUID
Each NXLog Agent installation is assigned a universally unique identifier (UUID). The agent generates the UUID the first time it starts and persists it across restarts in the agent’s data directory:
- Linux
-
/opt/nxlog/var/spool/nxlog - Windows
-
C:\Program Files\nxlog\databy default
NXLog Platform uses the UUID to identify individual agents in the management interface. When NXLog Platform enrolls an agent, it sends a new UUID and a cryptographic signature via the SetUid API call. The signature binds the UUID to a specific NXLog Platform instance, confirming the agent is enrolled there. The GetUid endpoint retrieves the current UUID and, optionally, its signature.
API endpoints
The following table lists the available xm_admin API endpoints. Click on each endpoint for details.
| Endpoint | Description |
|---|---|
Download a file from the NXLog Agent host. |
|
Download the NXLog Agent log file. |
|
Retrieve the unique identifier (UID) of the NXLog Agent installation. |
|
Request information about a module instance. |
|
Restart a module instance. |
|
Start a module instance. |
|
Stop a module instance. |
|
Upload a file to the NXLog Agent host. |
|
Request information about a route. |
|
Restart a route. |
|
Start a route. |
|
Stop a route. |
|
Request information about NXLog Agent and its host. |
|
Restart all module instances. |
|
Start all module instances. |
|
Stops all input, processor, and output module instances. |
|
Set the NXLog Agent’s unique identifier (UID) and signature. |
Examples
The following is a basic configuration that listens for connections on all available network interfaces on port 8080. This configuration is more suitable for testing and troubleshooting.
%CERTDIR% and %CONFDIR% are constants defined in the default NXLog Agent configuration.
<Extension admin>
Module xm_admin
ListenAddr 0.0.0.0:8080
SocketType TCP
<ACL conf>
Directory %CONFDIR%
AllowRead TRUE
AllowWrite TRUE
</ACL>
<ACL cert>
Directory %CERTDIR%
AllowRead TRUE
AllowWrite TRUE
</ACL>
</Extension>
This configuration uses TLS/SSL certificates for secure communication with the remote host.
%CERTDIR% and %CONFDIR% are constants defined in the default NXLog Agent configuration.
<Extension admin>
Module xm_admin
Host agents.nxlog.example.com:5515
SocketType SSL
CAFile %CERTDIR%/agent-ca.pem (1)
CertFile %CERTDIR%/agent-cert.pem (2)
CertKeyFile %CERTDIR%/agent-key.pem (3)
<ACL conf>
Directory %CONFDIR%
AllowRead TRUE
AllowWrite TRUE
</ACL>
<ACL cert>
Directory %CERTDIR%
AllowRead TRUE
AllowWrite TRUE
</ACL>
<ACL logs> (4)
Directory /tmp/logs
AllowRead TRUE
AllowWrite TRUE
</ACL>
</Extension>
| 1 | The CAFile directive specifies the path of the Certificate Authority (CA) certificate. |
| 2 | The CertFile directive specifies the path of the local server’s certificate. |
| 3 | The CertKeyFile directive specifies the path of the server’s certificate private key. |
| 4 | A custom ACL named logs that allows GetFile and PutFile requests for the specified directory. |
This configuration sets three static labels:
When using define or envvar, the values must be enclosed in quotes as shown below.
It also sets labels using two other methods:
-
The include_stdout general directive to set labels via a script.
-
The hostname_fqdn() function to set the host_fqdn label.
include_stdout executes scripts during agent startup with elevated privileges.
Use this feature cautiously, as it poses a security risk if the script is modified maliciously.
|
define BASE /opt/nxlog
envvar NXLOG_OS
<Extension admin>
Module xm_admin
...
<labels>
os_name "Debian"
agent_base "%BASE%"
os "%NXLOG_OS%"
include_stdout /path/to/labels.sh
host_fqdn hostname_fqdn()
</labels>
</Extension>
|
On Microsoft Windows, if the NXLog Agent service is running with a custom user account and NXLog Agent is managed from NXLog Platform, the account needs to be added to the built-in Performance Monitor Users Windows group to be able to access performance counter data. If not, the following error will be logged in the log file:
Furthermore, an error may be logged when NXLog Agent is configured to collect events from Windows Event Log:
This happens when the user account does not have permission to access the specified Windows Event Log channels. Refer to Access denied to a Windows Event Log channel in the Troubleshooting section for instructions on how to resolve this error. |