IT

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

lottoking 2020. 9. 9. 08:15
반응형

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"의 파일에있는 "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"

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


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

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

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


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


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

<path.data>/plugins/inputs/file

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

참고 URL : https://stackoverflow.com/questions/19546900/how-to-force-logstash-to-reparse-a-file

반응형