상관 이벤트를 사용하여 이벤트 정책 트리거
둘 이상의 상관 이벤트가 발생할 때 실행되도록 이벤트 정책을 구성합니다.
이벤트 정책에서 트리거 및 상관 관계 이벤트를 나타내는 방법
이벤트 스크립트 인수 및 명령문과 execute-commands 같은 지원되는 이벤트 정책 문에서 이벤트 정책 변수를 사용하여 트리거 이벤트와 상관 이벤트를 구분할 수 있습니다. 계층 수준에서 다음 문에서 트리거 이벤트 및 상관 이벤트를 구성합니다.[edit event-options policy policy-name]
- 트리거링 이벤트 - 문에
events구성됩니다 - 상관 이벤트 - 문에
within seconds events구성됩니다
다음 형식의 이벤트 정책 변수를 사용하여 트리거 및 상관 관계 이벤트를 나타낼 수 있습니다.
-
{$$.attribute-name}- 이중 달러 기호($$) 표기법은 정책을 트리거하는 이벤트를 나타냅니다. 속성 이름과 결합되면 변수는 트리거 이벤트와 연관된 속성의 값으로 해결됩니다. 예를 들어,{$$.interface-name}트리거 이벤트와 연관된 인터페이스 이름으로 해결됩니다. -
{$event.attribute-name}—이벤트 이름($event) 표기법이 있는 단일 달러 기호는 와 일치event하는 가장 최근의 이벤트를 나타냅니다. 속성 이름과 결합되면 변수는 해당 이벤트와 연관된 속성의 값으로 확인됩니다. 예를 들어, 정책이 명령을 실행show interfaces {$COSD_CHAS_SCHED_MAP_INVALID.interface-name}하면 변수는{$COSD_CHAS_SCHED_MAP_INVALID.interface-name}이벤트 프로세스에 의해 캐시된 가장 최근COSD_CHAS_SCHED_MAP_INVALID이벤트와 관련된 인터페이스 이름으로 해결됩니다. -
{$*.attribute-name}—별표($*) 표기법이 있는 달러 기호는 상관 이벤트와 일치하는 가장 최근 이벤트를 나타냅니다. 변수는 정책 구성에 지정된 상관 이벤트와 일치하는 가장 최근 이벤트와 연관된 속성 값으로 해결됩니다.
이벤트 정책에서 이벤트 정책 변수를 사용하여 특정 이벤트를 참조할 수 있습니다. 다음 이벤트 정책을 고려하십시오.
[edit event-options]
policy p1 {
events [ e1 e2 e3 ];
within 60 events [ e4 e5 e6 ];
then {
execute-commands {
commands {
"show interfaces {$$.interface-name}";
"show interfaces {$e4.interface-name}";
"show interfaces {$*.interface-name}";
}
output-filename command-output.txt;
destination some-dest;
}
}
}
명령에서 show interfaces {$$.interface-name} event e1, e2or e3 의 속성 값이 interface-name 변수를 {$$.interface-name} 대체합니다.
명령에서 show interfaces {$e4.interface-name} 가장 최근 e4 이벤트의 속성 값이 interface-name 변수를 {$e4.interface-name} 대체합니다.
명령에서 show interfaces {$*.interface-name} 가장 최근e4의 , e5, 또는 e6 이벤트의 속성 값이 interface-name 변수를 {$*.interface-name} 대체합니다. , , 또는 e3 중 하나e1가 , e5, 또는 e6, 이후 60초 e4이내에 발생하는 경우, 해당 상관 이벤트에 대한 속성의 interface-name 값(e4 , e5또는 e6)이 변수를 {$*.interface-name} 대체합니다. e2 상관 이벤트에 속성이 없 interface-name 으면 소프트웨어가 명령을 실행하지 않습니다.show interfaces {$*.interface-name}
와 의 60초 이내에 모두 발생하면 e1 변수는 {$*.interface-name} 에 대한 e4속성 값을 interface-name 사용합니다.e4 e5 이 정책 e4 은 이벤트 프로세스(eventd)가 문에 within 구성된 대로 순차적으로 상관 이벤트를 검색하기 때문에 사용합니다. 이 경우 순서는 e4 > e5 >e6입니다.
예: 시간 간격을 기반으로 이벤트 상관관계 지정
다음 이벤트 정책은 일련의 명령을 실행하고 결과 출력 파일을 아카이브 사이트에 업로드합니다. 시스템은 트리거 이벤트 중 event3event4하나인 , 또는 event5또는 중 하나가 상관 이벤트 event1 또는 event2중 하나가 발생한 후 60초 이내에 발생하면 이벤트 정책을 실행합니다. 정책의 의사 코드는 다음과 같습니다.
if trigger event is (event3 or event4 or event5)
and
(event1 or event2 has been received within the last 60 seconds)
then {
run a set of commands;
log the output of these commands to a location;
}
이벤트 정책 대상은 두 개의 아카이브 사이트를 정의합니다. 디바이스는 목록의 첫 번째 아카이브 사이트로 전송을 시도하고 전송이 실패할 경우에만 다음 사이트로 이동합니다. 이벤트 정책 구성은 다음과 같습니다.
[edit event-options]
policy policy1 {
events [ event3 event4 event5 ];
within 60 events [ event1 event2 ];
then {
execute-commands {
commands {
"command";
}
output-filename my_cmd_out;
destination policy1-command-dest;
}
}
}
destinations {
policy1-command-dest {
archive-sites {
scp://robot@my.big.com/a/b;
scp://robot@my.little.com/a/b;
}
}
}
예: 이벤트 속성에 기반한 이벤트 상관 관계
다음 이벤트 정책에서 이벤트 속성 값이 일치하는 경우 두 이벤트의 상관 관계가 있습니다. 두 이벤트의 특성을 일치시키면 두 이벤트가 관련되어 있는지 확인할 수 있습니다. 이 경우, 인터페이스 주소가 일치해야 하며 물리적 인터페이스(ifd) 이름이 일치해야 합니다.
이 오류는 RPD_KRT_IFDCHANGE 라우팅 프로토콜 프로세스(rpd)가 커널에 인터페이스 상태 변경 요청을 전송하고 요청이 실패할 때 발생합니다. 이 오류는 RPD_RDISC_NOMULTI 인터페이스가 라우터 검색을 위해 구성되었지만 인터페이스가 필요에 따라 IP 멀티캐스트 작업을 지원하지 않을 때 발생합니다.
[edit event-options]
policy policy1 {
events rpd_rdisc_nomulti;
within 500 events rpd_krt_ifdchange;
attributes-match {
rpd_rdisc_nomulti.interface-address equals rpd_krt_ifdchange.address;
rpd_rdisc_nomulti.interface-name starts-with rpd_krt_ifdchange.ifd-index;
}
then {
... actions ...
}
}
예: 시간 간격 및 이벤트 속성을 기반으로 이벤트 상관 관계
다음 예에서 조직은 관리 네트워크에 대한 연결이 끊어지는 모든 실패한 구성을 기록하려고 합니다. 조직은 매분 관리 네트워크의 도달 가능성을 검증하는 실시간 성능 모니터링(RPM) 테스트 설정을 사용합니다. 운영자는 항상 CLI 명령을 사용하여 변경 사항을 커밋합니다 commit confirmed . commit confirmed 이 명령을 사용하면 구성 변경이 연결에 영향을 미치는 경우 구성을 자동으로 롤백할 수 있습니다.
이벤트 정책은 이벤트 스크립트 save-rollback.slax를 실행하여 자동 롤백에 의해 재정의된 실패한 구성을 특정 위치로 복사합니다. 이벤트 스크립트는 저장 및 나중에 검사를 위해 /config/juniper.conf.1.gz rollback 파일을 /var/tmp 디렉터리에 복사합니다.
이벤트 정책 트리거 이벤트는 UI_COMMIT_NOT_CONFIRMED 이벤트입니다. 이 이벤트는 디바이스가 확인된 커밋을 자동으로 롤백할 때 발생합니다. 시스템이 커밋 확인 롤백을 트리거하면 UI_COMMIT_NOT_CONFIRMED 이벤트가 두 번 발생합니다. 첫 번째 이벤트 메시지는 롤백이 진행 중임을 나타내고, 두 번째 이벤트 메시지는 롤백이 완료되었음을 나타냅니다. 따라서 이벤트 정책은 시스템이 이벤트 정책을 두 번 트리거하지 않도록 두 UI_COMMIT_NOT_CONFIRMED 이벤트를 상호 연관시켜야 합니다. 이 예에서 두 번째 UI_COMMIT_NOT_CONFIRMED 이벤트는 첫 번째 이벤트 이후 50초 이내에 발생해야 합니다.
구성으로 인해 관리 네트워크에 대한 연결이 끊어졌는지 확인하기 위해 이벤트 정책은 UI_COMMIT_NOT_CONFIRMED 이벤트를 RPM 프로브의 PING_TEST_FAILED 이벤트와 상호 연관시킵니다. 관리 네트워크에 대한 RPM 테스트가 실패하면 PING_TEST_FAILED 이벤트가 발생합니다. 이 예에서 UI_COMMIT_NOT_CONFIRMED 이벤트는 PING_TEST_FAILED 이벤트의 60초 이내에 발생해야 합니다. 이벤트를 생성한 RPM 프로브 테스트를 지정하기 위해 이벤트 정책은 문을 attributes-match 포함하며 이벤트의 속성이 test-owner 일치하고 이벤트의 속성이 test-name 일치 Connectivity Management할 때만 트리거됩니다.
이벤트 정책은 PING_TEST_FAILED 이벤트와 첫 번째 UI_COMMIT_NOT_CONFIRMED 이벤트에 대해 별도의 within 문을 구성합니다. 여러 within 문을 사용하여 이벤트 정책이 트리거되기 위해서는 두 조건이 모두 발생해야 합니다. 각 within 문에는 다른 시간 간격이 필요합니다. 마찬가지로 정책이 트리거되려면 두 조건이 모두 attributes-match true여야 합니다.
이벤트 정책 구성은 다음과 같습니다.
event-options {
policy faulty-rollback {
events ui_commit_not_confirmed;
within 60 events ping_test_failed;
within 50 events ui_commit_not_confirmed;
attributes-match {
ping_test_failed.test-owner matches "^Connectivity$";
ping_test_failed.test-name matches "^Management$";
}
then {
event-script save-rollback.slax;
}
}
event-script {
file save-rollback.slax;
}
}
이벤트 스크립트는 save-rollback.slax 다음과 같습니다.
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";
match / {
/* Get system time with hyphens instead of spaces */
var $modified-time = translate( $localtime, " ", "-" );
/* Use time to differentiate saved rollback versions */
var $filename = "saved-rollback-" _ $modified-time _ ".gz";
/* Copy the file */
var $file-copy-rpc = <file-copy> {
<source> "/config/juniper.conf.1.gz";
<destination> "/var/tmp/" _ $filename;
}
var $results = jcs:invoke( $file-copy-rpc );
/* Report any errors or success */
if( $results/..//xnm:error ) {
for-each( $results/..//xnm:error ) {
expr jcs:syslog( "external.error", "File Copy Error: ", message );
}
}
else {
expr jcs:syslog( "external.info", "Faulty rollback configuration saved." );
}
}
Junos OS를 실행하는 디바이스가 이벤트 정책을 트리거하면 디바이스는 타임스탬프를 포함하는 새 파일 이름으로 롤백 구성 파일을 /var/tmp 디렉터리에 저장합니다.
user@host> file list /var/tmp/saved* /var/tmp/saved-rollback-Wed-Aug-19-09:02:55-2026.gz