elasticsearch 로 하고 있는것들...
최초 개발이유
1. 통합 로그 검색 시스템이 필요
(장애나 이슈 발생시 연관된 수많은 Node(서버,스위치,스토리지 등등) 의 Log를 일일이 접속해서 들여다본다는건 노가다 + 눈알 빠짐)
2. 공짜면서 운영이 쉬워야함 (splunk 등도있으나 결국 비용 발생) / lucene query는 간단하고 배우기 쉽다.
이외 elasticsearch 의 장점 및 기능은 인터넷 검색 .....
1. SaaS 서비스 동시 접속자(ccu) 체크
접속자별 지도 표기(geoip)
하루에 한번 powershell 로 전체 VM(Guest) 리스트 parsing -> VM 리스트 (대략 10,000대 정도) -> 리눅스 script (winexe 활용) -> -> VM별 특정 프로세스(application) ESTABILISH 카운트 -> IP리스트만 parsing 하여 파일로 저장 -> -> Logstash (파싱,Geoip) -> elasticsearch 저장 -> grafana view |
2. 전체 호스트 서버(hypervisor) 중요 시스템 syslog 저장 및 알람
리눅스 서버 : rsyslog 사용
윈도우 서버 : winlogbeat 사용
winlogbeat.yml
winlogbeat.event_logs:
- name: System
level: critical, error, warning, information
event_id: 5120, 1129, 129, 61110, 61117, 153, 17, 6006, 1074 <-중요한 이벤트 code만
ignore_older: 168h
output.elasticsearch:
hosts:
- 1xx.xx.xx:9200
logging.to_files: true
logging.files:
path: C:/ProgramData/winlogbeat/Logs
logging.level: info
알람 : 윈도우: 특정 이벤트 code 예: 5120, 6006 중요한것들
알람 : 스토리지 : disk fault, Queue depth over, scsi.cmd.notReadyCondition <- 서비스 운영상 중요한 로그들 (이외 다수)
3. IP 관리 자동화
filebeat 사용
filebeat.yml 핵심 요약
- input_type: log
paths:
- /root/.../ipam/filebeat/*-sumfile.log
document_type: ipam
- input_type: log
paths:
- /root/.../ipam/filebeat/*-offip.log
document_type: offip
매일 하루에 한번 98개 IP 대역에 대하여 -> masscan 으로 특정 Port 및 ICMP 체크
-> 사용중인 IP, 사용 Off IP Parsing 하여 file로 저장 -> filebeat -> logstash grok 파싱 ->
-> elastic 저장 -> grafana view
view 부분은 elastic kibana로도 가능하지만 개인적으로 grafana가 더 쉽고 편해서..
------------------------------------------------------------------------------------------------------
logstash 환경 설정
input {
beats {
port => 5000
}
file {
type => "Saas"
path => "/data/script/GEOIP/log/ip-list"
start_position => "beginning"
}
}
filter {
if [type] == "apache" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
if [type] == "syslog" {
grok {
match => [ "message", "%{SYSLOGLINE}" ]
}
}
if [type] == "ipam" {
grok {
patterns_dir => "/data/pattern/ipam"
match => [ "message", "%{IPAM}" ]
}
}
if [type] == "offip" {
grok {
patterns_dir => "/data/pattern/ipam"
match => [ "message", "%{IPAM}" ]
}
}
if [type] == "Saas" {
grok {
match => { "message" => "%{IP:clientip}" }
}
geoip {
source => "clientip"
}
}
}
output {
if [type] == "apache" {
elasticsearch { hosts => ["x.x.x.x:9200"]
index => "filebeat-%{+YYYY.MM.dd}"
}
}
if [type] == "syslog" {
elasticsearch { hosts => ["x.x.x.x:9200"]
index => "syslog-%{+YYYY.MM.dd}"
}
}
if [type] == "ipam" {
elasticsearch { hosts => ["x.x.x.x:9200"]
index => "ipam-%{+YYYY.MM.dd}"
}
}
if [type] == "offip" {
elasticsearch { hosts => ["x.x.x.x:9200"]
index => "offip-%{+YYYY.MM.dd}"
}
}
if [type] == "Saas" {
elasticsearch { hosts => ["x.x.x.x:9200"]
index => "Saas-%{+YYYY.MM.dd}"
}
}
}
elasticsearch 활용 사례 더보기