# Watcher로 slack 연동 문의

**URL:** <https://discuss.elastic.co/t/watcher-slack/318717>\
**Category:** 한국어 질문 및 토론\
**Tags:** painless\
**Created:** [November 11, 2022, 8:45am UTC](https://discuss.elastic.co/t/watcher-slack/318717 "2022-11-11T08:45:52Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![wodhgud](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/wodhgud/32/111364_2.png) [@wodhgud](https://discuss.elastic.co/u/wodhgud)\
**Post date:** [November 11, 2022, 8:45am UTC](https://discuss.elastic.co/t/watcher-slack/318717/1 "2022-11-11T08:45:52Z")

</div>

안녕하세요  
watcher 기능 관련하여 문의사항이 있습니다.

{  
"trigger": {  
"schedule": {  
"interval": "10s"  
}  
},  
"input": {  
"search": {  
"request": {  
"search\_type": "query\_then\_fetch",  
"indices": [  
"metricbeat-\*"  
],  
"rest\_total\_hits\_as\_int": true,  
"body": {  
"size": 100,  
"query": {  
"bool": {  
"must": ,  
"filter": [  
{  
"match\_all": {}  
},  
{  
"match\_phrase": {  
"event.module": "sql"  
}  
},  
{  
"bool": {  
"should": [  
{  
"match\_phrase": {  
"sql.query": "select name from sys.databases as d where name not in('tempdb','model', 'msdb','master') and name not in (select distinct database\_name from msdb.dbo.backupset as b WHERE backup\_start\_date \>= DATEADD(hh, -24, GETDATE()) AND backup\_start\_date \< GETDATE() AND Type = 'D' AND d.name = b.database\_name)"  
}  
},  
{  
"match\_phrase": {  
"sql.query": "select name from sys.databases as d where name not in('tempdb','model', 'msdb','master','c\_imvely','c\_imvely\_2112') and name not in (select distinct database\_name from msdb.dbo.backupset as b WHERE backup\_start\_date \>= DATEADD(hh, -24, GETDATE()) AND backup\_start\_date \< GETDATE() AND Type = 'D' AND d.name = b.database\_name)"  
}  
}  
],  
"minimum\_should\_match": 1  
}  
},  
{  
"range": {  
"@timestamp": {  
"gte": "{{ctx.trigger.scheduled\_time}}||-15m",  
"lte": "{{ctx.trigger.scheduled\_time}}",  
"format": "strict\_date\_optional\_time||epoch\_millis"  
}  
}  
}  
],  
"should": ,  
"must\_not":   
}  
},  
"aggs": {  
"bucketAgg": {  
"terms": {  
"field": "host.name",  
"size": "40",  
"order": {  
"\_key": "desc"  
}  
},  
"aggs": {  
"backupAgg": {  
"cardinality": {  
"field": "sql.metrics.string.name"  
}  
},  
"bucketAgg1": {  
"terms": {  
"field": "sql.metrics.string.name",  
"size": 100  
}  
}  
}  
}  
}  
}  
}  
}  
},  
"condition": {  
"script": {  
"source": "ArrayList arr = ctx.payload.aggregations.bucketAgg.buckets; for (int i = 0; i \< arr.length; i++) { if (arr[i]['backupAgg'].value != params.threshold) { return true; } } return false;",  
"lang": "painless",  
"params": {  
"threshold": 0  
}  
}  
},  
"actions": {  
"slack\_1": {  
"slack": {  
"message": {  
"text": "{{ctx.metadata.name}}",  
"attachments": [  
{  
"text": """서버 : {{ctx.payload.results.0.key}} / 백업 누락 도메인: {{ctx.payload.results.0.value}}  
서버 : {{ctx.payload.results.1.key}} / 백업 누락 도메인: {{ctx.payload.results.1.value}}  
서버 : {{ctx.payload.results.2.key}} / 백업 누락 도메인: {{ctx.payload.results.2.value}}  
"""  
}  
]  
}  
}  
}  
},  
"transform": {  
"script": {  
"source": """HashMap result = new HashMap();  
ArrayList arr = ctx.payload.aggregations.bucketAgg.buckets;  
ArrayList filteredHits = new ArrayList();  
for (int i = 0; i \< arr.length; i++) { HashMap filteredHit = new HashMap();  
filteredHit.key = arr[i].key;  
filteredHit.value = arr[i]['bucketAgg1']['buckets'][0].key + ', ' + ;  
if (arr[i]['backupAgg'].value != params.threshold) {filteredHits.add(filteredHit);  
} } result.results = filteredHits;  
return result;""",  
"lang": "painless",  
"params": {  
"threshold": 0  
}  
}  
}  
}

현재 위에 watcher 설정으로 아래와 같은 결과를 슬랙으로 연동하고 있습니다.

\*알림 테스트  
서버 : sell-db-55 / 백업 누락 도메인: c\_lumissy,  
서버 : sell-db-51 / 백업 누락 도메인: SMGlobal,  
서버 : sell-db-16 / 백업 누락 도메인: c\_havehad,

여기서 궁금한 것은  
서버 당 백업 누락 도메인이 여러 개 나오고 있는 상황입니다.  
실제로는 아래와 같이 백업 누락 도메인이 3개 값이 watcher-Execution history 에서 나옵니다.  
"doc\_count": 9,  
"bucketAgg1": {  
"doc\_count\_error\_upper\_bound": 0,  
"sum\_other\_doc\_count": 0,  
"buckets": [  
{  
"doc\_count": 3,  
"key": "c\_havehad"  
},  
{  
"doc\_count": 3,  
"key": "c\_hellomedy"  
},  
{  
"doc\_count": 3,  
"key": "c\_intero"  
}  
]  
},  
"backupAgg": {  
"value": 3  
},  
"key": "sell-db-16"

결국 최종적으로 하고 싶은 것은 아래와 같이 전부다 나오는 것 입니다.  
서버 : sell-db-16 / 백업 누락 도메인: c\_havehad, c\_hellomedy, c\_intero

제 생각에는 actions 부분 text에 값을 가져오는 것을 추가하거나,  
transform 부분에 filteredHit.value = arr[i]['bucketAgg1']['buckets'][0].key + ', '; 이 부분에서 buckets 값을 더 추가해야 하지 않을까 생각되는데 방법을 잘 모르겠습니다.

value값을 추가하는 방법을 아시는 분 계시다면, 답변 부탁드립니다.  
감사합니다.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 9, 2022, 8:45am UTC](https://discuss.elastic.co/t/watcher-slack/318717/2 "2022-12-09T08:45:53Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
