
GoAccess هو محلل سجلات الويب في الوقت الفعلي وعارض تفاعلي يعمل في طرفية في أنظمة *nix أو من خلال متصفحك.
GoAccess هو محلل سجلات ويب مفتوح المصدر وعارض تفاعلي يعمل في الوقت الحقيقي يعمل في طرفية على أنظمة *nix أو مباشرة في متصفحك. صُمم مع وضع مسؤولي الأنظمة ومهندسي DevOps ومتخصصي الأمن في الاعتبار، ويقدم إحصائيات HTTP سريعة وقابلة للتنفيذ وتقارير خادم مرئية أثناء التشغيل. يحلل GoAccess سجلات خادم الويب الخاص بك في الوقت الحقيقي ويعرض البيانات مباشرة في الطرفية أو عبر لوحة تحكم HTML مباشرة، مما يسهل مراقبة حركة المرور واكتشاف الحالات الشاذة وحل المشكلات فورًا.
مزيد من المعلومات على: https://goaccess.io.
يقوم GoAccess بتحليل ملف سجل الويب المحدد وإخراج البيانات إلى طرفية X. تشمل الميزات:
وقت حقيقي كامل
يتم تحديث جميع اللوحات والمقاييس كل 200 مللي ثانية على مخرجات الطرفية
وكل ثانية على مخرجات HTML.
الحد الأدنى من الإعدادات المطلوبة
يمكنك فقط تشغيله على ملف سجل الوصول الخاص بك، واختيار تنسيق السجل واترك
GoAccess يحلل سجل الوصول ويظهر لك الإحصائيات.
تتبع زمن استجابة التطبيق
تتبع الوقت المستغرق لخدمة الطلب. مفيد جدًا إذا كنت تريد
تتبع الصفحات التي تبطئ موقعك.
مصادقة WebSocket:
يقدم GoAccess مصادقة WebSocket محسّنة تدعم التحقق المحلي
والخارجي من JWT، مع إمكانية تحديث الرمز بشكل آمن وتكامل سلس
مع أنظمة المصادقة الخارجية.
تقريبًا جميع تنسيقات سجلات الويب
يسمح GoAccess بأي سلسلة تنسيق سجل مخصصة. تتضمن الخيارات المحددة مسبقًا
Apache، Nginx، Amazon S3، Elastic Load Balancing، CloudFront، إلخ.
معالجة السجلات المتزايدة
هل تحتاج إلى استمرارية البيانات؟ يتمتع GoAccess بالقدرة على معالجة السجلات بشكل متزايد
من خلال خيارات الاستمرار على القرص.
اعتماد واحد فقط
GoAccess مكتوب بلغة C. لتشغيله، تحتاج فقط إلى ncurses كاعتماد.
هذا كل شيء. بل إنه يشتمل على خادم Web Socket الخاص به — http://gwsocket.io/.
الزوار
تحديد عدد الزيارات والزوار وعرض النطاق الترددي والمقاييس لأبطأ
الطلبات قيد التشغيل حسب الساعة أو التاريخ.
المقاييس لكل مضيف افتراضي
هل لديك مضيفات افتراضية متعددة (كتل الخادم)؟ يحتوي على لوحة
تعرض أي مضيف افتراضي يستهلك معظم موارد خادم الويب.
ASN (تعيين رقم النظام الذاتي)
ممتاز لاكتشاف أنماط حركة المرور الضارة وحظرها وفقًا لذلك.
نظام ألوان قابل للتخصيص
قم بتخصيص GoAccess ليتناسب مع ذوقك/أنظمة الألوان الخاصة بك. إما من خلال
الطرفية، أو ببساطة عن طريق تطبيق ورقة الأنماط على مخرجات HTML.
دعم لمجموعات البيانات الكبيرة
يتميز GoAccess بالقدرة على تحليل السجلات الكبيرة بفضل جداول التجزئة
المحسّنة في الذاكرة. لديها استخدام جيد للذاكرة وأداء جيد جدًا.
يدعم هذا التخزين أيضًا الاستمرار على القرص.
دعم Docker
القدرة على بناء صورة Docker الخاصة بـ GoAccess من المنبع. لا يزال بإمكانك تهيئته
بالكامل باستخدام تعيين الحجم وتحرير goaccess.conf. راجع
أدناه.
هناك أيضًا توثيق حول كيفية استخدام .
يسمح GoAccess بأي سلسلة تنسيق سجل مخصصة. تتضمن الخيارات المحددة مسبقًا، على سبيل المثال لا الحصر:
تم تصميم GoAccess ليكون محلل سجلات سريعًا قائمًا على الطرفية. فكرته الأساسية هي تحليل وعرض إحصائيات خادم الويب بسرعة في الوقت الحقيقي دون الحاجة إلى استخدام متصفحك (رائع إذا كنت تريد إجراء تحليل سريع لسجل الوصول عبر SSH، أو إذا كنت تحب العمل في الطرفية).
كما أنه بمثابة أداة عملية لمراقبة الأمان، مما يسهل اكتشاف النشاط المشبوه وأنماط حركة المرور غير العادية ومحاولات القوة الغاشمة والماسحات الضوئية والروبوتات والطلبات الشاذة مباشرة من سجلاتك.
بينما تكون مخرجات الطرفية هي المخرجات الافتراضية، إلا أنها تمتلك القدرة على
توليد تقرير HTML كامل ومستقل وفي الوقت الحقيقي
وكذلك تقرير JSON و
CSV.
يمكنك اعتبارها أداة مراقبة أكثر من أي شيء آخر.
يمكن تجميع واستخدام GoAccess على أنظمة *nix.
قم بتنزيل وفك ضغط وتجميع GoAccess باستخدام:
$ wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
$ tar -xzvf goaccess-1.10.2.tar.gz
$ cd goaccess-1.10.2/
$ ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
أسهل طريقة لتثبيت GoAccess على GNU+Linux هي استخدام مدير الحزم المفضل لدى توزيعتك GNU+Linux. يرجى ملاحظة أنه ليس كل التوزيعات ستحتوي على أحدث إصدار من GoAccess.
# apt-get install goaccess
ملاحظة: من المحتمل أن يؤدي هذا إلى تثبيت إصدار قديم من GoAccess. للتأكد من تشغيل أحدث إصدار ثابت من GoAccess انظر الخيار البديل أدناه.
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess
ملاحظة:
.deb في المستودع الرسمي متاحة عبر HTTPS أيضًا. قد تحتاج إلى تثبيت apt-transport-https.# yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
يمكن استخدام GoAccess في Windows عبر Cygwin. راجع حزم Cygwin هنا. أو عبر النظام الفرعي GNU+Linux على Windows 10.
تم تحديث صورة Docker قادرة على توجيه الإخراج من سجل الوصول. إذا كنت تريد فقط إخراج تقرير، يمكنك توجيه سجل من البيئة الخارجية إلى عملية قائمة على Docker:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
أو في الوقت الحقيقي
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
هناك أيضًا توثيق حول كيفية استخدام docker-compose.
يمكنك أيضًا بناء الثنائي للأنظمة القائمة على Debian في بيئة حاوية معزولة لمنع ازدحام نظامك المحلي بمكتبات التطوير:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
يمكنك قراءة المزيد عن استخدام صورة Docker في DOCKER.md.
GoAccess له متطلبات ضئيلة، فهو مكتوب بلغة C ويتطلب فقط ncurses. ومع ذلك، يوجد أدناه جدول لبعض الاعتماديات الاختيارية في بعض التوزيعات لبناء GoAccess من المصدر.
ملاحظة: قد تحتاج إلى تثبيت أدوات بناء مثل gcc و autoconf و
gettext و autopoint إلخ لتجميع/بناء البرامج من المصدر. على سبيل المثال،
base-devel و build-essential و "Development Tools".
يوفر التخزين في الذاكرة أداءً أفضل على حساب تحديد حجم مجموعة البيانات بحجم الذاكرة الفعلية المتاحة. يستخدم GoAccess جداول تجزئة في الذاكرة. لديه استخدام جيد للذاكرة وأداء جيد جدًا. يدعم هذا التخزين أيضًا الاستمرار على القرص.
راجع الخيارات التي يمكن توفيرها للأمر أو
تحديدها في ملف التكوين. إذا تم تحديدها في ملف التكوين، فيجب استخدام الخيارات
الطويلة دون إضافة -- في البداية.
ملاحظة: لا يؤدي توجيه البيانات إلى GoAccess إلى ظهور مربع حوار تكوين السجل/التاريخ/الوقت، ستحتاج إلى تعريفه مسبقًا في ملف التكوين الخاص بك أو في سطر الأوامر.
للإخراج إلى طرفية وتوليد تقرير تفاعلي:
# goaccess access.log
لتوليد تقرير HTML:
# goaccess access.log -a > report.html
لتوليد ملف تقرير JSON:
# goaccess access.log -a -d -o report.json
لتوليد تقرير CSV إلى stdout:
# goaccess access.log --no-csv-summary -o csv
يتيح GoAccess أيضًا مرونة كبيرة للتصفية والتحليل في الوقت الحقيقي. على سبيل المثال، لتشخيص المشكلات بسرعة عن طريق مراقبة السجلات منذ بدء تشغيل goaccess:
# tail -f access.log | goaccess -
والأفضل من ذلك، التصفية مع الحفاظ على فتح الأنبوب للحفاظ على التحليل
في الوقت الحقيقي، يمكننا استخدام tail -f وأداة مطابقة الأنماط مثل
grep و awk و sed إلخ:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
أو للتحليل من بداية الملف مع الحفاظ على الأنبوب مفتوحًا وتطبيق مرشح
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
هناك عدة طرق لتحليل سجلات متعددة باستخدام GoAccess. أبسطها هو تمرير ملفات سجل متعددة إلى سطر الأوامر:
# goaccess access.log access.log.1
من الممكن حتى تحليل الملفات من أنبوب أثناء قراءة الملفات العادية:
# cat access.log.2 | goaccess access.log access.log.1 -
ملاحظة: يتم إضافة الشرطة الواحدة إلى سطر الأوامر لإعلام GoAccess بأنه يجب القراءة من الأنبوب.
الآن إذا أردنا إضافة مرونة أكبر إلى GoAccess، يمكننا استخدام zcat --force
لقراءة الملفات المضغوطة وغير المضغوطة. على سبيل المثال، إذا أردنا
معالجة جميع ملفات السجل access.log*، يمكننا القيام بما يلي:
# zcat --force access.log* | goaccess -
ملاحظة: على Mac OS X، استخدم gunzip -c بدلاً من zcat.
استخدم --jobs=<count> (أو -j) لتمكين التحليل متعدد الخيوط. على سبيل المثال:
# goaccess access.log -o report.html -j 4
واستخدم --chunk-size=<256-32768> لضبط حجم القطعة، حجم القطعة الافتراضي هو 1024. على سبيل المثال:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
لدى GoAccess القدرة على إخراج بيانات في الوقت الحقيقي في تقرير HTML. يمكنك حتى إرسال ملف HTML بالبريد الإلكتروني نظرًا لأنه يتكون من ملف واحد بدون أي تبعيات ملفات خارجية، كم هذا أنيق!
تشبه عملية إنشاء تقرير HTML في الوقت الحقيقي إلى حد كبير عملية إنشاء تقرير
ثابت. ما عليك سوى استخدام --real-time-html لجعله في الوقت الحقيقي.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
لعرض التقرير يمكنك الانتقال إلى http://your_site/report.html.
بشكل افتراضي، سيستخدم GoAccess اسم المضيف للتقرير الذي تم إنشاؤه. اختياريًا، يمكنك تحديد عنوان URL الذي سيتصل به متصفح العميل. راجع FAQ للحصول على مثال أكثر تفصيلاً.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
بشكل افتراضي، يستمع GoAccess على المنفذ 7890، لاستخدام منفذ مختلف غير 7890، يمكنك تحديده كالتالي (تأكد من فتح المنفذ):
# goaccess access.log -o report.html --real-time-html --port=9870
ولربط خادم WebSocket بعنوان مختلف غير 0.0.0.0، يمكنك تحديده كالتالي:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
ملاحظة: لإخراج بيانات في الوقت الحقيقي عبر اتصال TLS/SSL، تحتاج إلى استخدام
--ssl-cert=<cert.crt> و --ssl-key=<priv.key>.
أداة أنبوب مفيدة أخرى هي تصفية التواريخ من سجل الويب
سيحصل التالي على جميع طلبات HTTP بدءًا من 05/Dec/2010 حتى نهاية
الملف.
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
أو باستخدام تواريخ نسبية مثل يوم أمس أو غد:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
إذا أردنا تحليل إطار زمني معين فقط من التاريخ أ إلى التاريخ ب، يمكننا القيام بما يلي:
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
إذا أردنا الاحتفاظ بكمية معينة فقط من البيانات وإعادة تدوير التخزين، يمكننا الاحتفاظ بعدد معين من الأيام فقط. على سبيل المثال، للاحتفاظ وعرض آخر 5 أيام:
# goaccess access.log --keep-last=5
بافتراض أن السجل يحتوي على حقل المضيف الافتراضي. على سبيل المثال:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
وتريد إلحاق المضيف الافتراضي بالطلب لرؤية أي مضيف افتراضي تنتمي إليه أهم عناوين URL:
awk '$8=$1$8' access.log | goaccess -a -
لفعل نفس الشيء، ولكن أيضًا استخدام التصفية والتحليل في الوقت الحقيقي:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
لاستبعاد قائمة من المضيفات الافتراضية يمكنك القيام بما يلي:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
لتحليل صفحات محددة، على سبيل المثال، مشاهدات الصفحة، html، htm، php، إلخ. داخل
طلب:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
ملاحظة، $7 هو حقل الطلب لتنسيق السجل الشائع والمدمج
(بدون مضيف افتراضي)، إذا كان سجلك يحتوي على مضيف افتراضي، فمن المحتمل أنك
تريد استخدام $8 بدلاً من ذلك. من الأفضل التحقق من الحقل الذي تستهدفه،
على سبيل المثال:
# tail -10 access.log | awk '{print $8}'
أو لتحليل رمز حالة محدد، على سبيل المثال، 500 (خطأ داخلي في الخادم):
# awk '$9~/500/' access.log | goaccess -
أو رموز حالة متعددة، على سبيل المثال، جميع رموز 3xx و 5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
وللحصول على نظرة عامة تقديرية عن عدد الروبوتات (الزاحفة) التي تصل إلى خادمك:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
أيضًا، من الجدير بالذكر أنه إذا أردنا تشغيل GoAccess بأولوية أقل، يمكننا تشغيله كالتالي:
# nice -n 19 goaccess -f access.log -a
وإذا كنت لا ترغب في تثبيته على خادمك، فلا يزال بإمكانك تشغيله من جهازك المحلي!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
ملاحظة: يتطلب SSH -n حتى يتمكن GoAccess من القراءة من stdin. تأكد أيضًا من
استخدام مفاتيح SSH للمصادقة لأنها لن تعمل إذا كانت هناك حاجة إلى عبارة مرور.
نتلقى العديد من الأسئلة والمشكلات التي تمت الإجابة عليها سابقًا.
لدى GoAccess القدرة على معالجة السجلات بشكل متزايد من خلال التخزين الداخلي وتفريغ بياناته على القرص. يعمل بالطريقة التالية:
--persist، ثم يمكن تحميل
نفس مجموعة البيانات باستخدام.--restore. إذا تم تمرير بيانات جديدة (موجهة أو من خلال ملف سجل)، فسيتم
إلحاقها بمجموعة البيانات الأصلية.يتتبع GoAccess inodes لجميع الملفات التي تمت معالجتها (بافتراض بقاء الملفات
على نفس القسم)، بالإضافة إلى ذلك، يستخرج مقتطفًا من البيانات من
السجل جنبًا إلى جنب مع آخر سطر تم تحليله من كل ملف والطابع الزمني للآخر
سطر تم تحليله. على سبيل المثال، inode:29627417|line:20012|ts:20171231235059
أولاً، يقارن إذا كان المقتطف يطابق السجل الذي يتم تحليله، إذا كان كذلك، يفترض أن السجل لم يتغير بشكل جذري، على سبيل المثال، لم يتم اقتطاعه. إذا لم يتطابق inode مع الملف الحالي، فإنه يحلل جميع الأسطر. إذا كان الملف الحالي يطابق inode، فإنه يقرأ الأسطر المتبقية ويحدث عدد الأسطر التي تم تحليلها والطابع الزمني. كإجراء احترازي إضافي، لن يقوم بتحليل أسطر السجل التي تحتوي على طابع زمني ≤ الطابع المخزن.
تعمل البيانات الموجهة بناءً على الطابع الزمني للآخر سطر تمت قراءته. على سبيل المثال، سيقوم بتحليل وتجاهل جميع الإدخالات الواردة حتى يجد طابعًا زمنيًا >= الطابع المخزن.
// سجل الوصول لشهر الماضي
# goaccess access.log.1 --persist
ثم قم بتحميله باستخدام
// أضف سجل الوصول لهذا الشهر، واحتفظ بالبيانات الجديدة
# goaccess access.log --restore --persist
لقراءة البيانات المستمرة فقط (بدون تحليل بيانات جديدة)
# goaccess --restore
ملاحظات. لا تتردد في استخدام متتبع المشكلات في GitHub وطلبات السحب لمناقشة التغييرات البرمجية وتقديمها.
يمكنك المساهمة في ترجماتنا عن طريق تحرير ملفات .po مباشرة على GitHub أو باستخدام الواجهة البصرية inlang.com
استمتع!
| التوزيعة | NCurses | GeoIP (اختياري) | GeoIP2 (اختياري) | OpenSSL (اختياري) |
|---|
| Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
| RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
| Arch | ncurses | geoip | libmaxminddb | openssl |
| Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
| Slackware | ncurses | GeoIP | libmaxminddb | openssl |