অ্যাপাচি লগগুলি পার্সিংয়ের জন্য আপনার কাছে কি কোনও দরকারী জঞ্জাল এবং গ্রেপ স্ক্রিপ্ট রয়েছে? [বন্ধ]


69

আমি লগ বিশ্লেষক ব্যবহার করতে পারি, তবে প্রায়শই মুহূর্তে কী ঘটছে তা দেখতে আমার সাম্প্রতিক ওয়েব লগগুলি পার্স করতে হবে।

আমি কখনও কখনও শীর্ষ 10 আইপিএস নির্দিষ্ট ফাইলের অনুরোধ করতে পছন্দ করি

cat foo.log | grep request_to_file_foo | awk '{print $1}' |  sort -n | uniq -c | sort -rn | head

আপনার টুলবক্সে আপনার কী আছে?


1
আমার কাছে এই বড় সুন্দর রেইগেক্সটি ছিল আমার নিজের অ্যাপাচি কাস্টম লগগুলি পার্স করার জন্য হাতে হাতে লিখে একটি ডাটাবেসে জমা দেওয়ার জন্য পৃথক ক্ষেত্রে। আমি নিজেকে লাথি দিচ্ছি যে আমার কাছে আর নেই। এটি ছিল একটি লাইনার; প্রতিটি লগ উপাদানটির জন্য আপনাকে একটি পরিবর্তনশীল ফিরিয়ে দিয়েছিল - তখন আমি মাইএসকিউএল প্রবেশ করছিলাম। যদি এটি পাই তবে আমি এটি এখানে পোস্ট করব।
কাইল হজসন

উত্তর:


54

আপনি একা সারাদিনে অ্যাপাচি লগ ফাইলের মাধ্যমে বেশ কিছু করতে পারেন। অ্যাপাচি লগ ফাইলগুলি মূলত শ্বেত স্থান পৃথক করা হয় এবং আপনি কোটগুলির উপস্থিতি না করে ভান করতে পারেন এবং কলাম নম্বর দ্বারা আপনার আগ্রহী তথ্যগুলি অ্যাক্সেস করতে পারেন। এই বিরতি কেবলমাত্র যদি আপনার সম্মিলিত লগ ফর্ম্যাট থাকে এবং ব্যবহারকারী এজেন্টদের সাথে আগ্রহী হন, তবে আপনাকে সেই বিন্দুতে (") বিভাজক হিসাবে ব্যবহার করতে হবে এবং একটি পৃথক অ্যাওক কমান্ড চালাতে হবে নীচেরটি আপনাকে আইপিগুলি প্রদর্শন করবে প্রতিটি ব্যবহারকারী যারা হিট সংখ্যার অনুসারে বাছাই করা সূচী পৃষ্ঠার অনুরোধ করে:

awk -F'[ "]+' '$7 == "/" { ipcount[$1]++ }
    END { for (i in ipcount) {
        printf "%15s - %d\n", i, ipcount[i] } }' logfile.log

$ 7 হ'ল অনুরোধ করা ইউআরএল। আপনি শুরুতে যা শর্ত চান তা যোগ করতে পারেন। 'Whatever 7 == "/" আপনি যে তথ্য চান তার সাথে প্রতিস্থাপন করুন।

আপনি যদি $ 1 এর (ipcount [$ 1] ++) প্রতিস্থাপন করেন তবে আপনি অন্যান্য মানদণ্ডের দ্বারা ফলাফলগুলি গোষ্ঠীভুক্ত করতে পারেন। $ 7 ব্যবহার করে কোন পৃষ্ঠাগুলি অ্যাক্সেস করা হয়েছিল এবং কতবার তা প্রদর্শিত হবে। অবশ্যই আপনি প্রথমে শর্তটি পরিবর্তন করতে চান। নিম্নলিখিত কোনও আইপি থেকে কোনও ব্যবহারকারী কোন পৃষ্ঠাগুলি অ্যাক্সেস করেছিল তা নীচে প্রদর্শিত হবে:

awk -F'[ "]+' '$1 == "1.2.3.4" { pagecount[$7]++ }
    END { for (i in pagecount) {
        printf "%15s - %d\n", i, pagecount[i] } }' logfile.log

শেল কমান্ডের অংশ হিসাবে, বা খালি স্ক্রিপ্টে নিজেই ফলাফলটি ক্রমানুসারে পেতে বাছাইয়ের মাধ্যমে আউটপুটটি পাইপ করতে পারেন:

awk -F'[ "]+' '$7 == "/" { ipcount[$1]++ }
    END { for (i in ipcount) {
        printf "%15s - %d\n", i, ipcount[i] | sort } }' logfile.log

যদি আপনি অন্যান্য তথ্য মুদ্রণের জন্য awk স্ক্রিপ্টটি প্রসারিত করার সিদ্ধান্ত নেন তবে পরবর্তীকালে দরকারী হবে। আপনি যা সন্ধান করতে চান এটি সমস্ত বিষয়। এগুলি আপনার আগ্রহী সকলের জন্য একটি সূচনা পয়েন্ট হিসাবে কাজ করবে।


হ্যাঁ, পাগল দীর্ঘ বিড়াল / গ্রেপ / অ্যাডক পাইপলাইনগুলি দেখতে সর্বদা অদ্ভুত বলে মনে হয়। একবার আপনি যখন বিশ্রী হয়ে যান, তখন তা সাধারণত পর্যাপ্ত। মূল পোস্টের প্রথম তিনটি ধারাটি তুচ্ছভাবে "awk" / অনুরোধ_তো_ফিল_ফু / {মুদ্রণ $ 1} 'foo.log "হিসাবে লেখা যেতে পারে। awk কোনও ফাইলকে ইনপুট হিসাবে নিতে পারে এবং কোন রেখাগুলি যত্নশীল তা জানতে রেজেক্স ব্যবহার করতে পারে।
জ্যাক থম্পসন

মার্জিত এবং সহজ। ভাল.
অলিভিয়ার ডুলাক

সাবধান থাকুন, "লেখক" (তৃতীয়) ক্ষেত্রগুলিতে স্থানগুলি অনুমোদিত বলে মনে হচ্ছে, যা সবকিছু ভেঙে দেয় এবং আমি ব্যক্তিগতভাবে মনে করি এটি নিষিদ্ধ করা উচিত, আমাদের এটি করার অনুমতি দেওয়ার জন্য ;-)
মান্দার্ক

