logstash 프로필 상세 설명
업무 목적 은 nginx 와 apache 가 매일 발생 하 는 로 그 를 분석 하고 url, ip, rest 인터페이스 등 정 보 를 모니터링 하 며 데 이 터 를 elasticsearch 서비스 에 보 내 는 것 이다.
config
입력
로그 파일 에서 정보 가 져 오기
file {
path => "/home/keepgostudio/demo/logs/test.log"
start_position => "beginning"
}
여과
grok
현 재 는 logstash 에서 비 표준화 로그 데 이 터 를 표준화 하고 데 이 터 를 검색 할 수 있 는 가장 좋 은 방법 입 니 다.Logstash 는 기본적으로 자바 스 택 로그, apache 로 그 를 포함 한 120 가지 형식 을 분석 할 수 있 습 니 다.클릭 하여 보기
특별한 수요 가 없다 면 기본 apache 로그 형식 을 사용 하면 원 하 는 효 과 를 얻 을 수 있 습 니 다. 다음 과 같 습 니 다.
grok{
match => {"message" => ["%{COMBINEDAPACHELOG}"]}
}
그러나 url 의 인자 와 같은 더 많은 정 보 를 감시 하려 면 기본 표현 식 은 우리 의 수 요 를 만족 시 킬 수 없습니다. 이 럴 때 우 리 는 업무 에 필요 한 표현 식 을 직접 작성 하고 logstash 에 게 특정한 기대 방식 으로 데이터 변환 을 하 라 고 알려 야 합 니 다.
우선, logstash 의 루트 디 렉 터 리 에 patterns 폴 더 를 만 듭 니 다. 이 폴 더 는 기본적으로 없습니다.
그 다음 patterns 폴 더 에 파일 test 만 들 기pattern (여 기 는 편 의 를 위해 pattern 의 기능 에 따라 파일 이름 을 짓 지 않 았 습 니 다. 실제 응용 에 서 는 기능 에 따라 파일 이름 을 짓 는 것 이 좋 습 니 다. 이 유 는 알 고 있 습 니 다)test 에서pattern 파일 에 서 는 grok 에서 사용 할 수 있 도록 '이름 정규 표현 식' 과 같은 형식 으로 정규 표현 식 을 정의 할 수 있 습 니 다.
마지막 으로 사용 할 때 patterndir 이 매개 변 수 를 가 져 옵 니 다. 그렇지 않 으 면 logstash 에서 사용자 정의 정규 표현 식 을 식별 할 수 없습니다.
grok {
patterns_dir => ["/home/keepgostudio/download/logstash-5.2.0/patterns"]
match => {
"message" => ["%{PARAMS_APACHELOG}", "%{NO_PARAMS_APACHELOG}"]
}
remove_field => ["host", "timestamp", "httpversion", "@version"]
}
kv
데이터 원본 을 키 쌍 으로 변환 하고 상대 적 인 field 를 만 듭 니 다.예 를 들 어 'a = 111 & b = 2222 & c = 3333' 을 입력 하고 출력 할 때 a, b, c 는 세 개의 field 로 만들어 집 니 다. 이렇게 하 는 장점 은 특정한 인 자 를 조회 해 야 할 때 한 문자열 을 검색 해서 해석 하 는 것 이 아니 라 직접 조회 할 수 있 습 니 다.
kv {
source => "field_name"
field_split => "&?"
}
geoip
이것 은 말 그대로 그의 기능 을 알 수 있 고 ip 에 따라 해당 하 는 지리 정 보 를 찾 을 수 있다. 예 를 들 어 도시, 성, 국가, 경위도 등 이다.이 ip 정 보 는 logstash 의 데이터 원본 에서 검색 하 는 것 이지 인터넷 검색 을 하 는 것 이 아 닙 니 다.
geoip {
source => "field_name"
fields => ["country_name", "region_name", "city_name", "latitude", "longitude"]
target => "location"
}
drop
drop 은 통계 하고 싶 지 않 은 로그 정 보 를 건 너 뛸 수 있 습 니 다. 로그 정보 가 if 규칙 에 맞 을 때 이 정 보 는 out 에 나타 나 지 않 습 니 다. logstash 는 다음 로 그 를 직접 분석 합 니 다.
if [field_name] == "value" {
drop {}
}
출력
logstash 가 elasticsearch 에 출력 할 때 모든 기록 에 무 작위 로 id 를 생 성 합 니 다.처음 접촉 할 때 수 동 으로 입력 하 는 것 을 권장 합 니 다.이렇게 elasticsearch 의 서 비 스 를 결합 하면 전체 실현 절 차 를 이해 하기 쉽다.
elasticsearch {
hosts => ["192.168.1.44:9200"]
index => "logstash-test-%{type}-%{host}"
}
부록
test.config
input {
stdin {}
}
filter {
grok {
patterns_dir => ["/home/keepgostudio/download/logstash-5.2.0/patterns"]
match => {
"message" => ["%{PARAMS_APACHELOG}", "%{NO_PARAMS_APACHELOG}"]
}
remove_field => ["host", "timestamp", "httpversion", "@version"]
}
kv {
source => "params"
field_split => "&?"
}
geoip {
source => "ip"
fields => ["country_name", "region_name", "city_name", "latitude", "longitude"]
target => "location"
}
output {
elasticsearch {
hosts => ["192.168.1.44:9200"]
index => "logstash-test-%{type}-%{host}"
}
}
test_pattern
HTTP_URL \S+(?=\?)
HTTP_URL_WITH_PARAMS "(?:%{WORD:method} %{HTTP_URL:url}\?%{NOTSPACE:params}(?: HTTP/%{NUMBER:httpversion}))"
HTTP_URL_WITHOUT_PARAMS "(?:%{WORD:method} %{NOTSPACE:url}(?: HTTP/%{NUMBER:httpversion}))"
NO_PARAMS_APACHELOG %{IPV4:ip} %{USERNAME} %{USERNAME} \[%{HTTPDATE:timestamp}\] %{HTTP_URL_WITHOUT_PARAMS} %{NUMBER:response} (?:%{NUMBER:bytes}|-) "%{NOTSPACE:referrer}" %{QS:agent}
PARAMS_APACHELOG %{IPV4:ip} %{USERNAME} %{USERNAME} \[%{HTTPDATE:timestamp}\] %{HTTP_URL_WITH_PARAMS} %{NUMBER:response} (?:%{NUMBER:bytes}|-) "%{NOTSPACE:referrer}" %{QS:agent}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Log] Docker + logback 적용과정project를 실행하던 중, backend에서 로그를 저장 할 필요성이 생겼습니다. API 호출 시 수행 시간이 얼마나 걸렸는지 확인하기 어려움. 어느정도 백엔드 지식이 쌓이면서 log를 저장하는 것은 기본적인 관...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.