Configuring SolarWinds Network Performance Monitor integrations
To collect CPU, memory, disk, network, server nodes (hosts), metrics, and events from the SolarWinds Network Performance Monitor SQL server database using an SQL query, install the SolarWinds Network Performance Monitor integration.
Gathering data
The SolarWinds Network Performance Monitor integration uses a remote-only sensor that connects to
a SolarWinds Network Performance Monitor instance and collects the following information: ...
-
Host entities and metrics: cpu, memory, disk, network
-
Server nodes (hosts)
-
Metrics
-
Events
Verifying prerequisites
You must have your SolarWinds account username and password to complete the integration.
Installing
- Verify the public GA image path of the integration for SolarWinds Network Performance Monitor
(for example:
cp.icr.io/cp/cp4waiops/ibm-mm-cdc-conn:4.3-latest
). - Log in as a root user on a Linux® host machine that has network access to SolarWinds Network Performance Monitor. The SolarWinds Network Performance Monitor integration pulls information from SolarWinds Network Performance Monitor by using a remote TCP connection.
- To log in before downloading the public image of integration for SolarWinds Network Performance
Monitor, run the
podman login <cdc-mm ga-image-path>
command. - Create a new directory to store the integration-related configuration file and bash script.
mkdir -p /root/cdc cd /root/cdc
- To define connection information to the Metric Manager API, create a Metric Manager backend
configuration file with the name:
com.instana.cdc.metricmanager.sender.MetricManagerBackend-1.cfg
.# Metric Manager configuration file # Metric Manager's URL host=http://<metricManagerHost>.ibm.com # Metric Manager's port port=18080 # Metric Manager's username for REST API username=system # Metric Manager's password for REST API # password has been mask **** password=********** # Metric Manager's tenant id tenant_id=APM
- Create the
configuration-.yaml
sensor configuration file. Define the SolarWinds Network Performance Monitor endpoint, API key, and the metric entities information as in the following exampleconfiguration-solarwindsnpm.yaml
file for a SolarWinds Network Performance Monitor sensor.com.instana.plugin.solarwindsnpm: enabled: true server: '1.2.3.4' username: 'apm' password: 'myPassword4apm' configuration_from: type: vault secret_key: path: cem/solarwindsnpm client_secret: client_secret poll_rate: 60 metrics: enabled: true poll_rate: 120 entities: cpu_memory_utilization: metrics: - AvgCPULoad - AvgPercentMemoryUsed attributes: - DNS_HostName - HostName sqlquery: "SELECT COALESCE(NULLIF(n.SysName,''),NULLIF(n.DNS,''), n.Caption) as HostName, n.DNS AS DNS_HostName, n.NodeID, t.AvgLoad AS AvgCPULoad, CONVERT(DECIMAL(20, 2), t.PercentMemoryUsed) AS AvgPercentMemoryUsed FROM dbo.CPULoad_CS_Detail AS t INNER JOIN dbo.Nodes AS n ON t.NodeID = n.NodeID WHERE (GETUTCDATE() - GETDATE() + CAST(t.Timestamp AS datetime) >= DATEADD(SECOND, -600, GETUTCDATE()))" poll_rate: 600 resource_id: ${HostName} ResponseTimePacketLoss: metrics: - AvgResponseTime - PercentPacketLoss attributes: - HostName sqlquery: "SELECT COALESCE(NULLIF(n.SysName,''),NULLIF(n.DNS,''), n.Caption) as HostName, AVG(t.AvgResponseTime) as AvgResponseTime, AVG(t.PercentLoss) AS PercentPacketLoss FROM dbo.ResponseTime_CS_Detail AS t INNER JOIN dbo.Nodes AS n ON t.NodeID = n.NodeID WHERE (GETUTCDATE() - GETDATE() + CAST(t.Timestamp AS datetime) >= DATEADD(SECOND, -300, GETUTCDATE())) GROUP BY COALESCE(NULLIF(n.SysName,''),NULLIF(n.DNS,''), n.Caption)" poll_rate: 300 resource_id: ${HostName} DiskIO: metrics: - AvgDiskReads - AvgDiskWrites attributes: - DNS_HostName - HostName - DiskName sqlquery: "SELECT cast(t.DateTime as datetime) AS TimeStamp, COALESCE(NULLIF(n.SysName,''),NULLIF(n.DNS,''), n.Caption) as HostName, n.DNS AS DNS_HostName, n.NodeID, v.DeviceId AS DiskName, CONVERT(DECIMAL(20, 2), t.AvgDiskReads) AS AvgDiskReads, CONVERT(DECIMAL(20, 2), t.AvgDiskWrites) AS AvgDiskWrites FROM dbo.VolumePerformance AS t INNER JOIN dbo.Nodes AS n ON t.NodeID = n.NodeID INNER JOIN dbo.Volumes AS v ON t.VolumeID = v.VolumeID WHERE (v.VolumeTypeID = 4) AND ( CAST(t.DateTime AS datetime) >= DATEADD(SECOND, -900, GETUTCDATE()))" poll_rate: 900 resource_id: ${HostName}-${DiskName} DiskUsedPct: metrics: - PercentDiskUsed attributes: - DNS_HostName - HostName - DiskName sqlquery: "SELECT GETUTCDATE() - GETDATE() + CAST(t.Timestamp AS datetime) AS TimeStamp, COALESCE(NULLIF(n.SysName,''),NULLIF(n.DNS,''), n.Caption) as HostName, n.DNS AS DNS_HostName, n.NodeID, v.DeviceId AS DiskName, CONVERT(DECIMAL(20, 2), t.PercentDiskUsed) AS PercentDiskUsed FROM dbo.VolumeUsage_CS_Detail AS t INNER JOIN dbo.Nodes AS n ON t.NodeID = n.NodeID INNER JOIN dbo.Volumes AS v ON t.VolumeID = v.VolumeID WHERE (v.VolumeTypeID = 4) AND (GETUTCDATE() - GETDATE() + CAST(t.Timestamp AS datetime) >= DATEADD(SECOND, -900, GETUTCDATE()))" poll_rate: 900 resource_id: ${HostName}-${DiskName} Network_Interface_Traffic: metrics: - In_TotalBytes - Out_TotalBytes attributes: - HostName - DNS_HostName - InterfaceName sqlquery: "SELECT CAST(t.Timestamp AS datetime) AS TimeStamp, COALESCE(NULLIF(n.SysName,''),NULLIF(n.DNS,''), n.Caption) as HostName, n.DNS AS DNS_HostName, n.NodeID, i.InterfaceID, i.InterfaceName, t.In_TotalBytes, t.Out_TotalBytes FROM dbo.InterfaceTraffic_CS_Detail AS t INNER JOIN dbo.Nodes AS n ON t.NodeID = n.NodeID INNER JOIN dbo.Interfaces AS i ON t.NodeID = i.NodeID AND t.InterfaceID = i.InterfaceID WHERE (CAST(t.Timestamp AS datetime) >= DATEADD(SECOND, -540, GETUTCDATE()))" poll_rate: 540 resource_id: ${HostName}-${InterfaceName} Network_Interface_Errors: metrics: - In_Discards - Out_Discards - Out_Errors attributes: - HostName - DNS_HostName - InterfaceName sqlquery: "SELECT CAST(t.Timestamp AS datetime) AS TimeStamp, COALESCE(NULLIF(n.SysName,''),NULLIF(n.DNS,''), n.Caption) as HostName, n.DNS AS DNS_HostName, n.NodeID, i.InterfaceID, i.InterfaceName, t.In_Discards, t.In_Errors, t.Out_Discards, t.Out_Errors FROM dbo.InterfaceErrors_CS_Detail AS t INNER JOIN dbo.Nodes AS n ON t.NodeID = n.NodeID INNER JOIN dbo.Interfaces AS i ON t.NodeID = i.NodeID AND t.InterfaceID = i.InterfaceID WHERE (CAST(t.Timestamp AS datetime) >= DATEADD(SECOND, -540, GETUTCDATE())) " poll_rate: 540 resource_id: ${HostName}-${InterfaceName}
- Create a bash script with execution permission, as in the following example bash script for a
SolarWinds Network Performance Monitor sensor.
podman run \ -itd \ --name instana-agent-metric-manager-ga \ --volume /var/run:/var/run \ --volume /run:/run \ --volume /dev:/dev:ro \ --volume /sys:/sys:ro \ --volume /var/log:/var/log \ --volume <cdc-root-path>/configuration-solarwindsnpm.yaml:/opt/instana/agent/etc/instana/configuration-solarwindsnpm.yaml \ --mount type=bind,source=<cdc-root-path>/com.instana.cdc.metricmanager.sender.MetricManagerBackend-1.cfg,target=/opt/instana/agent/etc/instana/com.instana.cdc.metricmanager.sender.MetricManagerBackend-1.cfg \ --privileged \ --net=host \ --pid=host \ --env INSTANA_PRODUCT_NAME="metric-manager" \ --env AGENT_MAX_MEM=6G \ --env INSTANA_AGENT_MODE="APM" <IBM-CDC-Public-GA-Image-Path>/ibm-mm-cdc-conn:4.6-latest
- If you want to use vault, complete the following steps:
- Add the app secret information to the vault server.
- Mount the vault PEM file in the image.
- Run the bootstrap script to start up the docker image.
- Run the
docker ps
command to check the container id and access to the container by thedocker exec -ti <container_id> bash
command. - In the container, add the vault IP address into the /etc/hosts
file.
9.x.x.159 Vault
- Check the connection to the vault server.
ping vault
Note: If ping isn't available, run thednf install iputils -y
command. - Go to the path where the SolarWinds Network Performance Monitor configuration YAML file is located.
- Edit the configuration.yaml to add the vault
configuration.
com.instana.configuration.integration.vault: connection_url: 'https://Vault:8200' # Mapping through hosts file since PEM ca cert does not contain hostname token: '<vault_token>' path_to_pem_file: '/root/agentdev/agent-installer/instana-agent/etc/instana/vault-ca.pem' secret_refresh_rate: 24 kv_version: 2
- Modify the sensor configuration to use the vault type in the
configuration-solarwindsnpm.yaml file.
...
com.instana.plugin.solarwindsnpm:
- Restart the integration and check whether the SolarWinds Network Performance Monitor sensor can connect and receive metrics.
- Run the bash script to set up and configure the instance for the integration.
Note: If you don't want to monitor everything in your SolarWinds Network Performance Monitor
integration, or if you have a large number of management zones, you might want to specify the zones
that you do want to monitor in your configuration file. If you have a large number of zones, you may
encounter an Out of Memory error when the integration reports on every one of your SolarWinds
Network Performance Monitor zones. You can set the zones when you configure your integration by
adding values to the zone field of your configuration. For more information about zones, or if you
want to make other changes to the default configuration, see the Configuring
... section. For example, if you monitor approximately 200 hosts, you might not need to specify
zones in your configuration. Conversely, if you monitor 5000 hosts that are grouped into hundreds of
management zones, it's likely worthwhile to narrow them down.
The SolarWinds Network Performance Monitor integration is installed and set up on the Linux host.Verifying the installation
- Verify whether the integration instance is up and running.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c75a6d23ca8 cp.icr.io/cp/cp4waiops/ibm-mm-cdc-conn:4.3-latest "/usr/local/bin/tini…" 2 weeks ago Up 2 weeks ago instana-agent-metric-manager-ga
- Check the logs to confirm that SolarWinds Network Performance Monitor metrics are forwarded to
Metric Manager.
Example logs, which show that the metrics are forwarded:$ podman logs -f <container_id>
2023-10-05T12:12:09.543+00:00 | INFO | tana-agent-scheduler-thread-13-2 | icManagerBackend | cdc-metricmanager-sender - 1.0.0 | MetricManager : MetricManagerConfig{Host=http://test.ibm.com, Port=18080, Username=system 2023-10-05T12:12:09.544+00:00 | INFO | tana-agent-scheduler-thread-13-2 | icManagerBackend | cdc-metricmanager-sender - 1.0.0 | MetricManager : metricManagerURL : http://test.ibm.com:18080/metrics/api/1.0/metrics 2023-10-05T12:12:10.026+00:00 | INFO | tana-agent-scheduler-thread-13-2 | icManagerBackend | cdc-metricmanager-sender - 1.0.0 | Successfully sent payload to Metric Manager 2023-10-05T12:12:10.026+00:00 | WARN | tana-agent-scheduler-thread-13-2 | SensorTicker | com.instana.agent - 1.1.697 | Sending metrics with 1260411 chars took 255815 ms
Configuring
You can edit the
configuration-.yaml
file to further configure your SolarWinds
Network Performance Monitor integration.- Navigate to your
configuration-.yaml
file on the Linux host machine where you installed your SolarWinds Network Performance Monitor integration. - Open the file with your preferred text editor and find the SolarWinds Network Performance
Monitor section. By default, it should look like the following example, except optional fields are
empty. ...
# SolarWinds NPM sensor com.instana.plugin.solarwindsnpm: enabled: true # Required server: 'myhostserver' # Required username: 'myusername' # Required password: 'mypwd' # Required poll_rate: 60 # Optional metrics: # Required enabled: true # Required poll_rate: 60 # Optional entities: # Required ...
- Edit the values that you want to change, and save the file. The following table lists the options that can be configured for SolarWinds Network Performance Monitor.
Variable Description Type Default value Required or optional enabled
Set to true
orfalse
depending on whether you want to enable the sensor.Boolean true Required server
The server name or IP address of the SolarWinds NPM SQL server database host. String N/A Required username
SolarWinds NPM database sqlserver login username created for the sensor account. String N/A Required password
SolarWinds NPM DB sqlserver login password for the username created for the sensor account. String N/A Required poll_rate
The frequency (in seconds) between queries. This value can be overridden by the child poll_rate
value.Integer N/A Optional metrics
Metrics configuration for the sensor. Node N/A Required metrics: enabled
Set to true
orfalse
to enable or disable the metrics integration. Ifmetrics.enabled
is set tofalse
, metrics collection will be disabled even if theenabled
value for the sensor istrue
.Boolean true Required metrics: poll_rate
The frequency (in seconds) between queries. If missing, the integration uses the parent poll_rate
valueInteger N/A Optional metrics: entities
A list of entities for metric integration. String N/A Required