23

একটি জিনিস আমি অন্য কাউকে কখনই করতে দেখিনি, যে কারণে আমি কল্পনাও করতে পারি না তা হ'ল অ্যাপাচি লগ ফাইল ফর্ম্যাটটিকে আপনার পক্ষে গুরুত্বপূর্ণ এমন তথ্য সহ আরও সহজেই পার্সেবল সংস্করণে পরিবর্তন করা।

উদাহরণস্বরূপ, আমরা কখনও এইচটিটিপি বেসিক লেখার ব্যবহার করি না, সুতরাং আমাদের সেই ক্ষেত্রগুলিতে লগ করার দরকার নেই। প্রতিটি অনুরোধটি পরিবেশন করতে কতক্ষণ সময় নেয় সে সম্পর্কে আমি আগ্রহী, সুতরাং আমরা এটি যুক্ত করব one একটি প্রকল্পের জন্য, আমরা আরও জানতে চাই (আমাদের লোড ব্যালেন্সারে) যদি কোনও সার্ভার অন্যের চেয়ে কম ধরণের অনুরোধগুলি সরবরাহ করে তবে আমরা নামটি লগইন করি আমরা যে সার্ভারটিতে ফিরে যাচ্ছি তা।

এখানে একটি সার্ভারের অ্যাপাচি কনফিগারেশনের একটি অংশ রয়েছে:

# We don't want to log bots, they're our friends
BrowserMatch Pingdom.com robot

# Custom log format, for testing
#
#         date          proto   ipaddr  status  time    req     referer         user-agent
LogFormat "%{%F %T}t    %p      %a      %>s     %D      %r      %{Referer}i     %{User-agent}i" standard
CustomLog /var/log/apache2/access.log standard env=!robot

আপনি এটি থেকে যা বলতে পারবেন না তা হ'ল প্রতিটি ক্ষেত্রের মধ্যে একটি আক্ষরিক ট্যাব অক্ষর () t)। এর অর্থ হল যে আমি পাইথনে কিছু বিশ্লেষণ করতে চাইলে উদাহরণস্বরূপ, অ -200 স্ট্যাটাস প্রদর্শন করতে পারি, আমি এটি করতে পারি:

