Log collection system implemented in PHP
This article mainly introduces the log collection system implemented in PHP, which has certain reference value. Now I share it with everyone. Friends in need can refer to it
Recent business involves logs of remote servers Collecting requirements, out of the idea of limiting the expansion of the technology stack, implemented it using PHP.
There are some small points that need attention during the implementation process, which are recorded as follows:
1. Active acquisition. Because There are many servers. If you use an architecture such as Flume, you need to install software on each server, which incurs operation and maintenance costs. Therefore, we use the method of active acquisition by the collector. There is no need to install software on the producer (server) .
2.SSH connection. Each server is configured with SSH connection permissions. You can use PHP's ssh2 extension to remotely connect and access server content.
3. Server log structure Unified. The log files on each server are placed according to the same directory rules to simplify the program logic.
4. CLI operation. Collection is a continuously running program, using CLI mode. Please note that the INI file problem.
5. SSH connection exception. Sometimes, due to network problems, SSH connection or verification fails, just delay and try again.
6 .Log truncation and compression. Usually, our operation and maintenance will truncate and compress logs at a fixed time every day, so there are two types of files that need to be read: compressed and uncompressed logs, which need to be processed separately.
7. Timestamps in logs. Timestamps in seconds are not enough to distinguish requests. We increase $msec to measure in milliseconds. Within the same millisecond, the same IP source and the same UA can be considered A request.
8. Read the directory. Use readdir to read the remote directory in SSH format, readdir("ssh2.sft://..."); to filter out unnecessary After the file, sort it by the file creation time and process it one by one.
9. Read the compressed file. If you use file_get_contents, the interface will become unresponsive for a long time. I used fopen and fread to read it step by step. Read 8K at a time (No matter how big it is, it is useless). After each reading a certain number of times, a progress display is output.
10. Compressed file caching. After reading successfully, save it to the cache directory for backup and next use. If the program errors or reruns, check the cache directory first. If there is a cache file, there is no need to read it from the network.
11. Decompress. Just use gzdecode. This will cause PHP The memory needs to increase dramatically. Adjust PHP.INI to expand the memory limit.
12. Record the completion of compression log processing. After processing a compressed file, record it in the database. After the PHP program is run, it will No need to repeat processing.
13. Uncompressed log processing. Uncompressed logs indicate that this log is still growing. No caching is required. Use database records and current file pointers (use ftell, fseek ). Record the file creation date.
14. Uncompressed log judgment. When the file date is different from the recorded date, or the file is smaller than the file size in the record, it means that the file has been updated and needs to be Reset the file pointer.
Otherwise, you can directly locate (fseek) to continue from the last processed position.
15. Log line decomposition. Use regular rules, that is Yes, it can be distinguished according to spaces and delimiters. You can also use the logParser third-party class library to process. In order to save memory overhead, you can use the Iterator coroutine mode to return line by line.
16. Log Judgment. Read the last log timestamp (milliseconds) and IP, UA of each server in advance.
17. Log saving. I used MYSQL to save the log. Each line of log is executed once MYSQL will waste a lot of running time. You can accumulate 4,000 rows and insert them all at once.
18. Error handling. In addition to the SSH connection failure, half a line of logs will be read, causing the decomposition to fail. At this time, it will also throw An exception occurs. Catch it by the main program and run it again.
Related recommendations:
The above is the detailed content of Log collection system implemented in PHP. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
