In diesem Artikel wird hauptsächlich PHP vorgestellt, um die Funktion der regelmäßigen Überwachung von Nginx-Protokolldateien zu implementieren, einschließlich des regelmäßigen Lesens von Nginx-Serverprotokollen durch PHP und der auf Curl-basierten Datenübertragung bezogenen Betriebstechniken. Freunde in Not können sich auf diesen Artikel beziehen
Das Beispiel beschreibt, wie man die Funktion der regelmäßigen Überwachung von Nginx-Logdateien einfach in PHP implementiert. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Diese Funktion dient dazu, die von Nginx generierten Protokolldaten regelmäßig zu überwachen und die neuen Daten an eine Schnittstelle (z. B. die Big-Data-Schnittstelle) zu übermitteln Big Data zur Analyse)
define("MAX_SHOW", 8192*5); //新增数据提交阈值 define("LOG_NAME", ""); //读取的日志文件 define("LOG_SIZE", ""); //保留上次读取的位置 define("LOG_URL", ""); //日志提交地址 //运行时log文件原始大小 $log_size = get_filesize(); $file_size = filesize(LOG_NAME); if(empty($log_size)){//没有记录上次位置,则从当前位置开始 $file_size = $file_size; }else if($log_size > $file_size){ //说明是第二天的日志文件,指针放到文件头 $file_size = 0; }else{ //从上次记录的位置开始 $file_size = $log_size; } $file_size_new = 0; $add_size = 0; $ignore_size = 0; $fp = fopen(LOG_NAME, "r"); while(1){ clearstatcache(); $read_num = 0; $file_size_new = filesize(LOG_NAME); $add_size = $file_size_new - $file_size; $add_data = array(); $add_log = ''; if($add_size > 0){ //大于一个阈值提交数据 if($add_size > MAX_SHOW){ fseek($fp, $file_size); //当增加量超过8192,需要分页读取增加量 $page = ceil($add_size/8192); for($i=1; $i<=$page; $i++){ if($i == $page){//最后一页 $end_add = $add_size - ($page -1) * 8192; $add_log .= fread($fp, $end_add); }else{ $add_log .= fread($fp, 8192); $file_size_step = $file_size + $i * 8192; fseek($fp, $file_size_step); } } $add_data['add_log'] = $add_log; $add_data['add_log'] = base64_encode($add_data['add_log']); http_post(LOG_URL, $add_data); $file_size = $file_size_new; //记录当前位置 save_filesize($file_size); } }else if($add_size < 0){ //第二天从头部开始 $file_size = 0; } sleep(2); } fclose($fp); /** * 每次启动时获取上次打开文件位置 */ function get_filesize(){ $size = file_get_contents(LOG_SIZE); return $size; } /** * 每次提交后保存这次读取文件的位置 */ function save_filesize($size){ return file_put_contents(LOG_SIZE, $size); } /** * http请求 * @param array $data * @return boolean */ function http_post($url = '', $data = array()) { if(empty($url)){ return FALSE; } if($data){ $data = http_build_query($data); } $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 5 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); $return = curl_exec ( $ch ); curl_close ( $ch ); return $return; }
Hinweis: Da die Protokolldatei nach dem frühen Morgen geschnitten wird, müssen Sie ein Urteil fällen Das Tagesprotokoll muss aus dem Protokoll abgerufen werden. Lesen des Dateikopfes
Logik, die optimiert werden muss: Wenn der Zwischenprozess hängt, für einen bestimmten Zeitraum anhält und dann erneut startet, wird er erneut aus dem gelesen Letzte Position. Die übermittelten Daten werden relativ groß sein und möglicherweise die Grenze der übermittelten Datengröße überschreiten.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für alle zum Lernen hilfreich ist Bitte achten Sie auf die chinesische PHP-Website!
Verwandte Empfehlungen:
Vollständige Beispielerklärung der von PHP implementierten MongoDB-Datenbankbetriebsklasse
Das obige ist der detaillierte Inhalt vonPHP implementiert die Funktion der regelmäßigen Überwachung von Nginx-Protokolldateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!