for line in file("access.log"):
  line = line.split("\t")
  if line[3] != "200":
    print line

বা যদি আমি করতে চাইতাম 'হটলিংক ইমেজগুলি কে?' এটা হবে

if line[6] in ("","-") and "/images" in line[5]:

অ্যাক্সেস লগের আইপি গণনার জন্য, পূর্ববর্তী উদাহরণ:

grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" logfile | sort -n | uniq -c | sort -n

এরকম কিছু হয়ে যায়:

cut -f 3 log | uniq -c | sort -n

পড়তে ও বুঝতে সহজ, এবং কম কম কম্পিউটেশনালি ব্যয়বহুল (কোনও রেজেক্স) নয় যা 9 জিবি লগে এটি কতক্ষণ সময় নেয় তার মধ্যে বিশাল পার্থক্য করে। আপনি যদি ব্যবহারকারী-এজেন্টদের জন্য একই জিনিসটি করতে চান তবে এটি খুব ঝরঝরে। যদি আপনার লগগুলি স্থান-সীমিত হয় তবে আপনাকে নিয়মিত এক্সপ্রেশন মেলানো বা হাতে স্ট্রিং অনুসন্ধান করতে হবে। এই ফর্ম্যাট সহ, এটি সহজ:

cut -f 8 log | uniq -c | sort -n

ঠিক উপরের মত একই। আসলে, আপনি যে কোনও সংক্ষিপ্তসার করতে চান তা মূলত হুবহু একই।

কেন পৃথিবীতে আমি আমার সিস্টেমের সিপিইউকে জোর করে এবং গ্রেপ করতে ব্যয় করব যখন কাটাটি হ'ল আমি তাত্পর্যপূর্ণ অর্ডারগুলি দ্রুত চাইব ঠিক তাই করবে?


2
নতুন ফর্ম্যাটের জন্য আপনার উদাহরণগুলি এখনও আরও বেশি জটিল - আইপি গণনা হয়ে যায় cut -f 3 log | uniq -c | sort -n, ব্যবহারকারী এজেন্ট cut -f 8 log | uniq -c | sort -n
ক্রিশাল

আপনি ঠিক বলেছেন, এটি সহজ। আমি প্রতিফলিত করার জন্য উদাহরণগুলি আপডেট করেছি।
ড্যান উদে

"ক্যাট ফাইল | গ্রেপ স্ট্রিং" অকেজো, কেন "গ্রেপ স্ট্রিং ফাইল" নয়?
c4f4t0r

2
আমার কোন অজুহাত নেই, এবং সেই অনুসারে উদাহরণটি আপডেট করেছি।
ড্যান উদে

15

অজানা এবং গ্রেপ সম্পর্কে ভুলে যান। পরীক্ষা করে দেখুন asql । আপনি যখন লগফাইলে অনুসন্ধানের জন্য স্ক্রোলের মতো সিনট্যাক্স ব্যবহার করতে পারেন তখন অপঠনযোগ্য স্ক্রিপ্টগুলি কেন লিখবেন। যেমন।

asql v0.6 - type 'help' for help.
asql> load /home/skx/hg/engaging/logs/access.log
Loading: /home/skx/hg/engaging/logs/access.log
sasql> select COUNT(id) FROM logs
46
asql> alias hits SELECT COUNT(id) FROM logs
ALIAS hits SELECT COUNT(id) FROM logs
asql> alias ips SELECT DISTINCT(source) FROM logs;
ALIAS ips SELECT DISTINCT(source) FROM logs;
asql> hits
46
asql> alias
ALIAS hits SELECT COUNT(id) FROM logs
ALIAS ips SELECT DISTINCT(source) FROM logs;

আকর্ষণীয়, তবে আপনার লগগুলি বিশেষত বড় হলে আমি ভাবতে পারি problems এছাড়াও এটি কাস্টম লগ ফর্ম্যাটগুলির সাথে কতটা ভাল মোকাবেলা করে?
ভ্যাগনারার

আমি এই মুহুর্তে এটি চেষ্টা করছি, লোড সময়টি এত ধীর (কমপক্ষে 0.9 সংস্করণে)।
200 এমবি

