From OpenNMS
Contents |
World IPv6 Day Configuration
This is an overview of the opennms configuration needed for the World IPv6 Day Monitoring Project
Service Polling
We will define four services to be monitored on World IPv6 Day participants. They are as follows:
- DNS-A
- Tests if the nodelabel for the service's node can be resolved to a IPv4 address (DNSResolutionMonitor)
- DNS-AAAA
- Tests if the nodelabel for the service's node can be resolved to an IPv6 address (DNSResolutionMonitor)
- HTTP
- Tests if the IP of the monitored service can be accessed via HTTP using the nodelabel is as the Host: HTTP header. (HttpMonitor)
- HTTP-v4
- Tests that the nodelabel resolves to an IPv4 address and thewebsite is accessible via this address using the nodelabel as theHost: HTTP header (PageSequenceMonitor)
- HTTP-v6
- Tests that the nodelabel resolves to an IPv6 address and thewebsite is accessible via this address using the nodelabel as theHost: HTTP header (PageSequenceMonitor)
These services will be placed in a polling package called ipv6day which will be marked as remote="true".
Use the filter rule foreignSource = 'participants'
Polling Package
Add the following parameter to the existing HTTP monitor so that the virtual host will be set properly on outgoing HTTP requests.
<parameter key="nodelabel-host-name" value="true"/>
This package will define the new ISOC-specific monitors.
<package name="ipv6day" remote="true">
<filter>foreignSource = 'participants'</filter>
<include-range begin="1.1.1.1" end="254.254.254.254"/>
<include-range begin="0000:0000:0000:0000:0000:0000:0000:0000" end="ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"/>
<rrd step="300">
<rra>RRA:AVERAGE:0.5:1:2016</rra>
<rra>RRA:AVERAGE:0.5:12:1488</rra>
<rra>RRA:AVERAGE:0.5:288:366</rra>
<rra>RRA:MAX:0.5:288:366</rra>
<rra>RRA:MIN:0.5:288:366</rra>
</rrd>
<service name="DNS-A" interval="300000" user-defined="false" status="on">
<parameter key="resolution-type" value="v4" />
<parameter key="rrd-repository" value="/opt/opennms/share/rrd/response" />
<parameter key="rrd-base-name" value="dns-a" />
<parameter key="ds-name" value="dns-a" />
</service>
<service name="DNS-AAAA" interval="300000" user-defined="false" status="on">
<parameter key="resolution-type" value="v6" />
<parameter key="rrd-repository" value="/opt/opennms/share/rrd/response" />
<parameter key="rrd-base-name" value="dns-aaaa" />
<parameter key="ds-name" value="dns-aaaa" />
</service>
<service name="HTTP-v4" interval="300000" user-defined="false" status="on">
<parameter key="retry" value="1" />
<parameter key="timeout" value="3000" />
<parameter key="rrd-repository" value="/opt/opennms/share/rrd/response" />
<parameter key="rrd-base-name" value="http-v4" />
<parameter key="ds-name" value="http-v4" />
<parameter key="page-sequence">
<page-sequence>
<page path="/" host="${nodelabel}" virtual-host="${nodelabel}" requireIPv4="true" />
</page-sequence>
</parameter>
</service>
<service name="HTTP-v6" interval="300000" user-defined="false" status="on">
<parameter key="retry" value="1" />
<parameter key="timeout" value="3000" />
<parameter key="rrd-repository" value="/opt/opennms/share/rrd/response" />
<parameter key="rrd-base-name" value="http-v6" />
<parameter key="ds-name" value="http-v6" />
<parameter key="page-sequence">
<page-sequence>
<page path="/" host="${nodelabel}" virtual-host="${nodelabel}" requireIPv6="true" />
</page-sequence>
</parameter>
</service>
<downtime interval="300000" begin="0" end="432000000"/><!-- 5m, 0, 5d -->
<downtime begin="432000000" delete="true" /><!-- anything after 5 days delete -->
</package>
The monitoring section at the bottom of poller-configuration.xml should look like this
<monitor service="DNS-A" class-name="org.opennms.netmgt.poller.monitors.DNSResolutionMonitor" /> <monitor service="DNS-AAAA" class-name="org.opennms.netmgt.poller.monitors.DNSResolutionMonitor" /> <monitor service="HTTP-v4" class-name="org.opennms.netmgt.poller.monitors.PageSequenceMonitor" /> <monitor service="HTTP-v6" class-name="org.opennms.netmgt.poller.monitors.PageSequenceMonitor" />
Provisioning
We will create a provisioning group called participants whose data will be drawn from participants.xml.
For each participant in the ISOC provided participants.xml file we will create a node whose nodeLabel is the hostname as provided in participants.xml. We will also use the hostname as the foreignId.
The hostname will be resolved to only IPv4 addresses and then this address will be provisioned on the node as follows:
<node node-label="www.akamai.com" foreign-id="www.akamai.com" building="participants">
<interface status="1" snmp-primary="N" ip-addr="64.210.72.34" descr="www4.akamai.com">
<monitored-service service-name="ICMP"/>
<monitored-service service-name="HTTP"/>
<monitored-service service-name="DNS-A"/>
<monitored-service service-name="DNS-AAAA"/>
<monitored-service service-name="HTTP-v4"/>
<monitored-service service-name="HTTP-v6"/>
</interface>
</node>
On the IPv4 address we will configure the ICMP, HTTP, DNS-A, HTTP-v4, and HTTP-v6 services. *Note: The OpenNMS server will be monitoring the ICMP and the HTTP services in a separate polling package from the remote pollers.
To facilitate this process, an XML transformation has been created that will provide an updated participant requisition file. To run this transformation, go to the features/isoc-ipv6-participants project and run mvn clean install. Then copy the resulting XML file to the pending import directory and resynchronize the requisition.
cp target/generated-resources/xml/xslt/participants-requisition.xml /opt/opennms/etc/imports/pending/participants.xml
Applications
The services defined above will be organized into applications so that the Distributed maps and the ISOC summary graphs will be well organized.
The applications will be IPv4 and IPv6.
The IPv4 application will be composed of the union set of DNS-A and the HTTP-v4 services on all of the participant nodes. The IPv6 application will be composed of the union set of DNS-AAAA and HTTP-v6 services on all the participant nodes.
Here is some handy SQL:
INSERT INTO application_service_map SELECT (SELECT a.id from applications a where a.name = 'IPv6'), ifs.id from ifservices ifs where ifs.serviceid = (select s.serviceid from service s where s.servicename = 'HTTP-v6') or ifs.serviceid = (select s.serviceid from service s where s.servicename = 'DNS-AAAA'); INSERT INTO application_service_map SELECT (SELECT a.id from applications a where a.name = 'IPv4'), ifs.id from ifservices ifs where ifs.serviceid = (select s.serviceid from service s where s.servicename = 'HTTP-v4') or ifs.serviceid = (select s.serviceid from service s where s.servicename = 'DNS-A');
Monitoring Locations
These are the locations from the volunteer form and have been made based on the city and the country of the volunteers registration information:
Sample:
<location-def location-name="Sayreville-NJ"
monitoring-area="USA" polling-package-name="ipv6day"
geolocation="Sayreville, NJ, USA"
coordinates="40.4661619556515,-74.319758687005" priority="100">
<ns1:tags xmlns:ns1="http://xmlns.opennms.org/xsd/config/tags"/>
</location-def>
- Note: The coordinates are automatically filled in by the configured OpenNMS geo-encoder.
Remote Polling
The participants will all be monitored via remote pollers. The monitoring-locations.xml file as described above will be set up to include the locations of all volunteers so the can properly be geocoded for display on the distributed maps page. In addition they will be configured with the polling-package ipv6day
Authentication
The opennms server needs two different kinds of authentication. The first is a user and password to give to the remote poller user. (We've done this already) We also need to make sure someone that clicks on the ISOC site links can view opennms but not edit it.
Complete the details here
ISOC Summary Graph
We need a banner area at the bottom of the ISOC summary graph to include the link for further viewing on OpenNMS (Distributed Map Link) and a link to Choopa as the "Sponsor" of the server being used.
RTC Console
Since ISOC visitors will be seeing the opennms pages, we need to modify the RTC Console to show more representative data. We will create a category for RTC for each type or service DNS-A, DNS-AAAA, HTTP-v4 and HTTP-v6
Sample configuration snippets are included below:
categories.xml
<category>
<label><![CDATA[DNS-A Record Service]]></label>
<comment>This category includes all managed interfaces
which are running an HTTP service on an DNS-A address.</comment>
<normal>99.99</normal>
<warning>97</warning>
<service>DNS-A</service>
<rule><![CDATA[isDNS-A]]></rule>
</category>
<category>
<label><![CDATA[DNS-AAAA Record Service]]></label>
<comment>This category includes all managed interfaces which are
running an HTTP service on an DNS-AAAA address.</comment>
<normal>99.99</normal>
<warning>97</warning>
<service>DNS-AAAA</service>
<rule><![CDATA[isDNS-AAAA]]></rule>
</category>
<category>
<label><![CDATA[HTTP IPv4 Service]]></label>
<comment>This category includes all managed interfaces which are
running an HTTP service on an IPv4 address.</comment>
<normal>99.99</normal>
<warning>97</warning>
<service>HTTP-v4</service>
<rule><![CDATA[isHTTP-v4]]></rule>
</category>
<category>
<label><![CDATA[HTTP IPv6 Service]]></label>
<comment>This category includes all managed interfaces which are running an HTTP service on an IPv6 address.</comment>
<normal>99.99</normal>
<warning>97</warning>
<service>HTTP-v6</service>
<rule><![CDATA[isHTTP-v6]]></rule>
</category>
viewsdisplay.xml
<section> <section-name><![CDATA[ISOC IPv6 Day]]></section-name> <category><![CDATA[Network Interfaces]]></category> <category><![CDATA[DNS-A Record Service]]></category> <category><![CDATA[DNS-AAAA Record Service]]></category> <category><![CDATA[HTTP IPv4 Service]]></category> <category><![CDATA[HTTP IPv6 Service]]></category> </section>
Graphing
We need to define latency graph definitions for the the new services so the latency can be shown from the various monitors. A sample snippet form response-graph.properties is included below:
response-graph.properties
report.http-v4.name=HTTP-v4
report.http-v4.columns=http-v4
report.http-v4.type=responseTime, distributedStatus
report.http-v4.command=--title="HTTP (Node Label:IPv4) Response Time" \
--vertical-label="Seconds" \
DEF:rtMills={rrd1}:http-v4:AVERAGE \
DEF:minRtMills={rrd1}:http-v4:MIN \
DEF:maxRtMills={rrd1}:http-v4:MAX \
CDEF:rt=rtMills,1000,/ \
CDEF:minRt=minRtMills,1000,/ \
CDEF:maxRt=maxRtMills,1000,/ \
LINE1:rt#0000ff:"Response Time" \
GPRINT:rt:AVERAGE:" Avg \\: %8.2lf %s" \
GPRINT:rt:MIN:"Min \\: %8.2lf %s" \
GPRINT:rt:MAX:"Max \\: %8.2lf %s\\n"
report.http-v6.name=HTTP-v6
report.http-v6.columns=http-v6
report.http-v6.type=responseTime, distributedStatus
report.http-v6.command=--title="HTTP (Node Label:IPv6) Response Time" \
--vertical-label="Seconds" \
DEF:rtMills={rrd1}:http-v6:AVERAGE \
DEF:minRtMills={rrd1}:http-v6:MIN \
DEF:maxRtMills={rrd1}:http-v6:MAX \
CDEF:rt=rtMills,1000,/ \
CDEF:minRt=minRtMills,1000,/ \
CDEF:maxRt=maxRtMills,1000,/ \
LINE1:rt#0000ff:"Response Time" \
GPRINT:rt:AVERAGE:" Avg \\: %8.2lf %s" \
GPRINT:rt:MIN:"Min \\: %8.2lf %s" \
GPRINT:rt:MAX:"Max \\: %8.2lf %s\\n"
report.dns-a.name=DNS-A
report.dns-a.columns=dns-a
report.dns-a.type=responseTime, distributedStatus
report.dns-a.command=--title="DNS A Record Lookup Response Time" \
--vertical-label="Seconds" \
DEF:rtMills={rrd1}:dns-a:AVERAGE \
DEF:minRtMills={rrd1}:dns-a:MIN \
DEF:maxRtMills={rrd1}:dns-a:MAX \
CDEF:rt=rtMills,1000,/ \
CDEF:minRt=minRtMills,1000,/ \
CDEF:maxRt=maxRtMills,1000,/ \
LINE1:rt#0000ff:"Response Time" \
GPRINT:rt:AVERAGE:" Avg \\: %8.2lf %s" \
GPRINT:rt:MIN:"Min \\: %8.2lf %s" \
GPRINT:rt:MAX:"Max \\: %8.2lf %s\\n"
report.dns-aaaa.name=DNS-AAAA
report.dns-aaaa.columns=dns-aaaa
report.dns-aaaa.type=responseTime, distributedStatus
report.dns-aaaa.command=--title="DNS AAAA Record Lookup Response Time" \
--vertical-label="Seconds" \
DEF:rtMills={rrd1}:dns-aaaa:AVERAGE \
DEF:minRtMills={rrd1}:dns-aaaa:MIN \
DEF:maxRtMills={rrd1}:dns-aaaa:MAX \
CDEF:rt=rtMills,1000,/ \
CDEF:minRt=minRtMills,1000,/ \
CDEF:maxRt=maxRtMills,1000,/ \
LINE1:rt#0000ff:"Response Time" \
GPRINT:rt:AVERAGE:" Avg \\: %8.2lf %s" \
GPRINT:rt:MIN:"Min \\: %8.2lf %s" \
GPRINT:rt:MAX:"Max \\: %8.2lf %s\\n"
Use Cases
We have identified the following use cases and have specified how to perform each step on individual pages.
- Setting up a remote poller as a volunteer
- Viewing the Graph on the ISOC Website
- Click on the link associated with the ISOC graph and viewing OpenNMS... note:
- Update the participants.xml file
- Participant becomes newly IPv6 enabled
- What to do when there are too many people viewing the distributed maps
Will also have a Data Flow diagram that defines what information comes from were for the participants, the remote pollers, and the graphs.






