반응형
1. 설치하기 전에
- ELK에서 제공하는 x_pack을 이용한 경보 알람 기능은 유료이며 UI로 구현은 되지 않지만 무료로 여러 필터기능을 사용할 수 있는 elastalert를 이용
2. 설치
# 필수 패키지 설치
[root@localhost]# yum install python3 python3-pip gcc gcc-c++ gcc-cpp python3-devel
# pip upgrade
[root@localhost]# pip3 install --upgrade pip
# 설치 진행
[root@localhost]# pip3 install "setuptools>=11.3" python setup.py install
[root@localhost]# pip3 install elastalert
or
git clone https://github.com/Yelp/elastalert.git
python setup.py install
3. 설정
# 홈디렉토리 생성
[root@localhost]# mkdir /etc/elastalert
# 설정 파일 작성
[root@localhost elastalert]# vim config.yaml
# 룰이 있는 디렉토리를 지정하고 elastalert가 실행되면 룰 디렉토리 아래에 있는 *.yaml 룰들이 모두 실행됨
rules_folder: /etc/elastalert/rules
# 룰에 대한 체크는 주기로 30초 마다 체크
# days, seconds, microseconds, milliseconds, minutes, hours, weeks 등을 사용 할 수 있음.
run_every:
seconds: 30
# 룰 체크에 대한 결과를 한번에 완료 할 수 없는 경우 버퍼에 담아 놓게 되는데 이때 버퍼 유지 시간
buffer_time:
minutes: 15
# elasticsearch 정보
es_host: localhost
es_port: 9200
writeback_index: elastalert_status
writeback_alias: elastalert_alerts
# 알람 실패 시 재 시도할 주기
alert_time_limit:
days: 2
4. 룰 생성
- 룰에 대한 참조 https://elastalert.readthedocs.io/en/latest/ruletypes.html#rule-types
- 아래 룰은 CF Spectrum 로그를 파싱하여 생성 된 것으로 Status=0 일때 5분 동안 같은 clientip가 10회 매칭 될때 알람.
vim /etc/elastalert/rules/gcp.yaml
# 룰 이름으로 알람시 slack의 경우 subject로 잡히게 됨
name: test
# frequency는 timeframe내에 filter 조건으로 query_key가 num_events 수 만큼 매칭되면 알람
type: frequency
# elasticsearch index
index: demo-json*
# 매칭 이벤트 횟수
num_events: 10
# 탐지 할 시간 프레임
timeframe:
minutes: 5
# 매칭에 필요한 조건
filter:
- query:
query_string:
query: "Status:0"
# 카운트할 필드
query_key: "ClientIP"
# 알람을 발생시킬 대상
alert:
- "slack"
- "command"
command: "echo %(ClientIP)s > /etc/elastalert/test.log"
slack:
slack_webhook_url: "https://hooks.slack.com/services/*******"
slack_username_override: "ElastAlert-Bot"
slack_channel_override: "#{channel name}"
slack_emoji_override: ":robot_face:"
slack_msg_color: "danger"
# 알람 문구 시정
alert_text: "Match Count: {0} \n TIME: {1} \n ClientIP: {2} \n ClientCountry: {3} \n Status: {4}"
alert_text_type: "alert_text_only"
alert_text_args: ["num_matches", "@timestamp", "ClientIP", "ClientCountry", "Status"]
5. 룰 테스트
[root@localhost elastalert]# elastalert-test-rule --config config.yaml rules/gcp.yaml
6. index 생성
[root@localhost]# elastalert-create-index
[root@localhost]# curl -XGET 'localhost:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open elastalert_status_status oJ8kGsyUQxe21iQ-yD9WTQ 1 1 29 0 30.8kb 30.8kb
yellow open elastalert_status _KktdPJMRkS3smFeiI2AtQ 1 1 46 0 481.2kb 481.2kb
yellow open elastalert_status_past MqpiRxRqSEGgwgXF6l1yBg 1 1 0 0 208b 208b
green open .apm-agent-configuration _LmbW6f9SdqH6kl-CB4CDg 1 0 0 0 208b 208b
green open .kibana-event-log-7.15.1-000001 gYQW6Ab5TeCHzEu_1bARFw 1 0 1 0 6kb 6kb
yellow open elastalert_status_silence KpYxhi2MQCaW8XFTnSqHSg 1 1 51 0 32.3kb 32.3kb
green open .geoip_databases 4kd-c46tQEiyzvADtcf_7A 1 0 41 0 39.9mb 39.9mb
green open .kibana_7.15.1_001 vbPyjrn4SteMsZ8Pneiisg 1 0 145 12 2.4mb 2.4mb
green open .apm-custom-link pit1H0QYSYGO44QG2ayxZg 1 0 0 0 208b 208b
green open .async-search gtRB9siCSwuUIjc7ndHBWA 1 0 0 0 234b 234b
yellow open elastalert_status_error opfS1ig0SgyibzSSu5plcA 1 1 2 0 9.6kb 9.6kb
yellow open demo-json FKhJqvDNRfKDMYDb8AIr9g 1 1 283496 0 153.8mb 153.8mb
green open .kibana_task_manager_7.15.1_001 Umk-DIueRN6okyB7fMcVBw 1 0 15 54260 4.9mb 4.9mb
7. 룰 실행
elastalert --verbose --start NOW --config config.yaml
8. systemd 등록
# vim /usr/lib/systemd/system/elastalert.service
[Unit]
Description=Elastaler
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/elastalert --verbose --start NOW --config /etc/elastalert/config.yaml
User=root
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
반응형
'Monitoring Tools > ELK Stack' 카테고리의 다른 글
9. Elasticsearch 상태 정보 보기(cluster, shard, index, node) (0) | 2022.04.26 |
---|---|
8. Windows Sysmon + Winlogbeat + logstash (0) | 2022.04.26 |
6.2 filebeat offset 초기화 (0) | 2022.04.22 |
6.1 filebeat multiple indexing (0) | 2022.04.22 |
6. filebeat agent 설정 (0) | 2022.04.22 |