আমি অবশ্যই বলব যে লোড টাইমের পরে (এটি প্রায় 15 মিনিট সময় নিয়েছে) এই প্রোগ্রামটির সিনক্র্যাক্সটি দুর্দান্ত, আপনি বাছাই করতে পারেন, গণনা করতে পারেন এবং তার দ্বারা গ্রুপ করতে পারেন। সত্যিই সুন্দর.
aseques

অ্যাপাচি এইচটিটিপিডির একটি পদ্ধতি রয়েছে যার সাহায্যে আপনি কার্যকরভাবে লগগুলি একটি ডাটাবেসে প্রেরণ করতে পারেন। হ্যাঁ, লেখাগুলি বেশি সময় নিতে পারে তবে একটি থ্রেডযুক্ত প্রক্সি মাঝখানে স্যান্ডউইচড করা সঠিক কাজটি করতে পারে। যাইহোক, এটি একটি এসকিউএলকে সিনট্যাক্সের মতো অনুসন্ধানের লগগুলি আরও দ্রুত তৈরি করবে। খুব লোড জড়িত না - ডাটাবেস সার্ভার স্থায়ীভাবে "চালু" থাকে।
কাছাকাছি

6

সাম্প্রতিক এন লগ এন্ট্রি থেকে শীর্ষ ইউআরএল, শীর্ষ রেফারার এবং শীর্ষ ইউজারেজ সন্ধানের জন্য এখানে একটি স্ক্রিপ্ট রয়েছে

#!/bin/bash
# Usage
# ls-httpd type count
# Eg: 
# ls-httpd url 1000
# will find top URLs in the last 1000 access log entries
# ls-httpd ip 1000
# will find top IPs in the last 1000 access log entries
# ls-httpd agent 1000
# will find top user agents in the last 1000 access log entries

type=$1
length=$2

if [ "$3" == "" ]; then
  log_file="/var/log/httpd/example.com-access_log"
else
  log_file="$3"
fi

if [ "$type" = "ip" ]; then
  tail -n $length $log_file | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | sort -n | uniq -c | sort -n
elif [ "$type" = "agent" ]; then
  tail -n $length $log_file | awk -F\" '{print $6}'| sort -n | uniq -c | sort -n
elif [ "$type" = "url" ]; then
  tail -n $length $log_file | awk -F\" '{print $2}'| sort -n | uniq -c | sort -n
fi

উৎস


4

অ্যাক্সেস লগ এ আইপি গণনা জন্য:

cat log | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | sort -n | uniq -c | sort -n

এটি কিছুটা কুরুচিপূর্ণ, তবে এটি কার্যকর। আমি নীচেস্ট্যাট (সক্রিয় সংযোগগুলি দেখতে) দিয়েও নিম্নলিখিতটি ব্যবহার করি:

netstat -an | awk '{print $5}' | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | egrep -v "(`for i in \`ip addr | grep inet |grep eth0 | cut -d/ -f1 | awk '{print $2}'\`;do echo -n "$i|"| sed 's/\./\\\./g;';done`127\.|0\.0\.0)" | sort -n | uniq -c | sort -n

তারা আমার প্রিয় কিছু "ওয়ান লাইনার" :)


3

সাধারণ প্রশ্নের তালিকা তৈরি করা এই প্রশ্নের উত্তরের জন্য একটি দুর্দান্ত সূচক হবে। আমার সাধারণ প্রশ্নগুলি হ'ল:

  • কেন হিটরেট পরিবর্তন হয়েছে?
  • সামগ্রিক প্রতিক্রিয়া সময় কেন বাড়ছে? '

সক্রিয় এবং সম্প্রতি সম্পন্ন হওয়া অনুরোধগুলির জন্য হিটরেট এবং আনুমানিক প্রতিক্রিয়া সময়ের জন্য সার্ভার-স্ট্যাটাস পৃষ্ঠাগুলি (মোড_স্ট্যাটাসের মাধ্যমে) পর্যবেক্ষণ করে আমি এই জাতীয় পরিবর্তনগুলি লক্ষ্য করি (পুরোপুরি ভাল করে জেনেছি যে আমি একটি বিশাল পরিমাণের ডেটা মিস করছি, তবে নমুনাগুলি যথেষ্ট ভাল)।

