Logstash를 설치하여 아파치 파일을 구문 분석했습니다. 설정을 올바르게하는 데 꽤 시간이 걸렸고 항상 실제 로그를 시도했습니다. 나는 logstash가 파일의 어디에 있었는지 “기억”한다는 것을 (문서에서 말하는 것처럼) 알아 차렸다. 이제 내 설정은 Ok이며 Logstash가 “잊어 버리기”를 원합니다. 그래도 이것은 나보다 더 어려워 보인다. 나는 이미 다음을 수행했습니다.
-
익숙한:
start_position => "beginning"
-
elastissearch에서 전체 “데이터”폴더를 삭제하고 먼저 중지했습니다.
-
logstash에 의해 열린 파일을보고
lsof -p PID
유망한 모든 것을 삭제했습니다 (내 경우/tmp/jffi*.tmp
)
여전히 Logstash는 로그가있는 폴더에있는 “신선한”파일 만 잊지 않고 구문 분석합니다.
어떤 아이디어?
답변
기본적으로 logstash는 일반적으로에 상주하는 로그 파일에 마지막 위치를 기록합니다 $HOME/.sincedb
. Logstash가 지정하여 로그 파일을 구문 분석하지 믿기로 바보짓을 할 수 있습니다 /dev/null
로 sincedb_path
.
여기 문서 입력 파일 의 일부입니다 .
이후 데이터베이스를 작성할 위치 (모니터링 된 로그 파일의 현재 위치를 추적 함). 기본값은 환경 변수 “$ SINCEDB_PATH”또는 “$ HOME / .sincedb”입니다.
구성 예
input {
file {
path => "/tmp/logfile_to_analyse"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
답변
sincedb 파일에있는 “tailing”의 플러그인 파일 저장 내역, 기본값 : $ HOME / .sincedb * 아래, http://logstash.net/docs/1.3.3/inputs/file#sincedb_path 참조
db 파일에는 다음과 같은 줄이 포함되어 있습니다.
[inode] [major device number] [minor device number] [byte offset]
따라서 전체 파일을 다시 구문 분석하려면 다음을 수행해야합니다.
- sindedb 파일 삭제
- 또는 sincedb 파일에서 해당 줄만 삭제하고 파일 앞의 inode 번호를 확인하십시오 (
ls -i yourFile | awk '{print $1}'
). - 그리고 Logstash를 다시 시작하십시오.
키를 사용하여 start_position => "beginning"
Logstash는 모든 파일을 분석합니다.
sincedb 파일의 예 :
- name :
.sincedb_7a7413a84171aa550d5318c17fd756e9
: 이름에는 키 경로 ( http://logstash.net/docs/1.3.3/inputs/file#path )에 있는 모든 디렉토리의 sincedb_ 및 MD5 (Digest :: MD5.hexdigest)가 포함됩니다 . 플러그인 파일 코드 참조 : https://github.com/logstash/logstash/blob/master/lib/logstash/inputs/file.rb#L105
답변
Logstash는 기록을 $HOME/.sincedb_*
. 모든 .sincedb
파일을 삭제하고 logstash를 다시 시작할 수 있습니다 . Logstash는 파일을 재분석합니다.
답변
모든 답변을 결합하여 이것이 파일을 구문 분석하는 가장 좋은 방법이라고 생각하십시오. 나는 내 테스트를 위해 똑같이했다.
input {
file {
path => "/tmp/access_log"
start_position => beginning
sincedb_path => "/dev/null"
ignore_older => 0
}
}
빠른 테스트를 위해 대신 파일의 타임 스탬프를 변경할 ignore_older
수도 touch /tmp/access_log
있습니다.
답변
logstash-forwarder를 사용하는 경우 .logstash-forwarder
대신 집에서 파일을 확인하십시오 .
{
"/var/log/messages": {
"source": "/var/log/messages",
"offset": 43715,
"inode": 12967,
"device": 51776
}
}
답변
삭제 $HOME/.sincedb_*
후에도 여전히 데이터를 수집하지 않았습니다.
여러 가지를 시도한 후 주 .conf
파일을 제외한 모든 파일을 제거 /etc/logstash/conf.d
하고 Logstash를 다시 시작했으며 모든 것이 작동했습니다. .conf
logstash가 조용히 매달린 파일 중 하나에 무언가가 있다고 가정 할 수 있습니다 .
답변
실제로 파일에 대용량 데이터가있는 경우 매번 다시 구문 분석하는 데 비용이 많이 듭니다. 따라서이 작업을 수행하기 전에주의해야합니다. 다시 분석하도록 강제하려면 입력 블록 내에 매개 변수를 설정하십시오.
sincedb_path => "/dev/null"
이 옵션은 .sincedb 파일을 저장하지 않으며 logstash는 매번 재분석합니다. 그러나 매번 재분석하지 않으려면 파일을 구문 분석 할 때 생성 된 .sinceDb 경로를 수동으로 삭제하면됩니다. 일반적으로 루트 사용자가 아닌 경우 홈 디렉토리에 숨겨진 파일로 존재하며 그렇지 않으면 루트 디렉토리에 있습니다. 이 파일을 쉽게 추적하기 위해 sincedb_path를 다른 위치로 설정할 수도 있습니다.
sincedb_path => "/home/shubham/sinceDB/productsSince.db"