I’ve been spending some time on this as well, here’s the first thing I would 
ask you:


If you do “show version | match tele”

Eg:

jared@Router> show version | match tele 

{master:0}
jared@Router> 

vs

jared@Router> show version | match tele 
JUNOS na telemetry [21.4R3-S5.17]

{master:0}

What do you see?  I’ve had varying results based on the platform.

The second thing is, does your sensor path actually complete?

You may want to try to use a UDP based sensor instead to start to validate the 
platform will output what you expect, for example:

services {
    analytics {
        streaming-server server-name {
            remote-address 10.0.0.100;
            remote-port 22022;
        }
        export-profile export-interfaces {
            local-address lo0.0-ip-address;
            local-port 9877;
            reporting-rate 60;
            format gpb;
            transport udp;
        }                               
        sensor data-interfaces {
            server-name server-name;
            export-name export-interfaces;
            resource /interfaces/interface;
        }



A simple receiver such as:

#!/usr/bin/python3
import socket, struct
from google.protobuf.descriptor import FieldDescriptor
from google.protobuf.json_format import MessageToJson
import google.protobuf.text_format
import telemetry_top_pb2 # build w/ protoc

# Bind Socket UDP port as Telemetry recevice server
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 22022))


Telemetry_content = telemetry_top_pb2.TelemetryStream()
while True:
    buf, (src_ip, src_port) = sock.recvfrom(65535)
    print("received %d from %s:%d" % (len(buf), src_ip, src_port))

    with warnings.catch_warnings(record=True) as w:
        ret = Telemetry_content.ParseFromString(buf)
        if len(w) > 0:
            print ("Runtime Warning using ParseFromString: ", w)
            for x in w:
                print("\t", x)

    print(google.protobuf.text_format.MessageToString(Telemetry_content, 
print_unknown_fields=True, force_colon=True, use_index_order=True))


This will save a lot of effort/overhead of the certificates etc, and let you 
make sure the code supports the sensors you expect, and you can use protoc to 
add in the photo files that might be needed.

I’ve seen Juniper output invalid GPB in cases where the software doesn’t 
support the sensors.

- Jared


> On Mar 7, 2024, at 10:25 AM, Sebastian Wiesinger via juniper-nsp 
> <juniper-nsp@puck.nether.net> wrote:
> 
> Hello everyone,
> 
> I'm trying (and failing) to get gNMI running on an MX960. All I'm
> getting are weird errors. Has anyone successfully used gNMI
> subscriptions on an MX box for streaming telemetry? If so, which
> config did you use on the box and in the client?
> 
> My config on the MX is this:
> 
> set system services extension-service request-response grpc ssl address 
> 10.4.0.78
> set system services extension-service request-response grpc ssl port 30030
> set system services extension-service request-response grpc ssl 
> local-certificate gnmi
> set system services extension-service request-response grpc 
> skip-authentication
> 
> set security certificates local gnmi "-----BEGIN PRIVATE 
> KEY-----\n[...]\n-----END CERTIFICATE-----\n"
> 
> First I had port 3060 which produced weird errors but nothing else.
> Moving the gNMI service to port 30030 at least made the gNMI
> connection succeed. Then I got weird gRPC errors, so I upgraded JunOS
> on the box to 21.2R3-S5.4.
> 
> Now, when I try to subscribe to interface counters:
> 
> subscribe = {
>        "subscription": [
>        {
>                "path": "/interfaces/interface/state/counters",
>                "mode": "sample",
>                "sample_interval": 10 * 1000000000,
>        },
>        ],
>        "mode": "stream",
>        "use_aliases": False,
>        "encoding": "proto",
> }
> 
> All the box does is spew back an gNMI error that Qos is not
> supported. WTF?
> 
> "UNKNOWN:Error received from peer ipv4:10.4.0.78:30030 {grpc_message:"Qos not 
> supported", grpc_status:12, created_time:"2024-03-07T16:20:41.756921+01:00"}"
> 
> On Arista this worked right after gNMI was enabled on the Switch.
> 
> Am I missing something? It should not be this hard to get this
> working!
> 
> Best Regards
> 
> Sebastian
> 
> -- 
> 'Are you Death?' ... IT'S THE SCYTHE, ISN'T IT? PEOPLE ALWAYS NOTICE THE 
> SCYTHE.
>            -- Terry Pratchett, The Fifth Elephant
> _______________________________________________
> juniper-nsp mailing list juniper-nsp@puck.nether.net
> https://puck.nether.net/mailman/listinfo/juniper-nsp

_______________________________________________
juniper-nsp mailing list juniper-nsp@puck.nether.net
https://puck.nether.net/mailman/listinfo/juniper-nsp

Reply via email to