็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿ“Š Linux Log ๅˆ†ๆž่ˆ‡่ฆ–่ฆบๅŒ–:GoAccess ๅณๆ™‚็›ฃๆŽง

    ๐Ÿ“Š Linux Log ๅˆ†ๆž่ˆ‡่ฆ–่ฆบๅŒ–:GoAccess ๅณๆ™‚็›ฃๆŽง

    ๆƒณๅฟซ้€ŸๆŽŒๆกไผบๆœๅ™จ่จชๅ•็‹€ๆณ่ˆ‡็•ฐๅธธๆต้‡ๅ—Ž? GoAccess ๆ˜ฏไธ€ๆฌพ่ผ•้‡็ดšไธ”ๅณๆ™‚็š„ Linux Log ๅˆ†ๆžๅทฅๅ…ท, ้€้Ž็ต‚็ซฏไป‹้ขๆˆ– Web Dashboard,ๅฐฑ่ƒฝๅฟซ้€Ÿ็œ‹ๅ‡บ ็†ฑ้–€้ ้ข、ไพ†ๆบๅœฐ、User-Agent ่ˆ‡ๆ”ปๆ“Š่กŒ็‚บ。 ๆœฌ็ฏ‡ๅฐ‡ๅธถไฝ ๅพžๅฎ‰่ฃ、้…็ฝฎๅˆฐ HTML ๅณๆ™‚ๅ ฑ่กจ็š„ๅฎŒๆ•ดๆต็จ‹。

    ๐Ÿ“˜ ไธ€、GoAccess ๆ˜ฏไป€้บผ?

    GoAccess ๆ˜ฏไปฅ C ่ชž่จ€้–‹็™ผ็š„้–‹ๆบๅทฅๅ…ท,่ƒฝๅณๆ™‚ๅˆ†ๆž Apache、Nginx、Squid ็ญ‰ๅธธ่ฆ‹ไผบๆœๅ™จๆ—ฅ่ชŒ。 ๆ”ฏๆด ๅ‘ฝไปคๅˆ—ไบ’ๅ‹•ไป‹้ข(ncurses) ่ˆ‡ Web ่ฆ–่ฆบๅŒ–ๅ ฑ่กจ, ไธฆๅฏ่ผธๅ‡บ JSON、HTML、CSV ็ญ‰ๆ ผๅผไพ›ๅพŒ็บŒๅˆ†ๆž。

    # ๅฎ‰่ฃ(Rocky / CentOS / Ubuntu)
    sudo dnf install goaccess -y
    # ๆˆ–
    sudo apt install goaccess -y
    
    # ๆชขๆŸฅ็‰ˆๆœฌ
    goaccess --version
      

    ๐Ÿงฉ ไบŒ、่จญๅฎšๆ—ฅ่ชŒไพ†ๆบ่ˆ‡ๆ ผๅผ

    GoAccess ้ ่จญๅˆ†ๆž /var/log/nginx/access.log ๆˆ– /var/log/httpd/access_log。 ่‹ฅไฝฟ็”จ่‡ช่จ‚ๆ ผๅผ,ๅฏๅœจ /etc/goaccess/goaccess.conf ไฟฎๆ”น log-format

    # Nginx ๅธธ่ฆ‹ๆ ผๅผ(ๅปบ่ญฐๅŠ ๅ…ฅ log_format ๆ–ผ nginx.conf)
    log_format main '$remote_addr - $remote_user [$time_local] '
                     '"$request" $status $body_bytes_sent '
                     '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
      
    # ๅŸท่กŒๅˆ†ๆž
    sudo goaccess /var/log/nginx/access.log --log-format=COMBINED
      

    ๐Ÿง  ไธ‰、ๅณๆ™‚ Web ๅ ฑ่กจๆจกๅผ

    GoAccess ๅฏ็›ดๆŽฅ่ผธๅ‡บๅณๆ™‚ๅฏ่ฆ–ๅŒ–ๅ ฑ่กจ,้ฉๅˆๆ”พๅ…ฅๅ…ง้ƒจ็›ฃๆŽง้ ้ข:

    # ็”Ÿๆˆๅณๆ™‚็›ฃๆŽง HTML
    sudo goaccess /var/log/nginx/access.log \
      --log-format=COMBINED \
      --real-time-html \
      --ws-url=ws://your-server:7890 \
      -o /var/www/html/report.html
      
    • --real-time-html:ๅ•Ÿ็”จๅณๆ™‚ WebSocket ๅ ฑ่กจ。
    • --ws-url:่จญๅฎšไผบๆœๅ™จ้€ฃ็ทšไฝๅ€。
    • -o:่ผธๅ‡บ HTML ๆช”ๆกˆ่ทฏๅพ‘。
    ๐Ÿ’ก ๆ็คบ:่‹ฅไฝ ็š„ไผบๆœๅ™จ็‚บๅค–็ถฒๅ…ฌ้–‹็’ฐๅขƒ,ๅปบ่ญฐๆญ้… Nginx Basic Auth ๆˆ– Fail2Ban ๅฐ้Ž–ๆƒกๆ„ไพ†ๆบ,้ฟๅ…ๅ ฑ่กจๅค–ๆดฉ。

    ๐Ÿ” ๅ››、ๅธธ่ฆ‹ๅˆ†ๆž้‡้ปž

    • General Statistics:็ธฝ่จชๅ•ๆ•ธ、่ซ‹ๆฑ‚ๆˆๅŠŸ็އ。
    • Visitor Hostnames & IPs:ๅฏๅˆคๆ–ทๆ”ปๆ“Šไพ†ๆบ。
    • Requested Files:็†ฑ้–€้ ้ข่ˆ‡้Œฏ่ชค้ 。
    • HTTP Status Codes:ๅฆ‚ 404、403、500 ้ ป็އ。
    • Referrers / User Agents:ๅˆ†ๆžๆต้‡ไพ†ๆบ。

    ๐Ÿงญ ไบ”、่ˆ‡ๅฎ‰ๅ…จๆฉŸๅˆถๆ•ดๅˆ

    GoAccess ๅฏ่ˆ‡ไฝ ๅ…ˆๅ‰้ƒจ็ฝฒ็š„ Fail2Ban / Firewalld ๆ•ดๅˆๅฝขๆˆ้–‰็’ฐ:

    # ๆฏๆ—ฅ่‡ชๅ‹•ๅŒฏๅ‡บ้ซ˜้ขจ้šช IP ไธฆๅฐ้Ž–
    sudo goaccess /var/log/nginx/access.log -a -o report.json --log-format=COMBINED
    cat report.json | jq '.data | map(select(.status >= 400)) | .[].host' | sort | uniq > bad_ip.txt
    for ip in $(cat bad_ip.txt); do sudo firewall-cmd --add-rich-rule="rule family='ipv4' source address='$ip' reject"; done
      

    ๆญ้… crontab ๅฏๆฏๆ—ฅ่‡ชๅ‹•ๆธ…็†ๅฐ้Ž–ๅๅ–ฎ,ๅฝขๆˆ「็›ฃๆŽง → ๅฐ้Ž– → ๅ ฑ่กจ」ๅพช็’ฐ。

    ⚙️ ๅ…ญ、ๅปถไผธๆ‡‰็”จ

    • ๆ•ดๅˆ Grafana LokiElasticSearch ้€ฒ่กŒ้•ทๆœŸ่ถจๅ‹ขๅˆ†ๆž。
    • ๅปบ็ซ‹ systemd service ๅธธ้งๅŸท่กŒ GoAccess ๅณๆ™‚ๅˆ†ๆž。
    • ๆญ้… Proxy / Fail2Ban ่จ˜้Œ„,้€ฒ่กŒๅ…จๆ–นไฝๅฎ‰ๅ…จๅฏ่ฆ–ๅŒ–。

    ๐Ÿ“˜ ็ต่ชž

    GoAccess ๆ˜ฏไฝŽๆˆๆœฌ、้ซ˜ๅณๆ™‚ๆ€ง็š„ Linux Log ๅˆ†ๆžๅˆฉๅ™จ, ๅฐไธญๅฐๅž‹ไผบๆœๅ™จๆˆ–ๅ€‹ไบบ็ซ™้ปž่€Œ่จ€,ๆ˜ฏไบ†่งฃๆต้‡่ˆ‡ๆ”ปๆ“Š่กŒ็‚บ็š„ๆœ€ไฝณ่ตท้ปž。 ๆญ้… systemd、Fail2Ban ่ˆ‡ Firewalld,ไฝ ๅฐ‡ๆ“ๆœ‰ไธ€ๅฅ—ๅฎŒๆ•ด็š„「ๅฎ‰ๅ…จ × ๅฏ่ฆ–ๅŒ–็›ฃๆŽง้ซ”็ณป」。


    ๐Ÿ”— ๅปถไผธ้–ฑ่ฎ€

    — WWFandy・Linux ๅฎ‰ๅ…จ็ณปๅˆ—็ฌฌๅ››็ฏ‡

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš