Notificações de eventos do NETCONF
RESUMO Os clientes da NETCONF podem assinar notificações de eventos em sessões netconf para receber alertas para eventos que possam afetar as operações ou atividades de gerenciamento de dispositivos.
Visão geral das notificações de eventos do NETCONF
Determinados dispositivos que executam o Junos OS Evolved oferecem suporte a notificações de eventos NETCONF, um serviço de notificação de eventos assíncrono entre um servidor NETCONF e um cliente NETCONF. Depois de habilitar o serviço de notificação, o servidor NETCONF envia notificações de eventos, conforme os eventos ocorrem, a todos os clientes da NETCONF que assinam as notificações. Os clientes podem assinar notificações netconf para receber alertas para eventos que possam afetar as operações ou atividades de gerenciamento de dispositivos.
O servidor NETCONF envia notificações para os seguintes tipos de eventos:
netconf-session-start
— Indica quando uma sessão da NETCONF começa e identifica o usuário que iniciou a sessão.netconf-session-end
— Indica quando uma sessão da NETCONF termina e identifica o usuário que era o dono da sessão e o motivo pelo qual a sessão foi terminada.netconf-config-change
— Indica quando uma sessão de gerenciamento confirma alterações na configuração ativa e fornece um resumo das mudanças.-
Eventos de ON_CHANGE do OpenConfig
Você pode habilitar o serviço de notificação de eventos NETCONF em dispositivos suportados. Veja como habilitar e assinar as notificações de eventos netconf para obter instruções. Você pode configurar opcionalmente o recurso de interleave, que permite que os clientes da NETCONF assinem notificações e enviem RPCs na mesma sessão NETCONF, conforme descrito no Interleave Capability.
Depois de habilitar notificações de eventos netconf, o servidor NETCONF anuncia o notification
recurso e o interleave
recurso na troca de recursos.
<nc:hello xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <nc:capabilities> ... <nc:capability>urn:ietf:params:netconf:capability:notification:1.0</nc:capability> <nc:capability>urn:ietf:params:xml:ns:netconf:notification:1.0</nc:capability> <nc:capability>urn:ietf:params:netconf:capability:interleave:1.0</nc:capability> <nc:capability>urn:ietf:params:xml:ns:netmod:notification</nc:capability> ... </nc:capabilities> <nc:session-id>29862</nc:session-id> </nc:hello>
Para assinar o serviço de notificação para eventos em um dispositivo específico, um cliente netconf envia um <create-subscription>
RPC para o servidor NETCONF no dispositivo e indica o seguinte:
-
<stream>
— O fluxo de eventos que é de interesse.Um fluxo é um conjunto de notificações de eventos que correspondem a alguns critérios de encaminhamento. Uma assinatura é vinculada a um único fluxo para a vida útil da assinatura. O
NETCONF
fluxo é o fluxo padrão e só suportado em dispositivos Junos. O servidor NETCONF retorna um erro se a solicitação de assinatura for para qualquer outro fluxo. Se você omitir esse parâmetro, o dispositivo trata a solicitação de assinatura como uma solicitação para oNETCONF
fluxo. -
<filter>
— um filtro de sub-árvore que seleciona um subconjunto de todos os eventos possíveis.Se um cliente NETCONF especificar um filtro, o servidor encaminha apenas os eventos selecionados pelo filtro. Se um cliente não especificar um filtro, o servidor encaminha todos os eventos. O Junos OS Evolved oferece suporte apenas a filtros de alto nível e não oferece suporte ao uso de filtros XPATH para este elemento. Consulte o recurso de filtragem para obter mais informações.
Após um cliente netconf assinar notificações de eventos, o servidor NETCONF envia as notificações conforme elas ocorrem. As notificações continuam até o encerramento da sessão da NETCONF.
Um cliente NETCONF recebe todas as notificações de eventos por padrão. Não há como restringir ou limitar o conteúdo de uma notificação com base em privilégios do usuário. Como alguns eventos, por exemplo, netconf-config-change
podem conter informações confidenciais, é importante controlar o acesso lido às informações.
Para obter mais informações sobre notificações de eventos netconf, veja os seguintes RFCs:
-
RFC 5277, Notificações de eventos da NETCONF
-
Notificações base do RFC 6470, protocolo de configuração de rede (NETCONF)
Formato de notificação de eventos da NETCONF
As notificações de eventos do NETCONF são documentos XML bem formados. Quando o servidor NETCONF recebe um evento interno, ele o converte em uma codificação XML apropriada com um elemento de nível <notification>
superior e um <eventTime>
elemento infantil. O conteúdo real contido na notificação depende do evento.
Uma solicitação de assinatura pode incluir filtros para tipos específicos de notificações. Se a solicitação de assinatura incluir filtros, os filtros definidos pelo usuário serão aplicados a cada notificação no fluxo de eventos, e o servidor NETCONF encaminha apenas eventos correspondentes ao cliente.
A notificação de evento de amostra a seguir contém um netconf-config-change
evento. A notificação captura o data-tempo do evento, o tempo de confirmação, o usuário que cometeu as mudanças de configuração e um resumo dessas mudanças.
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <eventTime>2021-04-15T11:39:41-07:00</eventTime> <netconf-config-change xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"> <change-time>2021-04-15T18:39:41Z</change-time> <changed-by> <username>admin</username> <session-id>29862</session-id> <source-host>198.51.100.25</source-host> </changed-by> <datastore>running</datastore> <edit> <target xmlns:junos-conf-root="http://yang.juniper.net/junos/conf/root" xmlns:junos-conf-interfaces="http://yang.juniper.net/junos/conf/interfaces">/junos-conf-root:configuration/junos-conf-interfaces:interfaces/junos-conf-interfaces:interface[junos-conf-interfaces:name='et-0/0/0']/junos-conf-interfaces:description</target> <operation>replace</operation> </edit> </netconf-config-change> </notification>
As notificações a seguir contêm amostra netconf-session-start
e netconf-session-end
eventos:
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <eventTime>2021-04-15T11:28:51-07:00</eventTime> <netconf-session-start xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"> <username>admin</username> <session-id>29862</session-id> <source-host>198.51.100.25</source-host> </netconf-session-start> </notification>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <eventTime>2021-04-15T11:49:06-07:00</eventTime> <netconf-session-end xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"> <username>admin</username> <session-id>29862</session-id> <source-host>198.51.100.25</source-host> <termination-reason>closed</termination-reason> </netconf-session-end> </notification>
Recursos de interleave
Por padrão, após um cliente netconf assinar notificações de eventos em uma sessão netconf, o cliente também não pode enviar RPCs na mesma sessão. O recurso de interleave permite que o cliente e o servidor NETCONF continuem trocando RPCs e respostas RPC dentro da mesma sessão NETCONF que é usada para notificações. O recurso de interleave reduz o número geral de sessões netconf porque você não precisa de uma sessão NETCONF dedicada para notificações. Para usar o recurso de interleave em dispositivos que oferecem suporte a esse recurso, você deve configurar a interleave
declaração no nível hierárquico [edit system services netconf notification]
.
Um cliente netconf termina uma assinatura encerrando a sessão netconf ou a sessão de transporte subjacente da sessão NETCONF, por exemplo, com uma <close-session>
ou <kill-session>
operação. Se você habilitar o recurso de interleave, um cliente pode encerrar a sessão executando uma <close-session>
operação de dentro da mesma sessão. Se você não habilitar o recurso de interleave, o cliente pode encerrar a sessão, por exemplo, executando a operação a <kill-session>
partir de outra sessão.
Recursos de filtragem
Quando um cliente netconf se inscreve em notificações de eventos, o cliente pode assinar todas as notificações de eventos no fluxo, ou o cliente pode se inscrever em um subconjunto de notificações de eventos. Para assinar um subconjunto de notificações de eventos, o cliente inclui o elemento opcional <filter>
no <create-subscription>
RPC. Se a solicitação de assinatura incluir filtros, os filtros serão aplicados a cada notificação no fluxo de eventos, e o servidor NETCONF encaminha apenas eventos correspondentes ao cliente. Caso contrário, o servidor encaminha todos os eventos.
O <filter>
formato de parâmetro para a <create-subscription>
operação é semelhante ao formato de filter
parâmetro para outras operações de NETCONF. Ele inclui um filtro de sub-árvore que seleciona as notificações de eventos desejadas. No caso da operação, no entanto, os <create-subscription>
dispositivos Junos só oferecem suporte a filtros subtree que se comparam com o elemento de nível superior da notificação fechada, por exemplo. <netconf-config-change>
O filtro é aplicado às notificações no fluxo e apenas contra o conteúdo do <notification>
invólucro.
Os dispositivos Junos não suportam o uso do XPath para filtrar as notificações.
Ao filtrar para notificações específicas, você deve incluir o namespace apropriado na tag. Se você não especificar o namespace, as notificações de eventos não corresponderão ao filtro, e o servidor NETCONF não encaminhará as notificações. No exemplo a seguir, a solicitação de assinatura retorna um subconjunto de todas as notificações de eventos NETCONF. O filtro seleciona e encaminha apenas <netconf-config-change>
eventos e <oc-ifl-event>
eventos.
<nc:rpc xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <create-subscription xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"> <filter type="subtree"> <netconf-config-change xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"></netconf-config-change> <oc-ifl-event xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0"></oc-ifl-event> </filter> </create-subscription> </nc:rpc> ]]>]]>
Como habilitar e assinar notificações de eventos netconf
Você deve habilitar o serviço de notificação de eventos NETCONF em um dispositivo antes que um cliente NETCONF possa assinar notificações de eventos em uma sessão netconf. Após a habilitação do serviço, um cliente da NETCONF se inscreve para receber notificações de eventos enviando uma solicitação de assinatura ao servidor NETCONF. A resposta do servidor NETCONF indica se a solicitação foi bem sucedida. Se a solicitação for bem sucedida, o servidor envia notificações de eventos assíncronos para o cliente NETCONF conforme os eventos ocorrem e até que a sessão netconf seja terminada.
Este exemplo requer o seguinte hardware e software:
-
Dispositivo em execução Junos OS Evolved Release 21.2R1 ou posterior que oferece suporte ao serviço de notificação de eventos NETCONF. Consulte o Feature Explorer para dispositivos compatíveis.
Para habilitar e assinar notificações de eventos NETCONF, execute as seguintes tarefas:
- Habilite o serviço de notificação de eventos NETCONF
- Inscreva-se para receber notificações de eventos
- Encerre a assinatura
Habilite o serviço de notificação de eventos NETCONF
Para permitir que um cliente assine notificações de eventos em uma sessão netconf:
Inscreva-se para receber notificações de eventos
Depois de habilitar o serviço de notificação de eventos NETCONF em um dispositivo, os clientes da NETCONF podem se inscrever para receber notificações de eventos em uma sessão netconf. Um cliente NETCONF pode incluir os seguintes parâmetros opcionais na solicitação de assinatura:
-
<stream>
— Fluxo de eventos que é de interesse. O valor padrão e apenas aceitável éNETCONF
. -
<filter>
— Filtro subtree que seleciona um subconjunto de todos os eventos possíveis.
Para assinar notificações de eventos em uma sessão netconf:
Encerre a assinatura
Um cliente netconf encerra uma assinatura para receber notificações de eventos, encerrando a sessão netconf ou a sessão de transporte subjacente da sessão NETCONF.
-
Se o recurso de interleave estiver habilitado, emita a
<close-session/>
operação na sessão NETCONF.<rpc><close-session/></rpc>
-
Emita a
<kill-session>
operação de uma sessão NETCONF externa e especifique o ID da sessão para a sessão NETCONF terminar (conforme definido no<session-id>
elemento da troca inicial<hello>
).<rpc><kill-session><session-id>29862</session-id></kill-session></rpc>
-
Encerre a sessão de transporte subjacente da sessão netconf.