วิเคราะห์ล็อกเว็บไซต์อิสระ: อ่านค่า bot, error และทราฟฟิกจากล็อก Nginx/Apache

ในล็อกเซิร์ฟเวอร์ 70% ถึง 85% ของคำขอมาจาก bot และสคริปต์ มีเพียง 15% ถึง 30% เท่านั้นที่เป็นผู้เข้าชมจริง การดูยอดเข้าชมรวมตรงๆ จะทำให้เข้าใจผิดอย่างรุนแรง วิธีอ่านที่ถูกต้องมี 3 ขั้นตอน: เริ่มจากใช้ Us...

日志分析三件事:分清谁在爬、哪里在错、人在哪Reading server logs: who crawls, what errors, where the humans are 反直觉:日志里 70% 至 85% 的请求不是人,别把爬虫量当成流量增长Counter-intuitive: 70%-85% of log rows are bots, not human visits 维度Dimension 看什么What to look at 爬虫识别Bot traffic UA 字段 + IP 反查UA string + IP lookup 区分好爬与坏爬Good vs bad crawlers AI 爬虫单独统计Track AI bots separately 错误排查Errors 404 死链与 5xx 故障404s and 5xx outages 错误率阈值告警Error-rate alerting 5xx >1% 立即查5xx above 1% = act 真人流量Human traffic 去机器人后再算 PVStrip bots before PV 落地页与来源路径Landing pages and referrers 真人数常占 15% 至 30%Humans often 15%-30% 标准工具链:GoAccess 周报 + awk 按小时统计 + 每月一次全量审计Toolchain: GoAccess weekly + awk hourly + monthly full audit 日志至少保留 90 天,按月切割压缩;CDN 回源日志才是真实源站视角Keep 90+ days, rotate monthly; origin pull logs show real back-to-source traffic 动作优先级:5xx 错误 > 404 死链 > AI 爬虫读取情况 > 真人 PV 趋势Priority: 5xx > 404s > AI crawl reads > human PV trend 先读错误,再读爬虫,最后才看流量——顺序反了容易被数字误导Read errors first, then bots, then traffic; reverse order misleads
อ่านล็อก Nginx/Apache 3 แบบ: ระบุ bot, หา error และแยกทราฟฟิกคนจริง

วิเคราะห์ล็อกเว็บไซต์อิสระ: อ่านค่า bot, error และทราฟฟิกจากล็อก Nginx/Apache

สรุปก่อน: ในล็อกเซิร์ฟเวอร์ 70% ถึง 85% ของคำขอมาจาก bot และสคริปต์ มีเพียง 15% ถึง 30% เท่านั้นที่เป็นผู้เข้าชมจริง การดูยอดเข้าชมรวมตรงๆ จะทำให้เข้าใจผิดอย่างรุนแรง วิธีอ่านที่ถูกต้องมี 3 ขั้นตอน: เริ่มจากใช้ User-Agent และ IP กรอง bot ออกก่อน จากนั้นจับตา error rate ของ 5xx (เกิน 1% ให้ตรวจทันที) และลิงก์เสีย 404 สุดท้ายจึงค่อยวิเคราะห์ PV, หน้าแลนดิ้ง และแหล่งที่มาของคำขอจากคนจริงที่เหลือ เก็บล็อกไว้อย่างน้อย 90 วัน ออกรายงาน GoAccess สัปดาห์ละครั้ง และตรวจสอบแบบเต็มรูปแบบเดือนละครั้ง

1. ทำไมดูแค่ “ยอดเข้าชมรวม” ไม่ได้

เว็บมาสเตอร์หลายคนเปิดล็อกแล้วถามทันทีว่า “วันนี้มีคำขอกี่รายการ” แล้วตัดสินว่าธุรกิจดีหรือไม่ นี่คือกับดักแรก: ใน access.log เริ่มต้นของ Nginx หนึ่งบรรทัดคือหนึ่ง HTTP request คนจริงเปิดหน้าแรกครั้งเดียวอาจสร้าง 8 ถึง 15 คำขอ (HTML, CSS, JS, รูปภาพ นับแยกกันคนละรายการ) แต่ bot ที่เป็นอันตรายตัวเดียวสามารถยิงได้เป็นพันรายการในหนึ่งนาที ยอดรวมแทบไม่มีประโยชน์ต่อการตัดสินใจ

