이 글에서는 PHP로 구현된 로그 수집 시스템을 주로 소개하는데, 이는 특정 참조 가치가 있습니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다.
최근에는 비즈니스가 원격 서버의 로그 수집 요구 사항과 관련되어 있습니다. 제한 사항 기술 스택 확장 아이디어는 PHP를 사용하여 구현되었습니다.
구현 과정에서 주의가 필요한 몇 가지 사항이 있으며 다음과 같이 기록됩니다.
1. 서버가 많기 때문에. Flume과 같은 아키텍처를 사용하면 각 서버에 소프트웨어를 설치해야 하기 때문에 생산자(서버)에 소프트웨어를 설치할 필요가 없습니다. 2. SSH 연결. 각 서버에는 SSH 연결 권한이 구성되어 있으며, PHP의 ssh2 확장을 사용하여 서버 콘텐츠에 원격으로 연결하고 액세스합니다.
3. 각 서버의 로그 파일은 동일한 디렉터리 규칙에 따라 배치됩니다.
4 .CLI 작업은 계속 실행되는 프로그램입니다. CLI 모드를 사용할 때 이때 사용되는 INI 파일에 문제가 있는 경우가 있습니다.
5. , 네트워크 문제로 인해 SSH 연결 또는 인증 실패로 인해 다시 시도해 보세요.
6. 로그 자르기 및 압축 일반적으로 당사의 운영 및 유지 관리에서는 매일 정해진 시간에 로그를 자르고 압축합니다. 읽어야 하는 파일 유형: 압축 및 압축되지 않은 로그는 별도로 처리해야 합니다.
7. 로그의 타임스탬프는 요청을 구별하기에 충분하지 않으므로 밀리초 단위로 측정합니다. 동일한 밀리초 내에 동일한 IP 소스, 동일한 UA가 요청으로 간주될 수 있습니다.
8. readdir을 사용하여 SSH 형식으로 원격 디렉토리를 읽습니다("ssh2.sft://.. ."); 불필요한 걸 걸러내기 위해 파일 이후 파일 생성 시간별로 정렬해서 하나씩 처리합니다.
9. 압축 파일을 읽어보세요. file_get_contents를 사용하면 인터페이스가 오랫동안 응답하지 않게 됩니다. fopen과 fread를 사용하여 한 번에 8K씩 읽습니다. (아무리 크더라도 쓸모가 없습니다.) 특정 횟수만큼 읽을 때마다 진행률 표시가 출력됩니다.
10. 성공적으로 읽은 후 백업하고 다음 사용을 위해 캐시 디렉토리에 저장하십시오. 프로그램이 오류가 발생하거나 다시 실행되는 경우 먼저 캐시 파일이 있으면 읽을 필요가 없습니다.
11. 압축을 풀면 PHP 메모리가 급격하게 늘어납니다.
12. 압축된 로그 처리 완료. 나중에 PHP 프로그램을 실행한 후에는 처리를 반복할 필요가 없습니다.
13. 압축되지 않은 로그 처리 중입니다. 데이터베이스 기록, 현재 파일 포인터 사용(ftell, fseek 사용)
14. 파일 날짜가 기록된 날짜와 동일한 경우 또는 파일이 레코드에 있는 파일 크기보다 작으면 파일이 업데이트되었으며 파일 포인터를 재설정해야 함을 의미합니다.
그렇지 않으면 마지막 처리된 위치에서 직접 위치(fseek)할 수 있습니다.
15. 로그 라인 분해. 일반 규칙을 사용하여 공백과 구분 기호에 따라 구분할 수도 있습니다. 또한 logParser 타사 클래스 라이브러리를 사용하여 메모리 오버헤드를 절약할 수 있습니다.
16 .로그 가중치 판단. 각 서버의 마지막 로그 타임스탬프(밀리초)와 IP, UA를 미리 읽어봅니다.
17. 로그 저장은 MYSQL을 사용했습니다. 실행 시간을 낭비하기 위해 4,000개의 행을 한 번에 모두 삽입할 수 있습니다.
관련 권장 사항:
php 출력 로그
위 내용은 PHP로 구현된 로그 수집 시스템의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!