GoAccess عبارة عن محلل لسجلات الويب في الوقت الفعلي مفتوح المصدر وعارض تفاعلي يتم تشغيله في محطة طرفية على أنظمة *nix أو من خلال متصفحك . فهو يوفر إحصائيات HTTP سريعة وقيمة لمسؤولي النظام الذين يحتاجون إلى تقرير خادم مرئي سريعًا. مزيد من المعلومات على: https://goaccess.io.
يقوم GoAccess بتوزيع ملف سجل الويب المحدد وإخراج البيانات إلى الجهاز الطرفي X. تشمل الميزات:
الوقت الحقيقي تماما
يتم توقيت جميع اللوحات والمقاييس ليتم تحديثها كل 200 مللي ثانية على مخرجات المحطة الطرفية وكل ثانية على مخرجات HTML.
الحد الأدنى من التكوين اللازم
يمكنك فقط تشغيله على ملف سجل الوصول الخاص بك، واختيار تنسيق السجل والسماح لـ GoAccess بتحليل سجل الوصول وإظهار الإحصائيات لك.
تتبع وقت استجابة التطبيق
تتبع الوقت المستغرق لخدمة الطلب. مفيد للغاية إذا كنت تريد تتبع الصفحات التي تؤدي إلى إبطاء موقعك.
جميع تنسيقات سجل الويب تقريبًا
يسمح GoAccess بأي سلسلة تنسيق سجل مخصصة. تتضمن الخيارات المحددة مسبقًا Apache وNginx وAmazon S3 وElastic Load Balancing وCloudFront وما إلى ذلك.
معالجة السجل التزايدي
هل تحتاج إلى ثبات البيانات؟ يتمتع GoAccess بالقدرة على معالجة السجلات بشكل متزايد من خلال خيارات الثبات على القرص.
تبعية واحدة فقط
تمت كتابة GoAccess بلغة C. ولتشغيله، ما عليك سوى استخدام ncurses باعتباره تبعية. هذا كل شيء. حتى أنه يتميز بخادم WebSocket الخاص به — http://gwsocket.io/.
الزوار
حدد مقدار الزيارات والزوار وعرض النطاق الترددي والمقاييس الخاصة بطلبات التشغيل الأبطأ حسب الساعة أو التاريخ.
المقاييس لكل مضيف افتراضي
هل لديك عدة مضيفين افتراضيين (كتل الخادم)؟ إنه يتميز بلوحة تعرض المضيف الظاهري الذي يستهلك معظم موارد خادم الويب.
ASN (تعيين رقم النظام المستقل)
رائعة لاكتشاف أنماط حركة المرور الضارة وحظرها وفقًا لذلك.
نظام الألوان للتخصيص
قم بتخصيص GoAccess ليناسب ذوقك/أنظمة الألوان الخاصة بك. إما من خلال الوحدة الطرفية، أو ببساطة عن طريق تطبيق ورقة الأنماط على مخرجات HTML.
دعم مجموعات البيانات الكبيرة
يتميز GoAccess بالقدرة على تحليل السجلات الكبيرة بفضل جداول التجزئة المحسنة في الذاكرة. لديها استخدام جيد جدًا للذاكرة وأداء جيد جدًا. يحتوي هذا التخزين على دعم للثبات على القرص أيضًا.
دعم عامل الميناء
القدرة على إنشاء صورة Docker الخاصة بـ GoAccess من المنبع. لا يزال بإمكانك تكوينه بالكامل باستخدام تعيين الحجم وتحرير goaccess.conf
. راجع قسم Docker أدناه.
يسمح GoAccess بأي سلسلة تنسيق سجل مخصصة. تتضمن الخيارات المحددة مسبقًا، على سبيل المثال لا الحصر، ما يلي:
تم تصميم GoAccess ليكون محللًا سريعًا للسجلات يعتمد على المحطة الطرفية. فكرته الأساسية هي التحليل السريع وعرض إحصائيات خادم الويب في الوقت الفعلي دون الحاجة إلى استخدام متصفحك ( رائع إذا كنت تريد إجراء تحليل سريع لسجل الوصول الخاص بك عبر SSH، أو إذا كنت تحب العمل في الوحدة الطرفية ).
على الرغم من أن مخرجات المحطة الطرفية هي المخرجات الافتراضية، إلا أنها تتمتع بالقدرة على إنشاء تقرير HTML
كامل ومستقل وفي الوقت الفعلي، بالإضافة إلى تقرير JSON
و CSV
.
يمكنك أن ترى أنها أداة أوامر مراقبة أكثر من أي شيء آخر.
يمكن تجميع GoAccess واستخدامه على أنظمة *nix.
قم بتنزيل واستخراج وتجميع GoAccess باستخدام:
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ 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.
لدى GoAccess الحد الأدنى من المتطلبات، فهو مكتوب بلغة C ولا يتطلب سوى ncurses. ومع ذلك، يوجد أدناه جدول لبعض التبعيات الاختيارية في بعض التوزيعات لإنشاء GoAccess من المصدر.
توزيعة | اللعنات | GeoIP (اختياري) | GeoIP2 (اختياري) | OpenSSL (اختياري) |
---|---|---|---|---|
أوبونتو/ديبيان | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/سينت أو إس | ncurses-devel | Geoip-devel | libmaxminddb-devel | opensl-devel |
قوس | ncurses | com.geoip | libmaxminddb | opensl |
جنتو | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
سلاكوير | ncurses | GeoIP | libmaxminddb | opensl |
ملاحظة : قد تحتاج إلى تثبيت أدوات إنشاء مثل gcc
و autoconf
و gettext
و autopoint
وما إلى ذلك لتجميع/إنشاء البرامج من المصدر. على سبيل المثال، base-devel
، build-essential
، و "Development Tools"
.
تم تحديث صورة 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 -
يمكنك أيضًا إنشاء الملف الثنائي للأنظمة المستندة إلى دبيان في بيئة حاوية معزولة لمنع ازدحام نظامك المحلي بمكتبات التطوير:
$ 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.md.
يوفر التخزين في الذاكرة أداءً أفضل على حساب تحديد حجم مجموعة البيانات بمقدار الذاكرة الفعلية المتوفرة. يستخدم 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=
(أو -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 الذي سيتصل به متصفح العميل. راجع الأسئلة الشائعة للحصول على مثال أكثر تفصيلاً.
# 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=
و --ssl-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 -
إذا أردنا تحليل إطار زمني معين فقط من DATE a إلى DATE b، فيمكننا القيام بما يلي:
# 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 -
ملاحظة: يتطلب SSH -n
حتى يتمكن GoAccess من القراءة من stdin. تأكد أيضًا من استخدام مفاتيح SSH للمصادقة لأنها لن تعمل إذا كانت عبارة المرور مطلوبة.
تصلنا العديد من الأسئلة والقضايا التي تمت الإجابة عليها سابقاً.
يتمتع GoAccess بالقدرة على معالجة السجلات بشكل متزايد من خلال وحدة التخزين الداخلية الخاصة به وتفريغ بياناته على القرص. يعمل بالطريقة التالية:
--persist
، ثم يمكن تحميل نفس مجموعة البيانات باستخدام.--restore
. إذا تم تمرير بيانات جديدة (من خلال الأنابيب أو من خلال ملف سجل)، فسيتم إلحاقها بمجموعة البيانات الأصلية. يتتبع GoAccess الإدخالات لجميع الملفات التي تتم معالجتها (بافتراض أن الملفات ستبقى على نفس القسم)، بالإضافة إلى ذلك، فإنه يستخرج مقتطفًا من البيانات من السجل بالإضافة إلى السطر الأخير الذي تم تحليله من كل ملف والطابع الزمني للسطر الأخير الذي تم تحليله . على سبيل المثال، inode:29627417|line:20012|ts:20171231235059
أولاً، يقوم بمقارنة ما إذا كان المقتطف يتطابق مع السجل الذي يتم تحليله، وإذا كان كذلك، فإنه يفترض أن السجل لم يتغير بشكل جذري، على سبيل المثال، لم يتم اقتطاعه. إذا كان inode لا يتطابق مع الملف الحالي، فإنه يوزع كل الأسطر. إذا كان الملف الحالي يطابق inode، فإنه يقرأ الأسطر المتبقية ويحدث عدد الأسطر التي تم تحليلها والطابع الزمني. وكإجراء احترازي إضافي، لن يتم تحليل سطور السجل ذات الطابع الزمني ≥ من الذي تم تخزينه.
تعمل البيانات المنقولة بناءً على الطابع الزمني لآخر سطر تمت قراءته. على سبيل المثال، سيقوم بتحليل كافة الإدخالات الواردة وتجاهلها حتى يعثر على طابع زمني >= غير الذي تم تخزينه.
// last month access log
# goaccess access.log.1 --persist
ثم قم بتحميله
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
لقراءة البيانات المستمرة فقط (بدون تحليل البيانات الجديدة)
# goaccess --restore
نرحب بأي مساعدة بشأن GoAccess. الطريقة الأكثر فائدة هي تجربتها وإبداء الرأي. لا تتردد في استخدام أداة تعقب مشكلات GitHub وسحب الطلبات لمناقشة تغييرات التعليمات البرمجية وإرسالها.
يمكنك المساهمة في ترجماتنا عن طريق تحرير ملفات .po مباشرة على GitHub أو باستخدام الواجهة المرئية inlang.com
يتمتع!