ข้อสรุปที่ขัดกับสัญชาตญาณอยู่ตรงนี้:ยอดเข้าชมที่ “พุ่งพรวด” ของคุณ แปดในสิบคือ bot ตัวใดตัวหนึ่งเริ่มดูดเว็บคุณหนักๆ ไม่ใช่มีลูกค้าเข้ามา เกณฑ์ตัดสินง่ายมาก — แยกข้อมูลในล็อกตาม User-Agent แล้วดูว่า 20 อันดับแรกของแหล่งคำขอคือใคร ถ้ามากกว่าครึ่งมาจาก UA ประเภท bot การพุ่งครั้งนี้ไม่เกี่ยวข้องกับธุรกิจของคุณเลย สอดคล้องกับแนวคิดของ การวิเคราะห์ log ของ AI crawler ที่ว่า แยกให้ออกก่อนว่า “ใครกำลังอ่านคุณ” แล้วค่อยพูดถึง “อ่านไปเท่าไหร่”

ฟิลด์ในล็อก (Nginx combined) ความหมาย ใช้วิเคราะห์
$remote_addr IP ต้นทาง ระบุ IP ของดาต้าเซ็นเตอร์, การสแกนที่เป็นอันตราย, เจ้าของ bot
$request เมธอดคำขอ + พาธ + โปรโตคอล ดูว่าเข้าถึง URL ใดจริง และไฟล์ใดถูกยิงถี่
$status HTTP status code 200 ปกติ, 301 เปลี่ยนเส้นทาง, 404 ลิงก์เสีย, 5xx ขัดข้อง
$body_bytes_sent จำนวนไบต์ที่ส่งกลับ ระบุการตอบกลับว่างเปล่า, การดาวน์โหลดผิดปกติที่ถูกบล็อก
$http_referer หน้าต้นทาง คนจริงคลิกเข้ามาจากลิงก์ใด
$http_user_agent ตัวระบุไคลเอนต์ แยกเบราว์เซอร์, bot ของเสิร์ชเอนจิน, bot ของ AI

2. วิธีอ่าน: สัญญาณ 3 ประเภท bot, error และทราฟฟิกคนจริง

ลำดับการวิเคราะห์ที่แนะนำคือ “error → bot → คนจริง” ตายตัว อย่ากลับกัน เหตุผลคือ error ส่งผลต่อประสบการณ์ของคนจริงโดยตรง จึงมีความสำคัญสูงสุด ปริมาณ bot กำหนดงบประมาณการเก็บข้อมูลและต้นทุนแบนด์วิดท์ ทราฟฟิกคนจริงเป็นส่วนสุดท้ายที่ควรเจาะลึก นี่ก็เป็นเหตุผลที่การมอนิเตอร์และแจ้งเตือนเว็บไซต์ จัดความพร้อมใช้งานและอัตรา error ไว้ในระดับแรก

爬虫识别不要只看 UA,因为恶意爬虫会伪造 UA 冒充 Googlebot。标准做法是双向验证:对自称 Googlebot 的 IP 做反向 DNS,确认它真的来自 googlebot.com 网段,再正向解析回去比对。伪造的爬虫过不了这一步。

