[file] Logstash가 파일을 재분석하도록 강제하는 방법은 무엇입니까?

Logstash를 설치하여 아파치 파일을 구문 분석했습니다. 설정을 올바르게하는 데 꽤 시간이 걸렸고 항상 실제 로그를 시도했습니다. 나는 logstash가 파일의 어디에 있었는지 “기억”한다는 것을 (문서에서 말하는 것처럼) 알아 차렸다. 이제 내 설정은 Ok이며 Logstash가 “잊어 버리기”를 원합니다. 그래도 이것은 나보다 더 어려워 보인다. 나는 이미 다음을 수행했습니다.

  • 익숙한: start_position => "beginning"

  • elastissearch에서 전체 “데이터”폴더를 삭제하고 먼저 중지했습니다.

  • logstash에 의해 열린 파일을보고 lsof -p PID유망한 모든 것을 삭제했습니다 (내 경우 /tmp/jffi*.tmp)

여전히 Logstash는 로그가있는 폴더에있는 “신선한”파일 만 잊지 않고 구문 분석합니다.

어떤 아이디어?



답변

기본적으로 logstash는 일반적으로에 상주하는 로그 파일에 마지막 위치를 기록합니다 $HOME/.sincedb. Logstash가 지정하여 로그 파일을 구문 분석하지 믿기로 바보짓을 할 수 있습니다 /dev/nullsincedb_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 파일의 예 :


답변

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를 다시 시작했으며 모든 것이 작동했습니다. .conflogstash가 조용히 매달린 파일 중 하나에 무언가가 있다고 가정 할 수 있습니다 .


답변

실제로 파일에 대용량 데이터가있는 경우 매번 다시 구문 분석하는 데 비용이 많이 듭니다. 따라서이 작업을 수행하기 전에주의해야합니다. 다시 분석하도록 강제하려면 입력 블록 내에 매개 변수를 설정하십시오.

sincedb_path => "/dev/null"

이 옵션은 .sincedb 파일을 저장하지 않으며 logstash는 매번 재분석합니다. 그러나 매번 재분석하지 않으려면 파일을 구문 분석 할 때 생성 된 .sinceDb 경로를 수동으로 삭제하면됩니다. 일반적으로 루트 사용자가 아닌 경우 홈 디렉토리에 숨겨진 파일로 존재하며 그렇지 않으면 루트 디렉토리에 있습니다. 이 파일을 쉽게 추적하기 위해 sincedb_path를 다른 위치로 설정할 수도 있습니다.

sincedb_path => "/home/shubham/sinceDB/productsSince.db"