আমি নিম্নলিখিত লগফর্ম্যাট নির্দেশনাটি ব্যবহার করি (% টি সত্যিই দরকারী)

LogFormat "%h %l %u %t \"%r\" %>s %b 
    \"%{Referer}i\" \"%{User-Agent}i\" %T" custom

আমি কারণ-কার্যকারিতা এবং যা ঘটেছিল তা প্রথমে খুঁজছি ... সাধারণত আমার লগগুলিতে নিদর্শনগুলির নির্দিষ্ট সাবসেটগুলি সম্পর্কে, সুতরাং যে কোনও নিদর্শন / নিয়মিত প্রকাশের জন্য আমাকে নিম্নলিখিতগুলি জানতে হবে:

  • প্রদত্ত প্যাটার্ন (আইপি ঠিকানা বা সিজি স্ট্রিং বা প্যারামিটার ইত্যাদির জন্য) অন্তর অন্তর (মিনিট বা ঘন্টা) হিটকাউন্টগুলি
  • আনুমানিক প্রতিক্রিয়া সময় হিস্টোগ্রাম (% টি পরামিতি ব্যবহার করে)

আমি সাধারণত পার্ল ব্যবহার করি কারণ অবশেষে এটি যথেষ্ট পরিমাণে সার্থক হওয়ার কারণ হয়ে যায়।


একটি নন-পারল উদাহরণ হ'ল নন -200 স্ট্যাটাস কোডের জন্য প্রতি মিনিটে একটি দ্রুত হিটরেট হবে:

tail -9000 access_log | grep -v '" 200 ' | cut -d: -f2,3 | uniq -c

হ্যাঁ আমি এই গ্রেপটির সাথে প্রতারণা করছি, একটি কোট-স্পেস -200-স্পেসটি কেবল এইচটিসিপি স্থিতির কোডগুলির সাথে মেলে .... ক্ষেত্রটি বিচ্ছিন্ন করার জন্য অ্যাডাব্লিক বা পার্ল ব্যবহার করতে পারে কেবল মনে রাখতে হবে এটি ভুল হতে পারে।


পার্লের আরও জটিল উদাহরণ হতে পারে কোনও প্যাটার্নের জন্য হিটরেটের পরিবর্তনটি কল্পনা করা।

নীচে স্ক্রিপ্টে চিবানোর মতো অনেক কিছুই রয়েছে, বিশেষত যদি আপনি পার্লের সাথে অস্থির হয়ে থাকেন।

  • স্টিডিন পড়েন যাতে আপনি আপনার লগের অংশগুলি ব্যবহার করতে পারেন, লেজ ব্যবহার করতে পারেন (বিশেষত লেজ -f সহ), গ্রেপস এবং অন্যান্য ফিল্টারিংয়ের সাথে বা ছাড়াই ...
  • একটি রেগেক্স হ্যাক এবং তারিখের ব্যবহারের সাথে চিটস যুগের টাইমস্ট্যাম্প এক্সট্রাকশন: মনিপ
  • প্রতিক্রিয়া সময় বা অন্যান্য স্বেচ্ছাচারিত ডেটা নিষ্কাশন করতে আপনি এটি সামান্যই সংশোধন করতে পারেন

কোড অনুসরণ:

#!/usr/bin/perl
# script to show changes in hitrates for any regex pattern
# results displayed with arbitrary intervals
# and ascii indication of frequency
# gaps are also displayed properly
use Date::Manip;
use POSIX qw(strftime);
$pattern=shift || ".";
$ival=shift || 60;
$tick=shift || 10;
$minb=undef;
while (<>){
    next unless /$pattern/;
    $stamp="$1 $2" if m[(../.../....):(..:..:..)];
    $epoch = UnixDate(ParseDate($stamp),"%s");
    $bucket= int($epoch/$ival)*$ival;
    $minb=$bucket if $bucket<$minb || !defined($minb);
    $maxb=$bucket if $bucket>$maxb;
    $count{$bucket}++;
}
# loop thru the min/max range to expose any gaps
for($t=$minb;$t<=$maxb;$t+=$ival){
    printf "%s %s %4d %s\n",
            $t,
            strftime("%m/%d/%Y %H:%M:%S",localtime($t)),
            $count{$t}+0,
            substr("x"x100,0,$count{$t}/$tick
    );
}

