-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdraft-ietf-nmop-message-broker-telemetry-message-01.xml
More file actions
1279 lines (1114 loc) · 45.1 KB
/
draft-ietf-nmop-message-broker-telemetry-message-01.xml
File metadata and controls
1279 lines (1114 loc) · 45.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<!-- If further character entities are required then they should be added to the DOCTYPE above.
Use of an external entity file is not recommended. -->
<rfc category="info"
docName="draft-ietf-nmop-message-broker-telemetry-message-01"
ipr="trust200902" obsoletes="" submissionType="IETF" updates=""
version="3" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:ns2="http://www.w3.org/2000/svg"
xmlns:ns="http://www.w3.org/1999/xlink">
<front>
<title
abbrev="Telmetery Message">Extensible YANG Model for Network
Telemetry Messages</title>
<seriesInfo name="Internet-Draft"
value="draft-ietf-nmop-message-broker-telemetry-message-01"/>
<author fullname="Ahmed Elhassany" initials="A" surname="Elhassany">
<organization>Swisscom</organization>
<address>
<postal>
<street>Binzring 17</street>
<city>Zuerich 8045</city>
<region/>
<code/>
<country>Switzerland</country>
</postal>
<phone/>
<email>ahmed.elhassany@swisscom.com</email>
<uri/>
</address>
</author>
<author fullname="Thomas Graf" initials="T." surname="Graf">
<organization>Swisscom</organization>
<address>
<postal>
<street>Binzring 17</street>
<city>Zuerich 8045</city>
<region/>
<code/>
<country>Switzerland</country>
</postal>
<phone/>
<email>thomas.graf@swisscom.com</email>
<uri/>
</address>
</author>
<date day="02" month="July" year="2025"/>
<area>General</area>
<workgroup>NMOP</workgroup>
<keyword>keyword</keyword>
<abstract>
<t>This document defines an extensible message schema in YANG to
be used at data collection to transform Network Telemetry
messages into external systems such as Message Brokers.
The extensible message schema enables data collectors to add
metadata for the provenance of the operational network data.</t>
</abstract>
</front>
<middle>
<section>
<name>Introduction</name>
<t>Nowadays network operators are using machine and human
readable <xref target="RFC7950">YANG</xref> to model their
configurations and obtain YANG modelled operational data from
their networks.</t>
<t>Network operators organize their data in a <xref
target="Deh22">Data Mesh</xref> where a Message Broker such as
<xref target="Kaf11">Apache Kafka</xref> or <xref
target="Rab07">RabbitMQ</xref> facilitates the exchange of
messages among data processing components.</t>
<t>Today, subscribing to a YANG datastore, publishing a YANG
modeled notifications message from the network and viewing the
data in a time series database, manual labor is needed to perform
data transformation to make a Message Broker and its data
processing components with YANG notifications interoperable.</t>
<t>Even though YANG is intended to ease data management, this
promise has not yet been fulfilled for <xref target="RFC9232">
Network Telemetry</xref>.</t>
<t><xref target="I-D.ietf-nmop-yang-message-broker-integration">An
Architecture for YANG-Push to Message Broker Integration</xref>
defined an architecture for integrating YANG-Push with
Message Brokers for a Data Mesh architecture. How the
notification messages at a YANG-Push Receiver is being transformed
to the Message Broker is being described in Section <xref
section="4.5" sectionFormat="of"
target="I-D.ietf-nmop-yang-message-broker-integration"/>, however
the produced message format left unspecified.</t>
<t>The message could be published as it was received from the
network to their organization's Message Broker. However, this
approach is insufficient for correct human and automated
understanding of the data generated by the network. This
insufficiency stems from not presenting a holistic picture
along with the data generated by the network. In particular, when
a data consumer in the data mesh consumes a YANG message from
their organization's Message Broker, they cannot answer simple
questions such as:</t>
<ul>
<li>Which network operating system collected the data?</li>
<li>To which network platform belongs the network node?</li>
<li>What is the subscribed xpath, sub-tree filter and its
schema reference?</li>
<li>When did a data collector received the data?</li>
<li>What additional metadata is necessary for a consumer to make
sense of the data?</li>
</ul>
<t><xref section="7.2" sectionFormat="of"
target="I-D.ietf-opsawg-collected-data-manifest"/> describes the
content of a Data Manifest and how it is being mapped to the
collected Network Telemetry data. The "ietf-telemetry-message"
YANG module defined in this document makes use of the
platform-details grouping defined in <xref section="5.2"
sectionFormat="of"
target="I-D.ietf-opsawg-collected-data-manifest"/> for the
network node and the data collector.</t>
<t>This document defines a standard YANG envelope message to carry
with the collected Network Telemetry notifications the provenance
and metadata information for a YANG data exchange between between
Message Broker producers and consumers as described in
Section 4.5 and 4.6 <xref
target="I-D.ietf-nmop-yang-message-broker-integration"/>. The
described YANG model fascilitates <xref
target="RFC7951">JSON</xref> and <xref
target="RFC9254">CBOR</xref> serialization.</t>
</section>
<section>
<name>Conventions and Definitions</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
"SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",
"NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to
be interpreted as described in BCP 14 <xref target="RFC2119"/>
<xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
<section>
<name>Terminology</name>
<t>The terms "Subscriber", "Publisher", and "Receiver" are
used as defined in <xref target="RFC8639"/>.</t>
<t>The term "Network Telemetry" is used
as defined in <xref target="RFC9232"/>. This document uses the
term export and collection to distinguish between the
data export and collection.</t>
<t>The term "Message Broker" is used
as defined in <xref
target="I-D.ietf-nmop-yang-message-broker-integration"/>.</t>
<t>The term "Data Manifest" is used
as defined in <xref
target="I-D.ietf-opsawg-collected-data-manifest"/>. The term
provenance is used in general to describe the origin, history,
and authenticity of an asset which then is described in a
manifest.</t>
<t>In addition, this document reuses the terms "Notification
Metadata" and "Notification Envelope" defined in <xref
target="I-D.ietf-netconf-notif-envelope"/> for the use in
Message Broker environment:</t>
<t>Notification Metadata: Additional data describing the
context of a notification that is sent in each message, e.g.
which node generated the messsage or at which time the
notification was published.</t>
<t>Notification Envelope: YANG structure encapsulating the
payload of a notification, allowing the inclusion of metadata.
</t>
</section>
</section>
<section>
<name>YANG Modules</name>
<t>This document defines two YANG modules, an extensible YANG
module for Network Telemetry messages defined in <xref
target="ietf-telemetry-message-module"/> and a YANG-Push extension
defined in <xref
target="ietf-yang-push-telemetry-message-module"/>.</t>
<t>The extensible YANG module for Network Telemetry messages
defines an envelope message schema which adds two provenance
and two metadata categories to the collected Network Telemetry
data.</t>
<t>The YANG-Push extension adds YANG-Push specific subscription
metadata to the Network Telemetry protocol provenance of the
envelope.</t>
<dl>
<dt>Network Node Manifest:</dt>
<dd>The OPTIONAL "network-node-manifest" container in <xref
target="ietf-telemetry-message-module"/> contains the Data
Manifest about the network node that exported Network Telemetry
data. It adds information such as the node name, address, and
software version. Each leaf is OPTIONAL.
</dd>
</dl>
<dl>
<dt>Network Telemetry Protocol Metadata:</dt>
<dd>The "telemetry-message-metadata" container in <xref
target="ietf-telemetry-message-module"/> contains the Network
Telemetry session information between the collector and the
network node. It adds fields such as the Network Telemetry
protocol name, the IP addresses and ports of that transport
session and the time the event was exported at the network node
and received at the data collector. Apart from the
collection-timestamp, session-protocol and remote-address leafs
all other leafs are OPTIONAL. These Network Telemetry session
informations allow a network operator to troubleshoot and
measure delay and loss related issues. Moreover, this document
also defines with <xref
target="ietf-yang-push-telemetry-message-module"/> an extension
specific to YANG-Push that includes YANG-Push subscription
information relevant to the Network Telemetry session
information.</dd>
</dl>
<dl>
<dt>Data Collection Manifest:</dt>
<dd>The OPTIONAL "data-collection-manifest" container in <xref
target="ietf-telemetry-message-module"/> contains the Data
Manifest of the data collector which collected the Network
Telemetry data. The data type is the same as the previous
category but specific to the collector node.</dd>
</dl>
<dl>
<dt>Network Operator Metadata:</dt>
<dd>The OPTIONAL "labels" list in the "network-operator-metadata"
container in <xref target="ietf-telemetry-message-module"/>
contains the operator specific metadata. Some operators enrich
the collected data with specific information. For instance: type
of the network node (provider or provider edge node) or which
operational unit the node is operated by. For this purpose the
document defines a generic metadata map with key/values that can
be used freely by the network operator.</dd>
</dl>
<figure anchor="ietf-telemetry-message-tree"
title="YANG tree diagram for 'ietf-telemetry-message' module.">
<sourcecode type="yangtree"><![CDATA[
module: ietf-telemetry-message
+--ro message
+--ro network-node-manifest {network-node-manifest}?
| +--ro name? string
| +--ro vendor? string
| +--ro vendor-pen? uint32
| +--ro software-version? string
| +--ro software-flavor? string
| +--ro os-version? string
| +--ro os-type? string
+--ro telemetry-message-metadata
| +--ro node-export-timestamp? yang:date-and-time
| +--ro collection-timestamp yang:date-and-time
| +--ro session-protocol
| | telemetry-session-protocol-type
| +--ro export-address inet:host
| +--ro export-port? inet:port-number
| +--ro collection-address? inet:host
| +--ro collection-port? inet:port-number
+--ro data-collection-manifest {data-collection-manifest}?
| +--ro name? string
| +--ro vendor? string
| +--ro vendor-pen? uint32
| +--ro software-version? string
| +--ro software-flavor? string
| +--ro os-version? string
| +--ro os-type? string
+--ro network-operator-metadata
| +--ro labels* [name]
| +--ro name string
| +--ro (value)
| +--:(string-choice)
| | +--ro (string-choice)?
| | +--:(string-value)
| | +--ro string-value? string
| +--:(anydata-choice)
| +--ro (anydata-choice)?
| +--:(anydata-values)
| +--ro anydata-values? <anydata>
+--ro payload? <anydata>
]]></sourcecode></figure>
<figure title="ietf-yang-push-telemetry-message tree">
<artwork>
<![CDATA[
module: ietf-yang-push-telemetry-message
augment /tm:message/tm:telemetry-message-metadata:
+--ro yang-push-subscription
+--ro id? sn:subscription-id
+--ro (filter-spec)?
| +--:(subtree-filter)
| | +--ro subtree-filter? <anydata>
| +--:(xpath-filter)
| +--ro xpath-filter? yang:xpath1.0
+--ro (target)?
| +--:(stream)
| | +--ro stream? string
| +--:(datastore)
| +--ro datastore? identityref
+--ro transport? sn:transport
+--ro encoding? sn:encoding
+--ro purpose? string
+--ro (update-trigger)?
| +--:(periodic)
| | +--ro periodic!
| | +--ro period? yp:centiseconds
| | +--ro anchor-time? yang:date-and-time
| +--:(on-change)
| +--ro on-change!
| +--ro dampening-period? yp:centiseconds
| +--ro sync-on-start? boolean
+--ro module-version* [module-name]
| +--ro module-name yang:yang-identifier
| +--ro revision? rev:revision-date
| +--ro revision-label? ysver:version
+--ro yang-library-content-id? string
]]></artwork>
</figure>
<figure anchor="ietf-telemetry-message-module"
title="YANG 'ietf-telemetry-message' module.">
<sourcecode name="ietf-telemetry-message@2025-06-10.yang" type="yang"
markers="true"><![CDATA[
module ietf-telemetry-message {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-telemetry-message";
prefix tm;
import ietf-yang-types {
prefix yang;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-inet-types {
prefix inet;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-platform-manifest {
prefix p-mf;
reference
"draft-ietf-opsawg-collected-data-manifest: A Data Manifest for
Contextualized Telemetry Data";
}
organization
"IETF Draft";
contact
"Author: Ahmed Elhassany
<mailto:ahmed.elhassany@swisscom.com>
Thomas Graf
<mailto:thomas.graf@swisscom.com>";
description
"This YANG module defines an extensible message schema to be used at
data collection to transform Network Telemetry messages towards
external systems such as Message Brokers.
Copyright (c) 2025 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, is permitted pursuant to, and subject to the license
terms contained in, the Revised BSD License set forth in Section
4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the RFC
itself for full legal notices.";
revision 2025-06-10 {
description
"Initial revision.";
reference
"RFC XXXX";
}
identity session-protocol {
description
"Base identity to represent session protocols.";
}
identity yp-push {
base session-protocol;
description
"YANG-Push in RFC 8640 or RFC 8641 or RFC 8650.";
reference
"RFC 8640, RFC 8641, RFC 8650: YANG-Push Events and Notifications
for Datastores.";
}
identity netconf {
base session-protocol;
description
"NETCONF RPC as described in RFC 6241.";
reference
"RFC 6241: NETCONF RPC.";
}
identity restconf {
base session-protocol;
description
"RESTCONF HTTP as described in RFC 8040.";
reference
"RFC 8040.";
}
feature network-node-manifest {
description
"This feature indicates the network node manifest support.";
}
feature data-collection-manifest {
description
"This feature indicates the data collection manifest support.";
}
typedef telemetry-notification-event-type {
type enumeration {
enum log {
description
"Collector is reporting the event as it arrived from the
network element.";
}
enum update {
description
"Collector has updated an entry inside its local cache.
This could be triggered by an event from the network for
instance interface operational status changed or an internal
event in the collector, such as a timer triggered to referesh
old enteries.";
}
enum delete {
description
"Collector has deleted an entry from its local cache.";
}
}
description
"Type of event reported by the collector.";
}
typedef telemetry-session-protocol-type {
type identityref {
base session-protocol;
}
description
"Network Telemetry protocol used to deliver the notification
between the network node and the data collector.";
}
container message {
config false;
description
"Telemetry message used within the Data Mesh";
container network-node-manifest {
if-feature "network-node-manifest";
description
"Contains the Data Manifest about the network node that
exported Network Telemetry data.";
uses p-mf:platform-details;
}
container telemetry-message-metadata {
description
"contains the session information about the session between the
collector and the network node.";
leaf node-export-timestamp {
type yang:date-and-time;
description
"Timestamp when the Network Telemetry data has been exported
from network element. This can be obtained in YANG-Push from
event-time defined in draft-ietf-netconf-notif-envelope or
in IPFIX from the export time in the message header as
defined in RFC 7011 or in BMP from the timestamp in The
per-peer header as defined in RFC 7854.";
}
leaf collection-timestamp {
type yang:date-and-time;
mandatory true;
description
"Timestamp when the data collector collected the Network
Telemetry data from the network element.";
}
leaf session-protocol {
type telemetry-session-protocol-type;
mandatory true;
description
"Session protocol used to collect the Network Telemetry data
from the network node.";
}
leaf export-address {
type inet:host;
mandatory true;
description
"Network node IP address from where the Network Telemetry data
was exported from.";
}
leaf export-port {
type inet:port-number;
description
"Network node transport port number from where the Network
Telemetry data was exported.";
}
leaf collection-address {
type inet:host;
description
"Data collector IP address at which the Network Telemetry
data was collected.";
}
leaf collection-port {
type inet:port-number;
description
"Data collector transport port number at which the Network
Telemetry data was collected.";
}
}
container data-collection-manifest {
if-feature "data-collection-manifest";
description
"Contains the Data Manifest of the data collector which
collected the Network Telemetry data.";
uses p-mf:platform-details;
}
container network-operator-metadata {
description
"Network operator specific metadata added by the Network
Telemetry data collection.";
list labels {
key "name";
description
"Abritrary labels assigned by the data collector.";
leaf name {
type string {
length "1..max";
}
description
"Label name.";
}
choice value {
mandatory true;
description
"label value";
choice string-choice {
description
"String value";
leaf string-value {
type string;
description
"String value";
}
}
choice anydata-choice {
description
"YANG anydata value";
anydata anydata-values {
description
"anydata yang";
}
}
}
}
}
anydata payload {
description
"Message or notification received from network element.";
}
}
}
]]></sourcecode>
</figure>
<figure anchor="ietf-yang-push-telemetry-message-module"
title="YANG 'ietf-yang-push-telemetry-message' module.">
<sourcecode name="ietf-yang-push-telemetry-message@2025-06-10.yang"
type="yang" markers="true"><![CDATA[
module ietf-yang-push-telemetry-message {
yang-version 1.1;
namespace
"urn:ietf:params:xml:ns:yang:ietf-yang-push-telemetry-message";
prefix yptm;
import ietf-subscribed-notifications {
prefix sn;
reference
"RFC 8639: Subscription to YANG Notifications";
}
import ietf-telemetry-message {
prefix tm;
reference
"draft-netana-nmop-message-broker-telemetry-message: Extensible
YANG Model for Network Telemetry Messages";
}
import ietf-yang-push {
prefix yp;
reference
"RFC 8641: Subscription to YANG Notifications for Datastore
Updates";
}
import ietf-yang-types {
prefix yang;
reference
"RFC 6991: Common YANG Data Types";
}
import ietf-datastores {
prefix ds;
reference
"RFC 8342: Network Management Datastore Architecture (NMDA)";
}
import ietf-yang-revisions {
prefix rev;
reference
"draft-ietf-netmod-yang-module-versioning: Updated YANG Module
Revision Handling";
}
import ietf-yang-semver {
prefix ysver;
reference
"draft-ietf-netmod-yang-semver: YANG Semantic Versioning";
}
organization
"IETF Draft";
contact
"Author: Ahmed Elhassany
<mailto:ahmed.elhassany@swisscom.com>
Thomas Graf
<mailto:thomas.graf@swisscom.com>";
description
"Adds YANG-Push specific subscription metadata to the data
collection protocol provenance of the ietf-telemetry-message
envelope.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
are to be interpreted as described in BCP 14 (RFC 2119)
(RFC 8174) when, and only when, they appear in all
capitals, as shown here.
Copyright (c) 2025 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, is permitted pursuant to, and subject to the license
terms contained in, the Revised BSD License set forth in Section
4.c of the IETF Trust's Legal Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the RFC
itself for full legal notices.";
revision 2025-06-10 {
description
"Initial revision.";
reference
"RFC XXXX";
}
augment "/tm:message/tm:telemetry-message-metadata" {
description
"Augments telemetry-message-metadata with YANG-Push specific
subscription metadata";
container yang-push-subscription {
config false;
description
"YANG-Push specific subscription metadata";
leaf id {
type sn:subscription-id;
description
"This references the affected subscription.";
}
choice filter-spec {
description
"The content filter specification for this request.";
anydata subtree-filter {
description
"Event stream evaluation criteria or the parameter
identifies the port of the target datastore encoded in the
syntax of a subtree filter as defined in RFC 6241,
Section 6.";
reference
"RFC 6241: Network Configuration Protocol (NETCONF),
Section 6.";
}
leaf xpath-filter {
type yang:xpath1.0;
description
"Event stream evaluation criteria or porting of the target
datastore encoded in the syntax of an XPath 1.0
expression";
reference
"XML Path Language (XPath) Version 1.0
(https://www.w3.org/TR/1999/REC-xpath-19991116)
RFC 7950: The YANG 1.1 Data Modeling Language,
Section 10";
}
}
choice target {
description
"Identifies the source of information against which a
subscription is being applied as well as specifics on the
subset of information desired from that source.";
case stream {
leaf stream {
type string;
description
"Indicates the event stream to be considered for this
subscription.";
}
}
case datastore {
leaf datastore {
type identityref {
base ds:datastore;
}
description
"Datastore from which to retrieve data.";
}
}
}
leaf transport {
type sn:transport;
description
"For a configured subscription, this leaf specifies the
transport used to deliver messages destined for all
receivers of that subscription.";
}
leaf encoding {
type sn:encoding;
description
"The type of encoding for notification messages. For a
dynamic subscription, if not included as part of an
'establish-subscription' RPC, the encoding will be populated
with the encoding used by that RPC. For a configured
subscription, if not explicitly configured, the encoding
will be the default encoding for an underlying transport.";
}
leaf purpose {
type string;
description
"Open text allowing a configuring entity to embed the
originator or other specifics of this subscription.";
}
choice update-trigger {
description
"Defines necessary conditions for sending an event record to
the subscriber.";
case periodic {
container periodic {
presence "indicates a periodic subscription";
description
"The publisher is requested to notify periodically the
current values of the datastore as defined by the
selection filter.";
leaf period {
type yp:centiseconds;
description
"Duration of time which should occur between periodic
push updates, in one hundredths of a second.";
}
leaf anchor-time {
type yang:date-and-time;
description
"Designates a timestamp before or after which a series
of periodic push updates are determined. The next
update will take place at a whole multiple interval
from the anchor time. For example, for an anchor time
is set for the top of a particular minute and a period
interval of a minute, updates will be sent at the top
of every minute this subscription is active.";
}
}
}
case on-change {
container on-change {
presence "indicates an on-change subscription";
description
"The publisher is requested to notify changes in values
in the datastore subset as defined by a selection
filter.";
leaf dampening-period {
type yp:centiseconds;
default "0";
description
"Specifies the minimum interval between the assembly of
successive update records for a single receiver of a
subscription. Whenever subscribed objects change, and
a dampening period interval (which may be zero) has
elapsed since the previous update record creation for
a receiver, then any subscribed objects and properties
which have changed since the previous update record
will have their current values marshalled and placed
into a new update record.";
}
leaf sync-on-start {
type boolean;
default "true";
description
"When this object is set to false, it restricts an
on-change subscription from sending push-update
notifications. When false, pushing a full selection
per the terms of the selection filter MUST NOT be done
for this subscription. Only updates about changes,
i.e. only push-change-update notifications are sent.
When true (default behavior), in order to facilitate a
receiver's synchronization, a full update is sent when
the subscription starts using a push-update
notification. After that, push-change-update
notifications are exclusively sent unless the publisher
chooses to resync the subscription via a new
push-update notification.";
}
}
}
}
list module-version {
key "module-name";
config false;
description
"List of yang-push-module-version grouping. The revision is
not configurable.";
leaf module-name {
type yang:yang-identifier;
config false;
description
"This references the YANG module name.";
}
leaf revision {
type rev:revision-date;
config false;
description
"This references the YANG module revision of the sent
notification message.";
}
leaf revision-label {
type ysver:version;
description
"This references the YANG module semantic version of the
sent notification message.";
}
}
leaf yang-library-content-id {
type string;
config false;
description
"Contains the YANG library content identifier RFC 8525
information.";
}
}
}
}
]]></sourcecode>
</figure>
</section>
<section>
<name>Use Cases</name>
<section>
<name>Data Chain Troubleshooting</name>
<t>In a distributed system like a data chain described in <xref
target="I-D.ietf-nmop-yang-message-broker-integration"/>, a
single system component could introduce a new issue after a
software upgrade of a system component . Thanks to the network
node and the data collection manifest, the data engineer is able
to identify wherever a software upgrade has been performed on
a network node or on a data collector and its impact on the
telemetry messages. Such an upgrade could have a potential
impact on the YANG schema of the exported YANG-Push Notification
which is identifable through the "yang-library-content-id" and
"revision" and "revision-label" defined in <xref
target="I-D.ietf-netconf-yang-notifications-versioning"/>
and transformed at the data collectors as part of Network
Telemetry protocol metadata or the YANG schema id when being
produced to the message broker as described in <xref
section="4.5"
target="I-D.ietf-nmop-yang-message-broker-integration"/>.</t>
</section>
<section>
<name>Data Product Service Level Objective</name>
<t>For <xref section="3.5"
target="I-D.ietf-nmop-network-anomaly-architecture">Service
Disruption Detection</xref> in Network Anomaly Detection,
operational Network Telemetry data needs to to be consumeable
as a <xref section="4.7"
target="I-D.ietf-nmop-yang-message-broker-integration">YANG data
consumer</xref> within the defined time to ensure a holistic
view of the network. To measure the delay and loss between the
data export on the network node, the data collectors and
the YANG data consumer, sequence numbers and timestamps are
required. With "hostname" and "sequence-number"
defined in <xref section="3.4"
target="I-D.ietf-netconf-notif-envelope"/> each message is
uniquely identifiably and with "event-time" and
"observation time" defined in section 3.4 and 3.5 of <xref
target="I-D.ietf-netconf-notif-envelope"/> and "collection-time"
defined in this document and the timestamp when the data arrived
at the YANG data consumer, the loss and delay for a given
network node and message can be deducted. Metadata introduced in
this document help a data engineer to determine a common
denominator and identify the system component causing the delay
and loss.</t>
<t>Certain collection protocol types such as polling or push
based and subscriptions types, such as on-change or periodical,
have different data delay characteristics. Push based on-change
subscriptions are expected to export messages almost instantly
where polling based subscriptions observe changes depending on
their polling interval much later. With the Network Telemetry
protocol metadata introduced by this document, based on the
update-trigger informations, a YANG data consumer can define
for a given YANG-Push subscription id a lower service Level
objective than for another. Therefore adjust the detection
to be more real-time than without this information.</t>
</section>
</section>
<section>
<name>IANA Considerations</name>
<t>This document registers the following two namespace URIs in the
<xref target="RFC3688">IETF XML Registry</xref>:</t>
<ul>
<li>URI: urn:ietf:params:xml:ns:yang:ietf-telemetry-message</li>
<li>Registrant Contact: The IESG.</li>
<li>XML: N/A; the requested URI is an XML namespace.</li>
</ul>
<t/>
<ul>
<li>URI: urn:ietf:params:xml:ns:yang:ietf-yang-push-telemetry-message</li>
<li>Registrant Contact: The IESG.</li>
<li>XML: N/A; the requested URI is an XML namespace.</li>
</ul>