ElastAlert 2 는 원래 Yelp에서 설계한 알림 프레임워크입니다. 이상, 급증 또는 기타 관심 패턴을 감지할 수 있습니다. 프로덕션에 적합하며 Elasticsearch/OpenSearch 생태계에서 잘 알려진 알림 표준입니다. 이들의 모토는 “대시보드에서 볼 수 있다면 ElastAlert 2에서 알림을 보낼 수 있습니다.”입니다. 이 문서에서는 별칭 및 인덱스를 통해 OpenSearch와 호환되는 덕분에 Logs Data Platform에 이 구성 요소를 배포하는 방법을 알아봅니다 . Logs Data Platform을 사용하면 Logs Data Platform에서 ElastAlert 메타 인덱스를 호스팅할 수도 있습니다.
Elastalert2 설치 준비 사항
ElastAlert를 배포하려면 알림을 볼 수 있는 데이터가 있어야 합니다. Graylog 스트림만 있는 경우 별칭을 사용하여 스트림 데이터에서 OpenSearch API를 활성화할 수 있습니다. 방법은 다음과 같습니다.
- Logs Data Platform 관리자로 이동합니다.
- 별칭 패널에서 Add an alias버튼을 클릭합니다.
- 이름을 선택하고 별칭에 대한 설명을 정의합니다.
- 버튼을 클릭해서 항목을 저장하세요 Save.
- 별칭이 생성되면 오른쪽에 있는 Attach content to the alias 메뉴를 사용하여 옵션을 선택합니다.
- 별칭에 연결할 데이터 스트림을 정의합니다.
ElastAlert 설치는 설명서 에 설명된 대로 다양한 방법으로 수행할 수 있습니다 . docker 이미지를 사용하거나 python 3 패키지를 설치할 수 있습니다. Python 버전이 ElastAlert와 호환되는지 확인해야 합니다. 설명서를 확인하여 어떤 버전의 Python이 호환되는지 확인하세요. 설치를 시도하기 전에 모든 요구 사항을 충족해야 합니다 .
pip를 사용하여 ElastAlert 2의 최신 릴리스 버전을 설치할 수 있습니다.
$ pip install elastalert2
또는 가장 최근의 변경 사항에 대해 먼저 ElastAlert2 저장소를 복제할 수 있습니다.
$ git clone https://github.com/jertel/elastalert2.git
그리고 모듈을 설치합니다.
$ pip install “setuptools>=11.3”
$ python setup.py install
누락된 파이썬 패키지에 대한 오류가 있는 경우 수동으로 설치합니다.
$ pip install setuptools_rust
다음 단계는 제공된 도구 elastalert-create-index 를 사용하여 ElastAlert 메타 인덱스를 구성하는 것입니다 . ElastAlert는 작동하기 위해 5개의 인덱스가 필요합니다.
- 모든 활성 알림이 포함된 일반 인덱스 입니다.
- 알림을 트리거하기 위해 실행되는 쿼리가 포함된 상태 인덱스 입니다 .
- 발생한 모든 오류가 포함된 오류 인덱스 입니다 .
- 반복되는 알림을 발생시키거나 음소거해야 하는지 여부를 나타내는 음소거 지수 입니다 .
- 모든 알림이 발생하고 종료된 과거 인덱스 입니다 .
- 다음 명령은 OpenSearch API에서 직접 Logs Data Platform에 대한 인덱스를 생성합니다.
$ elastalert-create-index –host <ldp-cluster>.logs.ovh.com –port 9200 –username <username> –password <password> –ssl –index <username>-i-<suffix>
설치시 다음 사항에 주의해야 합니다.
<ldp-cluster>귀하에게 할당된 것이어야 합니다(LDP 관리자 홈페이지에서 확인.
<username>API 또는 Logs Data Platform 인터페이스(Graylog 또는 OpenSearch 대시보드)에 연결하는 데 사용되는 사용자 이름입니다.
<password>연관된 비밀번호입니다. 사용자 이름/비밀번호 쌍 대신 토큰을 자격 증명에 사용할 수 있습니다.
–index여기서 가장 중요한 것은 Logs Data Platform의 인덱스 명명 규칙을 따라야 하기 때문입니다 . 제시된 양식을 메타 인덱스의 기본 이름으로 사용합니다 .<username>-i- 모든 <suffix>영숫자 문자로 개인화할 수 있습니다.
그러면 5개의 인덱스가 생성되고 매핑이 배치됩니다. 그 후에 필요한 것은 ElastAlert 구성 파일과 몇 가지 규칙만 만드는 것입니다.
계속하기 전에 구성 디렉토리(예: /opt/elastalert/)와 규칙 디렉토리(예: /opt/elastalert/rules)를 만듭니다. 이 규칙 디렉토리는 아래 구성에서 사용됩니다. 더 이상 지체하지 않고 구성 디렉토리에서 구성에 사용할 수 있는 샘플 config.yml 파일 살펴보면 도움이 될것입니다.
– rules_folder 는 ElastAlert가 규칙 구성 파일을 로드하는 곳입니다. 폴더의 모든 .yaml 파일을 로드하려고 시도합니다. 이 폴더에 유효한 규칙이 없으면 ElastAlert가 시작되지 않습니다.
– run_every는 ElastAlert가 OpenSearch를 쿼리하는 빈도입니다.
– buffer_time은 쿼리 창의 크기로, 각 쿼리가 실행된 시간으로부터 거꾸로 거슬러 올라갑니다.
– es_host는 ElastAlert가 상태, 실행된 쿼리, 알림 및 오류에 대한 데이터를 저장하는 OpenSearch 클러스터의 주소입니다. 각 규칙은 다른 OpenSearch 호스트를 사용하여 쿼리할 수도 있습니다.
– es_port는 es_host에 해당하는 포트입니다.
– use_ssl : TLS를 사용하여 es_host에 연결할지 여부. TLS는 당사 플랫폼에서 필수입니다.
– verify_certs TLS 인증서를 검증할지 여부입니다. 당사 플랫폼은 대부분의 운영 체제와 브라우저에서 검증된 인증서를 사용합니다.
– es_username 은 OpenSearch API에 연결하는 데 사용되는 사용자 이름입니다.
– es_password 는 OpenSearch API에 연결하는 데 사용되는 비밀번호입니다. 이러한 자격 증명 대신 토큰을 사용할 수 있다는 점을 기억하세요.
– writeback_index 는 ElastAlert가 데이터를 저장할 인덱스의 이름입니다. 인덱스를 구성하는 데 사용한 것과 동일한 이름을 사용하세요 elastalert-create-index.
– alert_time_limit 은 실패한 알림에 대한 재시도 창입니다.
Elastalert Rule 예제
대부분의 매개변수는 자명하므로 모든 매개변수를 자세히 설명하지는 않겠습니다. 그러나 인덱스 매개변수에 주의하세요. 이 인덱스 또는 별칭은 알림을 받고자 하는 로그나 문서를 포함하는 것입니다.
로그나 문서의 타임스탬프에 따라 타임스탬프 매개변수를 사용자 정의하는 것도 중요합니다. 여기서는 로그 파이프라인에서 사용된 형식으로 timestamp_field 에 사용자 정의 타임스탬프를 사용자 정의합니다. 이 형식은 3개 이상의 추가 숫자를 가질 수 있으므로 timestamp_format_expr 옵션을 사용하여 잘라야 합니다 . Elastalert는 나노초를 지원하지 않으므로 timestamp_to_datetime_format_expr 옵션은 타임스탬프 문자열을 23자로 잘라서 구문 분석할 수 있도록 합니다. timestamp%Y-%m-%d %H:%M:%S.%f
Elastalert 실행
ElastAlert를 시작하려면 다음 명령을 사용하세요.
$ elastalert –config config.yml –debug
config.yml은 앞서 설명한 주요 구성 파일입니다. –debug 옵션은 모든 것이 제대로 작동하는지 확인하기 위해 있습니다. ElastAlert가 완전히 구성되면 프로덕션에서 비활성화할 수 있습니다.
마지막으로, ElastAlert에는 이메일, JIRA, OpsGenie, SNS, HipChat, Slack, MS Teams, PagerDuty, Zabbix, 사용자 정의 명령 등을 포함해 알림을 위한 다양한 통합 기능이 있습니다 .