আপনি যদি কেবল স্ট্যান্ডার্ড মেট্রিকগুলি প্রসেস করতে চান তবে চেকআউট করুন

  • আপনার সমস্ত লগ একসাথে পেতে 'মার্জল' করুন (যদি আপনার কোনও ভার ভারসাম্যের পিছনে একাধিক অ্যাপাচি থাকে) এবং
  • ওয়েবালাইজার (বা অ্যাডস্ট্যাটস বা অন্যান্য সাধারণ বিশ্লেষক)

3

এখানে আমার 'সেড' উদাহরণ, এটি অ্যাপাচি লগগুলির ডিফল্ট ফর্ম্যাটটি পড়ে এবং এটি স্বয়ংক্রিয় প্রক্রিয়াকরণের জন্য আরও সুবিধাজনক কিছুতে রূপান্তরিত করে। পুরো লাইনটি নিয়মিত এক্সপ্রেশন হিসাবে সংজ্ঞায়িত করা হয়, ভেরিয়েবলগুলি সংরক্ষণ করা হয় এবং বিভাজক হিসাবে '#' দিয়ে আউটপুটে লেখা হয়।

ইনপুটটির সরলিকৃত স্বরলিপিটি হ'ল:% s% s% s [% s] "% s"% s% s "% s" "% s"

উদাহরণ ইনপুট লাইন: xx.xx.xx.xx - - [29 / মার্চ / 2011: 12: 33: 02 +0200] "জিইটি / ইন্ডেক্স.এইচটিএমএল HTTP / 1.0" 200 9443 "-" "মোজিলা / 4.0"

উদাহরণস্বরূপ আউটপুট লাইন: xx.xx.xx.xx # - # - # 29 / মার্চ / 2011: 12: 33: 02 + 0200 # জিইটি / ইন্ডেক্স এইচটিএমএল HTTP / 1.0 # 200 # 9443 # - # মজিলা / 4.0

cat access.log | \ 
  sed 's/^\(.*\) \(.*\) \(.*\) \[\(.*\)\] \"\(.*\)\" \(.*\) \(.*\) \"\(.*\)\" \"\(.*\)\"$/\1#\2#\3#\4#\5#\6#\7#\8#\9/g'

নিয়মিত এক্সপ্রেশনগুলির শক্তি অনুভব করুন :-)


এটি এডাব্লুকে দিয়ে বাতাসের প্রসেসিং করেছে। একটি সাধারণ ডিলিমিনেটর সেটআপ করার জন্য দ্রুত উপায় খুঁজছিলেন এবং এটি পেরেক দিয়েছিল।
সাইট্রিকগুই

আমি রেজেক্স শক্তিটি অনুভব করেছি এবং কেবল আমার নিজের টুইটটি দিয়ে যেতে চেয়েছিলাম, যা "এইচটিএমএল / 1.1" কেটে দেয় এবং প্রোটোকলটিকে (সম্ভবত একটি মানহীনভাবে সম্মতিযুক্ত পদ্ধতিতে) তার নিজস্ব ক্ষেত্রে পৃথক করে। উপভোগ করুন: `` `বিড়াল অ্যাক্সেস.লগ | সেড এর /^(.*) (। *) (। *) [(। *)] \ "([[[আলফা:]] \ +) (। *) এইচটিটিপি \ / 1 \ .1 \" ( । *) (। *) \ "(। *) \" \ "(। *) \" $ / \ 1 # \ 2 # \ 3 # \ 4 # \ 5 # \ 6 # \ 7 # \ 8 # \ 9 # \ 10 / জি '`` `
জোশ রুম্বুট

2

আমি ফাইলটি টেলিং বা ক্যাট করে অনেকটা বিশ্রী ব্যবহার করি। প্রতি রাতে আমি প্রতিটি সার্ভারের জন্য নিজেকে একটি ওয়েব প্রতিবেদন সরবরাহ করি। আপনার লগ ফাইল এবং আপনার লগফর্ম্যাট উপর নির্ভর করে আপনার জন্য কাজ করার জন্য আপনাকে কয়েকটি লাইনারের কিছু সম্পাদনা করতে হবে ..।