ประเภทสัญญาณ ช่วงสุขภาพดี เกณฑ์ที่ต้องเข้าไปจัดการ การดำเนินการ
อัตราข้อผิดพลาด 5xx ต่ำกว่า 0.5% เกิน 1% ติดต่อกัน 10 นาที ตรวจ PHP-FPM กับ log ฝั่ง backend ทันที
สัดส่วน 404 ต่ำกว่า 3% URL เดียว 404 เกิน 100 ครั้ง/วัน เพิ่ม 301 หรือแก้ลิงก์ภายใน
สัดส่วนคำขอจากบอทน่าสงสัย 20% ถึง 40% เกิน 60% และ bandwidth ตึง จำกัดด้วย robots หรือ WAF
จำนวนเซสชันคนจริง ทรงตัวเมื่อเทียบสัปดาห์ก่อน ลดลงเกิน 20% ติดต่อกัน 2 สัปดาห์ ตรวจการ index กับโฆษณา ไม่ใช่ปัญหาที่เซิร์ฟเวอร์
สัดส่วนการอ่านของบอท AI 5% ถึง 15% ถือว่าปกติ พุ่งขึ้นเกิน 3 เท่า ดูว่าถูกดึงไปเทรนแบบเป็นชุดหรือไม่

สาม วิธีทำจริง: จากคำสั่งเดียวถึงรายงานรายสัปดาห์

ทีมคนเดียวไม่จำเป็นต้องใช้แพลตฟอร์มวิเคราะห์ log ราคาแพง เครื่องมือขั้นต่ำมีสามอย่าง: GoAccess ทำรายงานรายสัปดาห์แบบเห็นภาพ, awk นับสถิติรายชั่วโมง, และตรวจสอบทั้งหมดด้วยคนเดือนละครั้ง ด้านล่างคือสองสถานการณ์ที่ใช้ได้เลย

สถานการณ์ที่หนึ่ง: หา URL ที่ error มากที่สุดของวันนี้ รันในโฟลเดอร์ log ของ Nginx: awk ‘$9 ~ /^5/ {print $7}’ access.log | sort | uniq -c | sort -rn | head -20 คำสั่งนี้ดึง path ของทุกคำขอ 5xx ออกมา เรียงตามจำนวนครั้งที่เกิด 20 อันดับแรกคือหน้าที่คุณควรแก้ที่สุดของวันนี้

สถานการณ์ที่สอง: ดูว่าวันนี้ Google กับบอท AI เข้ามากี่ครั้ง awk ‘BEGIN{IGNORECASE=1} /Googlebot|GPTBot|ClaudeBot|bingbot/ {print $http_user_agent}’ access.log | sort | uniq -c | sort -rn แยกผลลัพธ์ตาม UA ก็จะเห็นสัดส่วนระหว่างบอทเก็บข้อมูลปกติของ Google กับบอทอ่านข้อมูลของ AI แต่ละเจ้า เว็บที่มี CDN ต้องดึง log ต้นทางไม่ใช่ log ที่ edge เรื่องนี้ดูใน CDN เร่งความเร็วทั่วโลก หัวข้อความต่างระหว่างการดึงต้นทางกับแคช

สถานการณ์ที่สาม: ทำรายงานรายสัปดาห์ให้เจ้าของเว็บเอง เมื่อรัน GoAccess แล้วให้สร้างรายงาน HTML รายสัปดาห์ ดูตัวเลขสี่กลุ่มเป็นหลัก: การกระจาย status code ว่า 4xx กับ 5xx อย่างละเท่าไร, สิบ URL ที่ถูกเรียกมากที่สุด, กราฟทราฟฟิกรายชั่วโมง, และสัดส่วนบอทแยกตาม UA ตั้งเวลาดูรายงานนี้ทุกเช้าวันจันทร์จะได้ผลกว่าการเปิด log ดูแบบครั้งคราวมาก นิสัยที่ควรสร้างคือจดความผิดปกติที่เจอแต่ละครั้งลงตารางเล็กๆ พอผ่านไปสามเดือนย้อนดูจะเห็นรูปแบบ

