[Devops] ElasticeSearch에서 잔디 Webhook 연결 - ubuntu 22.04

2023. 11. 30. 15:56·개발/Devops
728x90
반응형

유료버전이라면 watcher 만들기를 참고해서 watcher를 만들거나 kibana에서 webhook connector 를 만들어서 사용하면 된다.

나는 무료버전이었기 때문에 다른 방법을 찾아야 했고 제일 원초적으로 어떠한 툴도 쓰지 않고 cron으로 해결하는 방법으로 직접 webhook을 호출하는 방법을 사용하려고 한다.

 

사내에서 잔디라는 메신저를 쓰는데 webhook으로 error로그 발생시 메신저에 보내는 shell 을 구현할 것이다.

아래 스크립트는 잔디에 맞춘내용이라 알아서 커스텀해서 쓰면 될것 같다.

그전에 먼저 jq를 설치해서 json 을 편하게 사용하도록 한다.

sudo apt-get install jq

(1) error-log bash

#!/bin/bash

ES_USER='elastic'
ES_PASS='비밀번호'
ES_HOST='http://localhost:9200'
INDEX='filebeat-*'
WEBHOOK_URL='발급받은 webhook url'

QUERY='{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "fields.log_level": "error"
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "now-1m/m",
              "lte": "now/m"
            }
          }
        }
      ]
    }
  },
  "_source": ["host.hostname", "message"],
  "size": 10 
}'

RESULT=$(curl -s -u $ES_USER:$ES_PASS -X GET "$ES_HOST/$INDEX/_search" -H 'Content-Type: application/json' -d "$QUERY")
echo $RESULT


ERROR_COUNT=$(echo $RESULT | jq '.hits.total.value')

if [[ $ERROR_COUNT -gt 10 ]]; then
        ERROR_COUNT=10
fi

echo "ERROR COUNT : $ERROR_COUNT"


if [[ $ERROR_COUNT -gt 0 ]]; then
  for ((i=0; i<$ERROR_COUNT; i++))
  do
    # Extract hostname and message from each hit
    HIT=$(echo $RESULT | jq ".hits.hits[$i]._source")
    HOSTNAME=$(echo $HIT | jq -r '.host.hostname')
    MESSAGE=$(echo $HIT | jq -r '.message' | tr '\n' ' '  | jq -sR .)
    ESCAPED_MESSAGE=$(echo $MESSAGE | sed 's/\"/\\"/g')

    echo "MESSAGE : $ESCAPED_MESSAGE"

    WEBHOOK_PAYLOAD='{
      "body": "Error log detected!",
      "connectColor": "#FF0000",
      "connectInfo": [
        {
          "title": "Hostname",
          "description": "'$HOSTNAME'"
        },
        {
          "title": "Message",
          "description": "'$ESCAPED_MESSAGE'"
        }
      ]
    }'

    echo "WEBHOOK PAYLOAD : $WEBHOOK_PAYLOAD"

    echo "Sending Webhook for $HOSTNAME"
    curl -X POST $WEBHOOK_URL \
     -H 'Accept: application/vnd.tosslab.jandi-v2+json' \
     -H 'Content-Type: application/json' \
     --data-binary "$WEBHOOK_PAYLOAD"

  done
fi

(2) crontab 작성

sudo crontab -e

아래 내용을 추가한다.

* * * * * bash 경로/errorlog.sh

마치며

이제는 cron 사용에 좀 익숙해졌다.
처음으로 ElasticSearch의 쿼리문도 작성해봤는데 너무 익숙하지가 않다.
좀더 하다보면 괜찮아지겠지 라는 생각으로 계속 만질 예정이긴하다.

728x90
반응형

'개발 > Devops' 카테고리의 다른 글

[Devops] ELK - APM 연결 실패 이슈  (0) 2024.04.23
[Devops] ELK APM으로 성능측정하기 - ubuntu 22.04  (0) 2023.12.04
[Devops] ELK Beat template (8.11.0) - ubuntu 22.04  (0) 2023.11.30
[Devops] ELK 디스크 부족 이슈 S3로 해결하기 - ubuntu 22.04  (0) 2023.11.23
[Devops] ELK Stack 8.x 설치 - ubuntu 22.04  (0) 2023.11.13
'개발/Devops' 카테고리의 다른 글
  • [Devops] ELK - APM 연결 실패 이슈
  • [Devops] ELK APM으로 성능측정하기 - ubuntu 22.04
  • [Devops] ELK Beat template (8.11.0) - ubuntu 22.04
  • [Devops] ELK 디스크 부족 이슈 S3로 해결하기 - ubuntu 22.04
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    React
    node
    컨테이너
    mysql
    하이퍼레저
    30일 챌린지
    ERC721
    node.js
    CSS
    프로그래머스
    30일챌린지
    명령어
    도커
    go언어
    html
    erc20
    go
    js
    블록체인
    nodejs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Devops] ElasticeSearch에서 잔디 Webhook 연결 - ubuntu 22.04
상단으로

티스토리툴바