এখানে একটি সাধারণ উদাহরণ:

যদি আমি কেবল 404/500 স্থিতি কোডগুলির জন্য আমার সার্ভারে লগগুলি টাল করতে চাই তবে আমি এটি করব:

# $6 is the status code in my log file

tail -f ${APACHE_LOG} |  awk  '$8 ~ /(404|500)/ {print $6}'

<স্নিপ>

echo ""
#echo  "Hits by source IP:"
echo "======================================================================"

awk '{print $2}' "$1" | grep -ivE "(127.0.0.1|192.168.100.)" | sort | uniq -c | sort -rn | head -25

echo ""
echo ""
#echo "The 25 most popular pages:"
echo "======================================================================"

awk '{print $6}' "$1" | grep -ivE '(mod_status|favico|crossdomain|alive.txt)' | grep -ivE '(.gif|.jpg|.png)' | \
 sed 's/\/$//g' | sort | \
 uniq -c | sort -rn | head -25

echo ""    
echo ""
echo "The 25 most popular pages (no js or css):"
echo "======================================================================"

awk '{print $6}' "$1" | grep -ivE '(mod_status|favico|crossdomain|alive.txt)' | grep -ivE '(.gif|.jpg|.png|.js|.css)' | \
 sed 's/\/$//g' | sort | \
   uniq -c | sort -rn | head -25

   echo ""


#echo "The 25 most common referrer URLs:"
echo "======================================================================"

awk '{print $11}' "$1" | \
 grep -vE "(^"-"$|/www.$host|/$host)" | \
 sort | uniq -c | sort -rn | head -25

echo ""

#echo "Longest running requests"
echo "======================================================================"

awk  '{print $10,$6}' "$1" | grep -ivE '(.gif|.jpg|.png|.css|.js)'  | awk '{secs=0.000001*$1;req=$2;printf("%.2f minutes req time for %s\n", secs / 60,req )}' | sort -rn | head -50

exit 0

</ snip>


2

আপনার চিত্রগুলি কে হট-লিঙ্ক করছে:

awk -F\" '($2 ~ /\.(jpg|gif)/ && $4 !~ /^http:\/\/www\.mydomain\.com/){print $4}' access_log | sort | uniq -c | sort

1

আমি বেশিরভাগ সময় যে জিনিসটি করতে চাইছি তা হ'ল সময়ের উপর ভিত্তি করে লগের বিভাগগুলি পড়া, সুতরাং আমি আগ্রহী সময়কালের জন্য এটি ব্যবহার করে নীচের স্ক্রিপ্টটি লিখেছিলাম, আমি যে সমস্ত লগ ফাইল এসেছি তাতে এটি কাজ করে জুড়ে এবং সংরক্ষণাগারযুক্ত লগগুলি পাশাপাশি পরিচালনা করতে পারে।

#! / বিন / ব্যাশ
# এই স্ক্রিপ্টটিতে 2 টি মানের মধ্যে একটি লাইনের সেট ফেরত দেওয়া উচিত, মূল উদ্দেশ্যটি 2 বারের মধ্যে লগ ফাইল অনুসন্ধান করা
# স্ক্রিপ্ট ব্যবহার: লগশিপ.শ "ফাইল" স্টপ "শুরু করুন"

# যদি ফাইলটিতে তারিখের পরিসরে কোনও "/" থাকে তবে নীচের 2 টি লাইনটি পালানোর চরিত্রটি যুক্ত করে যাতে সেই অক্ষরগুলির জন্য অনুসন্ধান সম্পাদন করা যায়
start = $ (প্রতিধ্বনি "$ 1" | সেড 's / \ // \\\ // জি')
স্টপ = $ (প্রতিধ্বনি "$ 2" | সেড 's / \ // \\\ // জি')

জিপড = $ (প্রতিধ্বনি "$ 3" | গ্রেপ-সি "জিজেড $") # ফাইলটি জিপ করা হয়েছে কিনা তা ফিরিয়ে আনা হয়েছে

যদি ["$ জিপড" == "1"]; তারপরে # যদি ফাইলটি জিপ করা হয় তবে সেডের আগে zcat এর মাধ্যমে পাস করুন
        zcat $ 3 | sed -n "/ $ শুরু /, / $ স্টপ / পি";
