개요
현재 TICKscript에서 원본 Measurement를 조회한 후 alert()를 실행하면, 원본 데이터에 포함된 Tag가 Alert 이벤트에 그대로 전달됩니다.
이로 인해 Alert 처리에 필요하지 않은 원본 Measurement의 Tag까지 cloudhub_alerts Measurement와 httpOut 결과에 포함되고 있습니다.
Alert에 필요한 Tag만 유지하도록 delete() 노드를 적용하는 개선이 필요합니다.
현재 동작
현재 TICKscript는 다음과 같이 원본 cpu Measurement를 조회하고 있습니다.
var data = stream
|from()
.database(db)
.retentionPolicy(rp)
.measurement(measurement)
.groupBy(groupBy)
.where(whereFilter)
|eval(lambda: "usage_idle")
.as('value')
조회된 데이터가 별도의 Tag 정제 과정 없이 alert() 노드로 전달됩니다.
var trigger = data
|alert()
.crit(lambda: "value" > crit)
.stateChangesOnly()
.message(message)
.id(idVar)
.idTag(idTag)
.levelTag(levelTag)
.messageField(messageField)
.durationField(durationField)
.details(details)
이에 따라 Alert에서 생성한 Tag뿐만 아니라 원본 Measurement에 존재하는 Tag도 함께 전달됩니다.
Alert에서 생성하는 Tag
alertID
level
alertName
triggerType
원본 Measurement에서 전달되는 Tag 예시
host
cpu
hw_type
- 기타 Measurement별 Tag
문제점
- Alert 처리에 필요하지 않은 Tag가 결과에 노출됩니다.
- Measurement마다 Tag 구성이 달라 Alert 데이터 구조가 일관되지 않습니다.
- 불필요한 Tag 저장으로
cloudhub_alerts Measurement의 Cardinality가 증가할 수 있습니다.
- 원본 모니터링 데이터와 Alert 메타데이터의 역할이 명확하게 분리되지 않습니다.
httpOut 응답에도 불필요한 Tag가 포함됩니다.
- Alert 조회 및 필터링 시 사용하지 않는 Tag까지 관리해야 합니다.
개선 방향
alert() 노드가 실행되기 전에 delete() 노드를 추가하여 Alert 처리에 필요하지 않은 원본 Tag를 제거합니다.
var alertData = data
|delete()
.tag('cpu')
.tag('hw_type')
정제된 데이터를 기준으로 Alert를 생성합니다.
var trigger = alertData
|alert()
.crit(lambda: "value" > crit)
.stateChangesOnly()
.message(message)
.id(idVar)
.idTag(idTag)
.levelTag(levelTag)
.messageField(messageField)
.durationField(durationField)
.details(details)
.email()
.to('jinhyeong.kim@snetsystems.co.kr')
단, groupBy()와 Alert ID 생성에 사용하는 Tag는 삭제 대상에서 제외해야 합니다.
현재 스크립트에서는 host가 그룹 식별에 사용되고 있습니다.
var groupBy = ['host']
var idVar = name + '-{{.Group}}'
따라서 host Tag를 삭제할 경우 다음 기능에 영향이 없는지 검토해야 합니다.
- Alert 그룹 구분
- Alert ID 생성
stateChangesOnly()의 상태 관리 기준
- Host별 Alert 조회 및 식별
적용 예시
var data = stream
|from()
.database(db)
.retentionPolicy(rp)
.measurement(measurement)
.groupBy(groupBy)
.where(whereFilter)
|eval(lambda: "usage_idle")
.as('value')
|delete()
.tag('cpu')
.tag('hw_type')
var trigger = data
|alert()
.crit(lambda: "value" > crit)
.stateChangesOnly()
.message(message)
.id(idVar)
.idTag(idTag)
.levelTag(levelTag)
.messageField(messageField)
.durationField(durationField)
.details(details)
.email()
.to('jinhyeong.kim@snetsystems.co.kr')
trigger
|eval(lambda: float("value"))
.as('value')
.keep()
|influxDBOut()
.create()
.database(outputDB)
.retentionPolicy(outputRP)
.measurement(outputMeasurement)
.tag('alertName', name)
.tag('triggerType', triggerType)
trigger
|httpOut('output')
기대 결과
cloudhub_alerts Measurement와 httpOut 결과에는 Alert 처리에 필요한 Tag만 포함되어야 합니다.
유지 대상 Tag
alertID
level
alertName
triggerType
host
- 그룹 식별 또는 Alert 조회에 필요한 경우에만 유지
제거 대상 Tag
cpu
hw_type
- Alert 검색 및 식별에 사용하지 않는 원본 Measurement Tag
- Measurement별로 자동 전달되는 불필요한 Tag
작업 범위
- Alert Rule 생성 로직에 삭제 대상 Tag 처리 추가
alert() 실행 전에 delete() 노드 추가
groupBy 대상 Tag 삭제 방지
- Alert ID 생성에 사용하는 Tag 삭제 방지
- Measurement별 삭제 대상 Tag 정의 방식 검토
influxDBOut() 저장 결과 확인
httpOut() 응답 결과 확인
- Email Alert 발송 결과 확인
- 기존 Alert Rule에 대한 영향도 검토
완료 조건
개요
현재 TICKscript에서 원본 Measurement를 조회한 후
alert()를 실행하면, 원본 데이터에 포함된 Tag가 Alert 이벤트에 그대로 전달됩니다.이로 인해 Alert 처리에 필요하지 않은 원본 Measurement의 Tag까지
cloudhub_alertsMeasurement와httpOut결과에 포함되고 있습니다.Alert에 필요한 Tag만 유지하도록
delete()노드를 적용하는 개선이 필요합니다.현재 동작
현재 TICKscript는 다음과 같이 원본
cpuMeasurement를 조회하고 있습니다.조회된 데이터가 별도의 Tag 정제 과정 없이
alert()노드로 전달됩니다.이에 따라 Alert에서 생성한 Tag뿐만 아니라 원본 Measurement에 존재하는 Tag도 함께 전달됩니다.
Alert에서 생성하는 Tag
alertIDlevelalertNametriggerType원본 Measurement에서 전달되는 Tag 예시
hostcpuhw_type문제점
cloudhub_alertsMeasurement의 Cardinality가 증가할 수 있습니다.httpOut응답에도 불필요한 Tag가 포함됩니다.개선 방향
alert()노드가 실행되기 전에delete()노드를 추가하여 Alert 처리에 필요하지 않은 원본 Tag를 제거합니다.정제된 데이터를 기준으로 Alert를 생성합니다.
단,
groupBy()와 Alert ID 생성에 사용하는 Tag는 삭제 대상에서 제외해야 합니다.현재 스크립트에서는
host가 그룹 식별에 사용되고 있습니다.따라서
hostTag를 삭제할 경우 다음 기능에 영향이 없는지 검토해야 합니다.stateChangesOnly()의 상태 관리 기준적용 예시
기대 결과
cloudhub_alertsMeasurement와httpOut결과에는 Alert 처리에 필요한 Tag만 포함되어야 합니다.유지 대상 Tag
alertIDlevelalertNametriggerTypehost제거 대상 Tag
cpuhw_type작업 범위
alert()실행 전에delete()노드 추가groupBy대상 Tag 삭제 방지influxDBOut()저장 결과 확인httpOut()응답 결과 확인완료 조건
groupBy에 사용하는 Tag가 정상적으로 유지된다.stateChangesOnly()의 상태 변경 감지가 정상적으로 동작한다.cloudhub_alertsMeasurement에 필요한 Tag만 저장된다.httpOut('output')결과에 필요한 Tag만 포함된다.