ความถี่ การดำเนินการ ผลลัพธ์ เวลา
ทุกวัน กวาดตาดูแดชบอร์ดอัตราข้อผิดพลาด 5xx ตัดสินว่ามีปัญหาหรือไม่ 2 นาที
ทุกสัปดาห์ GoAccess ออกรายงานสัปดาห์ที่แล้ว path ยอดนิยม, บอทยอดนิยม, การกระจาย status code 10 นาที
ทุกเดือน ตรวจ 404 กับ UA ผิดปกติทั้งหมด รายการลิงก์เสีย, รายการ IP ที่ต้องบล็อก 1 ชั่วโมง
ทุกไตรมาส ปรับนโยบายการเก็บและตัด log ยืนยันว่าดิสก์ไม่เต็มและย้อนดูข้อมูลเก่าได้ 30 นาที

สี่ ข้อควรระวัง: สามความเข้าใจผิดที่พบบ่อยที่สุด

第一个坑是把 200 全等于正常。有些插件被恶意扫描器打,返回的是 200 加一段伪装页面,状态码正常但内容被换。这种要结合”返回字节数异常小”或”URL 出现了不该出现的参数”来判断,严重时按 หลังเว็บไซต์ถูกแฮก ขั้นตอนนี้

ข้อผิดพลาดที่สองคือดูแค่เรียลไทม์ ไม่เก็บประวัติ ถ้าไม่จัดการ log ตามนโยบายการตัดและเก็บรักษา ดิสก์อาจเต็มหรือสามเดือนต่อมาอยากเช็กว่า “เหตุขัดข้องเมื่อเดือนมีนาคมเริ่มตอนไหนกันแน่” ก็หาข้อมูลไม่เจอ แนะนำให้ตัดรายวัน เก็บข้อมูลร้อน 90 วัน เกินนั้นบีบอัดเก็บถาวร

ข้อผิดพลาดที่สามคือเอาการเข้าถึงของบอทมาเป็นผลงาน SEO Googlebot เข้ามาหมื่นครั้งไม่ได้แปลว่าอันดับดี แค่บอกว่ามันกำลังเก็บซ้ำ ๆ สิ่งที่เกี่ยวกับ SEO จริง ๆ คือ “หน้าสำคัญถูกเก็บปกติหรือไม่” ต้องดูเทียบกับข้อมูลการจัดทำดัชนี ไม่ใช่ชมปริมาณบอทอย่างเดียว ความสัมพันธ์ระหว่างประสิทธิภาพและการเก็บ ดูที่Core Web Vitals ผลต่อความสมบูรณ์ของการเก็บของสไปเดอร์

ตีความผิด อาการที่เห็น สาเหตุที่แท้จริง วิธีตรวจสอบที่ถูกต้อง
ทราฟฟิกพุ่งคือเรื่องดี จำนวนคำขอเพิ่มสามเท่า บอทตัวหนึ่งเริ่มเก็บหนัก ดูสัดส่วนคนจริงโดยแยกตาม UA
เป็น 200 หมดก็สุขภาพดี รหัสสถานะปกติทั้งหมด ถูกฝังมัลแวร์แล้วตอบหน้าเว็บปลอม สุ่มตรวจการตอบกลับที่เล็กผิดปกติและพารามิเตอร์น่าสงสัย
Google เก็บเยอะ=อันดับดี คำขอ Googlebot สูง กำลังเก็บหน้าคุณภาพต่ำซ้ำ ๆ เทียบปริมาณการจัดทำดัชนีกับอันดับจริง
404 ปล่อยไว้ได้ สัดส่วนดูไม่สูง ลิงก์เก่าค่อย ๆ เสียน้ำหนัก TOP 404 ใส่ 301 ไปหน้าใหม่ที่ตรงกัน

FAQ คำถามที่พบบ่อย