আর
        sed -n "/ $ শুরু /, / $ স্টপ / পি" $ 3; # যদি এটি জিপ করা হয় না তবে কেবল সেড চালান
ফাই

1

ছদ্মবেশী বা অদ্ভুত না থাকাকালীন, দুটি জিনিস যা আমি অ্যাপাচি এবং আইসকিস্ট লগ ফাইলগুলি পরিচালনা করার জন্য দরকারী পেয়েছি।

AWStats খুব দরকারী স্ক্রিপ্ট বলা logresolvemerge.pl টাইমস্ট্যাম্পের একাধিক সংকুচিত বা ডিকম্প্রেস লগ ফাইল, ফালা dupes এবং সাজানোর একত্রিত হবে। এটি ডিএনএস লুক্কুটও করতে পারে এবং মাল্টিথ্রেডেড চালনার জন্য কনফিগার করা যায়। এটি স্ট্যাটেস্টগুলির সাথে ব্যবহার করার সময় বিশেষভাবে কার্যকর কারণ অস্টস্ট্যাটগুলি বর্তমান ডাটাবেসের চেয়ে পুরানো টাইমস্ট্যাম্পগুলির সাথে লগ লাইনগুলি যোগ করতে পারে না, তাই সমস্তগুলি অবশ্যই যথাযথভাবে যুক্ত করা উচিত তবে লোগ্রেসলর্ম.পিএল-এ আপনি সমস্ত কিছু ঠিকঠাক করে দেওয়ার ফলে এটি খুব সহজ ।

সেড এবং অ্যাজক তারিখগুলি পরিচালনা করতে খুব খারাপ কারণ তারা সাধারণত এগুলি স্ট্রিং হিসাবে বিবেচনা করে। awk এর কিছু সময় এবং তারিখ ফাংশন রয়েছে তবে সেগুলি খুব বেশি নয়। উদাহরণস্বরূপ, দুটি টাইমস্ট্যাম্পগুলির মধ্যে বিভিন্ন রেখা উত্তোলন করা শক্ত যদি সেই সঠিক টাইমস্ট্যাম্পগুলি ফাইলের মধ্যে না ঘটে (এমনকি তাদের মধ্যে মানগুলি হয়) - ক্রিসের উদাহরণটিতে ঠিক এই সমস্যাটি রয়েছে। এর সাথে মোকাবিলা করার জন্য, আমি একটি পিএইচপি স্ক্রিপ্ট লিখেছিলাম যা লগ ফাইলের টাইমস্ট্যাম্প রেঞ্জগুলির প্রতিবেদন করে এবং আপনার পছন্দ মতো কোনও তারিখ বা সময় ফর্ম্যাট ব্যবহার করে টাইমস্ট্যাম্প রেঞ্জের মাধ্যমে একটি অংশও বের করতে পারে (এটি লগ ফাইলের টাইমস্ট্যাম্প বিন্যাসের সাথে মেলে না need

এই বিষয়টিকে বজায় রাখতে এখানে কয়েকটি কার্যকর অ্যাগ্রিজম দেওয়া হল: অ্যাপাচি বা আইসকাস্ট লগ থেকে প্রদত্ত মোট বাইটের সংখ্যা পান:

cat access.log | awk '{ sum += $10 } END { print sum }'

আইসকাস্ট লগ থেকে সংযুক্ত মোট সেকেন্ডের সংখ্যা পান:

cat access.log | awk '{ sum += $13 } END { print sum }'


0

এই পুরানো থ্রেডটি পুনরুদ্ধার করার পরে, বড় লগ ফাইলগুলির জন্য এসকিএল ছেড়ে দেওয়ার পরে, একটি সমাধান অ্যাগিংয়ের সন্ধান করল, সার্ভারফল্টেও, আমি এখানে ডব্লিউটিপি সম্পর্কে জানতে পেরেছিলাম এটি একটি ওপেনসোর্স সরঞ্জাম, এটি লাইভ মনিটরিং বা প্রক্রিয়া লগগুলি এবং স্ট্যাটাস পেতে সক্ষম (শীর্ষে) এন), খুব নমনীয় এবং শক্তিশালী, অফিসিয়াল জায়গা এখানে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.