Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

external-header-nav
keyboard_arrow_up
close
keyboard_arrow_left
list Table of Contents
file_download PDF
keyboard_arrow_right

Configuring Routers to Send JTI Telemetry Data and RPM Statistics to the Data Collectors

date_range 02-Nov-23

Junos Telemetry Interface (JTI) sensors generate data from the PFE (LSP traffic data, logical and physical interface traffic data), and will only send probes through the data plane. So, in addition to connecting the routing engine to the management network, a data port must be connected to the collector on one of your devices. The rest of the devices in the network can use that interface to reach the collector.

Note:

You must use Junos OS Release 15.1F6 or later for NorthStar analytics.

To configure the routers, use the following procedure:

  1. Configure the devices for telemetry data. On each device, the following configuration is required. The device needs to be set to enhanced-ip mode, which might require a full reboot.
    Note:
    • For NorthStar to correctly process the JTI telemetry packets from MPC10 line cards on the JunOS routers, ensure that you:

      • Configure remote-port in [services analytics streaming-server server] as 3000

      • Add set services analytics export-profile profile-name payload-size 1400

    • If you are configuring for NorthStar integration with HealthBot, use default remote-port 4000 and set the remote-address to the HealthBot server IP address.

    content_copy zoom_out_map
    set chassis network-services enhanced-ip
    set services analytics streaming-server ns remote-address 192.168.10.100
    set services analytics streaming-server ns remote-port 3000
    set services analytics export-profile ns local-address 10.0.0.10
    set services analytics export-profile ns reporting-rate 2
    set services analytics export-profile ns format gpb
    set services analytics export-profile ns transport udp
    set services analytics sensor ifd server-name ns
    set services analytics sensor ifd export-name ns
    set services analytics sensor ifd resource /junos/system/linecard/interface/
    set services analytics sensor ifl server-name ns
    set services analytics sensor ifl export-name ns
    set services analytics sensor ifl resource /junos/system/linecard/interface/logical/usage/
    set services analytics sensor lsp server-name ns
    set services analytics sensor lsp export-name ns
    set services analytics sensor lsp resource /junos/services/label-switched-path/usage/
    set services analytics sensor sr-te-color server-name ns
    set services analytics sensor sr-te-color export-name ns
    set services analytics sensor sr-te-color resource /junos/services/segment-routing/traffic-engineering/ingress/usage/
    set services analytics sensor sid server-name ns
    set services analytics sensor sid export-name ns
    set services analytics sensor sid resource /junos/services/segment-routing/sid/usage/
    set services analytics sensor sr-te-tunnels server-name ns
    set services analytics sensor sr-te-tunnels export-name ns
    set services analytics sensor sr-te-tunnels resource /junos/services/segment-routing/traffic-engineering/tunnel/ingress/usage/
    set protocols mpls sensor-based-stats
    set protocols source-packet-routing telemetry statistics

    In this configuration, the remote address is the IP address of the collector (reachable though a data port). The local address should be the loopback, or router-id, whichever is configured on the device profile to identify the device.

  2. NorthStar supports bandwidth sizing and container LSPs for SR-TE LSPs. Junos OS release 19.2R1 or later is required for this functionality. There is additional configuration required on the router to enable collection of segment routing data. For example:
    content_copy zoom_out_map
    set groups jvision services analytics sensor sr-te-tunnels server-name ns
    set groups jvision services analytics sensor sr-te-tunnels export-name ns
    set groups jvision services analytics sensor sr-te-tunnels resource /junos/services/segment-routing/traffic-engineering/tunnel/ingress/usage/
  3. Real-time performance monitoring (RPM) enables you to monitor network performance in real time and to assess and analyze network efficiency. To achieve this, RPM exchanges a set of probes with other IP hosts in the network for monitoring and network tracking purposes.

    Configure RPM probes to measure the interface delays. The following example shows the configuration of probes out of interface ge-0/1/1.0 to the remote address 10.101.105.2. This remote address should be the IP address of the node at the other end of the link.

    Note:

    The test name must match the interface being measured (test ge-0/1/1.0, in this example).

    content_copy zoom_out_map
    set services rpm probe northstar-ifl test ge-0/1/1.0 target address 10.101.105.2
    set services rpm probe northstar-ifl test ge-0/1/1.0 probe-count 11
    set services rpm probe northstar-ifl test ge-0/1/1.0 probe-interval 5
    set services rpm probe northstar-ifl test ge-0/1/1.0 test-interval 60
    set services rpm probe northstar-ifl test ge-0/1/1.0 source-address 10.101.105.1
    set services rpm probe northstar-ifl test ge-0/1/1.0 moving-average-size 12
    set services rpm probe northstar-ifl test ge-0/1/1.0 traps test-completion
    set services rpm probe northstar-ifl test ge-0/1/1.0 hardware-timestamp
  4. Configure the syslog host using the following commands:
    Note:

    IMPORTANT: To prevent the population of duplicate delay data to the PCS, do not perform this step if you are configuring for integration with HealthBot.

    content_copy zoom_out_map
    set system syslog host 192.168.18.1 daemon info
    set system syslog host 192.168.18.1 port 1514
    set system syslog host 192.168.18.1 match-strings RPM_TEST_RESULTS
    
  5. RPM probes do not yet generate telemetry data, but you can use the rpm-log.slax script to push the results. The script is located in /opt/northstar/data/logstash/utils/junoscripts. Install the script to /var/db/scripts/event on the router.

    Use a text editor such as vi to make one addition to the rpm-log.slax script as follows (the bundled script will be updated in a future release):

    content_copy zoom_out_map
    /* Add embedded event policy to trigger the script */
    var $event-definition = {
        <event-options> {
          <policy> {
            <name> “rpm-log”;
            <events> “ping_test_completed”;
            <events> “ping_test_failed”;     <– Add this line
            <then> {
              <event-script> {
                <name> “rpm-log.slax”;
                <output-format> “xml”;
    

    Enable the script by adding it to the event/scripts configuration:

    Note:

    IMPORTANT: To prevent the population of duplicate delay data to the PCS, do not perform this step if you are configuring for integration with HealthBot.

    content_copy zoom_out_map
    router> start shell csh command "chmod 770 /var/db/scripts/event/rpm-log"
    
    router# set event-options event-script file rpm-log.slax

    The text of the rpm-log.slax script follows. Comments are enclosed in /* */.

    content_copy zoom_out_map
    version 1.2;
    ns junos = "http://xml.juniper.net/junos/*/junos";
    ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
    ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import
    /junos.xsl";
    param $test-owner = event-script-input/trigger-event/attribute-list/attribute
    [name=="test-owner"]/value;
    param $test-name = event-script-input/trigger-event/attribute-list/attribute
    [name=="test-name"]/value;
    param $delay-value;
    var $arguments = {
      <argument> {
          <name> “test-name”;
          <description> “Name of the RPM test”;
      }
      <argument> {
         <name> “test-owner”;
         <description> “ Name of the RPM probe owner”;
      }
      <argument> {
         <name> “delay-value”;
         <description> “Delay value to send out, used to generate fake 
    data”;
      }
    }
    /* Add embedded event policy to trigger the script */
    var $event-definition = {
        <event-options> {
          <policy> {
            <name> “rpm-log”;
            <events> “ping_test_completed”;
            <then> {
              <event-script> {
                <name> “rpm-log.slax”;
                <output-format> “xml”;
              }
            }
          }
        }
    }
    match / {
      <op-script-results> {
            /* Load Probe results */
            var $get-probe-resultsrpc = <get-probe-results> { <owner> $test-
    owner; <test> $test-name;}
            var $probe-results = jcs:invoke($get-probe-resultsrpc);
            /* Extract data of interest */
            var $target-address = $probe-results/probe-test-results/target-address;
            var $probe-type = $probe-results/probe-test-results/probe-type;
            var $loss-percentage = format-number(number($probe-results/probe-test-
    results/probe-test-moving-results/probe-test-generic-results/loss-percentage), '#.##');
            var $jitter = format-number(number($probe-results/probe-test-results/probe-
    test-moving-results/probe-test-generic-results/probe-test-rtt/probe-summary-results/
    jitter-delay) div 1000, '#.###');
            var $avg-delay = {
              if ($delay-value) {
                    number($delay-value);
              } else {
                    expr format-number(number($probe-results/probe-test-results/probe-test-
    moving-results/probe-test-generic-results/probe-test-egress/probe-summary-results/avg-
    delay) div 1000, '#.##');
              }
            }
            var $min-delay = {
              if ($delay-value) {
                    number($delay-value);
              } else {
                    expr format-number(number($probe-results/probe-test-results/probe-test-
    moving-results/probe-test-generic-results/probe-test-egress/probe-summary-results/min-
    delay) div 1000, '#.##');
              }
            }
            var $max-delay = {
              if ($delay-value) {
                    number($delay-value);
              } else {
                    expr format-number(number($probe-results/probe-test-results/probe-test-
    moving-results/probe-test-generic-results/probe-test-egress/probe-summary-results/max-
    delay) div 1000, '#.##');
              }
            }
    
            expr jcs:syslog("daemon.info","RPM_TEST_RESULTS: ","test-owner=",$test-owner," 
    test-name=",$test-name," loss=",$loss-percentage," min-rtt=",$min-delay," max-rtt=",
    $max-delay," avgerage-rtt=",$avg-delay," jitter=",$jitter);
      }
    }
external-footer-nav