รูปแบบ log ของ Nginx กับ Apache ต่างกันอย่างไร วิธีวิเคราะห์ใช้ร่วมกันได้ไหม?
ใช้ร่วมกันได้เป็นหลัก ทั้งคู่รองรับรูปแบบ combined โดยค่าเริ่มต้น: IP เวลา บรรทัดคำขอ รหัสสถานะ ขนาดไบต์ หน้าอ้างอิง User-Agent เจ็ดคอลัมน์เหมือนกัน Nginx ใช้ $status ดึงรหัสสถานะ Apache ใช้ %s ตำแหน่งฟิลด์ต่างกัน ตอนใช้ awk ดึงคอลัมน์ให้ระวังเลขคอลัมน์ต่างกันหนึ่ง วิธีคิดวิเคราะห์เหมือนกันทุกอย่าง: แบ่งกลุ่มตามรหัสสถานะก่อน แล้วแบ่งตาม UA สุดท้ายรวมตามพาธ แนะนำให้ตั้งทั้งสองเครื่องเป็นรูปแบบ combined เดียวกัน สคริปต์จะได้ใช้ซ้ำได้
แยก Googlebot ตัวจริงกับบอทปลอมอย่างไร?
ทำ DNS ตรวจสอบสองทาง ก่อนอื่นทำ reverse DNS กับ IP ที่อ้างว่าเป็น Googlebot ดูว่าชื่อโฮสต์ลงท้ายด้วย googlebot.com หรือ google.com หรือไม่ จากนั้นทำ forward DNS กับชื่อโฮสต์นั้น ดูว่า IP ที่แปลงกลับตรงกับตัวเดิมไหม ต้องถูกทั้งสองขั้นถึงจะเป็นกูเกิลบอทจริง ตัวปลอมมักแก้ได้แค่สตริง UA ผ่านด่าน IP ไม่ได้ บอท AI ก็เช่นกัน ดูช่วง IP ที่ทางการประกาศ
ควรเก็บ log นานแค่ไหนจึงจะพอ?
เก็บ log ข้อมูลร้อนไว้ 90 วัน เกินกว่านั้นให้บีบอัดรายเดือนแล้วเก็บถาวรลงดิสก์หรือ object storage โดยเก็บ archive รวมอย่างน้อยหนึ่งปี เหตุผลมีสามข้อ หนึ่งคือเวลาหาสาเหตุปัญหามักต้องย้อนดูจุดเริ่มต้นของเหตุที่เกิดหลายสัปดาห์ก่อน สองคือปัญหาการเก็บ index ของ SEO มักต้องเทียบกับการ crawl เมื่อหนึ่งถึงสองเดือนก่อน สามคือเมื่อเกิดเหตุด้านความปลอดภัยต้องตรวจบันทึกการเข้าถึงย้อนหลังได้ครึ่งปี เมื่อตัดไฟล์รายวันและบีบอัดด้วย gzip log หนึ่งปีมักกินพื้นที่เพียงไม่กี่ GB
404 error ต้องจัดการทั้งหมดหรือไม่
อย่ากระจายแรงเท่ากันหมด ให้เรียงตามจำนวนการเข้าชมแล้วจัดการ URL ไหนที่สร้าง 404 เกิน 100 ครั้งต่อวัน แปลว่ามีลิงก์ภายนอกจริงหรือมีผู้ใช้คลิก ต้องใส่ 301 ไปยังหน้าใหม่ที่ความหมายใกล้เคียงที่สุด ส่วน 404 หางยาวที่เกิดวันละไม่กี่ครั้ง ปล่อยไว้ก่อน ค่อยเคลียร์เดือนละครั้ง การเปลี่ยน 404 ทั้งเว็บเป็น 301 ไปหน้าแรกเป็นวิธีที่ผิด เพราะจะเจือจางน้ำหนัก
หลังใช้ CDN แล้ว log ของเซิร์ฟเวอร์ยังแม่นอยู่ไหม
ไม่แม่น จะถูกนับต่ำกว่าความจริงและคลาดเคลื่อนอย่างหนัก คำขอที่ CDN cache hit จะไม่กลับมาที่ต้นทางเลย log ต้นทางจึงเห็นแค่ส่วนที่กลับมา คำขอส่วนใหญ่ของผู้ใช้จริงอยู่ที่ edge node ของ CDN วิธีที่ถูกคือดู log ทั้งสองฝั่ง ดึง edge request log จาก CDN console เพื่อดูการเข้าถึงทั้งหมด และดู log ต้นทางเพื่อดูการกลับมาและ error ฝั่ง backend วิเคราะห์ bot กับทราฟฟิกคนจริงให้ใช้ log CDN ส่วนหาสาเหตุ 5xx และปัญหา PHP ให้ใช้ log ต้นทาง
เห็น GPTBot กับ ClaudeBot กำลัง crawl ใน log เป็นเรื่องดีหรือเรื่องร้าย
ต้องดูเป้าหมายของคุณ ถ้าอยากให้เนื้อหาถูกอ้างอิงโดยโมเดลใหญ่ นี่คือการอ่านปกติและ bahkan น่าต้อนรับ ปริมาณการอ่านที่เพิ่มขึ้นมักสอดคล้องกับอัตราการถูกอ้างอิงโดย AI ที่เพิ่มขึ้น ถ้าไม่อยากให้ถูกนำไปเทรน ก็ disallow bot นั้นใน robots ได้ เกณฑ์ตัดสินไม่ใช่ว่ามัน crawl เยอะแค่ไหน แต่อยู่ที่ว่าหน้าสำคัญถูกอ่านตามปกติหรือไม่ และความถี่ในการอ่านผิดปกติจนกระทบแบนด์วิดท์หรือเปล่า แนะนำให้แยกสถิติ UA กลุ่มนี้ออกมา ดูแยกจาก bot ของ search engine

