iptables.log 파일 검색에 시간이 오래 걸림

iptables.log 파일 검색에 시간이 오래 걸림

/etc/syslog.confiptables를 사용하여 정보를 저장하도록 파일 을 수정하여 연결에 대한 정보를 저장했습니다 /var/log/iptables.log.

따라서 X시간마다 로그 파일에서 정보를 추출해야 합니다. 하지만 문제는 파일이 더 커지고 검색 속도가 느려진다는 것입니다. 그래서 나는 다음을 사용했습니다.

sed -i '/string/d' iptables.log

더 이상 필요하지 않은 것을 삭제하려면. 하지만 이 명령을 사용하면 iptables는 파일에 데이터 저장을 중지합니다 iptables.log.

그렇다면 무엇이 문제인가요? 이 문제를 어떻게 해결할 수 있나요?

답변1

아마 한번 시도해 보세요

cat iptables.log | sed -n "/PatternYouLookat/ p"

sed 중에 파일을 잠그지 않도록

큰 파일의 경우 sed는 성능이 좋지 않으므로 먼저 파일을 grep하거나 (내가 하는 일) 마커/인덱스를 유지하여 이 파일에서 꼬리를 떼고 파일의 꼬리만 처리하십시오(치료가 필요한 경우 임시 복사본을 사용하더라도). 무거운).

sed -u를 사용하여 스트림으로 작업하고 대용량 파일의 일부 버퍼 문제를 피할 수 있습니다.

답변2

syslog를 사용하고있는 것 같습니다. 그리고 sed 내부 편집이 실제로 새 파일을 생성하고 이전 파일을 제거한다고 가정합니다.

알리지 않고 로그 파일을 회전/재생성하는 경우 Syslog는 매우 취약합니다. 여러분이 보는 것은 정확히 무슨 일이 일어나는지입니다. syslog는 파일이 존재하더라도 파일에 아무 것도 기록하지 않습니다. 이는 syslog가 여전히 이전 파일 핸들을 갖고 있고 이전 파일에 쓰기 때문입니다(ls 등으로 더 이상 볼 수 없더라도). syslog가 이 파일 핸들을 닫자마자 데이터는 열반에서 사라집니다.

대신 logrotate를 사용하려면 devnull과 같은 것이 좋습니다. 원하지 않는 경우 syslog 다시 로드를 실행하거나 sed 호출 후 다시 시작하십시오. 그것은 희망적으로 트릭을 수행해야합니다.

답변3

로그회전을 사용하세요. 일반적으로 매일 밤 또는 매주 교대하지만 필요한 대로 변경할 수 있습니다. 유일한 문제는 logrotate에 의해 처리되는 회전 후 iptables를 다시 시작해야 한다는 의미일 수 있다는 것입니다. 그것이 필요한지, 그것이(또는 빈도)가 귀하나 귀하의 응용 프로그램에 문제가 되는지 모르겠습니다.

Logrotate는 새 로그 파일을 생성하고 이전 로그 파일의 이름을 바꿉니다. 모두 보관할 수도 있고, 잠시 후 자동으로 삭제할 수도 있습니다. 회전된 파일은 더 이상 로깅에 사용되지 않으므로 문제 없이 변경할 수 있습니다.

  • 로그 파일이 있다고 가정해 보겠습니다 access.log.
  • Logrotate는 일반적으로 이 이름을 access.log-20140729.
  • 날짜 대신 숫자를 사용할 수 있습니다: access.log.1.
  • sed를 사용하여 변경되는 다른 cronscript를 실행할 수 있습니다 access.log.1.
  • 다음 회전에서는 이 파일의 이름이 access.log.2모든 변경 사항과 함께 로 변경됩니다.
  • 최신 access.log이름은 access.log.1sed로 변경될 수 있습니다.
  • 새로운 것이 access.log생성되는 등..

관련 정보