Settings: Difference between revisions
(Add Sensors Timezone setting documentation for CDR timezone issues) |
|||
| (38 intermediate revisions by one other user not shown) | |||
| Line 1: | Line 1: | ||
{{DISPLAYTITLE:GUI Settings Reference}} | {{DISPLAYTITLE:GUI Settings Reference}} | ||
Category:GUI manual | [[Category:GUI manual]] | ||
This page documents the configuration options available in the VoIPmonitor web GUI under the '''Settings''' menu | This page documents the configuration options available in the VoIPmonitor web GUI under the '''Settings''' menu. | ||
= Sensors = | |||
Configure sensor connections for multi-sensor deployments. Required when <code>id_sensor</code> is set in <code>/etc/voipmonitor.conf</code>. | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 12: | Line 12: | ||
! Field !! Description | ! Field !! Description | ||
|- | |- | ||
| Sensor ID || | | Sensor ID || Numeric ID matching <code>id_sensor</code> in voipmonitor.conf | ||
|- | |- | ||
| Name || | | Name || Descriptive name for the sensor | ||
|- | |- | ||
| Manager IP || IP address | | Manager IP || IP address (or hostname) for fetching data (PCAP, audio files) | ||
|- | |- | ||
| Manager Port || TCP port for | | Manager Port || TCP port for manager API (default: 5029) | ||
|- | |- | ||
| Remote database || Database connection | | Remote database || Database connection for "Legs by CID/header" lookups when sensors use different databases | ||
|} | |} | ||
== Multi-Sensor Deployment == | |||
=== | <kroki lang="mermaid"> | ||
%%{init: {'flowchart': {'nodeSpacing': 15, 'rankSpacing': 40}}}%% | |||
flowchart TB | |||
subgraph Sensors["Remote Sensors"] | |||
S1["Sensor A<br/>id_sensor=2"] | |||
S2["Sensor B<br/>id_sensor=3"] | |||
end | |||
subgraph Central["Central Server"] | |||
GUI["Web GUI"] | |||
DB[(MySQL)] | |||
end | |||
S1 -->|CDR| DB | |||
S2 -->|CDR| DB | |||
GUI -->|"Port 5029"| S1 | |||
GUI -->|"Port 5029"| S2 | |||
</kroki> | |||
'''Setup:''' | |||
# Set unique <code>id_sensor</code> in each sensor's <code>/etc/voipmonitor.conf</code> | |||
# Add sensor entries in '''Settings > Sensors''' with matching Sensor ID | |||
# Restart sensors: <code>systemctl restart voipmonitor</code> | |||
{{Tip|For sensors with dynamic IPs, enter a hostname in the Manager IP field, or use [[Sniffer_distributed_architecture|Client-Server mode]].}} | |||
== Sensor Configuration via Wrench Icon == | |||
Click the '''wrench icon''' next to a sensor to configure parameters. Use the search field to find settings. | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Parameter !! Description !! | ! Parameter !! Description !! Values | ||
|- | |- | ||
| | | <code>ssl</code> || Enable TLS decryption || <code>yes</code> / <code>no</code> | ||
|- | |- | ||
| | | <code>ssl_ipport</code> || IP:port and key path for TLS || <code>192.168.1.10:5061 /path/to/key.pem</code> | ||
|- | |- | ||
| | | <code>sipport</code> || SIP ports to capture || <code>5060,5080</code> or <code>5060,5070-5080</code> | ||
|- | |- | ||
| <code>savertp</code> || RTP recording mode || <code>yes</code> (full), <code>no</code> (none), <code>header</code> (stats only) | |||
| | |||
|- | |- | ||
| <code>maxpoolrtpsize</code> || Max RTP storage in MB || <code>51200</code> | |||
|- | |- | ||
| | | <code>maxpoolrtpdays</code> || Max RTP age in days || <code>30</code> | ||
|} | |} | ||
{{Warning|1=GUI settings override <code>voipmonitor.conf</code> when <code>mysqlloadconfig</code> is enabled (default). Changes require a full restart (<code>systemctl stop/start</code>), not reload.}} | |||
For TLS decryption with PFS ciphers, see [[Tls|TLS Decryption Guide]]. | |||
== RRD Health Charts == | |||
Click the '''chart icon''' next to a sensor to view performance metrics: | |||
* '''Buffer usage:''' Approaching 100% indicates capacity limits | |||
* '''Packet drops:''' Non-zero values indicate sensor overload | |||
{{Note|High buffer/drops cause low MOS and choppy audio. Solutions: increase <code>ringbuffer</code> in config, add sensors, use [[DPDK]] or [[Napatech]].}} | |||
== Disabling a Sensor == | |||
{{Warning|1=The GUI "Disabled" checkbox does NOT stop data collection. The sniffer continues running regardless of GUI status.}} | |||
'''To stop data collection:''' | |||
* '''Complete shutdown:''' <code>systemctl stop voipmonitor</code> on the sensor host | |||
* '''Selective blocking:''' Create capture rule with '''Skip = ON''' in '''Control Panel > Capture Rules''' | |||
== Deleting Sensors == | |||
If deletion fails, the sensor likely has capture rules assigned. Remove rules first via '''Control Panel > Capture Rules'''. | |||
'''Non-deletable local sensor (GUI+DB only servers):''' | |||
On central servers that don't capture traffic, an auto-created "localhost" sensor may appear. To replace it: | |||
# Set <code>id_sensor = 1</code> in <code>/etc/voipmonitor.conf</code> on the central server | |||
# In GUI: Add new sensor with Manager IP <code>127.0.0.1</code>, same Sensor ID, Port <code>5029</code> | |||
# Enable "is server in client/server mode" checkbox | |||
# Disable "show active calls from all sensors in active call view" checkbox | |||
= | = CDR Charts = | ||
Define predefined charts for the [[Call_Detail_Record_-_CDR#Charts|CDR detail Charts tab]]. | |||
= CDR Custom Headers = | |||
Capture and display custom SIP headers in CDR views. Requires sniffer version 7.0RC7+. | |||
== Setup Workflow == | |||
<kroki lang="mermaid"> | |||
%%{init: {'flowchart': {'nodeSpacing': 10, 'rankSpacing': 30}}}%% | |||
flowchart LR | |||
A[voipmonitor.conf<br/>custom_headers] --> B[Restart Sensor] | |||
B --> C[DB Column Created] | |||
C --> D[Settings > CDR<br/>Custom Headers] | |||
D --> E[CDR List View] | |||
</kroki> | |||
# Add header to <code>/etc/voipmonitor.conf</code>: | |||
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> | ||
custom_headers = X-Cisco-Org-ID | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# Restart sensor: <code>systemctl restart voipmonitor</code> | |||
# Generate a test call | |||
# Configure in '''Settings > CDR Custom Headers''': select header, set Name, enable "Show as Column" | |||
== Configuration Fields == | |||
=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Field !! Description | ||
|- | |- | ||
| | | Header Field || SIP header to capture (from dropdown after restart) | ||
|- | |- | ||
| | | Name || Display label in GUI | ||
| | |- | ||
| Match in SIP by Header || Enable for [[Call_Detail_Record_-_CDR#Legs_by_header|Legs by header]] correlation | |||
|- | |||
| Show as Column || Display in CDR list view | |||
|- | |||
| Restrict to Regex pattern || Filter which values to capture | |||
|- | |- | ||
| Boundary start/end || Extract substring between delimiters | |||
|- | |- | ||
| | | Regexp || Extract using regex with capture groups <code>(...)</code> | ||
|- | |- | ||
| | | Select occurrence || <code>First found value</code>, <code>Last found value</code>, or <code>Nth occurrence</code> | ||
|- | |- | ||
| ''' | | Nth occurrence || '''(New in 2026.01)''' When "Nth occurrence" is selected, specify which occurrence number to extract (e.g., <code>2</code> for second occurrence). Uses packet timestamps for accurate ordering even when packet reordering is disabled. | ||
|} | |} | ||
== Extracting Substrings == | |||
'''Boundary method (recommended):''' Extract between delimiters. | |||
Example: From <code>sip:1000@192.168.1.1;tag=123</code>, extract IP: | |||
* Boundary start: <code>@</code> | |||
* Boundary end: <code>;</code> | |||
* Result: <code>192.168.1.1</code> | |||
''' | '''Regexp method:''' Use capture groups for complex patterns. | ||
<syntaxhighlight lang="text"> | |||
# Extract version from: User-Agent: Asterisk/20.6.0 | |||
<syntaxhighlight lang=" | Regexp: Asterisk/([0-9.]+) | ||
# | Result: 20.6.0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Warning|1=Regexp MUST include parentheses <code>(...)</code> to define what to capture. Without them, the entire match is stored.}} | |||
== Filtering by SIP Method and Response Code == | |||
You can filter custom header extraction to specific SIP methods (e.g., INVITE) or SIP response codes (e.g., 300, 404). | |||
{| class="wikitable" | |||
|- | |||
! Field !! Description !! Example Usage | |||
|- | |||
| CSeq method || Filter by SIP request method || <code>INVITE</code> to capture only from INVITE requests | |||
|- | |||
| response code || Filter by SIP response code number || <code>300</code> to capture only from 300 redirect responses | |||
|} | |||
=== Example: Extract Contact IP from 300 Redirect Responses === | |||
To filter CDRs for calls involving SIP 300 redirect responses and identify the redirect destination IP: | |||
# Navigate to '''Settings > Custom headers > CDR''' in the GUI | |||
# Click '''Add new''' | |||
# Set '''Header field''' to <code>Contact</code> | |||
# Set '''Name''' to descriptive label (e.g., <code>SIP300RedirectDestinations</code>) | |||
# Set '''Regexp''' to <code>sip:.*@([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+);</code> to extract the IP address | |||
# Set '''CSeq method''' to <code>INVITE</code> | |||
# Set '''response code''' to <code>300</code> | |||
# Save the configuration | |||
''' | Use the new custom header and '''Last SIP response code''' as filters in the CDR list to identify calls with 300 redirects and their destinations. | ||
{{ | {{Tip|The CSeq method and response code fields allow you to capture headers from specific SIP messages rather than all headers in the call.}} | ||
}} | |||
== Database Index for Custom Headers == | |||
Custom header columns are not indexed by default. For frequent queries: | |||
<syntaxhighlight lang="sql"> | |||
-- Find table/column location | |||
SELECT dynamic_table, dynamic_column FROM cdr_custom_headers | |||
WHERE header_field = 'X-Custom-Header'; | |||
-- Create index (use values from above query) | |||
CREATE INDEX idx_custom_header_3 ON cdr_next_2 (custom_header_3); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Troubleshooting Custom Headers == | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Problem !! Solution | ||
|- | |- | ||
| | | Header not captured || Increase <code>snaplen</code> in voipmonitor.conf (default may be too low) | ||
|- | |- | ||
| | | Header truncated || Increase <code>custom_headers_max_size</code> (default: 1024 bytes) | ||
|- | |- | ||
| | | Not visible in distributed setup || Check <code>server_destination</code> and <code>server_password</code> on sensor | ||
|} | |} | ||
Verify loaded headers: <code>echo 'custom_headers_dump cdr' | nc localhost 5029</code> | |||
= Load GeoIP Data = | |||
[[ | Loads GeoIP data for the [[Call_Detail_Record_-_CDR#Map|CDR Map tab]]. See [[Order_of_GeoIP_processing]] for processing priority. | ||
= | = System Configuration = | ||
== Basic == | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 474: | Line 246: | ||
! Setting !! Description | ! Setting !! Description | ||
|- | |- | ||
| | | WEB URL || Base URL for hyperlinks in emails | ||
|- | |- | ||
| | | Sniffer data path || PCAP storage directory (default: <code>/var/spool/voipmonitor</code>) | ||
|- | |- | ||
| | | Sniffer second datapath || Secondary spool directory (<code>spooldir_2</code>) | ||
|- | |- | ||
| | | Default sensor hostname || Default hostname for sniffer connection | ||
|- | |- | ||
| | | Default sensor TCP port || Default manager API port (5029) | ||
|} | |} | ||
{{ | {{Warning|1=If sensors connect to wrong destination after upgrade, disable '''Default sensor hostname''' and '''Default sensor TCP port''' in this section. When enabled, sensors ignore individual Manager IP/Port settings.}} | ||
''' | |||
== Database == | |||
MySQL/MariaDB connection settings. | |||
'''Custom port:''' Enter host with port in MySQL hostname field: <code>127.0.0.1:33306</code> | |||
Also configure <code>mysqlport</code> in <code>/etc/voipmonitor.conf</code>. See [[Database_troubleshooting]] for details. | |||
== National == | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 510: | Line 273: | ||
! Setting !! Description | ! Setting !! Description | ||
|- | |- | ||
| | | Timezone || GUI host timezone (for reports/alerts scheduling) | ||
|- | |- | ||
| | | '''Sensors Timezone''' || '''CDR display timezone''' - set this to fix UTC display issues | ||
|- | |- | ||
| | | National prefix || Prefixes for national call classification | ||
|- | |- | ||
| | | International prefix || International dialing prefix (e.g., <code>00</code>, <code>011</code>) | ||
|- | |- | ||
| | | Local number || Country name for number normalization | ||
|} | |} | ||
= | {{Tip|1=If CDRs display in UTC instead of local time, set '''Sensors Timezone''' (not regular Timezone) to your sensors' timezone.}} | ||
== Intervals == | |||
Default time filters for CDR view, dashboard, and Legs correlation. | |||
== Email / HTTP Referer == | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 533: | Line 298: | ||
| DEFAULT_EMAIL_FROM || Default "From" address for outgoing emails | | DEFAULT_EMAIL_FROM || Default "From" address for outgoing emails | ||
|- | |- | ||
| Disable email plain text || | | Disable email plain text || Force HTML-only emails | ||
|} | |} | ||
=== Troubleshooting Email Delivery === | |||
If users report not receiving verification emails or new user setup emails, verify the email sending status: | |||
<b>For Exim mail servers:</b> | |||
<syntaxhighlight lang="bash"># Check Exim mail log for delivery attempts | |||
grep "recipient@example.com" /var/log/exim/main.log | |||
# Or search by timestamp | |||
grep "2025-01-09 14:30:" /var/log/exim/main.log | |||
</syntaxhighlight> | |||
Look for the response code in the log entry: | |||
* <code>250 message accepted</code> - Email was successfully delivered to remote server. The issue is on the recipient side (spam folder, quarantine, mail filtering). | |||
* No <code>250</code> code - Email delivery failed at the server level. Check mail queue and server MTA configuration. | |||
<b>If logs confirm successful delivery:</b> Inform the client that the email left the server successfully and advise them to check their Spam, Bulk, or Junk folders, or consult their internal IT team regarding mail filtering policies. | |||
<b>General MTA verification:</b> | |||
<syntaxhighlight lang="bash"># Check if mail agent is running | |||
systemctl status postfix # or exim4, sendmail | |||
# Test email from command line | |||
echo "Test message" | mail -s "VoIPmonitor Test" your@email.com | |||
# Check mail queue | |||
mailq | |||
# View general mail logs | |||
tail -f /var/log/mail.log # Debian/Ubuntu | |||
tail -f /var/log/maillog # RHEL/CentOS | |||
</syntaxhighlight> | |||
== License == | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 570: | Line 341: | ||
! Setting !! Description | ! Setting !! Description | ||
|- | |- | ||
| | | License token || Short token for retrieving license from portal | ||
|- | |- | ||
| | | License key || Full license key content (multi-line) | ||
|- | |- | ||
| | | License email || Email for license notifications (leave empty to disable) | ||
|} | |} | ||
'''Update license after payment:''' Click '''get/update license key''' button. | |||
'''Manual activation:''' Copy full license key from portal (Services > My services) and paste into License key field. | |||
'''Disable notification emails:''' Remove email from "License email" field. | |||
== GeoIP == | |||
Configure API keys for MaxMind or IPInfoDB services. | |||
== Advanced == | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 587: | Line 364: | ||
! Setting !! Description | ! Setting !! Description | ||
|- | |- | ||
| | | ENABLE_CSRF_CHECK || Enable CSRF protection (recommended for production) | ||
|- | |- | ||
| | | Pcap deduplication before download || Remove duplicate packets from PCAP downloads | ||
|- | |- | ||
| | | Http proxy (for upgrades) || Proxy for GUI/sniffer upgrades: <code>http://proxy:port</code> | ||
|- | |- | ||
| Enable | | Enable GUI to run in iframe || Allow embedding in iframes (disabled by default for security) | ||
|- | |- | ||
| CDR share key || Secret for CDR share URLs | |||
| CDR share key || Secret | |||
|} | |} | ||
'''Firewall requirements:''' Allow outbound HTTPS to: | |||
* <code>voipmonitor.org</code> - License updates | |||
* <code>download.voipmonitor.org</code> - Software upgrades | |||
* <code>share.voipmonitor.org</code> - CDR sharing | |||
* <code>reports.voipmonitor.org</code> - Debug reports | |||
= Localization = | |||
Create GUI translations. Red numbers indicate untranslated items. Changes apply after logout/login. | |||
= CDR View Custom URL = | |||
Add custom hyperlinks to CDR Commands column. Use <nowiki>{{paramName}}</nowiki> in URL to include CDR values. | |||
= | = Troubleshooting = | ||
== Sensors Connect to Wrong Destination After Upgrade == | |||
'''Cause:''' Default sensor hostname/port settings override individual sensor configurations. | |||
'''Fix:''' Disable '''Default sensor hostname''' and '''Default sensor TCP port''' in Settings > System Configuration > Basic. | |||
== GUI Crashes on Settings > Sensors Page == | |||
'''Cause:''' Too many obsolete sensor records in database. | |||
'''Fix:''' Delete obsolete records directly: | |||
<syntaxhighlight lang="sql"> | |||
-- Check count | |||
SELECT COUNT(*) FROM sensors; | |||
-- Delete obsolete entries (adjust WHERE clause) | |||
DELETE FROM sensors WHERE host LIKE '%old-sensor%'; | |||
</syntaxhighlight> | |||
All users must log out and back in after cleanup. | |||
== License Update Fails == | |||
'''Cause:''' Firewall blocking outbound HTTPS. | |||
'''Fix:''' Allow outbound TCP 443 to <code>voipmonitor.org</code>, or configure HTTP proxy in Advanced settings, or use offline activation. | |||
== GUI Not Loading in iframe == | |||
'''Fix:''' Enable '''Enable GUI to run in iframe''' in Advanced settings. | |||
== PCAP Download Has Fewer Packets Than GUI Shows == | |||
'''Cause:''' Pcap deduplication is enabled (removes retransmissions). | |||
''' | '''Fix:''' Disable '''Pcap deduplication before download''' in Advanced settings. | ||
= See Also = | |||
* [[Sniffer_configuration]] - Full voipmonitor.conf reference | |||
* [[Sniffer_distributed_architecture]] - Client-Server mode | |||
* [[Tls]] - TLS/SRTP decryption | |||
* [[Data_Cleaning]] - Storage retention | |||
* | * [[User_Management]] - User permissions | ||
* [[License]] - License management | |||
* | |||
* | |||
* | |||
* | |||
* | |||
Revision as of 11:29, 19 January 2026
This page documents the configuration options available in the VoIPmonitor web GUI under the Settings menu.
Sensors
Configure sensor connections for multi-sensor deployments. Required when id_sensor is set in /etc/voipmonitor.conf.
| Field | Description |
|---|---|
| Sensor ID | Numeric ID matching id_sensor in voipmonitor.conf
|
| Name | Descriptive name for the sensor |
| Manager IP | IP address (or hostname) for fetching data (PCAP, audio files) |
| Manager Port | TCP port for manager API (default: 5029) |
| Remote database | Database connection for "Legs by CID/header" lookups when sensors use different databases |
Multi-Sensor Deployment
Setup:
- Set unique
id_sensorin each sensor's/etc/voipmonitor.conf - Add sensor entries in Settings > Sensors with matching Sensor ID
- Restart sensors:
systemctl restart voipmonitor
💡 Tip: For sensors with dynamic IPs, enter a hostname in the Manager IP field, or use Client-Server mode.
Sensor Configuration via Wrench Icon
Click the wrench icon next to a sensor to configure parameters. Use the search field to find settings.
| Parameter | Description | Values |
|---|---|---|
ssl |
Enable TLS decryption | yes / no
|
ssl_ipport |
IP:port and key path for TLS | 192.168.1.10:5061 /path/to/key.pem
|
sipport |
SIP ports to capture | 5060,5080 or 5060,5070-5080
|
savertp |
RTP recording mode | yes (full), no (none), header (stats only)
|
maxpoolrtpsize |
Max RTP storage in MB | 51200
|
maxpoolrtpdays |
Max RTP age in days | 30
|
⚠️ Warning: GUI settings override voipmonitor.conf when mysqlloadconfig is enabled (default). Changes require a full restart (systemctl stop/start), not reload.
For TLS decryption with PFS ciphers, see TLS Decryption Guide.
RRD Health Charts
Click the chart icon next to a sensor to view performance metrics:
- Buffer usage: Approaching 100% indicates capacity limits
- Packet drops: Non-zero values indicate sensor overload
ℹ️ Note: High buffer/drops cause low MOS and choppy audio. Solutions: increase ringbuffer in config, add sensors, use DPDK or Napatech.
Disabling a Sensor
⚠️ Warning: The GUI "Disabled" checkbox does NOT stop data collection. The sniffer continues running regardless of GUI status.
To stop data collection:
- Complete shutdown:
systemctl stop voipmonitoron the sensor host - Selective blocking: Create capture rule with Skip = ON in Control Panel > Capture Rules
Deleting Sensors
If deletion fails, the sensor likely has capture rules assigned. Remove rules first via Control Panel > Capture Rules.
Non-deletable local sensor (GUI+DB only servers):
On central servers that don't capture traffic, an auto-created "localhost" sensor may appear. To replace it:
- Set
id_sensor = 1in/etc/voipmonitor.confon the central server - In GUI: Add new sensor with Manager IP
127.0.0.1, same Sensor ID, Port5029 - Enable "is server in client/server mode" checkbox
- Disable "show active calls from all sensors in active call view" checkbox
CDR Charts
Define predefined charts for the CDR detail Charts tab.
CDR Custom Headers
Capture and display custom SIP headers in CDR views. Requires sniffer version 7.0RC7+.
Setup Workflow
- Add header to
/etc/voipmonitor.conf:
custom_headers = X-Cisco-Org-ID
- Restart sensor:
systemctl restart voipmonitor - Generate a test call
- Configure in Settings > CDR Custom Headers: select header, set Name, enable "Show as Column"
Configuration Fields
| Field | Description |
|---|---|
| Header Field | SIP header to capture (from dropdown after restart) |
| Name | Display label in GUI |
| Match in SIP by Header | Enable for Legs by header correlation |
| Show as Column | Display in CDR list view |
| Restrict to Regex pattern | Filter which values to capture |
| Boundary start/end | Extract substring between delimiters |
| Regexp | Extract using regex with capture groups (...)
|
| Select occurrence | First found value, Last found value, or Nth occurrence
|
| Nth occurrence | (New in 2026.01) When "Nth occurrence" is selected, specify which occurrence number to extract (e.g., 2 for second occurrence). Uses packet timestamps for accurate ordering even when packet reordering is disabled.
|
Extracting Substrings
Boundary method (recommended): Extract between delimiters.
Example: From sip:1000@192.168.1.1;tag=123, extract IP:
- Boundary start:
@ - Boundary end:
; - Result:
192.168.1.1
Regexp method: Use capture groups for complex patterns.
# Extract version from: User-Agent: Asterisk/20.6.0
Regexp: Asterisk/([0-9.]+)
Result: 20.6.0
⚠️ Warning: Regexp MUST include parentheses (...) to define what to capture. Without them, the entire match is stored.
Filtering by SIP Method and Response Code
You can filter custom header extraction to specific SIP methods (e.g., INVITE) or SIP response codes (e.g., 300, 404).
| Field | Description | Example Usage |
|---|---|---|
| CSeq method | Filter by SIP request method | INVITE to capture only from INVITE requests
|
| response code | Filter by SIP response code number | 300 to capture only from 300 redirect responses
|
Example: Extract Contact IP from 300 Redirect Responses
To filter CDRs for calls involving SIP 300 redirect responses and identify the redirect destination IP:
- Navigate to Settings > Custom headers > CDR in the GUI
- Click Add new
- Set Header field to
Contact - Set Name to descriptive label (e.g.,
SIP300RedirectDestinations) - Set Regexp to
sip:.*@([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+);to extract the IP address - Set CSeq method to
INVITE - Set response code to
300 - Save the configuration
Use the new custom header and Last SIP response code as filters in the CDR list to identify calls with 300 redirects and their destinations.
💡 Tip: The CSeq method and response code fields allow you to capture headers from specific SIP messages rather than all headers in the call.
Database Index for Custom Headers
Custom header columns are not indexed by default. For frequent queries:
-- Find table/column location
SELECT dynamic_table, dynamic_column FROM cdr_custom_headers
WHERE header_field = 'X-Custom-Header';
-- Create index (use values from above query)
CREATE INDEX idx_custom_header_3 ON cdr_next_2 (custom_header_3);
Troubleshooting Custom Headers
| Problem | Solution |
|---|---|
| Header not captured | Increase snaplen in voipmonitor.conf (default may be too low)
|
| Header truncated | Increase custom_headers_max_size (default: 1024 bytes)
|
| Not visible in distributed setup | Check server_destination and server_password on sensor
|
Verify loaded headers: echo 'custom_headers_dump cdr' | nc localhost 5029
Load GeoIP Data
Loads GeoIP data for the CDR Map tab. See Order_of_GeoIP_processing for processing priority.
System Configuration
Basic
| Setting | Description |
|---|---|
| WEB URL | Base URL for hyperlinks in emails |
| Sniffer data path | PCAP storage directory (default: /var/spool/voipmonitor)
|
| Sniffer second datapath | Secondary spool directory (spooldir_2)
|
| Default sensor hostname | Default hostname for sniffer connection |
| Default sensor TCP port | Default manager API port (5029) |
⚠️ Warning: If sensors connect to wrong destination after upgrade, disable Default sensor hostname and Default sensor TCP port in this section. When enabled, sensors ignore individual Manager IP/Port settings.
Database
MySQL/MariaDB connection settings.
Custom port: Enter host with port in MySQL hostname field: 127.0.0.1:33306
Also configure mysqlport in /etc/voipmonitor.conf. See Database_troubleshooting for details.
National
| Setting | Description |
|---|---|
| Timezone | GUI host timezone (for reports/alerts scheduling) |
| Sensors Timezone | CDR display timezone - set this to fix UTC display issues |
| National prefix | Prefixes for national call classification |
| International prefix | International dialing prefix (e.g., 00, 011)
|
| Local number | Country name for number normalization |
💡 Tip: If CDRs display in UTC instead of local time, set Sensors Timezone (not regular Timezone) to your sensors' timezone.
Intervals
Default time filters for CDR view, dashboard, and Legs correlation.
Email / HTTP Referer
| Setting | Description |
|---|---|
| DEFAULT_EMAIL_FROM | Default "From" address for outgoing emails |
| Disable email plain text | Force HTML-only emails |
Troubleshooting Email Delivery
If users report not receiving verification emails or new user setup emails, verify the email sending status:
For Exim mail servers:
# Check Exim mail log for delivery attempts
grep "recipient@example.com" /var/log/exim/main.log
# Or search by timestamp
grep "2025-01-09 14:30:" /var/log/exim/main.log
Look for the response code in the log entry:
250 message accepted- Email was successfully delivered to remote server. The issue is on the recipient side (spam folder, quarantine, mail filtering).- No
250code - Email delivery failed at the server level. Check mail queue and server MTA configuration.
If logs confirm successful delivery: Inform the client that the email left the server successfully and advise them to check their Spam, Bulk, or Junk folders, or consult their internal IT team regarding mail filtering policies.
General MTA verification:
# Check if mail agent is running
systemctl status postfix # or exim4, sendmail
# Test email from command line
echo "Test message" | mail -s "VoIPmonitor Test" your@email.com
# Check mail queue
mailq
# View general mail logs
tail -f /var/log/mail.log # Debian/Ubuntu
tail -f /var/log/maillog # RHEL/CentOS
License
| Setting | Description |
|---|---|
| License token | Short token for retrieving license from portal |
| License key | Full license key content (multi-line) |
| License email | Email for license notifications (leave empty to disable) |
Update license after payment: Click get/update license key button.
Manual activation: Copy full license key from portal (Services > My services) and paste into License key field.
Disable notification emails: Remove email from "License email" field.
GeoIP
Configure API keys for MaxMind or IPInfoDB services.
Advanced
| Setting | Description |
|---|---|
| ENABLE_CSRF_CHECK | Enable CSRF protection (recommended for production) |
| Pcap deduplication before download | Remove duplicate packets from PCAP downloads |
| Http proxy (for upgrades) | Proxy for GUI/sniffer upgrades: http://proxy:port
|
| Enable GUI to run in iframe | Allow embedding in iframes (disabled by default for security) |
| CDR share key | Secret for CDR share URLs |
Firewall requirements: Allow outbound HTTPS to:
voipmonitor.org- License updatesdownload.voipmonitor.org- Software upgradesshare.voipmonitor.org- CDR sharingreports.voipmonitor.org- Debug reports
Localization
Create GUI translations. Red numbers indicate untranslated items. Changes apply after logout/login.
CDR View Custom URL
Add custom hyperlinks to CDR Commands column. Use {{paramName}} in URL to include CDR values.
Troubleshooting
Sensors Connect to Wrong Destination After Upgrade
Cause: Default sensor hostname/port settings override individual sensor configurations.
Fix: Disable Default sensor hostname and Default sensor TCP port in Settings > System Configuration > Basic.
GUI Crashes on Settings > Sensors Page
Cause: Too many obsolete sensor records in database.
Fix: Delete obsolete records directly:
-- Check count
SELECT COUNT(*) FROM sensors;
-- Delete obsolete entries (adjust WHERE clause)
DELETE FROM sensors WHERE host LIKE '%old-sensor%';
All users must log out and back in after cleanup.
License Update Fails
Cause: Firewall blocking outbound HTTPS.
Fix: Allow outbound TCP 443 to voipmonitor.org, or configure HTTP proxy in Advanced settings, or use offline activation.
GUI Not Loading in iframe
Fix: Enable Enable GUI to run in iframe in Advanced settings.
PCAP Download Has Fewer Packets Than GUI Shows
Cause: Pcap deduplication is enabled (removes retransmissions).
Fix: Disable Pcap deduplication before download in Advanced settings.
See Also
- Sniffer_configuration - Full voipmonitor.conf reference
- Sniffer_distributed_architecture - Client-Server mode
- Tls - TLS/SRTP decryption
- Data_Cleaning - Storage retention
- User_Management - User permissions
- License - License management