ทิ้งท้าย

คุณค่าของการวิเคราะห์ log ไม่ได้อยู่ที่ “ดูทราฟฟิก” แต่อยู่ที่ “หาสาเหตุและแยกแยะคน” สำหรับเว็บไซต์อิสระที่ทำคนเดียว การรันรายงานสัปดาห์ละสิบนาที และตรวจสอบแบบเต็มรูปแบบเดือนละหนึ่งชั่วโมง ก็เพียงพอครอบคลุมปัญหาที่พบบ่อย 90% แล้ว ตรงไหน error ตรงไหนมี dead link bot ตัวไหนกำลังกัดแบนด์วิดท์ของคุณ และคนจริงมาจากไหนกันแน่

ลงมือทำสามขั้น ขั้นแรก รวมรูปแบบ log ให้เป็น combined ตัดไฟล์รายวันและเก็บไว้ 90 วัน ขั้นที่สอง เฝ้าดูอัตรา error 5xx ถ้าเกิน 1% ให้แจ้งเตือนก่อน แล้วค่อยจัดการ TOP 404 ขั้นที่สาม แยกสถิติ bot กับคนจริงออกจากกัน เลิกใช้ยอดเข้าชมรวมหลอกตัวเอง สำหรับจังหวะการดูแลเว็บไซต์ที่เกี่ยวข้อง เทียบกับ ช่วงดูแลเว็บไซต์ รายการหกเรื่องต่อเดือนในนั้นแล้วจัดตารางไปพร้อมกัน

ประโยคที่จำได้ติดปาก: log ของเซิร์ฟเวอร์ไม่ใช่แดชบอร์ดทราฟฟิก แต่เป็นวิดีโอเหตุการณ์ ณ ที่เกิดเหตุ ก่อนอื่นหาว่ารถชนตรงไหน แล้วค่อยนับว่ามีรถวิ่งบนถนนกี่คัน

crater
crater ผู้เชี่ยวชาญ环形山

ทางการขององค์กร · 环形山 Crater

环形山 (Crater) เป็นบริษัทให้บริการขยายตลาดต่างประเทศที่เชี่ยวชาญการพัฒนาเว็บไซต์ WordPress แบบ Independent Site + Google SEO + GEO เพื่อการเติบโตแบบครบวงจร ให้บริการในกลุ่มธุรกิจ Smart Hardware, Industrial Equipment, SaaS, New Energy และอื่นๆ

ความสามารถของผลิตภัณฑ์ไวท์เปเปอร์ระเบียบวิธีรายงานอุตสาหกรรม
965แชร์
78บทความในคลังความรู้