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


91

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

  • 익숙한: start_position => "beginning"

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

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

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

어떤 아이디어?


내가 그것을 발견 한 최신 logstash 버전 :/opt/logstash/data/plugins/inputs/file
Tim Smith

답변:


135

기본적으로 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"
    }
}

28
sincedb_path => "NUL"에서 동일한 효과를 얻기 위해 사용할 수 있습니다 . 구체적인 모습 여기에
크리스 마 그누

11
파일이 아주 오래된 경우 (24 시간 이상) 옵션을 추가 ingnore_older => 0하면 logstash가 날짜에 상관없이 파일을 가져갈 수 있습니다. 기본적으로 파일이 더 오래된 경우 24 시간은 무시됩니다.
mtfk

1
@mtfk : 와우 ​​멋진 찾기! ignore_older => 0logstash 에서 작업 을 지적 해 주셔서 감사합니다 ! 나는 질문자와 같은 문제에 갇혔다. 분명하지 않은 발견 인 것 같습니다! ( "ignore_older"만 filebeat의 페이지를 불러 "logstash을"인터넷 검색, 나는 logstash이 처리하는 방법의 흔적을 찾을 수 없습니다)
마이크 루츠

filebeat 사용하는 동안 어떻게이 추가
Sunilkumar Ramamurthy는

@SunilkumarRamamurthy 난 당신이 옵션을 생략하면 생각 ignore_older하여 filebeat 구성을 filbeat 다시 전체 파일을 읽도록 강제 elastic.co/guide/en/beats/filebeat/current/...
flazzarini

19

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 파일의 예 :


1
관련 start_position => "beginning"문서는 다음과 같이 말합니다.>이 옵션은 파일이 새롭고 이전에 보지 못한 "첫 번째 접촉"상황 만 수정했습니다. 이전에 파일을 본 적이있는 경우이 옵션은 효과가 없습니다.
Brad

10

Logstash는 기록을 $HOME/.sincedb_*. 모든 .sincedb파일을 삭제하고 logstash를 다시 시작할 수 있습니다 . Logstash는 파일을 재분석합니다.


9

모든 답변을 결합하여 이것이 파일을 구문 분석하는 가장 좋은 방법이라고 생각하십시오. 나는 내 테스트를 위해 똑같이했다.

input {
  file {
    path => "/tmp/access_log"
    start_position => beginning
    sincedb_path => "/dev/null"
    ignore_older => 0
  }
}

빠른 테스트를 위해 대신 파일의 타임 스탬프를 변경할 ignore_older수도 touch /tmp/access_log있습니다.


구성을 추가하면 ignore_older => 0그 반대가됩니다.
panchicore

5

logstash-forwarder를 사용하는 경우 .logstash-forwarder대신 집에서 파일을 확인하십시오 .

{
  "/var/log/messages": {
    "source": "/var/log/messages",
    "offset": 43715,
    "inode": 12967,
    "device": 51776
  }
}

3
패키지로 설치된 경우 /var/lib/logstash-forwarder/.
Wesley Baugh

3

삭제 $HOME/.sincedb_*후에도 여전히 데이터를 수집하지 않았습니다.

여러 가지를 시도한 후 주 .conf파일을 제외한 모든 파일을 제거 /etc/logstash/conf.d하고 Logstash를 다시 시작했으며 모든 것이 작동했습니다. .conflogstash가 조용히 매달린 파일 중 하나에 무언가가 있다고 가정 할 수 있습니다 .


내가 기억할 때, 나는 나중에 디버깅 플래그를 켜서 조용히 매달리지 않고 왜 화가 났는지 말해 주었다. 나는 그것이 데이터에서 버전 번호를 찾고 있다고 생각하지만 때로는 데이터에 번호가 없습니다. 숫자가 아니라면 숫자가 무엇인지 알아 내기위한 수표는 충돌 할 것이기 때문에 먼저 숫자인지 테스트 한 다음 숫자가 무엇인지 물어봐야했습니다.
Seth

1

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

sincedb_path => "/dev/null" 

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

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

1

logstash 옵션을 엉망으로 만들고 싶지 않다면 기존 로그 파일의 이름을 바꾸거나 제거 하고 이전 파일 내용에서 파일을 만드는 것이 logstash를 재 인덱싱하도록 속이는 것을 발견했습니다.


0

내 홈 디렉토리에서 찾았지만 삭제 후 logstash는 기존 로그 파일을 다시 선택하는 것을 거부했습니다. 내가 작동하게 한 방법은

sincedb_path => "/opt/elk/sincedb/"  

내 파일 플러그인에. 매번 재설정을 생각하고 sincedb_path의 경로를 변경하십시오.


0

tar.gz install filebeat를 사용하는 경우이 파일을 삭제 $FilebeatPath/data/registry/filebeat/data.json하고 filebeat를 다시 실행할 수 있습니다.



-1

logstash 버전 5 새 디렉토리가 있습니다.

<path.data>/plugins/inputs/file

path.data 정의는 logstash.yml에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.